]> granicus.if.org Git - libevent/commit
Changelist code to defer event changes until just before dispatch
authorNick Mathewson <nickm@torproject.org>
Thu, 14 Jan 2010 21:30:40 +0000 (16:30 -0500)
committerNick Mathewson <nickm@torproject.org>
Thu, 14 Jan 2010 21:31:22 +0000 (16:31 -0500)
commit27308aae4d921ecc286ab7a734693c2e27737a99
tree0ffa8f296516312800139164cc23e839a064cb23
parenta334b31c6f4fac24eb30048edb16b188a3ee2250
Changelist code to defer event changes until just before dispatch

This is necessary or useful for a few reasons:

    1) Sometimes applications will add and delete the same event more
       than once between calls to dispatch.  Processing these changes
       immediately is needless, and potentially expensive (especially
       if we're on a system that makes one syscall per changed event).

       Yes, this actually happens in practice for nonpathological
       code, such as in cases where the user's callback conditionally
       re-adds a non-persistent event, or where draining a buffer
       turns off writing and invokes a user callback which adds more
       data which in turn re-enabled writing.

    2) Sometimes we can coalesce multiple changes on the same fd into
       a single syscall if we know about them in advance.  For
       example, epoll can do an add and a delete at the same time, but
       only if we have found out about both of them before we tell
       epoll.

    3) Sometimes adding an event that we immediately delete can cause
       unintended consequences: in kqueue, this makes pending events
       get reported spuriously.
Makefile.am
event-internal.h
event.c
evmap.c