• Martin Pieuchot's avatar
    kqueue: Multiple fixes and simplifications · aa39a055
    Martin Pieuchot authored
     - Stop using a custom thread for listening to kqueue(2) events.  Instead
       call kevent(2) in non blocking mode in a monitor callback.  Under the
       hood poll(2) is used to figure out if new events are available.
    
     - Do not use a socketpair with a custom protocol requiring 2 supplementary
       context switches per event to commicate between multiple threads.  Calling
       kevent(2), in non blocking mode, to add/remove events is fine from any
       context.
    
     - Add kqueue(2) events without the EV_ONESHOT flag.  This removes a race
       where some notifications were lost because events had to be re-added for
       every new notification.
    
     - Get rid of the global hash table and its associated lock and races.  Use
       the 'cookie' argument of kevent(2) to pass the associated descriptor when
       registering an event.
    
     - Fix _kh_file_appeared_cb() by properly passing a monitor instead of a
       source to g_file_monitor_emit_event().
    
     - Properly refcount sources.
    
     - Remove a lot of abstraction making it harder to fix the remaining issues.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=739424
    aa39a055
Name
Last commit
Last update
.gitlab-ci Loading commit data...
build Loading commit data...
docs Loading commit data...
gio Loading commit data...
glib Loading commit data...
gmodule Loading commit data...
gobject Loading commit data...
gthread Loading commit data...
m4macros Loading commit data...
po Loading commit data...
subprojects Loading commit data...
tests Loading commit data...
win32 Loading commit data...
.dir-locals.el Loading commit data...
.gitattributes Loading commit data...
.gitignore Loading commit data...
.gitlab-ci.yml Loading commit data...
AUTHORS Loading commit data...
COPYING Loading commit data...
ChangeLog.pre-1-2 Loading commit data...
ChangeLog.pre-2-0 Loading commit data...
ChangeLog.pre-2-10 Loading commit data...
ChangeLog.pre-2-12 Loading commit data...
ChangeLog.pre-2-14 Loading commit data...
ChangeLog.pre-2-16 Loading commit data...
ChangeLog.pre-2-18 Loading commit data...
ChangeLog.pre-2-2 Loading commit data...
ChangeLog.pre-2-20 Loading commit data...
ChangeLog.pre-2-4 Loading commit data...
ChangeLog.pre-2-6 Loading commit data...
ChangeLog.pre-2-8 Loading commit data...
HACKING Loading commit data...
INSTALL.in Loading commit data...
Makefile.am Loading commit data...
NEWS Loading commit data...
NEWS.pre-1-3 Loading commit data...
README.commits Loading commit data...
README.in Loading commit data...
README.rationale Loading commit data...
README.win32 Loading commit data...
acglib.m4 Loading commit data...
acinclude.m4 Loading commit data...
autogen.sh Loading commit data...
check-abis.sh Loading commit data...
config.h.meson Loading commit data...
config.h.win32.in Loading commit data...
configure.ac Loading commit data...
gio-2.0.pc.in Loading commit data...
gio-unix-2.0.pc.in Loading commit data...
gio-windows-2.0.pc.in Loading commit data...
glib-2.0.pc.in Loading commit data...
glib-gettextize.in Loading commit data...
glib-tap.mk Loading commit data...
glib-zip.in Loading commit data...
glib.doap Loading commit data...
glib.mk Loading commit data...
glib.supp Loading commit data...
gmodule-2.0.pc.in Loading commit data...
gmodule-export-2.0.pc.in Loading commit data...
gmodule-no-export-2.0.pc.in Loading commit data...
gobject-2.0.pc.in Loading commit data...
gthread-2.0.pc.in Loading commit data...
meson.build Loading commit data...
meson_options.txt Loading commit data...
msvc_recommended_pragmas.h Loading commit data...
sanity_check Loading commit data...
tap-driver.sh Loading commit data...
tap-test Loading commit data...