• Aram Hăvărneanu's avatar
    runtime: fix use after close race in Solaris network poller · 199e7030
    Aram Hăvărneanu authored
    The Solaris network poller uses event ports, which are
    level-triggered. As such, it has to re-arm itself after each
    wakeup. The arming mechanism (which runs in its own thread) raced
    with the closing of a file descriptor happening in a different
    thread. When a network file descriptor is about to be closed,
    the network poller is awaken to give it a chance to remove its
    association with the file descriptor. Because the poller always
    re-armed itself, it raced with code that closed the descriptor.
    
    This change makes the network poller check before re-arming if
    the file descriptor is about to be closed, in which case it will
    ignore the re-arming request. It uses the per-PollDesc lock in
    order to serialize access to the PollDesc.
    
    This change also adds extensive documentation describing the
    Solaris implementation of the network poller.
    
    Fixes #7410.
    
    LGTM=dvyukov, iant
    R=golang-codereviews, bradfitz, iant, dvyukov, aram.h, gobot
    CC=golang-codereviews
    https://golang.org/cl/69190044
    199e7030
Name
Last commit
Last update
api Loading commit data...
doc Loading commit data...
include Loading commit data...
lib Loading commit data...
misc Loading commit data...
src Loading commit data...
test Loading commit data...
.hgignore Loading commit data...
.hgtags Loading commit data...
AUTHORS Loading commit data...
CONTRIBUTORS Loading commit data...
LICENSE Loading commit data...
PATENTS Loading commit data...
README Loading commit data...
favicon.ico Loading commit data...
robots.txt Loading commit data...