Shrivatsan wrote:
Hi,
I am trying to understand how msleep() routine suspends the currently
executing thread. I see that msleep() calls sleepq_wait().
What I don't understand here is the way in which sched_lock mutex is
handled.
I took the following snippet from FreeBSD 6:
sleepq_wait(void *wchan)
{
MPASS(!(curthread->td_flags & TDF_SINTR));
mtx_lock_spin(&sched_lock);
sleepq_switch(wchan);
----we sleep here-----
some other thread runs, When it wakes up it magicall owns the
schedlock which it releases. then it sleeps and locks schedlock
again.A
----- we get run.. magically the schedlock is changed so that we
own it. now we return, maybe 5 minutes later and must free it.
mtx_unlock_spin(&sched_lock);
}
sched_lock mutex is held, and sleepq_switch() eventually calls
cpu_switch() which switches to a new thread.
I don't exactly understand when the sched_lock mutex is released.
Can someone please help me?
Thanks,
-shrivatsan
_______________________________________________
freebsd-hackers@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-hackers
To unsubscribe, send any mail to "freebsd-hackers-unsubscr...@freebsd.org"
_______________________________________________
freebsd-hackers@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-hackers
To unsubscribe, send any mail to "freebsd-hackers-unsubscr...@freebsd.org"