From 2e25df66cedd76609685fd0c6ff25d3ad42f2e3a Mon Sep 17 00:00:00 2001 From: nobu Date: Thu, 10 Dec 2009 06:49:15 +0000 Subject: * thread_pthread.c (native_mutex_reinitialize_atfork): release and re-acquire the lock at re-initialization. git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@26061 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 5 +++++ bootstraptest/test_thread.rb | 6 +++++- thread_pthread.c | 5 ++++- 3 files changed, 14 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index 4fc128749..6f8f28547 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +Thu Dec 10 15:49:13 2009 Nobuyoshi Nakada + + * thread_pthread.c (native_mutex_reinitialize_atfork): release and + re-acquire the lock at re-initialization. + Thu Dec 10 12:56:02 2009 NARUSE, Yui * encoding.c (enc_replicate): add Encoding#replicate(name). diff --git a/bootstraptest/test_thread.rb b/bootstraptest/test_thread.rb index 446c9ff4d..5fdb66bb6 100644 --- a/bootstraptest/test_thread.rb +++ b/bootstraptest/test_thread.rb @@ -434,4 +434,8 @@ assert_finish 3, %q{ Process.waitpid(pid) rescue NotImplementedError end -}, '[ruby-core:26361]' +}, '[ruby-core:23572]' + +assert_equal 'ok', %q{ + Process.waitpid2(fork {sleep 1})[1].success? ? 'ok' : 'ng' +} diff --git a/thread_pthread.c b/thread_pthread.c index 6d011b81b..af0b28644 100644 --- a/thread_pthread.c +++ b/thread_pthread.c @@ -71,7 +71,10 @@ native_mutex_initialize(pthread_mutex_t *lock) } } -#define native_mutex_reinitialize_atfork(lock) native_mutex_initialize(lock) +#define native_mutex_reinitialize_atfork(lock) (\ + native_mutex_unlock(lock), \ + native_mutex_initialize(lock), \ + native_mutex_lock(lock)) static void native_mutex_destroy(pthread_mutex_t *lock) -- cgit