diff --git a/src/sbbs3/ftpsrvr.c b/src/sbbs3/ftpsrvr.c index ae2be3d3f2d16785199d883b20adae6b9393f841..5b2baf76566373bb95bcd4a77a164ec08eb4d298 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 4746350cbb2299c7de10e5ae4ccc65b7a010fe43..456fbedf147a74cbd420696df34401178d2393ff 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 bed2f398d7f995e4776402b676f5fd3ec4bab94b..114030057c838c34eaf385059c30778f37d1cb2e 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 ed8e2d794de0df13bbecd8e405419aea0c2328ea..bd2c51c624a74bda487d7bd2f6fdcade9a013266 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 a1478fa0b2201a5812ccd5e45beb39e770e81e21..dac18930125f639fc0c15639183cc3e6a2fe50fa 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 28d1ee420d4c2a892611d43dea0c84a5f67d0596..43a2b58bb5486dcc699719380468046de56dc1f5 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 2c8d04a5ad5a8b401cb9e2985efa8a3cc4ec8f3b..8d468674f8adc72dfa72642d0a21a5445a962e57 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 fda0bfda8db515282437b751946c9a2ef3e491e9..42c2ab743758aa805e90104ab23bc516f4d6bbc0 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; }