1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

* thread.c (thread_cleanup_func): delete locking_mutex when thread

object become dummy because of fork.  [ruby-core:26744]
  [ruby-core:26745]

* bootstraptest/test_thread.rb: add a test for above.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@25771 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
mame 2009-11-15 15:10:49 +00:00
parent 4a761c3209
commit 31c0e3385f
3 changed files with 32 additions and 0 deletions

View file

@ -1,3 +1,11 @@
Mon Nov 16 00:06:26 2009 Yusuke Endoh <mame@tsg.ne.jp>
* thread.c (thread_cleanup_func): delete locking_mutex when thread
object become dummy because of fork. [ruby-core:26744]
[ruby-core:26745]
* bootstraptest/test_thread.rb: add a test for above.
Sat Nov 14 21:54:46 2009 Yusuke Endoh <mame@tsg.ne.jp>
* class.c (rb_mod_init_copy): fix memory leak of Class#dup.

View file

@ -385,3 +385,26 @@ assert_equal 'ok', %q{
end
:ok
}
assert_equal 'ok', %{
open("zzz.rb", "w") do |f|
f.puts <<-END
begin
m = Mutex.new
Thread.new { m.lock; sleep 1 }
sleep 0.3
Thread.new do
sleep 0.3
fork { GC.start }
end
m.lock
pid, status = Process.wait2
$result = status.success? ? :ok : :ng
rescue NotImplementedError
$result = :ok
end
END
end
require "./zzz.rb"
$result
}

View file

@ -380,6 +380,7 @@ thread_cleanup_func(void *th_ptr)
rb_mutex_unlock_all(th->keeping_mutexes, th);
th->keeping_mutexes = NULL;
}
th->locking_mutex = Qfalse;
thread_cleanup_func_before_exec(th_ptr);
native_thread_destroy(th);
}