UliLua stack增长代码的bug
Hi,
unilua中stack 增长的代码,看过之后觉得有一个bug,那就是:程序不能够分配LuaConf.LUAI_MAXSTACK的栈大小空间。源代码如下: Do.cs: private void D_GrowStack(int n) { int size = Stack.Length; if(size > LuaConf.LUAI_MAXSTACK) D_Throw(ThreadStatus.LUA_ERRERR);
int needed = Top.Index + n + LuaDef.EXTRA_STACK;
int newsize = 2 * size;
if(newsize > LuaConf.LUAI_MAXSTACK)
{ newsize = LuaConf.LUAI_MAXSTACK; }
if(newsize < needed)
{ newsize = needed; }
if(newsize > LuaConf.LUAI_MAXSTACK)
{
D_ReallocStack(ERRORSTACKSIZE);
G_RunError("stack overflow");
}
else
{
D_ReallocStack(newsize);
}
}
private void D_ReallocStack(int size)
{
Utl.Assert(size < LuaConf.LUAI_MAXSTACK || size == ERRORSTACKSIZE);
var newStack = new StkId[size];
int i = 0;
for( ; i<Stack.Length; ++i) {
newStack[i] = Stack[i];
newStack[i].SetList(newStack);
}
for( ; i<size; ++i) {
newStack[i] = new StkId();
newStack[i].SetList(newStack);
newStack[i].SetIndex(i);
newStack[i].V.SetNilValue();
}
Top = newStack[Top.Index];
Stack = newStack;
StackLast = size - LuaDef.EXTRA_STACK;
}
这个代码里边,方法D_GrowStack是允许栈分配LUAI_MAXSTACK大小的,但是方法D_ReallocStack却不允许,因为这里 Utl.Assert(size < LuaConf.LUAI_MAXSTACK || size == ERRORSTACKSIZE); 只允许栈小于LUAI_MAXSTACK。
但是当我把这里的小于直接改为小于等于之后,程序一直转菊花,没反应。
所以想确认下,上述代码是否是一个bug,还是我用的unilua版本不对,我用的最新版。
如果这里确实是个bug,能否给一个解决方案。
期待回复!谢谢!
你好,我昨天给你发过一个邮件了,不知道你收到没有?
这个问题我昨天已经作了一个提交修正了。但是没有重现出你说的转菊花的情况
邮件原文如下:
我看了一下,确实应该是个 bug。
按理说 Utl.Assert(size < LuaConf.LUAI_MAXSTACK || size == ERRORSTACKSIZE); 改为 Utl.Assert(size <= LuaConf.LUAI_MAXSTACK || size == ERRORSTACKSIZE); 就行了。
我改了之后跑了一下 UniLua 自带的例子没有发现问题
不知道你说的程序一直转菊花是什么状况,能不能给我一个重现的办法?我查一下
你好,
刚看到你的邮件。这个转菊花是我们自己游戏内部的转菊花,我暂时也没想到办法如何让你复现。不过确实是把小于改为小于等于之后才出现的。你跑的时那个unilua的例子。
在 2014年12月7日 下午2:16,阿楠 [email protected]写道:
你好,我昨天给你发过一个邮件了,不知道你收到没有?
这个问题我昨天已经作了一个提交修正了。但是没有重现出你说的转菊花的情况
邮件原文如下:
我看了一下,确实应该是个 bug。
按理说 Utl.Assert(size < LuaConf.LUAI_MAXSTACK || size == ERRORSTACKSIZE); 改为 Utl.Assert(size <= LuaConf.LUAI_MAXSTACK || size == ERRORSTACKSIZE); 就行了。
我改了之后跑了一下 UniLua 自带的例子没有发现问题
不知道你说的程序一直转菊花是什么状况,能不能给我一个重现的办法?我查一下
— Reply to this email directly or view it on GitHub https://github.com/xebecnan/UniLua/issues/53#issuecomment-65928038.
嗯,能不能查一下是什么原因引起你的程序转菊花的?确认一下是不是 UniLua 的问题,是的话应该可以定位一下 UniLua 在什么状况下运行不正常,构造一个复现的情景的。
2014-12-07 14:19 GMT+08:00 honemle [email protected]:
你好,
刚看到你的邮件。这个转菊花是我们自己游戏内部的转菊花,我暂时也没想到办法如何让你复现。不过确实是把小于改为小于等于之后才出现的。你跑的时那个unilua的例子。
在 2014年12月7日 下午2:16,阿楠 [email protected]写道:
你好,我昨天给你发过一个邮件了,不知道你收到没有?
这个问题我昨天已经作了一个提交修正了。但是没有重现出你说的转菊花的情况
邮件原文如下:
我看了一下,确实应该是个 bug。
按理说 Utl.Assert(size < LuaConf.LUAI_MAXSTACK || size == ERRORSTACKSIZE); 改为 Utl.Assert(size <= LuaConf.LUAI_MAXSTACK || size == ERRORSTACKSIZE); 就行了。
我改了之后跑了一下 UniLua 自带的例子没有发现问题
不知道你说的程序一直转菊花是什么状况,能不能给我一个重现的办法?我查一下
— Reply to this email directly or view it on GitHub https://github.com/xebecnan/UniLua/issues/53#issuecomment-65928038.
— Reply to this email directly or view it on GitHub https://github.com/xebecnan/UniLua/issues/53#issuecomment-65928101.