mirror of https://github.com/rusefi/lua.git
several bugs for Lua 5.0 + new format for bug entries
This commit is contained in:
parent
91bf77534c
commit
d66198719d
158
bugs
158
bugs
|
@ -1,4 +1,4 @@
|
||||||
|
--[[
|
||||||
** lua.stx / llex.c
|
** lua.stx / llex.c
|
||||||
Tue Dec 2 10:45:48 EDT 1997
|
Tue Dec 2 10:45:48 EDT 1997
|
||||||
>> BUG: "lastline" was not reset on function entry, so debug information
|
>> BUG: "lastline" was not reset on function entry, so debug information
|
||||||
|
@ -334,3 +334,159 @@ Thu Mar 20 11:40:12 EST 2003
|
||||||
>> zio mixes a 255 as first char in a buffer with EOZ
|
>> zio mixes a 255 as first char in a buffer with EOZ
|
||||||
(by lhf; since 5.0a)
|
(by lhf; since 5.0a)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
--]]
|
||||||
|
-----------------------------------------------------------------
|
||||||
|
-- Lua 5.0 (final)
|
||||||
|
|
||||||
|
Bug{
|
||||||
|
what = [[lua_closethread exists only in the manual]],
|
||||||
|
report = [[by Nguyen Binh, 28/04/2003]],
|
||||||
|
patch = [[no patch; the manual is wrong]],
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Bug{
|
||||||
|
what = [[attempt to resume a running coroutine crashes Lua]],
|
||||||
|
example = [[
|
||||||
|
function co_func (current_co)
|
||||||
|
coroutine.resume(co)
|
||||||
|
end
|
||||||
|
co = coroutine.create(co_func)
|
||||||
|
coroutine.resume(co)
|
||||||
|
coroutine.resume(co) --> seg. fault
|
||||||
|
]],
|
||||||
|
report = [[by Alex Bilyk, 09/05/2003]],
|
||||||
|
patch = [[???]],
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Bug{
|
||||||
|
what = [[file:close cannot be called without a file. (results in seg fault)]],
|
||||||
|
example = [[
|
||||||
|
> io.stdin.close() -- correct call shold be io.stdin:close()
|
||||||
|
]],
|
||||||
|
report = [[by Tuomo Valkonen, 27/05/2003]],
|
||||||
|
patch = [[
|
||||||
|
* liolib.c:
|
||||||
|
161c161
|
||||||
|
< if (lua_isnone(L, 1)) {
|
||||||
|
---
|
||||||
|
> if (lua_isnone(L, 1) && lua_type(L, lua_upvalueindex(1)) == LUA_TTABLE) {
|
||||||
|
]], --}}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Bug{
|
||||||
|
what = [[C functions also may have stacks larger than current top]],
|
||||||
|
example = [[
|
||||||
|
Must recompile lua with a change in lua.c and with lua_assert defined:
|
||||||
|
* lua.c:
|
||||||
|
381a382
|
||||||
|
> lua_checkstack(l, 1000);
|
||||||
|
]],
|
||||||
|
report = [[Alex Bilyk, 09/06/2003]],
|
||||||
|
patch = [[
|
||||||
|
* lgc.c:
|
||||||
|
247c247
|
||||||
|
< if (!(ci->state & CI_C) && lim < ci->top)
|
||||||
|
---
|
||||||
|
> if (lim < ci->top)
|
||||||
|
]],
|
||||||
|
}
|
||||||
|
|
||||||
|
Bug{
|
||||||
|
what = [[`pc' address is invalidated when a coroutine is suspended]],
|
||||||
|
example = [[
|
||||||
|
function g(x)
|
||||||
|
coroutine.yield(x)
|
||||||
|
end
|
||||||
|
|
||||||
|
function f (i)
|
||||||
|
debug.sethook(print, "l")
|
||||||
|
for j=1,1000 do
|
||||||
|
g(i+j)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
co = coroutine.wrap(f)
|
||||||
|
co(10)
|
||||||
|
pcall(co)
|
||||||
|
pcall(co)
|
||||||
|
]],
|
||||||
|
report = [[Nick Trout, 07/07/2003]],
|
||||||
|
patch = [[
|
||||||
|
* lvm.c:
|
||||||
|
402d401
|
||||||
|
< L->ci->u.l.pc = &pc;
|
||||||
|
405a405
|
||||||
|
> L->ci->u.l.pc = &pc;
|
||||||
|
676,678c676
|
||||||
|
< lua_assert(ci->u.l.pc == &pc &&
|
||||||
|
< ttisfunction(ci->base - 1) &&
|
||||||
|
< (ci->state & CI_SAVEDPC));
|
||||||
|
---
|
||||||
|
> lua_assert(ttisfunction(ci->base - 1) && (ci->state & CI_SAVEDPC));
|
||||||
|
]]
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Bug{
|
||||||
|
what = [[userdata to be collected still counts into new GC threshold,
|
||||||
|
increasing memory consumption]],
|
||||||
|
report = [[Roberto, 25/07/2003]],
|
||||||
|
example = [[
|
||||||
|
a = newproxy(true)
|
||||||
|
getmetatable(a).__gc = function () end
|
||||||
|
for i=1,10000000 do
|
||||||
|
newproxy(a)
|
||||||
|
if math.mod(i, 10000) == 0 then print(gcinfo()) end
|
||||||
|
end
|
||||||
|
]],
|
||||||
|
patch = [[
|
||||||
|
*lgc.h:
|
||||||
|
18c18
|
||||||
|
< void luaC_separateudata (lua_State *L);
|
||||||
|
---
|
||||||
|
> size_t luaC_separateudata (lua_State *L);
|
||||||
|
|
||||||
|
*lgc.c:
|
||||||
|
113c113,114
|
||||||
|
< void luaC_separateudata (lua_State *L) {
|
||||||
|
---
|
||||||
|
> size_t luaC_separateudata (lua_State *L) {
|
||||||
|
> size_t deadmem = 0;
|
||||||
|
127a129
|
||||||
|
> deadmem += sizeudata(gcotou(curr)->uv.len);
|
||||||
|
136a139
|
||||||
|
> return deadmem;
|
||||||
|
390c393
|
||||||
|
< static void checkSizes (lua_State *L) {
|
||||||
|
---
|
||||||
|
> static void checkSizes (lua_State *L, size_t deadmem) {
|
||||||
|
400c403
|
||||||
|
< G(L)->GCthreshold = 2*G(L)->nblocks; /* new threshold */
|
||||||
|
---
|
||||||
|
> G(L)->GCthreshold = 2*G(L)->nblocks - deadmem; /* new threshold */
|
||||||
|
454c457,458
|
||||||
|
< static void mark (lua_State *L) {
|
||||||
|
---
|
||||||
|
> static size_t mark (lua_State *L) {
|
||||||
|
> size_t deadmem;
|
||||||
|
467c471
|
||||||
|
< luaC_separateudata(L); /* separate userdata to be preserved */
|
||||||
|
---
|
||||||
|
> deadmem = luaC_separateudata(L); /* separate userdata to be preserved */
|
||||||
|
475a480
|
||||||
|
> return deadmem;
|
||||||
|
480c485
|
||||||
|
< mark(L);
|
||||||
|
---
|
||||||
|
> size_t deadmem = mark(L);
|
||||||
|
482c487
|
||||||
|
< checkSizes(L);
|
||||||
|
---
|
||||||
|
> checkSizes(L, deadmem);
|
||||||
|
]]
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue