Backport #8063

r39681 - use poll() instead of select(). のバックポート

Added by Motohiro KOSAKI about 1 year ago. Updated about 1 year ago.

[ruby-dev:47154]
Status:Closed
Priority:Normal
Assignee:Tomoyuki Chikanaga

Description

現状、1.9.3と2.0にはファイルを FDSETSIZE 以上開いた状況でfork等によりタイマースレッドの生成が走ると、タイマースレッド内の
FD
SET()でメモリを壊しています。
または、2.0でLinux、だと -DFORTIFYSOURCE=2 でコンパイルされているのでメモリ壊す代わりにランタイムチェックでabortするはず。
UbuntuだとデフォルトでFORITIFYされているので、1.9.3でもabortかな。

よって、修正である r39681をバックポートしてもらいたく。

Associated revisions

Revision 39726
Added by Tomoyuki Chikanaga about 1 year ago

merge revision(s) 39680,39681: [Backport #8063]

* thread_pthread.c (USE_SLEEPY_TIMER_THREAD): use more accurate
  ifdef condtions.

* thread_pthread.c (timer_thread_sleep): use poll() instead of
  select(). select doesn't work if timer_thread_pipe[0] is
  greater than FD_SETSIZE.

* thread_pthread.c (USE_SLEEPY_TIMER_THREAD): add a dependency
  against poll.

History

#1 Updated by Tomoyuki Chikanaga about 1 year ago

r39681 のために r39680 も入れないときれいに入らないので、まとめてバックポートします。

#2 Updated by Tomoyuki Chikanaga about 1 year ago

  • Status changed from Assigned to Closed
  • % Done changed from 0 to 100

This issue was solved with changeset r39726.
Motohiro, thank you for reporting this issue.
Your contribution to Ruby is greatly appreciated.
May Ruby be with you.


merge revision(s) 39680,39681: [Backport #8063]

* thread_pthread.c (USE_SLEEPY_TIMER_THREAD): use more accurate
  ifdef condtions.

* thread_pthread.c (timer_thread_sleep): use poll() instead of
  select(). select doesn't work if timer_thread_pipe[0] is
  greater than FD_SETSIZE.

* thread_pthread.c (USE_SLEEPY_TIMER_THREAD): add a dependency
  against poll.

Also available in: Atom PDF