diff options
-rw-r--r-- | ChangeLog | 4 | ||||
-rw-r--r-- | thread.c | 3 |
2 files changed, 7 insertions, 0 deletions
@@ -1,3 +1,7 @@ +Thu Nov 13 11:31:13 2008 Nobuyoshi Nakada <[email protected]> + + * thread.c (rb_barrier_wait): gets rid of recursive deadlock. + Thu Nov 13 06:08:44 2008 Nobuyoshi Nakada <[email protected]> * thread.c (rb_barrier_{new,wait,release,destroy}): use Mutex so that @@ -3050,8 +3050,11 @@ VALUE rb_barrier_wait(VALUE self) { VALUE mutex = (VALUE)DATA_PTR(self); + mutex_t *m; if (!mutex) return Qfalse; + GetMutexPtr(mutex, m); + if (m->th == GET_THREAD()) return Qfalse; rb_mutex_lock(mutex); if (DATA_PTR(self)) return Qtrue; rb_mutex_unlock(mutex); |