[commit: ghc] master: Event Manager: Make one-shot a per-registration property (0234399)

git at git.haskell.org git at git.haskell.org
Mon Jan 12 23:38:46 UTC 2015


Repository : ssh://git@git.haskell.org/ghc

On branch  : master
Link       : http://ghc.haskell.org/trac/ghc/changeset/023439980f6ef6ec051f676279ed2be5f031efe6/ghc

>---------------------------------------------------------------

commit 023439980f6ef6ec051f676279ed2be5f031efe6
Author: Ben Gamari <bgamari.foss at gmail.com>
Date:   Mon Jan 12 18:36:23 2015 -0500

    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


>---------------------------------------------------------------

023439980f6ef6ec051f676279ed2be5f031efe6
 libraries/base/GHC/Event.hs          |   1 -
 libraries/base/GHC/Event/IntTable.hs |   4 +
 libraries/base/GHC/Event/Internal.hs |  48 ++++++++
 libraries/base/GHC/Event/Manager.hs  | 224 +++++++++++++++++++----------------
 libraries/base/GHC/Event/Thread.hs   |   6 +-
 5 files changed, 175 insertions(+), 108 deletions(-)

Diff suppressed because of size. To see it, use:

    git diff-tree --root --patch-with-stat --no-color --find-copies-harder --ignore-space-at-eol --cc 023439980f6ef6ec051f676279ed2be5f031efe6


More information about the ghc-commits mailing list