Ruby Issue Tracking System: Issues
https://redmine.ruby-lang.org/
https://redmine.ruby-lang.org/favicon.ico?1711330511
2009-10-26T22:55:46Z
Ruby Issue Tracking System
Redmine
Backport187 - Backport #2277 (Closed): Patch: Fix high CPU usage on Kernel#select
https://redmine.ruby-lang.org/issues/2277
2009-10-26T22:55:46Z
zakaria (Zakaria Haris)
z4k4ri4@gmail.com
<p>=begin<br>
This bug brought my server down two times.<br>
While my patch for p111 it still exist in p287.</p>
<p>diff -ru ruby-1.8.6-p111.orig/io.c ruby-1.8.6-p111/io.c<br>
--- ruby-1.8.6-p111.orig/io.c Tue May 22 23:28:10 2007<br>
+++ ruby-1.8.6-p111/io.c Sun Aug 30 19:08:09 2009<br>
@@ -4802,12 +4802,12 @@<br>
if (!pending && n == 0) return Qnil; /* returns nil on timeout */</p>
<pre><code> res = rb_ary_new2(3);
</code></pre>
<ul>
<li>rb_ary_push(res, rp?rb_ary_new():rb_ary_new2(0));</li>
</ul>
<ul>
<li>
<p>rb_ary_push(res, (rp||pending)?rb_ary_new():rb_ary_new2(0));<br>
rb_ary_push(res, wp?rb_ary_new():rb_ary_new2(0));<br>
rb_ary_push(res, ep?rb_ary_new():rb_ary_new2(0));</p>
<p>if (interrupt_flag == 0) {</p>
</li>
</ul>
<ul>
<li>if (rp) {</li>
</ul>
<ul>
<li>if (rp || pending) {<br>
list = RARRAY(res)->ptr[0];<br>
for (i=0; i< RARRAY(read)->len; i++) {<br>
GetOpenFile(rb_io_get_io(RARRAY(read)->ptr[i]), fptr);<br>
=end</li>
</ul>