ruby-changes:20173
From: nobu <ko1@a...>
Date: Fri, 24 Jun 2011 17:06:56 +0900 (JST)
Subject: [ruby-changes:20173] nobu:r32221 (trunk): * process.c (proc_daemon): should not start timer thread
nobu 2011-06-24 17:06:38 +0900 (Fri, 24 Jun 2011) New Revision: 32221 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=32221 Log: * process.c (proc_daemon): should not start timer thread twice. fixed Bug#4920. Modified files: trunk/ChangeLog trunk/process.c trunk/test/ruby/test_process.rb Index: ChangeLog =================================================================== --- ChangeLog (revision 32220) +++ ChangeLog (revision 32221) @@ -1,3 +1,8 @@ +Fri Jun 24 17:06:33 2011 Nobuyoshi Nakada <nobu@r...> + + * process.c (proc_daemon): should not start timer thread + twice. fixed Bug#4920. + Fri Jun 24 15:54:14 2011 Hiroshi Nakamura <nahi@r...> * ext/openssl/ossl_ssl.c (ossl_ssl_shutdown): Try to shutdown SSL Index: process.c =================================================================== --- process.c (revision 32220) +++ process.c (revision 32221) @@ -4806,10 +4806,7 @@ #endif #if defined(HAVE_DAEMON) || (defined(HAVE_FORK) && defined(HAVE_SETSID)) -#ifndef HAVE_DAEMON static int rb_daemon(int nochdir, int noclose); -#define daemon(nochdir, noclose) rb_daemon((nochdir), (noclose)) -#endif /* * call-seq: @@ -4835,18 +4832,21 @@ rb_scan_args(argc, argv, "02", &nochdir, &noclose); prefork(); - before_fork(); - n = daemon(RTEST(nochdir), RTEST(noclose)); - after_fork(); + n = rb_daemon(RTEST(nochdir), RTEST(noclose)); if (n < 0) rb_sys_fail("daemon"); return INT2FIX(n); } -#ifndef HAVE_DAEMON static int rb_daemon(int nochdir, int noclose) { - int n, err = 0; + int err = 0; +#ifdef HAVE_DAEMON + before_fork(); + err = daemon(nochdir, noclose); + after_fork(); +#else + int n; switch (rb_fork(0, 0, 0, Qnil)) { case -1: @@ -4880,8 +4880,8 @@ (void)close (n); } return err; +#endif } -#endif #else #define proc_daemon rb_f_notimplement #endif Index: test/ruby/test_process.rb =================================================================== --- test/ruby/test_process.rb (revision 32220) +++ test/ruby/test_process.rb (revision 32221) @@ -1268,4 +1268,58 @@ ensure Process.kill(:KILL, pid) if (pid != 0) rescue false end + + if Process.respond_to?(:daemon) + def test_daemon_default + data = IO.popen("-", "r+") do |f| + break f.read if f + Process.daemon + puts "ng" + end + assert_equal("", data) + end + + def test_daemon_noclose + data = IO.popen("-", "r+") do |f| + break f.read if f + Process.daemon(false, true) + puts "ok", Dir.pwd + end + assert_equal("ok\n/\n", data) + end + + def test_daemon_nochdir_noclose + data = IO.popen("-", "r+") do |f| + break f.read if f + Process.daemon(true, true) + puts "ok", Dir.pwd + end + assert_equal("ok\n#{Dir.pwd}\n", data) + end + + def test_daemon_readwrite + data = IO.popen("-", "r+") do |f| + if f + f.puts "ok?" + break f.read + end + Process.daemon(true, true) + puts STDIN.gets + end + assert_equal("ok?\n", data) + end + + if File.directory?("/proc/self/task") + def test_daemon_no_threads + pid, data = IO.popen("-", "r+") do |f| + break f.pid, f.readlines if f + Process.daemon(true, true) + puts Dir.entries("/proc/self/task") - %W[. ..] + end + bug4920 = '[ruby-dev:43873]' + assert_equal(2, data.size, bug4920) + assert_not_include(data.map(&:to_i), pid) + end + end + end end -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/