зеркало из https://github.com/github/ruby.git
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:
Родитель
d3e8f0fe7f
Коммит
863d148a4e
10
ChangeLog
10
ChangeLog
|
@ -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
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче