[Ruby 1.9 - Bug #5155][Open] [BUG] pthread_cond_signal: Resource temporarily unavailable (EAGAIN)

Issue #5155 has been reported by Kenta M…


Bug #5155: [BUG] pthread_cond_signal: Resource temporarily unavailable
(EAGAIN)

Author: Kenta M.
Status: Open
Priority: Normal
Assignee:
Category: core
Target version: 1.9.2
ruby -v: ruby 1.9.2p290 (2011-07-09) [x86_64-darwin11.0.0]

1.9.2p290 に OS X 10.7 (Lion) で ruby-1.9.2 を使うには - ドレッシングのような
で公開したパッチを当て、
gcc-4.2 を使ってビルドした ruby を使用しています。

長い時間起動しっぱなしにしてあるプロセスが何らかのタイミングで以下のメッセージを吐いて止まります。
[BUG] pthread_cond_signal: Resource temporarily unavailable (EAGAIN)

止まる原因は、プロセスが長時間 (だいたい1日以上) ブロックされ続けた後、入力やシグナルを受け取って再度動き始めるタイミングです。
まだ何も調査してませんが、一応報告しておきます。

trunk で起きるかどうかも、まだ調べておりません。

Issue #5155 has been updated by Kenta M…

補足ですが、私のブログで公開しているパッチは、
#5074 でバックポート要請されているコミット (関数の引き数に volatile を付ける) をバックポートし、
コンパイラを gcc-4.2 を優先して使うようにするパッチを configure.in に当てているだけです。

ですから、ほとんど 1.9.2p290 と同じものだと考えて良いと思います。

Bug #5155: [BUG] pthread_cond_signal: Resource temporarily unavailable
(EAGAIN)

Author: Kenta M.
Status: Open
Priority: Normal
Assignee:
Category: core
Target version: 1.9.2
ruby -v: ruby 1.9.2p290 (2011-07-09) [x86_64-darwin11.0.0]

1.9.2p290 に OS X 10.7 (Lion) で ruby-1.9.2 を使うには - ドレッシングのような
で公開したパッチを当て、
gcc-4.2 を使ってビルドした ruby を使用しています。

長い時間起動しっぱなしにしてあるプロセスが何らかのタイミングで以下のメッセージを吐いて止まります。
[BUG] pthread_cond_signal: Resource temporarily unavailable (EAGAIN)

止まる原因は、プロセスが長時間 (だいたい1日以上) ブロックされ続けた後、入力やシグナルを受け取って再度動き始めるタイミングです。
まだ何も調査してませんが、一応報告しておきます。

trunk で起きるかどうかも、まだ調べておりません。

Issue #5155 has been updated by Motohiro KOSAKI.

Snow
Leopardのpthread_cond_signal()にはEAGAINを返すルートがないようなんですが、Lionから1つ出来てますね。


int
pthread_cond_signal_thread_np(pthread_cond_t ocond, pthread_t thread)
{
(snip)
if (((thread == 0) && (is_seqhigher((ucntval & PTHRW_COUNT_MASK),
(lcntval & PTHRW_COUNT_MASK)))) || is_seqhigher((scntval &
PTHRW_COUNT_MASK), (lcntval & PTHRW_COUNT_MASK))) {
/
since ucntval may be newer, just redo */
retry_count++;
if (retry_count > 8192) {
return(EAGAIN);
} else {
sched_yield();
goto retry;
}
}


8000回リトライしたら諦めてEAGAINという驚愕のコードに見えるので、たんにEAGAIN帰ってきたらもう一回
pthread_cond_signal()
するのがよさそう。リトライするときにusleep()するかどうかぐらいが悩みどころか


Bug #5155: [BUG] pthread_cond_signal: Resource temporarily unavailable
(EAGAIN)

Author: Kenta M.
Status: Open
Priority: Normal
Assignee:
Category: core
Target version: 1.9.2
ruby -v: ruby 1.9.2p290 (2011-07-09) [x86_64-darwin11.0.0]

1.9.2p290 に OS X 10.7 (Lion) で ruby-1.9.2 を使うには - ドレッシングのような
で公開したパッチを当て、
gcc-4.2 を使ってビルドした ruby を使用しています。

長い時間起動しっぱなしにしてあるプロセスが何らかのタイミングで以下のメッセージを吐いて止まります。
[BUG] pthread_cond_signal: Resource temporarily unavailable (EAGAIN)

止まる原因は、プロセスが長時間 (だいたい1日以上) ブロックされ続けた後、入力やシグナルを受け取って再度動き始めるタイミングです。
まだ何も調査してませんが、一応報告しておきます。

trunk で起きるかどうかも、まだ調べておりません。

Issue #5155 has been updated by Kenta M…

このようなパッチで如何でしょう?

Bug #5155: [BUG] pthread_cond_signal: Resource temporarily unavailable
(EAGAIN)

Author: Kenta M.
Status: Open
Priority: Normal
Assignee:
Category: core
Target version: 1.9.2
ruby -v: ruby 1.9.2p290 (2011-07-09) [x86_64-darwin11.0.0]

1.9.2p290 に OS X 10.7 (Lion) で ruby-1.9.2 を使うには - ドレッシングのような
で公開したパッチを当て、
gcc-4.2 を使ってビルドした ruby を使用しています。

長い時間起動しっぱなしにしてあるプロセスが何らかのタイミングで以下のメッセージを吐いて止まります。
[BUG] pthread_cond_signal: Resource temporarily unavailable (EAGAIN)

止まる原因は、プロセスが長時間 (だいたい1日以上) ブロックされ続けた後、入力やシグナルを受け取って再度動き始めるタイミングです。
まだ何も調査してませんが、一応報告しておきます。

trunk で起きるかどうかも、まだ調べておりません。

Issue #5155 has been updated by Yui NARUSE.

man ちゃんと更新しとけと Apple に Problem ID: 9894106 として報告しておきました。

Summary:
On Mac OS X 10.7 Lion, pthread_cond_signal(3) may return EAGAIN but man
doesn’t describe it.

Steps to Reproduce:
See pthread_cond_signal_thread_np of
http://www.opensource.apple.com/source/Libc/Libc-763.11/pthreads/pthread_cond.c
It is called by pthread_cond_signal and may returns EAGAIN.
But man
http://www.opensource.apple.com/source/Libc/Libc-763.11/pthreads/pthread_cond_signal.3
doesn’t describe it.
Note that Snow Leopard doesn’t return EAGAIN.

Bug #5155: [BUG] pthread_cond_signal: Resource temporarily unavailable
(EAGAIN)

Author: Kenta M.
Status: Open
Priority: Normal
Assignee:
Category: core
Target version: 1.9.2
ruby -v: ruby 1.9.2p290 (2011-07-09) [x86_64-darwin11.0.0]

1.9.2p290 に OS X 10.7 (Lion) で ruby-1.9.2 を使うには - ドレッシングのような
で公開したパッチを当て、
gcc-4.2 を使ってビルドした ruby を使用しています。

長い時間起動しっぱなしにしてあるプロセスが何らかのタイミングで以下のメッセージを吐いて止まります。
[BUG] pthread_cond_signal: Resource temporarily unavailable (EAGAIN)

止まる原因は、プロセスが長時間 (だいたい1日以上) ブロックされ続けた後、入力やシグナルを受け取って再度動き始めるタイミングです。
まだ何も調査してませんが、一応報告しておきます。

trunk で起きるかどうかも、まだ調べておりません。

Issue #5155 has been updated by Motohiro KOSAKI.

このようなパッチで如何でしょう?

僕的にはOKです


Bug #5155: [BUG] pthread_cond_signal: Resource temporarily unavailable
(EAGAIN)

Author: Kenta M.
Status: Open
Priority: Normal
Assignee:
Category: core
Target version: 1.9.2
ruby -v: ruby 1.9.2p290 (2011-07-09) [x86_64-darwin11.0.0]

1.9.2p290 に OS X 10.7 (Lion) で ruby-1.9.2 を使うには - ドレッシングのような
で公開したパッチを当て、
gcc-4.2 を使ってビルドした ruby を使用しています。

長い時間起動しっぱなしにしてあるプロセスが何らかのタイミングで以下のメッセージを吐いて止まります。
[BUG] pthread_cond_signal: Resource temporarily unavailable (EAGAIN)

止まる原因は、プロセスが長時間 (だいたい1日以上) ブロックされ続けた後、入力やシグナルを受け取って再度動き始めるタイミングです。
まだ何も調査してませんが、一応報告しておきます。

trunk で起きるかどうかも、まだ調べておりません。

Issue #5155 has been updated by Kenta M…

trunk と ruby_1_9_3 ブランチに取り込みます。
その後、このチケットを 1.9.2 向けの Backport に移行させます。

Bug #5155: [BUG] pthread_cond_signal: Resource temporarily unavailable
(EAGAIN)

Author: Kenta M.
Status: Open
Priority: Normal
Assignee:
Category: core
Target version: 1.9.2
ruby -v: ruby 1.9.2p290 (2011-07-09) [x86_64-darwin11.0.0]

1.9.2p290 に OS X 10.7 (Lion) で ruby-1.9.2 を使うには - ドレッシングのような
で公開したパッチを当て、
gcc-4.2 を使ってビルドした ruby を使用しています。

長い時間起動しっぱなしにしてあるプロセスが何らかのタイミングで以下のメッセージを吐いて止まります。
[BUG] pthread_cond_signal: Resource temporarily unavailable (EAGAIN)

止まる原因は、プロセスが長時間 (だいたい1日以上) ブロックされ続けた後、入力やシグナルを受け取って再度動き始めるタイミングです。
まだ何も調査してませんが、一応報告しておきます。

trunk で起きるかどうかも、まだ調べておりません。