pthread_cond_broadcast is not asynch signal safe
AKA /less/ GC deadlocks on Darwin.
To be specific, it can cause our GC to deadlock on Darwin, with all lisp
threads spinning on the same global spinlock in the bowels of the
pthread_cond_wait implementation. That was fun to figure out.
The test (:interrupt-thread :interrupt-consing-child) is a good one
for catching this: try to run it repeatedly under an earlier SBCL
under Darwin, and sooner or later it will hang.
...with this commit, we're still using pthread_cond_broadcast, but
blocking signals around the relevant bits, which --experimentally--
makes the aforementioned test pass "somewhat more consistently".
It can still hang, but those hangs seem to be related to deferrable
signals being indefinitely blocked in one of the threads -- no idea
as of yet why.
Summa Summarum: this is a bit of a sorry bandaid, waiting for
a better solution. (Probably using realtime semaphores, which
/should/ be signal-handler safe.)