Berkeley DB infinite sleep on Solaris [#3245]
alexk at demon.net
Tue Jan 9 13:12:08 UTC 2001
"David Schwartz" <davids at webmaster.com> writes:
> > The Solaris man page (_lwp_cond_signal) is explicit:
> > "Both functions should be called under the protection of the
> > same LWP mutex lock that is used with the LWP condition
> > variable being signaled. Otherwise, the condition variable
> > may be signalled between the test of the associated condi-
> > tion and blocking in _lwp_cond_wait(). This can cause an
> > infinite wait."
> This is flat-out incorrect. What it's suggesting is that the following can
> <-- signal can occur here and be lost
The problem is when the mutex is unlocked inside _lwp_cond_wait and
the then sleeps - there's no locking around this, so another thread
can get in lock the mutex, change the state of the condition variable,
unlock & signal before we go to sleep in cond_wait.
With pthread semantics I agree, it guarantees that you can hold or not
hold the mutex, with Solaris lwp this appears not to be true.
Alex Kiernan, Principal Engineer, Development, Thus PLC
More information about the inn-workers