ruby-dev (Japanese) list archive (unofficial mirror)
 help / color / mirror / Atom feed
* [ruby-dev:48203] [ruby-trunk - Bug #9820] [Open] miniruby -e 'Process.kill(:INT, $$)' hang under cron
       [not found] <redmine.issue-9820.20140509080642@ruby-lang.org>
@ 2014-05-09  8:06 ` akr
  2014-05-09 13:06 ` [ruby-dev:48206] [ruby-trunk - Bug #9820] " akr
                   ` (13 subsequent siblings)
  14 siblings, 0 replies; 15+ messages in thread
From: akr @ 2014-05-09  8:06 UTC (permalink / raw
  To: ruby-dev

Issue #9820 has been reported by Akira Tanaka.

----------------------------------------
Bug #9820: miniruby -e 'Process.kill(:INT, $$)' hang under cron
https://bugs.ruby-lang.org/issues/9820

* Author: Akira Tanaka
* Status: Open
* Priority: Normal
* Assignee: 
* Category: 
* Target version: 
* ruby -v: ruby 2.2.0dev (2014-05-09 trunk 45884) [x86_64-linux]
* Backport: 2.0.0: UNKNOWN, 2.1: UNKNOWN
----------------------------------------
最近、しばたさんが運用を始めた chkbuild で、
TestBeginEndBlock#test_propagate_signaled が hang しています。
http://chkbuild002.hsbt.org/chkbuild/ruby-trunk/log/20140509T060013Z.fail.html.gz

調べて再現コードを小さくしていった結果、

  miniruby -e 'Process.kill(:INT, $$)'

というのを cron から動かしたときは hang し、
端末から動かしたときは hang しない、ということが判明しました。

strace した結果をみると、
cron 下では timer thread が prctl の直後に poll を呼び出してそれが終わらないという挙動なのに対し、
端末ではそのあたりで context switch が起きている、ような気がします。

strace の結果を strace.cron.log と strace.term.log として添付します。

なにかわかるひとはいますでしょうか?

```
% ./miniruby -v
ruby 2.2.0dev (2014-05-09 trunk 45884) [x86_64-linux]
% uname -mrsv      
Linux 3.2.0-4-amd64 #1 SMP Debian 3.2.54-2 x86_64
% lsb_release -idrc
Distributor ID:	Debian
Description:	Debian GNU/Linux 7.5 (wheezy)
Release:	7.5
Codename:	wheezy
```

なお、コミッタならしばたさんに頼むとそのマシンにアカウントを作ってくれる模様です。


---Files--------------------------------
strace.cron.log (15.8 KB)
strace.term.log (17.6 KB)


-- 
https://bugs.ruby-lang.org/

^ permalink raw reply	[flat|nested] 15+ messages in thread

* [ruby-dev:48206] [ruby-trunk - Bug #9820] miniruby -e 'Process.kill(:INT, $$)' hang under cron
       [not found] <redmine.issue-9820.20140509080642@ruby-lang.org>
  2014-05-09  8:06 ` [ruby-dev:48203] [ruby-trunk - Bug #9820] [Open] miniruby -e 'Process.kill(:INT, $$)' hang under cron akr
@ 2014-05-09 13:06 ` akr
  2014-05-09 14:16 ` [ruby-dev:48207] " nobu
                   ` (12 subsequent siblings)
  14 siblings, 0 replies; 15+ messages in thread
From: akr @ 2014-05-09 13:06 UTC (permalink / raw
  To: ruby-dev

Issue #9820 has been updated by Akira Tanaka.


さらに調べた結果、どうも cron から動かしたプログラムでは SIGINT の signal handler が
SIG_IGN になっているようです。

以下のようにして、端末からでも再現できました。
以下を実行すると hang します。

```
./miniruby -e 'trap(:INT, "IGNORE"); Process.kill(:INT, $$)'
```

Ctrl-C で止められないのは少し面倒なので、SIGQUIT に変えて以下のようにしても同様です。

```
./miniruby -e 'trap(:QUIT, "IGNORE"); Process.kill(:QUIT, $$)'
```

シグナルを無視する設定なのに、hang するのはバグだと考えられます。
workaround としては trap(:INT, "DEFAULT") すればいいわけですが、バグは直したほうがいいと思います。

なお、いつからそうなったか調べたところ、Ruby 2.1.0 からな感じです。
Ruby 2.0.0p481 では hang せず、すぐに終わります。
でも rubyci.org では 2.0.0 も hang しているじゃないかと思ってよく見直してみると、
2.0.0 で hang しているのは `TestBeginEndBlock#test_propagate_signaled` じゃなくて
`TestIO_Console#test_noctty` で、そっちはまた違う原因のようです。


----------------------------------------
Bug #9820: miniruby -e 'Process.kill(:INT, $$)' hang under cron
https://bugs.ruby-lang.org/issues/9820#change-46638

* Author: Akira Tanaka
* Status: Open
* Priority: Normal
* Assignee: 
* Category: 
* Target version: 
* ruby -v: ruby 2.2.0dev (2014-05-09 trunk 45884) [x86_64-linux]
* Backport: 2.0.0: UNKNOWN, 2.1: UNKNOWN
----------------------------------------
最近、しばたさんが運用を始めた chkbuild で、
TestBeginEndBlock#test_propagate_signaled が hang しています。
http://chkbuild002.hsbt.org/chkbuild/ruby-trunk/log/20140509T060013Z.fail.html.gz

調べて再現コードを小さくしていった結果、

  miniruby -e 'Process.kill(:INT, $$)'

というのを cron から動かしたときは hang し、
端末から動かしたときは hang しない、ということが判明しました。

strace した結果をみると、
cron 下では timer thread が prctl の直後に poll を呼び出してそれが終わらないという挙動なのに対し、
端末ではそのあたりで context switch が起きている、ような気がします。

strace の結果を strace.cron.log と strace.term.log として添付します。

なにかわかるひとはいますでしょうか?

```
% ./miniruby -v
ruby 2.2.0dev (2014-05-09 trunk 45884) [x86_64-linux]
% uname -mrsv      
Linux 3.2.0-4-amd64 #1 SMP Debian 3.2.54-2 x86_64
% lsb_release -idrc
Distributor ID:	Debian
Description:	Debian GNU/Linux 7.5 (wheezy)
Release:	7.5
Codename:	wheezy
```

なお、コミッタならしばたさんに頼むとそのマシンにアカウントを作ってくれる模様です。


---Files--------------------------------
strace.cron.log (15.8 KB)
strace.term.log (17.6 KB)


-- 
https://bugs.ruby-lang.org/

^ permalink raw reply	[flat|nested] 15+ messages in thread

* [ruby-dev:48207] [ruby-trunk - Bug #9820] miniruby -e 'Process.kill(:INT, $$)' hang under cron
       [not found] <redmine.issue-9820.20140509080642@ruby-lang.org>
  2014-05-09  8:06 ` [ruby-dev:48203] [ruby-trunk - Bug #9820] [Open] miniruby -e 'Process.kill(:INT, $$)' hang under cron akr
  2014-05-09 13:06 ` [ruby-dev:48206] [ruby-trunk - Bug #9820] " akr
@ 2014-05-09 14:16 ` nobu
  2014-05-09 14:35 ` [ruby-dev:48208] " nobu
                   ` (11 subsequent siblings)
  14 siblings, 0 replies; 15+ messages in thread
From: nobu @ 2014-05-09 14:16 UTC (permalink / raw
  To: ruby-dev

Issue #9820 has been updated by Nobuyoshi Nakada.


r39819で、自分自身にシグナルを送ったときにはすぐシグナルを処理するために受信するまで待つようになっていますが、`SIG_IGN`の場合は送られないのでそこでずっと待機してしまうということのようです。
シグナルの遅延が予測できない以上、`kill`する前にチェックするしかないですかねぇ。

----------------------------------------
Bug #9820: miniruby -e 'Process.kill(:INT, $$)' hang under cron
https://bugs.ruby-lang.org/issues/9820#change-46640

* Author: Akira Tanaka
* Status: Open
* Priority: Normal
* Assignee: 
* Category: 
* Target version: 
* ruby -v: ruby 2.2.0dev (2014-05-09 trunk 45884) [x86_64-linux]
* Backport: 2.0.0: UNKNOWN, 2.1: UNKNOWN
----------------------------------------
最近、しばたさんが運用を始めた chkbuild で、
TestBeginEndBlock#test_propagate_signaled が hang しています。
http://chkbuild002.hsbt.org/chkbuild/ruby-trunk/log/20140509T060013Z.fail.html.gz

調べて再現コードを小さくしていった結果、

  miniruby -e 'Process.kill(:INT, $$)'

というのを cron から動かしたときは hang し、
端末から動かしたときは hang しない、ということが判明しました。

strace した結果をみると、
cron 下では timer thread が prctl の直後に poll を呼び出してそれが終わらないという挙動なのに対し、
端末ではそのあたりで context switch が起きている、ような気がします。

strace の結果を strace.cron.log と strace.term.log として添付します。

なにかわかるひとはいますでしょうか?

```
% ./miniruby -v
ruby 2.2.0dev (2014-05-09 trunk 45884) [x86_64-linux]
% uname -mrsv      
Linux 3.2.0-4-amd64 #1 SMP Debian 3.2.54-2 x86_64
% lsb_release -idrc
Distributor ID:	Debian
Description:	Debian GNU/Linux 7.5 (wheezy)
Release:	7.5
Codename:	wheezy
```

なお、コミッタならしばたさんに頼むとそのマシンにアカウントを作ってくれる模様です。


---Files--------------------------------
strace.cron.log (15.8 KB)
strace.term.log (17.6 KB)


-- 
https://bugs.ruby-lang.org/

^ permalink raw reply	[flat|nested] 15+ messages in thread

* [ruby-dev:48208] [ruby-trunk - Bug #9820] miniruby -e 'Process.kill(:INT, $$)' hang under cron
       [not found] <redmine.issue-9820.20140509080642@ruby-lang.org>
                   ` (2 preceding siblings ...)
  2014-05-09 14:16 ` [ruby-dev:48207] " nobu
@ 2014-05-09 14:35 ` nobu
  2014-05-09 15:00 ` [ruby-dev:48209] " akr
                   ` (10 subsequent siblings)
  14 siblings, 0 replies; 15+ messages in thread
From: nobu @ 2014-05-09 14:35 UTC (permalink / raw
  To: ruby-dev

Issue #9820 has been updated by Nobuyoshi Nakada.


元々シグナルがすぐ配送されるとは限らないわけで、とりあえずタイムアウトをつけてみるのはどうでしょうか。

~~~diff
diff --git i/thread.c w/thread.c
index dfa91a8..209aff1 100644
--- i/thread.c
+++ w/thread.c
@@ -5180,10 +5180,11 @@ ruby_kill(rb_pid_t pid, int sig)
      * delivered immediately and synchronously.
      */
     if ((sig != 0) && (th == vm->main_thread) && (pid == getpid())) {
+	static const struct timespec limit = {0, 1000*1000}; /* 1ms */
 	GVL_UNLOCK_BEGIN();
 	native_mutex_lock(&th->interrupt_lock);
 	err = kill(pid, sig);
-	native_cond_wait(&th->interrupt_cond, &th->interrupt_lock);
+	native_cond_timedwait(&th->interrupt_cond, &th->interrupt_lock, &limit);
 	native_mutex_unlock(&th->interrupt_lock);
 	GVL_UNLOCK_END();
     }
~~~

----------------------------------------
Bug #9820: miniruby -e 'Process.kill(:INT, $$)' hang under cron
https://bugs.ruby-lang.org/issues/9820#change-46641

* Author: Akira Tanaka
* Status: Open
* Priority: Normal
* Assignee: 
* Category: 
* Target version: 
* ruby -v: ruby 2.2.0dev (2014-05-09 trunk 45884) [x86_64-linux]
* Backport: 2.0.0: UNKNOWN, 2.1: UNKNOWN
----------------------------------------
最近、しばたさんが運用を始めた chkbuild で、
TestBeginEndBlock#test_propagate_signaled が hang しています。
http://chkbuild002.hsbt.org/chkbuild/ruby-trunk/log/20140509T060013Z.fail.html.gz

調べて再現コードを小さくしていった結果、

  miniruby -e 'Process.kill(:INT, $$)'

というのを cron から動かしたときは hang し、
端末から動かしたときは hang しない、ということが判明しました。

strace した結果をみると、
cron 下では timer thread が prctl の直後に poll を呼び出してそれが終わらないという挙動なのに対し、
端末ではそのあたりで context switch が起きている、ような気がします。

strace の結果を strace.cron.log と strace.term.log として添付します。

なにかわかるひとはいますでしょうか?

```
% ./miniruby -v
ruby 2.2.0dev (2014-05-09 trunk 45884) [x86_64-linux]
% uname -mrsv      
Linux 3.2.0-4-amd64 #1 SMP Debian 3.2.54-2 x86_64
% lsb_release -idrc
Distributor ID:	Debian
Description:	Debian GNU/Linux 7.5 (wheezy)
Release:	7.5
Codename:	wheezy
```

なお、コミッタならしばたさんに頼むとそのマシンにアカウントを作ってくれる模様です。


---Files--------------------------------
strace.cron.log (15.8 KB)
strace.term.log (17.6 KB)


-- 
https://bugs.ruby-lang.org/

^ permalink raw reply related	[flat|nested] 15+ messages in thread

* [ruby-dev:48209] [ruby-trunk - Bug #9820] miniruby -e 'Process.kill(:INT, $$)' hang under cron
       [not found] <redmine.issue-9820.20140509080642@ruby-lang.org>
                   ` (3 preceding siblings ...)
  2014-05-09 14:35 ` [ruby-dev:48208] " nobu
@ 2014-05-09 15:00 ` akr
  2014-05-09 15:02 ` [ruby-dev:48210] " nobu
                   ` (9 subsequent siblings)
  14 siblings, 0 replies; 15+ messages in thread
From: akr @ 2014-05-09 15:00 UTC (permalink / raw
  To: ruby-dev

Issue #9820 has been updated by Akira Tanaka.


自分自身に送るときは、即座に届かないと困ることがあった気がします。
例外が発生するはずがその先まで実行されてしまうとか。

思うに、自分自身(だけ)に送るときは signal を使わないで、直接 signal handler を呼ぶなり呼ばないなりすればいいんじゃないかという気がするんですが、どうですかねぇ。


----------------------------------------
Bug #9820: miniruby -e 'Process.kill(:INT, $$)' hang under cron
https://bugs.ruby-lang.org/issues/9820#change-46642

* Author: Akira Tanaka
* Status: Open
* Priority: Normal
* Assignee: 
* Category: 
* Target version: 
* ruby -v: ruby 2.2.0dev (2014-05-09 trunk 45884) [x86_64-linux]
* Backport: 2.0.0: UNKNOWN, 2.1: UNKNOWN
----------------------------------------
最近、しばたさんが運用を始めた chkbuild で、
TestBeginEndBlock#test_propagate_signaled が hang しています。
http://chkbuild002.hsbt.org/chkbuild/ruby-trunk/log/20140509T060013Z.fail.html.gz

調べて再現コードを小さくしていった結果、

  miniruby -e 'Process.kill(:INT, $$)'

というのを cron から動かしたときは hang し、
端末から動かしたときは hang しない、ということが判明しました。

strace した結果をみると、
cron 下では timer thread が prctl の直後に poll を呼び出してそれが終わらないという挙動なのに対し、
端末ではそのあたりで context switch が起きている、ような気がします。

strace の結果を strace.cron.log と strace.term.log として添付します。

なにかわかるひとはいますでしょうか?

```
% ./miniruby -v
ruby 2.2.0dev (2014-05-09 trunk 45884) [x86_64-linux]
% uname -mrsv      
Linux 3.2.0-4-amd64 #1 SMP Debian 3.2.54-2 x86_64
% lsb_release -idrc
Distributor ID:	Debian
Description:	Debian GNU/Linux 7.5 (wheezy)
Release:	7.5
Codename:	wheezy
```

なお、コミッタならしばたさんに頼むとそのマシンにアカウントを作ってくれる模様です。


---Files--------------------------------
strace.cron.log (15.8 KB)
strace.term.log (17.6 KB)


-- 
https://bugs.ruby-lang.org/

^ permalink raw reply	[flat|nested] 15+ messages in thread

* [ruby-dev:48210] [ruby-trunk - Bug #9820] miniruby -e 'Process.kill(:INT, $$)' hang under cron
       [not found] <redmine.issue-9820.20140509080642@ruby-lang.org>
                   ` (4 preceding siblings ...)
  2014-05-09 15:00 ` [ruby-dev:48209] " akr
@ 2014-05-09 15:02 ` nobu
  2014-05-09 15:05 ` [ruby-dev:48211] " akr
                   ` (8 subsequent siblings)
  14 siblings, 0 replies; 15+ messages in thread
From: nobu @ 2014-05-09 15:02 UTC (permalink / raw
  To: ruby-dev

Issue #9820 has been updated by Nobuyoshi Nakada.


`SIG_IGN`ではないときだけ、というところでrace conditionになったりしないですかね。

----------------------------------------
Bug #9820: miniruby -e 'Process.kill(:INT, $$)' hang under cron
https://bugs.ruby-lang.org/issues/9820#change-46643

* Author: Akira Tanaka
* Status: Open
* Priority: Normal
* Assignee: 
* Category: 
* Target version: 
* ruby -v: ruby 2.2.0dev (2014-05-09 trunk 45884) [x86_64-linux]
* Backport: 2.0.0: UNKNOWN, 2.1: UNKNOWN
----------------------------------------
最近、しばたさんが運用を始めた chkbuild で、
TestBeginEndBlock#test_propagate_signaled が hang しています。
http://chkbuild002.hsbt.org/chkbuild/ruby-trunk/log/20140509T060013Z.fail.html.gz

調べて再現コードを小さくしていった結果、

  miniruby -e 'Process.kill(:INT, $$)'

というのを cron から動かしたときは hang し、
端末から動かしたときは hang しない、ということが判明しました。

strace した結果をみると、
cron 下では timer thread が prctl の直後に poll を呼び出してそれが終わらないという挙動なのに対し、
端末ではそのあたりで context switch が起きている、ような気がします。

strace の結果を strace.cron.log と strace.term.log として添付します。

なにかわかるひとはいますでしょうか?

```
% ./miniruby -v
ruby 2.2.0dev (2014-05-09 trunk 45884) [x86_64-linux]
% uname -mrsv      
Linux 3.2.0-4-amd64 #1 SMP Debian 3.2.54-2 x86_64
% lsb_release -idrc
Distributor ID:	Debian
Description:	Debian GNU/Linux 7.5 (wheezy)
Release:	7.5
Codename:	wheezy
```

なお、コミッタならしばたさんに頼むとそのマシンにアカウントを作ってくれる模様です。


---Files--------------------------------
strace.cron.log (15.8 KB)
strace.term.log (17.6 KB)


-- 
https://bugs.ruby-lang.org/

^ permalink raw reply	[flat|nested] 15+ messages in thread

* [ruby-dev:48211] [ruby-trunk - Bug #9820] miniruby -e 'Process.kill(:INT, $$)' hang under cron
       [not found] <redmine.issue-9820.20140509080642@ruby-lang.org>
                   ` (5 preceding siblings ...)
  2014-05-09 15:02 ` [ruby-dev:48210] " nobu
@ 2014-05-09 15:05 ` akr
  2014-05-10 16:10 ` [ruby-dev:48215] [ruby-trunk - Bug #9820] [Closed] " nobu
                   ` (7 subsequent siblings)
  14 siblings, 0 replies; 15+ messages in thread
From: akr @ 2014-05-09 15:05 UTC (permalink / raw
  To: ruby-dev

Issue #9820 has been updated by Akira Tanaka.


GVL があるので変なことはまず起こらない気がしますが、起こるとしたらどういう状況ですかね。

----------------------------------------
Bug #9820: miniruby -e 'Process.kill(:INT, $$)' hang under cron
https://bugs.ruby-lang.org/issues/9820#change-46644

* Author: Akira Tanaka
* Status: Open
* Priority: Normal
* Assignee: 
* Category: 
* Target version: 
* ruby -v: ruby 2.2.0dev (2014-05-09 trunk 45884) [x86_64-linux]
* Backport: 2.0.0: UNKNOWN, 2.1: UNKNOWN
----------------------------------------
最近、しばたさんが運用を始めた chkbuild で、
TestBeginEndBlock#test_propagate_signaled が hang しています。
http://chkbuild002.hsbt.org/chkbuild/ruby-trunk/log/20140509T060013Z.fail.html.gz

調べて再現コードを小さくしていった結果、

  miniruby -e 'Process.kill(:INT, $$)'

というのを cron から動かしたときは hang し、
端末から動かしたときは hang しない、ということが判明しました。

strace した結果をみると、
cron 下では timer thread が prctl の直後に poll を呼び出してそれが終わらないという挙動なのに対し、
端末ではそのあたりで context switch が起きている、ような気がします。

strace の結果を strace.cron.log と strace.term.log として添付します。

なにかわかるひとはいますでしょうか?

```
% ./miniruby -v
ruby 2.2.0dev (2014-05-09 trunk 45884) [x86_64-linux]
% uname -mrsv      
Linux 3.2.0-4-amd64 #1 SMP Debian 3.2.54-2 x86_64
% lsb_release -idrc
Distributor ID:	Debian
Description:	Debian GNU/Linux 7.5 (wheezy)
Release:	7.5
Codename:	wheezy
```

なお、コミッタならしばたさんに頼むとそのマシンにアカウントを作ってくれる模様です。


---Files--------------------------------
strace.cron.log (15.8 KB)
strace.term.log (17.6 KB)


-- 
https://bugs.ruby-lang.org/

^ permalink raw reply	[flat|nested] 15+ messages in thread

* [ruby-dev:48215] [ruby-trunk - Bug #9820] [Closed] miniruby -e 'Process.kill(:INT, $$)' hang under cron
       [not found] <redmine.issue-9820.20140509080642@ruby-lang.org>
                   ` (6 preceding siblings ...)
  2014-05-09 15:05 ` [ruby-dev:48211] " akr
@ 2014-05-10 16:10 ` nobu
  2014-07-02  7:36 ` [ruby-dev:48365] [ruby-trunk - Bug #9820] " usa
                   ` (6 subsequent siblings)
  14 siblings, 0 replies; 15+ messages in thread
From: nobu @ 2014-05-10 16:10 UTC (permalink / raw
  To: ruby-dev

Issue #9820 has been updated by Nobuyoshi Nakada.

Status changed from Open to Closed
% Done changed from 0 to 100

Applied in changeset r45911.

----------
signal.c: directly enqueue

* signal.c (rb_f_kill): directly enqueue an ignored signal to self,
  except for SIGSEGV and SIGBUS.  [ruby-dev:48203] [Bug #9820]

----------------------------------------
Bug #9820: miniruby -e 'Process.kill(:INT, $$)' hang under cron
https://bugs.ruby-lang.org/issues/9820#change-46677

* Author: Akira Tanaka
* Status: Closed
* Priority: Normal
* Assignee: 
* Category: 
* Target version: 
* ruby -v: ruby 2.2.0dev (2014-05-09 trunk 45884) [x86_64-linux]
* Backport: 2.0.0: UNKNOWN, 2.1: UNKNOWN
----------------------------------------
最近、しばたさんが運用を始めた chkbuild で、
TestBeginEndBlock#test_propagate_signaled が hang しています。
http://chkbuild002.hsbt.org/chkbuild/ruby-trunk/log/20140509T060013Z.fail.html.gz

調べて再現コードを小さくしていった結果、

  miniruby -e 'Process.kill(:INT, $$)'

というのを cron から動かしたときは hang し、
端末から動かしたときは hang しない、ということが判明しました。

strace した結果をみると、
cron 下では timer thread が prctl の直後に poll を呼び出してそれが終わらないという挙動なのに対し、
端末ではそのあたりで context switch が起きている、ような気がします。

strace の結果を strace.cron.log と strace.term.log として添付します。

なにかわかるひとはいますでしょうか?

```
% ./miniruby -v
ruby 2.2.0dev (2014-05-09 trunk 45884) [x86_64-linux]
% uname -mrsv      
Linux 3.2.0-4-amd64 #1 SMP Debian 3.2.54-2 x86_64
% lsb_release -idrc
Distributor ID:	Debian
Description:	Debian GNU/Linux 7.5 (wheezy)
Release:	7.5
Codename:	wheezy
```

なお、コミッタならしばたさんに頼むとそのマシンにアカウントを作ってくれる模様です。


---Files--------------------------------
strace.cron.log (15.8 KB)
strace.term.log (17.6 KB)


-- 
https://bugs.ruby-lang.org/

^ permalink raw reply	[flat|nested] 15+ messages in thread

* [ruby-dev:48365] [ruby-trunk - Bug #9820] miniruby -e 'Process.kill(:INT, $$)' hang under cron
       [not found] <redmine.issue-9820.20140509080642@ruby-lang.org>
                   ` (7 preceding siblings ...)
  2014-05-10 16:10 ` [ruby-dev:48215] [ruby-trunk - Bug #9820] [Closed] " nobu
@ 2014-07-02  7:36 ` usa
  2014-09-01 17:17 ` [ruby-dev:48509] " nagachika00
                   ` (5 subsequent siblings)
  14 siblings, 0 replies; 15+ messages in thread
From: usa @ 2014-07-02  7:36 UTC (permalink / raw
  To: ruby-dev

Issue #9820 has been updated by Usaku NAKAMURA.

Backport changed from 2.0.0: UNKNOWN, 2.1: UNKNOWN to 2.0.0: DONTNEED, 2.1: REQUIRED

----------------------------------------
Bug #9820: miniruby -e 'Process.kill(:INT, $$)' hang under cron
https://bugs.ruby-lang.org/issues/9820#change-47556

* Author: Akira Tanaka
* Status: Closed
* Priority: Normal
* Assignee: 
* Category: 
* Target version: 
* ruby -v: ruby 2.2.0dev (2014-05-09 trunk 45884) [x86_64-linux]
* Backport: 2.0.0: DONTNEED, 2.1: REQUIRED
----------------------------------------
最近、しばたさんが運用を始めた chkbuild で、
TestBeginEndBlock#test_propagate_signaled が hang しています。
http://chkbuild002.hsbt.org/chkbuild/ruby-trunk/log/20140509T060013Z.fail.html.gz

調べて再現コードを小さくしていった結果、

  miniruby -e 'Process.kill(:INT, $$)'

というのを cron から動かしたときは hang し、
端末から動かしたときは hang しない、ということが判明しました。

strace した結果をみると、
cron 下では timer thread が prctl の直後に poll を呼び出してそれが終わらないという挙動なのに対し、
端末ではそのあたりで context switch が起きている、ような気がします。

strace の結果を strace.cron.log と strace.term.log として添付します。

なにかわかるひとはいますでしょうか?

```
% ./miniruby -v
ruby 2.2.0dev (2014-05-09 trunk 45884) [x86_64-linux]
% uname -mrsv      
Linux 3.2.0-4-amd64 #1 SMP Debian 3.2.54-2 x86_64
% lsb_release -idrc
Distributor ID:	Debian
Description:	Debian GNU/Linux 7.5 (wheezy)
Release:	7.5
Codename:	wheezy
```

なお、コミッタならしばたさんに頼むとそのマシンにアカウントを作ってくれる模様です。


---Files--------------------------------
strace.cron.log (15.8 KB)
strace.term.log (17.6 KB)


-- 
https://bugs.ruby-lang.org/

^ permalink raw reply	[flat|nested] 15+ messages in thread

* [ruby-dev:48509] [ruby-trunk - Bug #9820] miniruby -e 'Process.kill(:INT, $$)' hang under cron
       [not found] <redmine.issue-9820.20140509080642@ruby-lang.org>
                   ` (8 preceding siblings ...)
  2014-07-02  7:36 ` [ruby-dev:48365] [ruby-trunk - Bug #9820] " usa
@ 2014-09-01 17:17 ` nagachika00
  2014-10-05 15:38 ` [ruby-dev:48592] " kazuki
                   ` (4 subsequent siblings)
  14 siblings, 0 replies; 15+ messages in thread
From: nagachika00 @ 2014-09-01 17:17 UTC (permalink / raw
  To: ruby-dev

Issue #9820 has been updated by Tomoyuki Chikanaga.

Backport changed from 2.0.0: DONTNEED, 2.1: REQUIRED to 2.0.0: DONTNEED, 2.1: DONE

r45911, r45912, r45917, r45918 and r45919 were backported into `ruby_2_1` branch at r47345.

----------------------------------------
Bug #9820: miniruby -e 'Process.kill(:INT, $$)' hang under cron
https://bugs.ruby-lang.org/issues/9820#change-48601

* Author: Akira Tanaka
* Status: Closed
* Priority: Normal
* Assignee: 
* Category: 
* Target version: 
* ruby -v: ruby 2.2.0dev (2014-05-09 trunk 45884) [x86_64-linux]
* Backport: 2.0.0: DONTNEED, 2.1: DONE
----------------------------------------
最近、しばたさんが運用を始めた chkbuild で、
TestBeginEndBlock#test_propagate_signaled が hang しています。
http://chkbuild002.hsbt.org/chkbuild/ruby-trunk/log/20140509T060013Z.fail.html.gz

調べて再現コードを小さくしていった結果、

  miniruby -e 'Process.kill(:INT, $$)'

というのを cron から動かしたときは hang し、
端末から動かしたときは hang しない、ということが判明しました。

strace した結果をみると、
cron 下では timer thread が prctl の直後に poll を呼び出してそれが終わらないという挙動なのに対し、
端末ではそのあたりで context switch が起きている、ような気がします。

strace の結果を strace.cron.log と strace.term.log として添付します。

なにかわかるひとはいますでしょうか?

```
% ./miniruby -v
ruby 2.2.0dev (2014-05-09 trunk 45884) [x86_64-linux]
% uname -mrsv      
Linux 3.2.0-4-amd64 #1 SMP Debian 3.2.54-2 x86_64
% lsb_release -idrc
Distributor ID:	Debian
Description:	Debian GNU/Linux 7.5 (wheezy)
Release:	7.5
Codename:	wheezy
```

なお、コミッタならしばたさんに頼むとそのマシンにアカウントを作ってくれる模様です。


---Files--------------------------------
strace.cron.log (15.8 KB)
strace.term.log (17.6 KB)


-- 
https://bugs.ruby-lang.org/

^ permalink raw reply	[flat|nested] 15+ messages in thread

* [ruby-dev:48592] [ruby-trunk - Bug #9820] miniruby -e 'Process.kill(:INT, $$)' hang under cron
       [not found] <redmine.issue-9820.20140509080642@ruby-lang.org>
                   ` (9 preceding siblings ...)
  2014-09-01 17:17 ` [ruby-dev:48509] " nagachika00
@ 2014-10-05 15:38 ` kazuki
  2014-10-05 23:37 ` [ruby-dev:48594] " akr
                   ` (3 subsequent siblings)
  14 siblings, 0 replies; 15+ messages in thread
From: kazuki @ 2014-10-05 15:38 UTC (permalink / raw
  To: ruby-dev

Issue #9820 has been updated by Kazuki Tsujimoto.


r45911から以下のコードを実行してもkill(2)が呼ばれないようになっています。
これは意図された変更でしょうか。

~~~
$ ruby -e 'Process.kill(:TRAP, $$)'
~~~

 # これまでの挙動に戻すべきだと主張するほどのものではないですが
 # これでシグナルが飛ばせるとデバッグの際に便利です。


----------------------------------------
Bug #9820: miniruby -e 'Process.kill(:INT, $$)' hang under cron
https://bugs.ruby-lang.org/issues/9820#change-49207

* Author: Akira Tanaka
* Status: Closed
* Priority: Normal
* Assignee: 
* Category: 
* Target version: 
* ruby -v: ruby 2.2.0dev (2014-05-09 trunk 45884) [x86_64-linux]
* Backport: 2.0.0: DONTNEED, 2.1: DONE
----------------------------------------
最近、しばたさんが運用を始めた chkbuild で、
TestBeginEndBlock#test_propagate_signaled が hang しています。
http://chkbuild002.hsbt.org/chkbuild/ruby-trunk/log/20140509T060013Z.fail.html.gz

調べて再現コードを小さくしていった結果、

  miniruby -e 'Process.kill(:INT, $$)'

というのを cron から動かしたときは hang し、
端末から動かしたときは hang しない、ということが判明しました。

strace した結果をみると、
cron 下では timer thread が prctl の直後に poll を呼び出してそれが終わらないという挙動なのに対し、
端末ではそのあたりで context switch が起きている、ような気がします。

strace の結果を strace.cron.log と strace.term.log として添付します。

なにかわかるひとはいますでしょうか?

```
% ./miniruby -v
ruby 2.2.0dev (2014-05-09 trunk 45884) [x86_64-linux]
% uname -mrsv      
Linux 3.2.0-4-amd64 #1 SMP Debian 3.2.54-2 x86_64
% lsb_release -idrc
Distributor ID:	Debian
Description:	Debian GNU/Linux 7.5 (wheezy)
Release:	7.5
Codename:	wheezy
```

なお、コミッタならしばたさんに頼むとそのマシンにアカウントを作ってくれる模様です。


---Files--------------------------------
strace.cron.log (15.8 KB)
strace.term.log (17.6 KB)


-- 
https://bugs.ruby-lang.org/

^ permalink raw reply	[flat|nested] 15+ messages in thread

* [ruby-dev:48594] [ruby-trunk - Bug #9820] miniruby -e 'Process.kill(:INT, $$)' hang under cron
       [not found] <redmine.issue-9820.20140509080642@ruby-lang.org>
                   ` (10 preceding siblings ...)
  2014-10-05 15:38 ` [ruby-dev:48592] " kazuki
@ 2014-10-05 23:37 ` akr
  2014-10-06 14:52 ` [ruby-dev:48600] " nagachika00
                   ` (2 subsequent siblings)
  14 siblings, 0 replies; 15+ messages in thread
From: akr @ 2014-10-05 23:37 UTC (permalink / raw
  To: ruby-dev

Issue #9820 has been updated by Akira Tanaka.


Ruby 自身が signal handler を設定していたとき以外は実際に kill(2) したほうがよさそうですね。

----------------------------------------
Bug #9820: miniruby -e 'Process.kill(:INT, $$)' hang under cron
https://bugs.ruby-lang.org/issues/9820#change-49209

* Author: Akira Tanaka
* Status: Closed
* Priority: Normal
* Assignee: 
* Category: 
* Target version: 
* ruby -v: ruby 2.2.0dev (2014-05-09 trunk 45884) [x86_64-linux]
* Backport: 2.0.0: DONTNEED, 2.1: DONE
----------------------------------------
最近、しばたさんが運用を始めた chkbuild で、
TestBeginEndBlock#test_propagate_signaled が hang しています。
http://chkbuild002.hsbt.org/chkbuild/ruby-trunk/log/20140509T060013Z.fail.html.gz

調べて再現コードを小さくしていった結果、

  miniruby -e 'Process.kill(:INT, $$)'

というのを cron から動かしたときは hang し、
端末から動かしたときは hang しない、ということが判明しました。

strace した結果をみると、
cron 下では timer thread が prctl の直後に poll を呼び出してそれが終わらないという挙動なのに対し、
端末ではそのあたりで context switch が起きている、ような気がします。

strace の結果を strace.cron.log と strace.term.log として添付します。

なにかわかるひとはいますでしょうか?

```
% ./miniruby -v
ruby 2.2.0dev (2014-05-09 trunk 45884) [x86_64-linux]
% uname -mrsv      
Linux 3.2.0-4-amd64 #1 SMP Debian 3.2.54-2 x86_64
% lsb_release -idrc
Distributor ID:	Debian
Description:	Debian GNU/Linux 7.5 (wheezy)
Release:	7.5
Codename:	wheezy
```

なお、コミッタならしばたさんに頼むとそのマシンにアカウントを作ってくれる模様です。


---Files--------------------------------
strace.cron.log (15.8 KB)
strace.term.log (17.6 KB)


-- 
https://bugs.ruby-lang.org/

^ permalink raw reply	[flat|nested] 15+ messages in thread

* [ruby-dev:48600] [ruby-trunk - Bug #9820] miniruby -e 'Process.kill(:INT, $$)' hang under cron
       [not found] <redmine.issue-9820.20140509080642@ruby-lang.org>
                   ` (11 preceding siblings ...)
  2014-10-05 23:37 ` [ruby-dev:48594] " akr
@ 2014-10-06 14:52 ` nagachika00
  2014-10-07 14:02 ` [ruby-dev:48606] " kazuki
  2014-10-15 15:19 ` [ruby-dev:48643] " nagachika00
  14 siblings, 0 replies; 15+ messages in thread
From: nagachika00 @ 2014-10-06 14:52 UTC (permalink / raw
  To: ruby-dev

Issue #9820 has been updated by Tomoyuki Chikanaga.

Backport changed from 2.0.0: DONTNEED, 2.1: DONE to 2.0.0: DONTNEED, 2.1: REQUIRED

----------------------------------------
Bug #9820: miniruby -e 'Process.kill(:INT, $$)' hang under cron
https://bugs.ruby-lang.org/issues/9820#change-49228

* Author: Akira Tanaka
* Status: Closed
* Priority: Normal
* Assignee: 
* Category: 
* Target version: 
* ruby -v: ruby 2.2.0dev (2014-05-09 trunk 45884) [x86_64-linux]
* Backport: 2.0.0: DONTNEED, 2.1: REQUIRED
----------------------------------------
最近、しばたさんが運用を始めた chkbuild で、
TestBeginEndBlock#test_propagate_signaled が hang しています。
http://chkbuild002.hsbt.org/chkbuild/ruby-trunk/log/20140509T060013Z.fail.html.gz

調べて再現コードを小さくしていった結果、

  miniruby -e 'Process.kill(:INT, $$)'

というのを cron から動かしたときは hang し、
端末から動かしたときは hang しない、ということが判明しました。

strace した結果をみると、
cron 下では timer thread が prctl の直後に poll を呼び出してそれが終わらないという挙動なのに対し、
端末ではそのあたりで context switch が起きている、ような気がします。

strace の結果を strace.cron.log と strace.term.log として添付します。

なにかわかるひとはいますでしょうか?

```
% ./miniruby -v
ruby 2.2.0dev (2014-05-09 trunk 45884) [x86_64-linux]
% uname -mrsv      
Linux 3.2.0-4-amd64 #1 SMP Debian 3.2.54-2 x86_64
% lsb_release -idrc
Distributor ID:	Debian
Description:	Debian GNU/Linux 7.5 (wheezy)
Release:	7.5
Codename:	wheezy
```

なお、コミッタならしばたさんに頼むとそのマシンにアカウントを作ってくれる模様です。


---Files--------------------------------
strace.cron.log (15.8 KB)
strace.term.log (17.6 KB)


-- 
https://bugs.ruby-lang.org/

^ permalink raw reply	[flat|nested] 15+ messages in thread

* [ruby-dev:48606] [ruby-trunk - Bug #9820] miniruby -e 'Process.kill(:INT, $$)' hang under cron
       [not found] <redmine.issue-9820.20140509080642@ruby-lang.org>
                   ` (12 preceding siblings ...)
  2014-10-06 14:52 ` [ruby-dev:48600] " nagachika00
@ 2014-10-07 14:02 ` kazuki
  2014-10-15 15:19 ` [ruby-dev:48643] " nagachika00
  14 siblings, 0 replies; 15+ messages in thread
From: kazuki @ 2014-10-07 14:02 UTC (permalink / raw
  To: ruby-dev

Issue #9820 has been updated by Kazuki Tsujimoto.


> なかださん
修正ありがとうございます。

ただ、gdbでProcess.kill(:TRAP, $$)によるシグナルを受けた後にcontinueすると
ruby_kill内のnative_cond_waitで待機したままになります。

Rubyでsignal handlerを設定していない場合にはruby_killではなくkillを呼び出すようにすればよさそうですが、
何か問題あるでしょうか。

~~~patch
diff --git a/signal.c b/signal.c
index 171f5ac..7a83dbc 100644
--- a/signal.c
+++ b/signal.c
@@ -487,7 +487,11 @@ rb_f_kill(int argc, const VALUE *argv)
 		  default:
 		    t = signal_ignored(sig);
 		    if (t) {
-			if (t < 0) ruby_kill(pid, sig);
+			if (t < 0) {
+			    if (kill(pid, sig) < 0) {
+				rb_sys_fail(0);
+			    }
+			}
 			break;
 		    }
 		    signal_enque(sig);
~~~


----------------------------------------
Bug #9820: miniruby -e 'Process.kill(:INT, $$)' hang under cron
https://bugs.ruby-lang.org/issues/9820#change-49256

* Author: Akira Tanaka
* Status: Closed
* Priority: Normal
* Assignee: 
* Category: 
* Target version: 
* ruby -v: ruby 2.2.0dev (2014-05-09 trunk 45884) [x86_64-linux]
* Backport: 2.0.0: DONTNEED, 2.1: REQUIRED
----------------------------------------
最近、しばたさんが運用を始めた chkbuild で、
TestBeginEndBlock#test_propagate_signaled が hang しています。
http://chkbuild002.hsbt.org/chkbuild/ruby-trunk/log/20140509T060013Z.fail.html.gz

調べて再現コードを小さくしていった結果、

  miniruby -e 'Process.kill(:INT, $$)'

というのを cron から動かしたときは hang し、
端末から動かしたときは hang しない、ということが判明しました。

strace した結果をみると、
cron 下では timer thread が prctl の直後に poll を呼び出してそれが終わらないという挙動なのに対し、
端末ではそのあたりで context switch が起きている、ような気がします。

strace の結果を strace.cron.log と strace.term.log として添付します。

なにかわかるひとはいますでしょうか?

```
% ./miniruby -v
ruby 2.2.0dev (2014-05-09 trunk 45884) [x86_64-linux]
% uname -mrsv      
Linux 3.2.0-4-amd64 #1 SMP Debian 3.2.54-2 x86_64
% lsb_release -idrc
Distributor ID:	Debian
Description:	Debian GNU/Linux 7.5 (wheezy)
Release:	7.5
Codename:	wheezy
```

なお、コミッタならしばたさんに頼むとそのマシンにアカウントを作ってくれる模様です。


---Files--------------------------------
strace.cron.log (15.8 KB)
strace.term.log (17.6 KB)


-- 
https://bugs.ruby-lang.org/

^ permalink raw reply related	[flat|nested] 15+ messages in thread

* [ruby-dev:48643] [ruby-trunk - Bug #9820] miniruby -e 'Process.kill(:INT, $$)' hang under cron
       [not found] <redmine.issue-9820.20140509080642@ruby-lang.org>
                   ` (13 preceding siblings ...)
  2014-10-07 14:02 ` [ruby-dev:48606] " kazuki
@ 2014-10-15 15:19 ` nagachika00
  14 siblings, 0 replies; 15+ messages in thread
From: nagachika00 @ 2014-10-15 15:19 UTC (permalink / raw
  To: ruby-dev

Issue #9820 has been updated by Tomoyuki Chikanaga.

Backport changed from 2.0.0: DONTNEED, 2.1: REQUIRED to 2.0.0: DONTNEED, 2.1: DONE

r47818 and r47832 were backported into `ruby_2_1` branch at r47956.

----------------------------------------
Bug #9820: miniruby -e 'Process.kill(:INT, $$)' hang under cron
https://bugs.ruby-lang.org/issues/9820#change-49470

* Author: Akira Tanaka
* Status: Closed
* Priority: Normal
* Assignee: 
* Category: 
* Target version: 
* ruby -v: ruby 2.2.0dev (2014-05-09 trunk 45884) [x86_64-linux]
* Backport: 2.0.0: DONTNEED, 2.1: DONE
----------------------------------------
最近、しばたさんが運用を始めた chkbuild で、
TestBeginEndBlock#test_propagate_signaled が hang しています。
http://chkbuild002.hsbt.org/chkbuild/ruby-trunk/log/20140509T060013Z.fail.html.gz

調べて再現コードを小さくしていった結果、

  miniruby -e 'Process.kill(:INT, $$)'

というのを cron から動かしたときは hang し、
端末から動かしたときは hang しない、ということが判明しました。

strace した結果をみると、
cron 下では timer thread が prctl の直後に poll を呼び出してそれが終わらないという挙動なのに対し、
端末ではそのあたりで context switch が起きている、ような気がします。

strace の結果を strace.cron.log と strace.term.log として添付します。

なにかわかるひとはいますでしょうか?

```
% ./miniruby -v
ruby 2.2.0dev (2014-05-09 trunk 45884) [x86_64-linux]
% uname -mrsv      
Linux 3.2.0-4-amd64 #1 SMP Debian 3.2.54-2 x86_64
% lsb_release -idrc
Distributor ID:	Debian
Description:	Debian GNU/Linux 7.5 (wheezy)
Release:	7.5
Codename:	wheezy
```

なお、コミッタならしばたさんに頼むとそのマシンにアカウントを作ってくれる模様です。


---Files--------------------------------
strace.cron.log (15.8 KB)
strace.term.log (17.6 KB)


-- 
https://bugs.ruby-lang.org/

^ permalink raw reply	[flat|nested] 15+ messages in thread

end of thread, other threads:[~2014-10-15 15:34 UTC | newest]

Thread overview: 15+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
     [not found] <redmine.issue-9820.20140509080642@ruby-lang.org>
2014-05-09  8:06 ` [ruby-dev:48203] [ruby-trunk - Bug #9820] [Open] miniruby -e 'Process.kill(:INT, $$)' hang under cron akr
2014-05-09 13:06 ` [ruby-dev:48206] [ruby-trunk - Bug #9820] " akr
2014-05-09 14:16 ` [ruby-dev:48207] " nobu
2014-05-09 14:35 ` [ruby-dev:48208] " nobu
2014-05-09 15:00 ` [ruby-dev:48209] " akr
2014-05-09 15:02 ` [ruby-dev:48210] " nobu
2014-05-09 15:05 ` [ruby-dev:48211] " akr
2014-05-10 16:10 ` [ruby-dev:48215] [ruby-trunk - Bug #9820] [Closed] " nobu
2014-07-02  7:36 ` [ruby-dev:48365] [ruby-trunk - Bug #9820] " usa
2014-09-01 17:17 ` [ruby-dev:48509] " nagachika00
2014-10-05 15:38 ` [ruby-dev:48592] " kazuki
2014-10-05 23:37 ` [ruby-dev:48594] " akr
2014-10-06 14:52 ` [ruby-dev:48600] " nagachika00
2014-10-07 14:02 ` [ruby-dev:48606] " kazuki
2014-10-15 15:19 ` [ruby-dev:48643] " nagachika00

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).