From 05fbccb845018c91b935c89f0a2094da41a8682b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Deuc=D0=B5?= <shurd@sasktel.net> Date: Sun, 4 Apr 2021 22:30:19 -0400 Subject: [PATCH] Have js_execfile() save/restore callbacks This should allow callbacks to not interfere between (say) shells and doors. --- src/sbbs3/exec.cpp | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/src/sbbs3/exec.cpp b/src/sbbs3/exec.cpp index cd9e0e5a59..9e6f9b8f8b 100644 --- a/src/sbbs3/exec.cpp +++ b/src/sbbs3/exec.cpp @@ -560,6 +560,11 @@ long sbbs_t::js_execfile(const char *cmd, const char* startup_dir, JSObject* sco jsval old_js_argc = JSVAL_VOID; jsval rval; int32 result=0; + struct js_event_list *events; + struct js_runq_entry *rq_head; + struct js_runq_entry *rq_tail; + struct js_listener_entry *listeners; + if(js_cx == NULL) js_cx = this->js_cx; @@ -682,6 +687,14 @@ long sbbs_t::js_execfile(const char *cmd, const char* startup_dir, JSObject* sco #endif } js_PrepareToExecute(js_cx, js_glob, path, startup_dir, js_scope); + events = js_callback.events; + js_callback.events = NULL; + rq_head = js_callback.rq_head; + js_callback.rq_head = NULL; + rq_tail = js_callback.rq_tail; + js_callback.rq_tail = NULL; + listeners = js_callback.listeners; + js_callback.listeners = NULL; JS_ExecuteScript(js_cx, js_scope, js_script, &rval); js_handle_events(js_cx, &js_callback, &terminated); sys_status &=~ SS_ABORT; @@ -715,6 +728,11 @@ long sbbs_t::js_execfile(const char *cmd, const char* startup_dir, JSObject* sco JS_GC(js_cx); + js_callback.events = events; + js_callback.rq_head = rq_head; + js_callback.rq_tail = rq_tail; + js_callback.listeners = listeners; + JS_ENDREQUEST(js_cx); return(result); -- GitLab