Re: mutex held in a thread which is cancelled stays busy

Konstantin Belousov <[email protected]>
Newsgroups gmane.os.freebsd.questions,gmane.os.freebsd.devel.threading
Message-ID <[email protected]>
On Tue, Aug 06, 2019 at 08:58:30PM -0400, Daniel Eischen wrote:
> 
> > On Aug 6, 2019, at 4:54 AM, Erich Dollansky <[email protected]> wrote:
> > 
> > Hi,
> > 
> > for testing purpose, I did the following.
> > 
> > Start a thread, initialise a mutex in a global variable, lock the mutex
> > and wait in that thread.
> > 
> > Wait in the main program until above's thread waits and cancel it.
> > 
> > Clean up behind the cancelled thread but leave intentional the mutex
> > locked.
> > 
> > I would have expected now to get an error like 'EOWNERDEAD' doing
> > operations with that mutex. But I get 'EBUSY' as the error.
> 
> Are you initializing the mutex as a robust mutex, via pthread_mutexattr_setrobust()?  Are you using _lock() or _trylock()?
> 
Robust mutexes only have special properties on the process termination.
They behave same as the normal mutexes if the owning thread is terminated.

> For _trylock(), you only get EOWNERDEAD for robust mutexes.  It seems that you should get EOWNERDEAD for _lock() in this case, so if that's what you're doing, it sounds like it might be a bug.
> 
> --
> DE
> _______________________________________________
> [email protected] mailing list
> https://lists.freebsd.org/mailman/listinfo/freebsd-threads
> To unsubscribe, send any mail to "[email protected]"
_______________________________________________
[email protected] mailing list
https://lists.freebsd.org/mailman/listinfo/freebsd-questions
To unsubscribe, send any mail to "[email protected]"
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.