Fix GC allocation mutex in child after a fork
authorGustavo Giraldez <ggiraldez@manas.com.ar>
Thu, 18 Jan 2018 21:52:25 +0000 (00:52 +0300)
committerIvan Maidanski <ivmai@mail.ru>
Thu, 18 Jan 2018 21:52:25 +0000 (00:52 +0300)
commit9e1c668224a5bf2a62ec345f82c6277c69692eaa
treea4b43f7c183ce545c7f95f89984229a2c9b72d29
parent19bc7d942b1bea8cc5584b69fb1fa851b9de64b7
Fix GC allocation mutex in child after a fork

Even though after a fork the child only inherits the single thread
that called the fork(), if another thread in the parent was attempting
to lock the mutex while being held in fork_child_prepare(), the mutex
will be left in an inconsistent state in the child after the UNLOCK().
This is the case, at least, in Mac OS X and leads to an unusable GC in
the child which will block when attempting to perform any GC operation
that acquires the mutex.

* pthread_support.c [CAN_HANDLE_FORK && USE_PTHREAD_LOCKS]
(fork_child_proc): Add assertion (after UNLOCK) that the lock is not
held actually, and, then, re-initialize GC_allocate_ml; add comments.
pthread_support.c