From 9d2fe9b2b0b85e14b3938e7da1a51f8f43b76b1d Mon Sep 17 00:00:00 2001 From: Bryan Roe Date: Mon, 15 Feb 2021 22:57:46 -0800 Subject: [PATCH] Fixed edge case bug where childprocess.waitExit() called during promise.waitExit() would cause event loop to prematurely exit. --- microscript/ILibDuktape_ChildProcess.c | 7 +++++-- microscript/ILibDuktape_ScriptContainer.c | 2 +- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/microscript/ILibDuktape_ChildProcess.c b/microscript/ILibDuktape_ChildProcess.c index 90a8c8d..4e164c4 100644 --- a/microscript/ILibDuktape_ChildProcess.c +++ b/microscript/ILibDuktape_ChildProcess.c @@ -204,8 +204,11 @@ duk_ret_t ILibDuktape_ChildProcess_waitExit(duk_context *ctx) return(ILibDuktape_Error(ctx, "Cannot waitExit() because JS Engine is exiting")); } - duk_push_int(ctx, 1); // [spawnedProcess][flag] - duk_put_prop_string(ctx, -2, "\xFF_WaitExit"); // [spawnedProcess] + if (ILibChain_GetContinuationState(chain) != ILibChain_ContinuationState_CONTINUE) + { + duk_push_int(ctx, 1); // [spawnedProcess][flag] + duk_put_prop_string(ctx, -2, "\xFF_WaitExit"); // [spawnedProcess] + } void *mods[] = { ILibGetBaseTimer(Duktape_GetChain(ctx)), Duktape_GetPointerProperty(ctx, -1, ILibDuktape_ChildProcess_Manager), ILibDuktape_Process_GetSignalListener(ctx) }; #ifdef WIN32 diff --git a/microscript/ILibDuktape_ScriptContainer.c b/microscript/ILibDuktape_ScriptContainer.c index db25eb2..8fa8bd3 100644 --- a/microscript/ILibDuktape_ScriptContainer.c +++ b/microscript/ILibDuktape_ScriptContainer.c @@ -1610,7 +1610,7 @@ void ILibDuktape_ScriptContainer_Engine_free(void *udata, void *ptr) { size_t sz = ptr == NULL ? 0 : ILibMemory_Size(ptr); - if (ptr != NULL) + if (ptr != NULL && ILibMemory_CanaryOK(ptr)) { ILibDuktape_ScriptContainer_TotalAllocations -= ILibMemory_Size(ptr); ILibMemory_SecureZero(ptr, sz);