process.c: kill threads in daemon process

* process.c (fork_daemon): kill the other threads all and abandon the
  kept mutexes.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@41886 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
nobu 2013-07-10 05:19:01 +00:00
Родитель d3e8f0fe7f
Коммит 863d148a4e
3 изменённых файлов: 32 добавлений и 1 удалений

Просмотреть файл

@ -1,3 +1,13 @@
Wed Jul 10 14:18:59 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
* process.c (fork_daemon): kill the other threads all and abandon the
kept mutexes.
Wed Jul 10 14:14:44 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
* process.c (fork_daemon): kill the other threads all and abandon the
kept mutexes.
Wed Jul 10 11:35:36 2013 NAKAMURA Usaku <usa@ruby-lang.org>
* test/net/http/test_http.rb (TestNetHTTP_v1_2#test_get,

Просмотреть файл

@ -5742,7 +5742,7 @@ rb_daemon(int nochdir, int noclose)
#define fork_daemon() \
switch (rb_fork_ruby(NULL)) { \
case -1: return -1; \
case 0: break; \
case 0: rb_thread_atfork(); break; \
default: _exit(EXIT_SUCCESS); \
}

Просмотреть файл

@ -1472,6 +1472,15 @@ class TestProcess < Test::Unit::TestCase
assert_equal("ok?\n", data)
end
def test_daemon_pid
cpid, dpid = IO.popen("-", "r+") do |f|
break f.pid, Integer(f.read) if f
Process.daemon(false, true)
puts $$
end
assert_not_equal(cpid, dpid)
end
if File.directory?("/proc/self/task") && /netbsd[a-z]*[1-6]/ !~ RUBY_PLATFORM
def test_daemon_no_threads
pid, data = IO.popen("-", "r+") do |f|
@ -1483,6 +1492,18 @@ class TestProcess < Test::Unit::TestCase
assert_equal(2, data.size, bug4920)
assert_not_include(data.map(&:to_i), pid)
end
else
def test_daemon_no_threads
data = Timeout.timeout(3) do
IO.popen("-") do |f|
break f.readlines.map(&:chomp) if f
th = Thread.start {sleep 3}
Process.daemon(true, true)
puts Thread.list.size, th.status.inspect
end
end
assert_equal(["1", "false"], data)
end
end
end