• 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
     - 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.
gkqueuefilemonitor.c 11.7 KB