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