rts: Claim AP_STACK before adjusting Sp
authorBen Gamari <bgamari.foss@gmail.com>
Thu, 20 Jul 2017 15:33:51 +0000 (11:33 -0400)
committerBen Gamari <ben@smart-cactus.org>
Thu, 20 Jul 2017 15:33:52 +0000 (11:33 -0400)
commitbade356f79d44c9f6e8918a89d9ffac7f5608dbf
treed6d6fbd7b0cbbeb1468042d4ad19955805931973
parent5469ac86f9cc9e83b93ed34ca13f0a4f58f4a9a6
rts: Claim AP_STACK before adjusting Sp

In the fix to #13615 we introduced some logic to atomically blackhole
AP_STACKs closures upon entry. However, this logic was placed *after* a
stack pointer adjustment. This meant that if someone else beat us to
blackholing the AP_STACK we would suspend the thread with uninitialized
content on the stack.  This would then later blow up when threadPaused
attempted to walk the stack, hence #13970.

Silly bug but still cost lots of head-scratching to find.

Thanks to albertov for the great repro.

Fixes #13970. Bug originally introduced by the fix to #13615.

Reviewers: austin, erikd, simonmar

Reviewed By: erikd, simonmar

Subscribers: rwbarton, thomie

GHC Trac Issues: #13970, #13615

Differential Revision: https://phabricator.haskell.org/D3760
rts/Apply.cmm