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