elf_end(): rwlock_fini() with a locked object

Mark Wielaard mjw at redhat.com
Sun Feb 26 12:44:38 UTC 2012


On Sun, Feb 26, 2012 at 12:11:43AM +0100, Kurt Roeckx wrote:
> In libelf/elf_end.c:244 you have:
>   rwlock_fini (elf->lock);
> 
> But this lock is always still held when you get there.
> 
> I see this:
> >  Results are undefined if pthread_rwlock_destroy()
> >  is called when any thread holds rwlock.
> [...]
> And I get this on Debian's kfreebsd port, resulting in an
> assertion failure.  I wonder why I'm not getting it on other
> ports.

The result is undefined and reporting EBUSY isn't required,
so an implementation is certainly allowed to just ignore any
locks still being held.

> Adding a "rwlock_unlock (elf->lock);" just in front of that
> line fixes the problem.

Yes, that looks correct.

Thanks,

Mark


More information about the elfutils-devel mailing list