assert in _lock_acquire ?
Daniel Eischen
eischen at vigrid.com
Thu Sep 16 13:03:29 PDT 2004
On Thu, 16 Sep 2004, Bjoern A. Zeeb wrote:
> On Thu, 16 Sep 2004, Daniel Eischen wrote:
>
> > On Thu, 16 Sep 2004, Bjoern A. Zeeb wrote:
> >
> > > I am using a global mutex to serialize a longer debugging
> > > output amongst threads. As this is only used for internal
> > > debugging builds where I really want to see everything
> > > I do not care about performance etc.
> >
> > Where did you introduce the global mutex? In your application
> > or in libpthread or libc sources?
>
> application; initialized from main before any further threads started.
>
>
> > > ------ cut -------
> > > (gdb) bt full
> > > #0 _lock_acquire (lck=0x38, lu=0x80da034, prio=56) at /u1/src/src/RELENG_5/compile-20040914-1630/lib/libpthread/sys/lock.c:168
> > > i = 135110708
> > > lval = 672675788
> > > __func__ = "_lock_acquire"
> > > #1 0x08076151 in mutex_handoff (curthread=0x80ee000, mutex=0x80d8980) at /u1/src/src/RELENG_5/compile-20040914-1630/lib/libpthread/thread/thr_mutex.c:1586
> > > kmbx = (struct kse_mailbox *) 0x1
> >
> > The kse_mailbox has become corrupted. If you are using %gs for anything,
> > that could be the cause. %gs is reserved for the threads libraries.
>
> also lck=0x38 looked odd to me but this my be a result of corrupted
> kmbx.
>
> what is %gs btw ?
An i386 segment register. The older NVidia drivers used %gs and thus
could not work with libpthread (or libthr). Any messages from the
kernel about static LDT allocation are also hints that something
is using %gs. I suspect your application is using or calling something
that is changing %gs.
--
Dan Eischen
More information about the freebsd-threads
mailing list