Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 5 Feb 2001 16:55:36 -0500 (EST)
From:      Daniel Eischen <eischen@vigrid.com>
To:        Alfred Perlstein <bright@wintelcom.net>
Cc:        "Paul D. Schmidt" <pds@uberhacker.org>, hackers@FreeBSD.ORG
Subject:   Re: known pthread bug?
Message-ID:  <Pine.SUN.3.91.1010205165143.8786A-100000@pcnet1.pcnet.com>
In-Reply-To: <20010205113055.T26076@fw.wintelcom.net>

next in thread | previous in thread | raw e-mail | index | archive | help
On Mon, 5 Feb 2001, Alfred Perlstein wrote:
> * Paul D. Schmidt <pds@uberhacker.org> [010205 11:15] wrote:
> > On Mon, Feb 05, 2001 at 12:59:37AM -0800, Alfred Perlstein wrote:
> > > * Paul D. Schmidt <pds@uberhacker.org> [010204 23:23] wrote:
> > 
> > > > Are there currently any known bugs with pthread_mutex_init
> > > > and pthread_cond_init returning 0, but pthread_cond_wait
> > > > returning EINVAL nonetheless?
> > > 
> > > Can you provide a code sample to replicate this and specify which
> > > version of FreeBSD you're using?
> > 
> > typedef struct cond_tag {
> >         long cond_id;
> >         char *name;
> >  
> >         pthread_mutex_t cond_mutex;
> >         pthread_cond_t sys_cond;
> > } cond_t;
> >  
> > void thread_cond_create(cond_t *cond)
> > {
> >         pthread_cond_init(&cond->sys_cond, NULL);
> >         pthread_mutex_init(&cond->cond_mutex, NULL);
> > }
> >  
> > void thread_cond_wait(cond_t *cond)
> > {
> >         pthread_cond_wait(&cond->sys_cond, &cond->cond_mutex);
> > }
> > 
> > pthread_cond_wait() is returning immediately with EINVAL, even though
> > printf debugging tells me that both the pthread_(cond|mutex)_init
> > functions returned 0 (which man tells me is success).
> > 
> > This is on FreeBSD 4.2-RELEASE.
> 
> 1) 4.2 RELEASE has known pthreads bugs, you should upgrade to -stable.
> 2) is cond->cond_mutex held when thread_cond_wait() is called?  if not
>    I'm pretty sure it needs to be.

Correct.  You must call pthread_cond_wait() with the mutex locked (as
specified by POSIX).  The whole point of pthread_cond_wait() is to
atomically unlock the mutex and wait for an event.  If the mutex isn't
locked, EINVAL is returned.

-- 
Dan Eischen


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?Pine.SUN.3.91.1010205165143.8786A-100000>