Impossible to exit infinite while loop #197
review changes for 18aca45673 (r26209938)
This commit is contained in:
parent
18aca45673
commit
c90b3ba171
|
@ -1069,13 +1069,8 @@ static void checkForceExit(lua_State *lua, lua_Debug *luadebug)
|
|||
|
||||
tic_tick_data* tick = machine->data;
|
||||
|
||||
if(tick->hook)
|
||||
{
|
||||
tick->hook(tick->data);
|
||||
|
||||
if(tick->forceExit)
|
||||
if(tick->forceExit && tick->forceExit(tick->data))
|
||||
luaL_error(lua, "script execution was interrupted");
|
||||
}
|
||||
}
|
||||
|
||||
static void initAPI(tic_machine* machine)
|
||||
|
|
10
src/run.c
10
src/run.c
|
@ -178,14 +178,11 @@ static void preseed()
|
|||
#endif
|
||||
}
|
||||
|
||||
static void poll(void* data)
|
||||
static bool forceExit(void* data)
|
||||
{
|
||||
Run* run = (Run*)data;
|
||||
|
||||
while(pollEvent());
|
||||
|
||||
if (getStudioMode() != TIC_RUN_MODE)
|
||||
run->tickData.forceExit = true;
|
||||
return getStudioMode() != TIC_RUN_MODE;
|
||||
}
|
||||
|
||||
void initRun(Run* run, Console* console, tic_mem* tic)
|
||||
|
@ -207,8 +204,7 @@ void initRun(Run* run, Console* console, tic_mem* tic)
|
|||
.data = run,
|
||||
.exit = onExit,
|
||||
.preprocessor = processDoFile,
|
||||
.hook = poll,
|
||||
.forceExit = false,
|
||||
.forceExit = forceExit,
|
||||
},
|
||||
};
|
||||
|
||||
|
|
|
@ -45,19 +45,18 @@ typedef struct
|
|||
typedef void(*TraceOutput)(void*, const char*, u8 color);
|
||||
typedef void(*ErrorOutput)(void*, const char*);
|
||||
typedef void(*ExitCallback)(void*);
|
||||
typedef void(*HookCallback)(void*);
|
||||
typedef bool(*CheckForceExit)(void*);
|
||||
|
||||
typedef struct
|
||||
{
|
||||
TraceOutput trace;
|
||||
ErrorOutput error;
|
||||
ExitCallback exit;
|
||||
HookCallback hook;
|
||||
CheckForceExit forceExit;
|
||||
|
||||
u64 (*counter)();
|
||||
u64 (*freq)();
|
||||
u64 start;
|
||||
bool forceExit;
|
||||
|
||||
void (*preprocessor)(void* data, char* dst);
|
||||
|
||||
|
|
Loading…
Reference in New Issue