lua-users home
lua-l archive

[Date Prev][Date Next][Thread Prev][Thread Next] [Date Index] [Thread Index]


Hi,

Adam D. Moss wrote:
> (gdb) print *L->top
> $2 = {tt = 5, value = {gc = 0x82bd658, p = 0x82bd658, n = 
> -1.9962463683308638, b = 137090648}}
> (gdb) print *mt
> $3 = {next = 0x82b1858, tt = 5 '\005', marked = 1 '\001', flags = 2 '\002', 
> lsizenode = 1 '\001', metatable = 0x0,
>   array = 0x0, node = 0x82af8f0, firstfree = 0x82af8f0, gclist = 0x82b9ca8, 
> sizearray = 0}

This one implies that the test in checkliveness() failed since isdead()
was true. I.e. mt->marked has WHITE0BIT set, but g->currentwhite has
WHITE1BIT set.

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. This is just a wild guess from me.

Someone with a deeper knowledge about the inner workings of the garbage
collector needs to take a look at this.

Bye,
     Mike