Skip to content

Squirrel scanline interrupt memory leak #2825

@Nomadoi

Description

@Nomadoi

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

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions