src: fix race condition in debug signal on exit
authorBen Noordhuis <info@bnoordhuis.nl>
Mon, 26 Oct 2015 13:11:03 +0000 (14:11 +0100)
committerJames M Snell <jasnell@gmail.com>
Thu, 29 Oct 2015 15:38:44 +0000 (08:38 -0700)
commit3bafe1a59b0eeabb102ba3b2de17167a3e55c105
tree16ef823c168f0674181c4976e925450907bfcb62
parent8a2c4aeeaa7b4b80d63598406a5c199b19fbd378
src: fix race condition in debug signal on exit

Before this commit, sending a SIGUSR1 at program exit could trigger a
hard to reproduce race condition where `v8::Debug::DebugBreak(isolate)`
got called when the isolate was in the process of being torn down.

A similar race condition is in theory possible when sending signals
to two threads simultaneously but I haven't been able to reproduce
that myself (and I tried, oh how I tried.)

This commit fixes the race condition by turning `node_isolate` into
a `std::atomic` and using it as an ad hoc synchronization primitive
in places where that is necessary.

A bare minimum std::atomic polyfill is added for OS X because Apple
wouldn't be Apple if things just worked out of the box.

PR-URL: https://github.com/nodejs/node/pull/3528
Reviewed-By: Fedor Indutny <fedor@indutny.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
src/atomic-polyfill.h [new file with mode: 0644]
src/node.cc