KSE/ia64 broken

Daniel Eischen eischen at vigrid.com
Fri Nov 21 06:12:19 PST 2003


On Fri, 21 Nov 2003, David Xu wrote:
> Marcel Moolenaar wrote:
> 
> >Ok. More pieces of the puzzle. If I apply the attached patch (against
> >clean sources), I get the following:
> >
> >itanium% ./foo.bad
> >XXX:_thr_alloc: thread=200000000008a000, tcb=2000000000085000
> >XXX:_thr_alloc: thread=2000000000090000, tcb=2000000000090000
> >
> >The second _thr_alloc() is screwed up, in that malloc() returns
> >the same pointer twice. Hence thread->tcb points to thread itself
> >and we're clobbering our thread structure. 
> >
> I saw the same result.
> 
> >Since thr_spinlock.c
> >affects the locking of malloc(), we may have a race condition.
> >Note that forcing an upcall (by adding a _thread_printf() in the
> >code stream) seems to fix it. Does the UTS call malloc when first
> >invoked?
> >
> >  
> >
> No, we never call malloc in such case.  I suspect we do not
> fully restore thread's context. In kernel, I pass zero as third
> parameter to get_mcontext(), is it enough for ia64 ?

Well, we do call malloc at library initialization.  We malloc
initial KSE & thread, locks, and a few other things.  But this
is before __isthreaded gets set (so the spinlock shouldn't be
used).  All this is done before the first thread is created.

-- 
Dan Eischen



More information about the freebsd-threads mailing list