rts: Close livelock window due to rapid ticker enable/disable
authorBen Gamari <bgamari.foss@gmail.com>
Sun, 1 May 2016 11:38:38 +0000 (13:38 +0200)
committerBen Gamari <ben@smart-cactus.org>
Sun, 1 May 2016 21:29:49 +0000 (23:29 +0200)
commit16a51a6c2f265f8670355be03d42b773d93e0684
treedf934df75e6fc877ff28925167687d563cbc5533
parent533037cc58a7c50e1c014e27e8b971d53e7b47bd
rts: Close livelock window due to rapid ticker enable/disable

This fixes #11830, where the RTS would livelock if run with `-I0` due
to a regression introduced by bbdc52f3a6e6a28e209fb8f65699121d4ef3a4e3.
The reason for this is that the new codepath introduced a subtle race
condition:

 1. one thread could request that the ticker stop and would block until
    the ticker in fact stopped
 2. meanwhile, another thread could sneak in and restart the ticker

this was implemented in such a way where thread (1) would end up
blocked forever. The solution here is to simply not block. The worst
that will happen is that timer fires again, but is ignored since the
ticker is stopped.

Test Plan:
Validate, try reproduction case in #11830. Need to find a nice
testcase.

Reviewers: simonmar, erikd, hsyl20, austin

Reviewed By: erikd, hsyl20

Subscribers: erikd, thomie

Differential Revision: https://phabricator.haskell.org/D2129

GHC Trac Issues: #11830
rts/posix/Itimer.c