From 53862eb5e590fddc5cb5111ae425ff5aef865017 Mon Sep 17 00:00:00 2001
From: deuce <>
Date: Mon, 8 Dec 2008 20:13:06 +0000
Subject: [PATCH] Add being/end request calls. Enabling shared runtimes passes
 the initial touch testing.

---
 src/sbbs3/ftpsrvr.c     | 3 +++
 src/sbbs3/js_global.c   | 2 ++
 src/sbbs3/js_internal.c | 3 +++
 src/sbbs3/jsexec.c      | 2 ++
 src/sbbs3/mailsrvr.c    | 5 ++++-
 src/sbbs3/main.cpp      | 3 +++
 src/sbbs3/services.c    | 8 +++++++-
 src/sbbs3/websrvr.c     | 3 +++
 8 files changed, 27 insertions(+), 2 deletions(-)

diff --git a/src/sbbs3/ftpsrvr.c b/src/sbbs3/ftpsrvr.c
index ae2be3d3f2..5b2baf7656 100644
--- a/src/sbbs3/ftpsrvr.c
+++ b/src/sbbs3/ftpsrvr.c
@@ -483,6 +483,7 @@ js_initcx(JSRuntime* runtime, SOCKET sock, JSObject** glob, JSObject** ftp)
 
     if((js_cx = JS_NewContext(runtime, startup->js.cx_stack))==NULL)
 		return(NULL);
+	JS_BeginRequest(js_cx);
 
 	lprintf(LOG_DEBUG,"%04d JavaScript: Context created",sock);
 
@@ -516,6 +517,7 @@ js_initcx(JSRuntime* runtime, SOCKET sock, JSObject** glob, JSObject** ftp)
 	} while(0);
 
 	if(!success) {
+		JS_EndRequest(js_cx);
 		JS_DestroyContext(js_cx);
 		return(NULL);
 	}
@@ -4475,6 +4477,7 @@ static void ctrl_thread(void* arg)
 #ifdef JAVASCRIPT
 	if(js_cx!=NULL) {
 		lprintf(LOG_DEBUG,"%04d JavaScript: Destroying context",sock);
+		JS_EndRequest(js_cx);
 		JS_DestroyContext(js_cx);	/* Free Context */
 	}
 
diff --git a/src/sbbs3/js_global.c b/src/sbbs3/js_global.c
index 4746350cbb..456fbedf14 100644
--- a/src/sbbs3/js_global.c
+++ b/src/sbbs3/js_global.c
@@ -124,6 +124,7 @@ static void background_thread(void* arg)
 	js_EvalOnExit(bg->cx, bg->obj, &bg->branch);
 	js_enqueue_value(bg->cx, bg->msg_queue, result, NULL);
 	JS_DestroyScript(bg->cx, bg->script);
+	JS_EndRequest(bg->cx);
 	JS_DestroyContext(bg->cx);
 	jsrt_Release(bg->runtime);
 	free(bg);
@@ -262,6 +263,7 @@ js_load(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
 
 	    if((bg->cx = JS_NewContext(bg->runtime, JAVASCRIPT_CONTEXT_STACK))==NULL)
 			return(JS_FALSE);
+		JS_BeginRequest(bg->cx);
 
 		if((bg->obj=js_CreateCommonObjects(bg->cx
 				,p->cfg			/* common config */
diff --git a/src/sbbs3/js_internal.c b/src/sbbs3/js_internal.c
index bed2f398d7..114030057c 100644
--- a/src/sbbs3/js_internal.c
+++ b/src/sbbs3/js_internal.c
@@ -267,6 +267,7 @@ js_eval(JSContext *parent_cx, JSObject *parent_obj, uintN argc, jsval *argv, jsv
 
 	if((cx=JS_NewContext(JS_GetRuntime(parent_cx),JAVASCRIPT_CONTEXT_STACK))==NULL)
 		return(JS_FALSE);
+	JS_BeginRequest(cx);
 
 	/* Use the error reporter from the parent context */
 	reporter=JS_SetErrorReporter(parent_cx,NULL);
@@ -285,6 +286,7 @@ js_eval(JSContext *parent_cx, JSObject *parent_obj, uintN argc, jsval *argv, jsv
 
 	if((obj=JS_NewObject(cx, NULL, NULL, NULL))==NULL
 		|| !JS_InitStandardClasses(cx,obj)) {
+		JS_EndRequest(cx);
 		JS_DestroyContext(cx);
 		return(JS_FALSE);
 	}
@@ -294,6 +296,7 @@ js_eval(JSContext *parent_cx, JSObject *parent_obj, uintN argc, jsval *argv, jsv
 		JS_DestroyScript(cx, script);
 	}
 
+	JS_EndRequest(cx);
 	JS_DestroyContext(cx);
 
     return(JS_TRUE);
diff --git a/src/sbbs3/jsexec.c b/src/sbbs3/jsexec.c
index ed8e2d794d..bd2c51c624 100644
--- a/src/sbbs3/jsexec.c
+++ b/src/sbbs3/jsexec.c
@@ -618,6 +618,7 @@ static BOOL js_init(char** environ)
 
     if((js_cx = JS_NewContext(js_runtime, js_cx_stack))==NULL)
 		return(FALSE);
+	JS_BeginRequest(js_cx);
 
 	if(stack_limit)
 		fprintf(statfp,"JavaScript: Thread stack limit: %lu bytes\n"
@@ -1061,6 +1062,7 @@ int main(int argc, char **argv, char** environ)
 
 		fprintf(statfp,"\n");
 		fprintf(statfp,"JavaScript: Destroying context\n");
+		JS_EndRequest(js_cx);
 		JS_DestroyContext(js_cx);
 		fprintf(statfp,"JavaScript: Destroying runtime\n");
 		jsrt_Release(js_runtime);	
diff --git a/src/sbbs3/mailsrvr.c b/src/sbbs3/mailsrvr.c
index a1478fa0b2..dac1893012 100644
--- a/src/sbbs3/mailsrvr.c
+++ b/src/sbbs3/mailsrvr.c
@@ -1624,6 +1624,7 @@ js_mailproc(SOCKET sock, client_t* client, user_t* user
 
 		if((js_cx = JS_NewContext(js_runtime, startup->js.cx_stack))==NULL)
 			break;
+		JS_BeginRequest(js_cx);
 
 		JS_SetErrorReporter(js_cx, js_ErrorReporter);
 
@@ -1722,8 +1723,10 @@ js_mailproc(SOCKET sock, client_t* client, user_t* user
 
 	} while(0);
 
-	if(js_cx!=NULL)
+	if(js_cx!=NULL) {
+		JS_EndRequest(js_cx);
 		JS_DestroyContext(js_cx);
+	}
 	if(js_runtime!=NULL)
 		jsrt_Release(js_runtime);
 
diff --git a/src/sbbs3/main.cpp b/src/sbbs3/main.cpp
index 28d1ee420d..43a2b58bb5 100644
--- a/src/sbbs3/main.cpp
+++ b/src/sbbs3/main.cpp
@@ -1026,6 +1026,7 @@ bool sbbs_t::js_init(ulong* stack_frame)
 
     if((js_cx = JS_NewContext(js_runtime, startup->js.cx_stack))==NULL)
 		return(false);
+	JS_BeginRequest(js_cx);
 	
 	memset(&js_branch,0,sizeof(js_branch));
 	js_branch.limit = startup->js.branch_limit;
@@ -1078,6 +1079,7 @@ bool sbbs_t::js_init(ulong* stack_frame)
 	} while(0);
 
 	if(!success) {
+		JS_EndRequest(js_cx);
 		JS_DestroyContext(js_cx);
 		js_cx=NULL;
 		return(false);
@@ -3220,6 +3222,7 @@ sbbs_t::~sbbs_t()
 	/* Free Context */
 	if(js_cx!=NULL) {	
 		lprintf(LOG_DEBUG,"%s JavaScript: Destroying context",node);
+		JS_EndRequest(js_cx);
 		JS_DestroyContext(js_cx);
 		js_cx=NULL;
 	}
diff --git a/src/sbbs3/services.c b/src/sbbs3/services.c
index 2c8d04a5ad..8d468674f8 100644
--- a/src/sbbs3/services.c
+++ b/src/sbbs3/services.c
@@ -831,6 +831,7 @@ js_initcx(JSRuntime* js_runtime, SOCKET sock, service_client_t* service_client,
 
     if((js_cx = JS_NewContext(js_runtime, service_client->service->js.cx_stack))==NULL)
 		return(NULL);
+	JS_BeginRequest(js_cx);
 
     JS_SetErrorReporter(js_cx, js_ErrorReporter);
 
@@ -948,6 +949,7 @@ js_initcx(JSRuntime* js_runtime, SOCKET sock, service_client_t* service_client,
 
 
 	if(!success) {
+		JS_EndRequest(js_cx);
 		JS_DestroyContext(js_cx);
 		return(NULL);
 	}
@@ -1158,6 +1160,7 @@ static void js_service_thread(void* arg)
 		js_EvalOnExit(js_cx, js_glob, &service_client.branch);
 		JS_DestroyScript(js_cx, js_script);
 	}
+	JS_EndRequest(js_cx);
 	JS_DestroyContext(js_cx);	/* Free Context */
 
 	jsrt_Release(js_runtime);
@@ -1259,12 +1262,15 @@ static void js_static_service_thread(void* arg)
 		js_EvalOnExit(js_cx, js_glob, &service_client.branch);
 		JS_DestroyScript(js_cx, js_script);
 
+		JS_EndRequest(js_cx);
 		JS_DestroyContext(js_cx);	/* Free Context */
 		js_cx=NULL;
 	} while(!service->terminated && service->options&SERVICE_OPT_STATIC_LOOP);
 
-	if(js_cx!=NULL)
+	if(js_cx!=NULL) {
+		JS_EndRequest(js_cx);
 		JS_DestroyContext(js_cx);	/* Free Context */
+	}
 
 	jsrt_Release(js_runtime);
 
diff --git a/src/sbbs3/websrvr.c b/src/sbbs3/websrvr.c
index fda0bfda8d..42c2ab7437 100644
--- a/src/sbbs3/websrvr.c
+++ b/src/sbbs3/websrvr.c
@@ -4386,6 +4386,7 @@ js_initcx(http_session_t *session)
 
     if((js_cx = JS_NewContext(session->js_runtime, startup->js.cx_stack))==NULL)
 		return(NULL);
+	JS_BeginRequest(js_cx);
 
 	lprintf(LOG_INFO,"%04d JavaScript: Context created",session->socket);
 
@@ -4405,6 +4406,7 @@ js_initcx(http_session_t *session)
 									,&js_server_props			/* server */
 		))==NULL
 		|| !JS_DefineFunctions(js_cx, session->js_glob, js_global_functions)) {
+		JS_EndRequest(js_cx);
 		JS_DestroyContext(js_cx);
 		return(NULL);
 	}
@@ -5025,6 +5027,7 @@ void http_session_thread(void* arg)
 
 	if(session.js_cx!=NULL) {
 		lprintf(LOG_INFO,"%04d JavaScript: Destroying context",socket);
+		JS_EndRequest(session.js_cx);
 		JS_DestroyContext(session.js_cx);	/* Free Context */
 		session.js_cx=NULL;
 	}
-- 
GitLab