diff --git a/microscript/ILibDuktape_Helpers.c b/microscript/ILibDuktape_Helpers.c index 7569a82..9b8f376 100644 --- a/microscript/ILibDuktape_Helpers.c +++ b/microscript/ILibDuktape_Helpers.c @@ -765,6 +765,12 @@ void Duktape_SafeDestroyHeap(duk_context *ctx) duk_destroy_heap(ctx); + if (ctxd->fakechain != 0 && ctxd->chain != NULL) + { + ILibChain_DestroyEx(ctxd->chain); + ctxd->chain = NULL; + } + if (ILibLinkedList_GetCount(ctxd->threads) > 0) { #ifdef WIN32 @@ -797,6 +803,7 @@ void Duktape_SafeDestroyHeap(duk_context *ctx) #endif } ILibLinkedList_Destroy(ctxd->threads); + ILibMemory_Free(ctxd); } void *Duktape_GetChain(duk_context *ctx) diff --git a/microscript/ILibDuktape_Helpers.h b/microscript/ILibDuktape_Helpers.h index be15e48..9c0f888 100644 --- a/microscript/ILibDuktape_Helpers.h +++ b/microscript/ILibDuktape_Helpers.h @@ -55,6 +55,7 @@ typedef struct ILibDuktape_ContextData uint32_t apc_flags; #endif void *threads; + int fakechain; void *chain; void *user; }ILibDuktape_ContextData; diff --git a/microscript/ILibDuktape_ScriptContainer.c b/microscript/ILibDuktape_ScriptContainer.c index 09d4d15..fd3c4a1 100644 --- a/microscript/ILibDuktape_ScriptContainer.c +++ b/microscript/ILibDuktape_ScriptContainer.c @@ -2514,6 +2514,11 @@ int ILibDuktape_ScriptContainer_DebuggingOK(duk_context *ctx) duk_context *ILibDuktape_ScriptContainer_InitializeJavaScriptEngineEx3(duk_context *ctx, SCRIPT_ENGINE_SECURITY_FLAGS securityFlags, unsigned int executionTimeout, void *chain, char **argList, ILibSimpleDataStore *db, char *exePath, ILibProcessPipe_Manager pipeManager, ILibDuktape_HelperEvent exitHandler, void *exitUser) { void **timeoutKey = executionTimeout > 0 ? (void**)ILibMemory_Allocate(sizeof(void*), 0, NULL, NULL) : NULL; + if (chain == NULL) + { + duk_ctx_context_data(ctx)->fakechain = 1; + chain = ILibCreateChain(); + } duk_ctx_context_data(ctx)->chain = chain; duk_push_heap_stash(ctx); // [s]