threads/150889: PTHREAD_MUTEX_INITIALIZER
+ pthread_mutex_destroy () == EINVAL
John Baldwin
jhb at freebsd.org
Fri Sep 24 13:28:53 UTC 2010
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.
--
John Baldwin
More information about the freebsd-threads
mailing list