base: Fix race in PollQueue and remove SIGALRM workaround
authorAndreas Sandberg <andreas@sandberg.pp.se>
Fri, 29 Nov 2013 13:36:10 +0000 (14:36 +0100)
committerAndreas Sandberg <andreas@sandberg.pp.se>
Fri, 29 Nov 2013 13:36:10 +0000 (14:36 +0100)
commitc033ead992a4e7bd8d031f25f3fa1256532c0540
treeb66732c44d91033ef6e01ddf61705b738fc5a151
parent9c57d5b5a66df60f77d1209f6660e4986da4bf8e
base: Fix race in PollQueue and remove SIGALRM workaround

There is a race between enabling asynchronous IO for a file descriptor
and IO events happening on that descriptor. A SIGIO won't normally be
delivered if an event is pending when asynchronous IO is
enabled. Instead, the signal will be raised the next time there is an
event on the FD. This changeset simulates a SIGIO by setting the
async_io flag when setting up asynchronous IO for an FD. This causes
the main event loop to poll all file descriptors to check for pending
IO. As a consequence of this, the old SIGALRM hack should no longer be
needed and is therefore removed.
src/base/pollevent.cc
src/sim/async.cc
src/sim/async.hh
src/sim/init.cc
src/sim/simulate.cc