lua-users home
lua-l archive

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


Roberto Ierusalimschy wrote:
#2  0x4017cbf8 in abort () from /lib/libc.so.6
#3  0x080e0378 in lua_getmetatable (L=0x81cbb48, objindex=1) at lapi.c:558
#4  0x080f5bd9 in luaB_getmetatable (L=0x81cbb48) at lbaselib.c:94
[...]

Can you repeat that abort? If so, please send the following information:

- print *mt        (as you did before)
- print *L->l_G    (the global state)
- print obj->value.gc.h   (table being accessed)

No problem...

mungo: lapi.c:558: lua_getmetatable: Assertion `!(((i_o)->tt) >= 4) || ((((i_o)->tt) == (i_o)->value.gc->gch.tt) && !(((i_o)->value.gc)->gch.marked & ((L->l_G)->currentwhite ^ ((1<<(0)) | (1<<(1))))))' failed.
[...]
#4  0x080d83f4 in lua_getmetatable (L=0x81c7a08, objindex=1) at lapi.c:558
#5  0x080eebf1 in luaB_getmetatable (L=0x81c7a08) at lbaselib.c:94
#6  0x080db876 in luaD_precall (L=0x81c7a08, func=0x81eb0c8, nresults=1) at ldo.c:282
#7  0x080e8bf3 in luaV_execute (L=0x81c7a08, nexeccalls=4) at lvm.c:592
[...]
(gdb) frame 4
#4  0x080d83f4 in lua_getmetatable (L=0x81c7a08, objindex=1) at lapi.c:558
558         sethvalue(L, L->top, mt);
(gdb) print *mt
$1 = {next = 0x82aeba8, tt = 5 '\005', marked = 2 '\002', flags = 2 '\002', lsizenode = 1 '\001', metatable = 0x0,
  array = 0x0, node = 0x82b0160, firstfree = 0x82b0160, gclist = 0x81c7898, sizearray = 0}
(gdb) print *L->l_G
$2 = {strt = {hash = 0x82a1ec8, nuse = 1383, size = 2048}, realloc = 0x80ee866 <l_alloc>, ud = 0x0,
  currentwhite = 1 '\001', gcstate = 2 '\002', gcgenerational = 0 '\0', rootgc = 0x82b1200, firstudata = 0x81c83e0,
  sweepgc = 0x81c7a7c, sweepstrgc = 1794, gray = 0x0, grayagain = 0x81c7a08, weak = 0x81dbe78, tmudata = 0x0,
  buff = {
    buffer = 0x8288740 "Loading module vector3...y...texture GL_ARB_fragment_program GL_ARB_fragment_program_shadow GL_ARB_fragment_shader GL_ARB_imaging GL_ARB_multisample GL_ARB_multitexture GL_ARB_occlusion_query GL_ARB_p"...,
    n = 0, buffsize = 584}, GCthreshold = 305429, totalbytes = 304429, estimate = 304429, prevestimate = 60490,
  panic = 0x80ee8a2 <panic>, _registry = {tt = 5, value = {gc = 0x81c8000, p = 0x81c8000,
      n = 6.723517242339154e-316, b = 136085504}}, mainthread = 0x81c7a08, dummynode = {{i_key = {tt = 0, value = {
          gc = 0x81e4e10, p = 0x81e4e10, n = 8.5552767783215961e-314, b = 136203792}}, i_val = {tt = 0, value = {
          gc = 0x0, p = 0x0, n = 0, b = 0}}, next = 0x0}}, tmname = {0x81c82b0, 0x81c82d0, 0x81c82f0, 0x81c8310,
    0x81c8330, 0x81c8350, 0x81c8508, 0x81c8528, 0x81c8548, 0x81c8568, 0x81c8588, 0x81c85a8, 0x81c85c8, 0x81c85e8,
    0x81c8608}}
(gdb) print obj->value.gc.h
$3 = {next = 0x81c83e0, tt = 5 '\005', marked = 0 '\0', flags = 0 '\0', lsizenode = 8 '\b', metatable = 0x82a6a60,
  array = 0x0, node = 0x8297ce8, firstfree = 0x82992e4, gclist = 0x81d0db8, sizearray = 0}

This is completely reproducable, so if you would like more info then
please ask.
Thanks,
--Adam