pthread_mutex_trylock and glib-2

Brian Fundakowski Feldman green at freebsd.org
Wed Sep 8 15:57:14 PDT 2004


On Tue, Sep 07, 2004 at 06:27:14PM -0700, Pascal Hofstee wrote:
> On Mon, 6 Sep 2004 15:12:08 -0700, Pascal Hofstee <caelian at gmail.com> wrote:
> > After a few hours of digging through both the glib-2 as well as the
> > beep-media-player sources i finally managed to figure out why
> > beep-media-player apprently crashes on startup when using libpthread,
> > but not when using libc_r.
> > 
> > i filed a bugreport against this problem on bugzilla.gnome.org ... in
> > the hope to get some feedback from glib-developers ...
> > 
> > http://bugzilla.gnome.org/show_bug.cgi?id=152009
> > 
> > The problem is with the actual return value of pthread_mutex_trylock
> > returning EDEADLK instead of EBUSY.
> > 
> > from what i have been able to glance from this previous discussion
> > regarding this particular subject
> > (http://lists.freebsd.org/pipermail/freebsd-threads/2004-January/001539.html)
> > 
> > pthread_mutex_trylock should behave identical to pthread_mutex_lock
> > except return immediately in case of a blocking mutex, which would
> > suggest EDEADLK as a possible return value.
> > 
> > This Seems to be the current implementation of both libpthread as well
> > as libthr ... with libc_r being the sole exception.
> > 
> > The pthread_mutex_trylock manpage however does not reflect this actual
> > implementation and only mentions EBUSY and EINVAL.
> > 
> > I was wondering assuming the implementation is actually correct if
> > this could be rectified in the pthread_mutex_trylock manpage ... and
> > if my assumption is wrong if the implementation could be changed to
> > reflect the manpage.
> > 
> > In the former case i will have to bug the glib-devs to change the
> > implementation of their pthread_mutex_trylock wrapper ... to also
> > check for EDEADLK.
> 
> I am hereby including an updated
> /usr/ports/devel/glib20/files/patch-gthread_gthread-posix.c
> 
> that includes the additional check for EDEADLK besides EBUSY in glib's
> g_mutex_trylock_posix_impl function.
> 
> With this fix applied to my installation of glib beep-media-player now
> works as expected with libpthread, and this is very likely to resolve
> similar behaviour with other ports that try to use glib's threading
> functions.
> 
> I CC-ed glib20 port-maintainer (gnome at FreeBSD.org) in the hope this
> (or appropriate alternative) fix makes it in time for 5.3-RELEASE.

FWIW, I had to fix a similar problem in mozilla/NSPR's codebase to make
the build with debugging code turned on work.  Well, I guess it was really
the same problem.

-- 
Brian Fundakowski Feldman                           \'[ FreeBSD ]''''''''''\
  <> green at FreeBSD.org                               \  The Power to Serve! \
 Opinions expressed are my own.                       \,,,,,,,,,,,,,,,,,,,,,,\


More information about the freebsd-hackers mailing list