* 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:
parent
4a761c3209
commit
31c0e3385f
@ -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>
|
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.
|
* class.c (rb_mod_init_copy): fix memory leak of Class#dup.
|
||||||
|
@ -385,3 +385,26 @@ assert_equal 'ok', %q{
|
|||||||
end
|
end
|
||||||
:ok
|
: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
|
||||||
|
}
|
||||||
|
1
thread.c
1
thread.c
@ -380,6 +380,7 @@ thread_cleanup_func(void *th_ptr)
|
|||||||
rb_mutex_unlock_all(th->keeping_mutexes, th);
|
rb_mutex_unlock_all(th->keeping_mutexes, th);
|
||||||
th->keeping_mutexes = NULL;
|
th->keeping_mutexes = NULL;
|
||||||
}
|
}
|
||||||
|
th->locking_mutex = Qfalse;
|
||||||
thread_cleanup_func_before_exec(th_ptr);
|
thread_cleanup_func_before_exec(th_ptr);
|
||||||
native_thread_destroy(th);
|
native_thread_destroy(th);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user