threads/150889: PTHREAD_MUTEX_INITIALIZER
+ pthread_mutex_destroy () == EINVAL
Jung-uk Kim
jkim at FreeBSD.org
Fri Sep 24 15:38:03 UTC 2010
On Friday 24 September 2010 09:26 am, John Baldwin wrote:
> On Thursday, September 23, 2010 11:48:40 pm Jung-uk Kim wrote:
> > On Thursday 23 September 2010 06:44 pm, Daniel Eischen wrote:
> > > You shouldn't have to call pthread_mutex_init() on a mutex
> > > initialized with PTHREAD_MUTEX_INITIALIZER. Our implementation
> > > should auto initialize the mutex when it is first used; if it
> > > doesn't, I think that is a bug.
> >
> > Ah, I see. I verified that libthr does it correctly. However,
> > that's a hack and it is far from real static allocation although
> > it should work pretty well in reality, IMHO. More over, it will
> > have a side-effect, i.e., any destroyed mutex may be resurrected
> > if it is used again. POSIX seems to say it should return EINVAL
> > when it happens. :-(
>
> I think the fix there is that we should put a different value
> ((void *)1 for example) into "destroyed" mutex objects than 0 so
> that destroyed mutexes can be differentiated from statically
> initialized mutexes. This would also allow us to properly return
> EBUSY, etc.
It would be nice if we had "uninitialized" as (void *)0 and "static
initializer" as (void *)1. IMHO, it looks more natural, i.e.,
"uninitialized" or "destroyed" one gets zero, and "dynamically
initialized" or "statically initialized" one gets non-zero. Can we
break the ABI for 9, maybe? ;-)
Jung-uk Kim
More information about the freebsd-threads
mailing list