-
-
Notifications
You must be signed in to change notification settings - Fork 557
Open
Description
When utilising scn() or bdr() under squirrel the program will fill up memory and slow down due to a missing pop.
`static void callSquirrelIntCallback(tic_mem* tic, s32 value, void* data, const char* name)
{
tic_core* core = (tic_core*)tic;
HSQUIRRELVM vm = core->currentVM;
if (vm)
{
sq_pushroottable(vm);
sq_pushstring(vm, name, -1);
if (SQ_SUCCEEDED(sq_get(vm, -2)))
{
sq_pushroottable(vm);
sq_pushinteger(vm, value);
if(SQ_FAILED(sq_call(vm, 2, SQFalse, SQTrue)))
{
sq_getlasterror(vm);
sq_tostring(vm, -1);
const SQChar* errorString = "unknown error";
sq_getstring(vm, -1, &errorString);
if (core->data)
core->data->error(core->data->data, errorString);
sq_pop(vm, 3); // error string, error and root table
}
}
else sq_poptop(vm);
}
}`
I have made the following adjustment to fix that however due to being amateurish i am not entirely sure if this is correct :
`static void callSquirrelIntCallback(tic_mem* tic, s32 value, void* data, const char* name)
{
tic_core* core = (tic_core*)tic;
HSQUIRRELVM vm = core->currentVM;
if (vm)
{
sq_pushroottable(vm);
sq_pushstring(vm, name, -1);
if (SQ_SUCCEEDED(sq_get(vm, -2)))
{
sq_pushroottable(vm);
sq_pushinteger(vm, value);
if(SQ_FAILED(sq_call(vm, 2, SQFalse, SQTrue)))
{
sq_getlasterror(vm);
sq_tostring(vm, -1);
const SQChar* errorString = "unknown error";
sq_getstring(vm, -1, &errorString);
if (core->data)
core->data->error(core->data->data, errorString);
sq_pop(vm, 3); // error string, error and root table
}
sq_poptop(vm);
}
sq_poptop(vm);
}
}`
Metadata
Metadata
Assignees
Labels
No labels