From: Ian Main Date: 2000-02-23T17:18:48-08:00 Subject: [ruby-talk:01552] Re: Ruby thread scheduling buglet On Wed, Feb 23, 2000 at 04:49:57PM -0800, Ian Main wrote: [snip] > I think the reason is in rb_thread_schedule (): > > ... > > if (num_waiting_on_timer > 0) { > now = timeofday(); > FOREACH_THREAD_FROM(curr, th) { > if (th->wait_for & WAIT_TIME) { > if (th->delay <= now) { > th->delay = 0.0; > th->wait_for &= ~WAIT_TIME; > th->status = THREAD_RUNNABLE; > num_waiting_on_timer--; > next = th; > } else if (th->delay < delay) { > delay = th->delay; > } > } > } > END_FOREACH_FROM(curr, th); > } > [snip] > > I dunno what the perfect ruby-ish solution is so I'll leave that to you folk. > ok, I lied :) Looks like all you need to do is change: next = th; to if (!next) next = th; like the rest of the checks do.. This looks good to me as it creates fair scheduling. Ian