Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 22 Feb 2010 23:34:11 -0800 (PST)
From:      Shrivatsan <shrivatsan_v@yahoo.com>
To:        freebsd-hackers@FreeBSD.org
Cc:        shrivatsan@gmail.com
Subject:   sched_lock mutex and sleepq_wait
Message-ID:  <986041.3700.qm@web112005.mail.gq1.yahoo.com>

next in thread | raw e-mail | index | archive | help
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);
     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


      



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?986041.3700.qm>