diff options
-rw-r--r-- | ChangeLog | 7 | ||||
-rw-r--r-- | bootstraptest/test_thread.rb | 8 | ||||
-rw-r--r-- | thread.c | 14 |
3 files changed, 28 insertions, 1 deletions
@@ -1,3 +1,10 @@ +Mon Jan 14 18:53:58 2008 Koichi Sasada <[email protected]> + + * thread.c: clear thread structure. + (TODO: survey that child process should clear mutex or not). + + * bootstraptest/test_knownbug.rb, test_thread.rb: move a fixed test. + Mon Jan 14 18:43:38 2008 Koichi Sasada <[email protected]> * bootstraptest/runner.rb: add "flunk" method. diff --git a/bootstraptest/test_thread.rb b/bootstraptest/test_thread.rb index b3592e9bd7..9711535d72 100644 --- a/bootstraptest/test_thread.rb +++ b/bootstraptest/test_thread.rb @@ -193,3 +193,11 @@ rescue 100 end }, '[ruby-dev:31371]' +assert_equal 'true', %{ + t = Thread.new { loop {} } + pid = fork { + exit t.status != "run" + } + Process.wait pid + $?.success? +} @@ -1955,7 +1955,18 @@ rb_thread_start_timer_thread(void) rb_thread_create_timer_thread(); } -/***/ +static int +terminate_atfork_i(st_data_t key, st_data_t val, rb_thread_t *current_th) +{ + VALUE thval = key; + rb_thread_t *th; + GetThreadPtr(thval, th); + + if (th != current_th) { + thread_cleanup_func(th); + } + return ST_CONTINUE; +} void rb_thread_atfork(void) @@ -1965,6 +1976,7 @@ rb_thread_atfork(void) VALUE thval = th->self; vm->main_thread = th; + st_foreach(vm->living_threads, terminate_atfork_i, (st_data_t)th); st_clear(vm->living_threads); st_insert(vm->living_threads, thval, (st_data_t) th->thread_id); } |