This allows using the per-thread handle in order to avoid creating one
per-cancellable.
It also does no system calls in the "not cancelled" case, which is nice.
We've long discussed having a ghandle type corresponding to HANDLE on windows
and an int (fd) elsewhere. Let's add that now.
We continue to maintain the 'fd' field as being an integer on Windows in order
to avoid warnings about implicit casts in existing software. 'ghandleint' was
introduced for that purpose.
This removes a lot of similar-looking code.
This also means that there is no longer any code inside of GIO that is
handling fds from GCancellable. That moves us closer to being able to
completely rid ourselves of per-cancellable file descriptors.
Windows parts are completely untested (and not even compiled).
https://bugzilla.gnome.org/show_bug.cgi?id=741716
Add two APIs to GCancellable for waiting on one or more GPollFD records until
they are ready, or until cancellation.
This is basically a cancellable version of g_poll().
This makes many typical operations easier; it will be possible to
replace all cases of g_cancellable_make_pollfd() in GIO with just the
simple version of this function, often at a large reduction in lines of
code. Even better is that in the future, users of this API may be able
to avoid allocating an fd at all.
I'm not sure if it's worth keeping the _full version.
https://bugzilla.gnome.org/show_bug.cgi?id=741716
In g_file_make_directory_with_parents(), the my_error variable is used
for several different purposes throughout the whole function, not all of
which are obvious. This explains the situation with some comments.
https://bugzilla.gnome.org/show_bug.cgi?id=719455
We should not advise people to cast the result of
g_hash_table_get_keys_as_array() to a type that looks suitable for use
with g_strfreev(). Advise to use (const gchar **) instead.
Allows sending of multiple messages (packets, datagrams)
in one go using sendmmsg(), thus drastically reducing the
number of syscalls when sending out a lot of data, or when
sending out the same data to multiple recipients.
https://bugzilla.gnome.org/show_bug.cgi?id=719646
Fix two problems:
1) If g_socket_service_stop is called before the accept call is requeued,
then the reference count won't decrease and this code will hang forever:
while (G_OBJECT (service)->ref_count == ref_count)
g_main_context_iteration (NULL, TRUE);
2) Sometimes the testcase fails (maybe 1 in 200 times for me):
GLib-GIO:ERROR:socket-listener.c:73:connection_cb: assertion failed
(G_OBJECT (service)->ref_count == 2): (3 == 2)
Aborted (core dumped)
The problem is that depending on ordering, cancellation of the async
listener can require further main context iterations before it releases
the reference on the socket service. Furthermore, in some cases, it
requires at least one iteration.
https://bugzilla.gnome.org/show_bug.cgi?id=712570
Add a property to GNetworkMonitor indicating the level of network
connectivity: none/local, limited, stuck behind a portal, or full.
The default implementation just returns none or full depending on the
value of is-available.
https://bugzilla.gnome.org/show_bug.cgi?id=664562
Add G_IO_ERROR_CONNECTION_CLOSED as an alias for
G_IO_ERROR_BROKEN_PIPE, and also return it on ECONNRESET.
It doesn't really make sense to try to distinguish EPIPE and
ECONNRESET at the GLib level, since the exact choice of which error
gets returned in what conditions depends on the OS. Given that, we
ought to map the two errors to the same value, and since we're already
mapping EPIPE to G_IO_ERROR_BROKEN_PIPE, we need to map ECONNRESET to
that too. But the existing name doesn't really make sense for sockets,
so we add a new name.
https://bugzilla.gnome.org/show_bug.cgi?id=728928