[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: Re: 5.1w1 aborts
- From: Mike Pall <mikelu-0409@...>
- Date: Fri, 10 Sep 2004 20:15:28 +0200
Hi,
Roberto Ierusalimschy wrote:
> From where did you get the value of `g->currentwhite'?
Logic dictates that the isdead part of checkliveness() must have failed
because all other parts can be verified from the debug log. I should have
said "g->currentwhite *must* have WHITE1BIT set for the assertion to fail".
> > After staring a while at lgc.c I think something is either wrong with
> > luaC_barrierf() or luaC_barrierback() or the use of these via the
> > luaC_*barrier* macros from lgc.h.
>
> Why do you think that? What sounds strange to you?
The only place where g->currentwhite flips is lgc.c:atomic(). The g->gcstate
logic looks ok to me, so the only possibility of introducing dead values
is a missing or wrong barrier function. At least this was my conclusion
after studying the code for a while. This is all under the assumption that
the code is not leaking pointers to free objects elsewhere.
I do not claim to have a complete understanding of the inner workings
of the GC, though. So treat this more as a hint for where to search than
a definitive answer.
Bye,
Mike