diff options
author | Ben Gamari <bgamari.foss@gmail.com> | 2015-01-12 18:36:23 -0500 |
---|---|---|
committer | Ben Gamari <bgamari.foss@gmail.com> | 2015-01-12 18:36:23 -0500 |
commit | 023439980f6ef6ec051f676279ed2be5f031efe6 (patch) | |
tree | 33c19b6f0654c8f2cb0a1ea9555ad6fb79dc94c0 /libraries/base/GHC/Event.hs | |
parent | 8464fa29e677e6845ca96d21474840803218f0b9 (diff) | |
download | haskell-023439980f6ef6ec051f676279ed2be5f031efe6.tar.gz |
Event Manager: Make one-shot a per-registration property
Summary:
Currently the event manager has a global flag for whether to create
epoll-like notifications as one-shot (e.g. EPOLLONESHOT, where an fd
will be deactivated after its first event) or standard multi-shot
notifications.
Unfortunately this means that the event manager may export either
one-shot or multi-shot semantics to the user. Even worse, the user has
no way of knowing which semantics are being delivered. This resulted in
breakage in the usb[1] library which deadlocks after notifications on
its fd are disabled after the first event is delivered. This patch
reworks one-shot event support to allow the user to choose whether
one-shot or multi-shot semantics are desired on a per-registration
basis. The event manager can then decide whether to use a one-shot or
multi-shot epoll.
A registration is now defined by a set of Events (as before) as well as
a Lifetime (either one-shot or multi-shot). We lend monoidal structure
to Lifetime choosing OneShot as the identity. This allows us to combine
Lifetime/Event pairs of an fd to give the longest desired lifetime of
the registration and the full set of Events for which we want
notification.
[1] https://github.com/basvandijk/usb/issues/7
Test Plan: Add more test cases and validate
Reviewers: tibbe, AndreasVoellmy, hvr, austin
Reviewed By: austin
Subscribers: thomie, carter, simonmar
Differential Revision: https://phabricator.haskell.org/D347
Diffstat (limited to 'libraries/base/GHC/Event.hs')
-rw-r--r-- | libraries/base/GHC/Event.hs | 1 |
1 files changed, 0 insertions, 1 deletions
diff --git a/libraries/base/GHC/Event.hs b/libraries/base/GHC/Event.hs index 8c69d3c1ee..436914cf8a 100644 --- a/libraries/base/GHC/Event.hs +++ b/libraries/base/GHC/Event.hs @@ -26,7 +26,6 @@ module GHC.Event , IOCallback , FdKey(keyFd) , registerFd - , registerFd_ , unregisterFd , unregisterFd_ , closeFd |