Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 9 Mar 1999 17:26:26 -0800
From:      John Plevyak <jplevyak@inktomi.com>
To:        dick@tar.com
Cc:        hackers@freebsd.org
Subject:   bug in linuxthreads for FreeBSD
Message-ID:  <19990309172626.A7182@proxydev.inktomi.com>

next in thread | raw e-mail | index | archive | help

I have been using the linuxthreads for FreeBSD port, and running
it under high stress.

It seems that there is a bug/race which triggers the ASSERT in queue.h.

Essentially the problem is that when a thread goes into
pthread_cond_timedwait (and hence pthread_cond_timedwait_relative)
there is a race between the timeout wakeup and the signal wakeup.

Here is the order of events which exhibits the bug:

T1: thread A goes into pthread_cond_timedwait_relative and puts
    itself on the cond->c_waiting queue.
T2: thread A wakes up from a timeout and blocks the restart signal
T3: (context switch) thread B triggers the conditional variable,
    and send the signal
T4: (context switch) thread A grabs the spinlock and tries
    to remove_from_queue() (which fails silently)
T5: thread A goes into pthread_cond_timedwait_relative again
    as soon as it unblocks the restart it is awoken (NOTE: it
    is still on cond->c_waiting.
T6: (another thread blocks on the condition variable, 
    so that th->p_nextwaiting != NULL)
T7: thread A tries to block on a mutex which sees that 
    self->p_nextwaiting != NULL and asserts.

The patch I am using unconditionally removes the thread from the
queue.  This does not prevent the thread from being woken up
extaneously, but it does prevent the ASSERT and corruption of
the p_nextwaiting lists.

This looks like it may be a general problem with linuxthreads,
and I am wondering if anyone else has seen it.

Also, there is no 'lock prefix' before the xchg in _atomic_lock.S which
will prevent the library from working correctly with SMP.

john

-- 
John Bradley Plevyak,    PhD,    jplevyak@inktomi.com,     PGP KeyID: 051130BD
Inktomi Corporation,  1900 S. Norfolk Street,  Suite 110,  San Mateo, CA 94403
W:(415)653-2830 F:(415)653-2801 P:(888)491-1332/5103192436.4911332@pagenet.net


To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-hackers" in the body of the message




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