diff --git a/src/sbbs3/jsexec.c b/src/sbbs3/jsexec.c index ed8e2d794de0df13bbecd8e405419aea0c2328ea..3c94bc6f4ac6b119c9ef5ac31f87b0b86ae34218 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" @@ -631,18 +632,26 @@ static BOOL js_init(char** environ) ,&branch /* js */ ,NULL,INVALID_SOCKET /* client */ ,NULL /* server */ - ))==NULL) + ))==NULL) { + JS_EndRequest(js_cx); return(FALSE); + } /* Environment Object (associative array) */ - if(!js_CreateEnvObject(js_cx, js_glob, environ)) + if(!js_CreateEnvObject(js_cx, js_glob, environ)) { + JS_EndRequest(js_cx); return(FALSE); + } - if(js_CreateUifcObject(js_cx, js_glob)==NULL) + if(js_CreateUifcObject(js_cx, js_glob)==NULL) { + JS_EndRequest(js_cx); return(FALSE); + } - if(js_CreateConioObject(js_cx, js_glob)==NULL) + if(js_CreateConioObject(js_cx, js_glob)==NULL) { + JS_EndRequest(js_cx); return(FALSE); + } return(TRUE); } @@ -1055,6 +1064,7 @@ int main(int argc, char **argv, char** environ) fprintf(statfp,"\n"); result=js_exec(module,&argv[argn]); + JS_EndRequest(js_cx); if(result) lprintf(LOG_ERR,"!Module set exit_code: %ld", result); diff --git a/src/sbbs3/mailsrvr.c b/src/sbbs3/mailsrvr.c index d9b66f74fd8610d3354f3b5e4faa06832c3d7df5..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); @@ -1723,6 +1724,7 @@ js_mailproc(SOCKET sock, client_t* client, user_t* user } while(0); if(js_cx!=NULL) { + JS_EndRequest(js_cx); JS_DestroyContext(js_cx); } if(js_runtime!=NULL) diff --git a/src/sbbs3/services.c b/src/sbbs3/services.c index 9a939113dc394de2431f509a4c7a8acc8acedef8..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,11 +1262,13 @@ 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) { + JS_EndRequest(js_cx); JS_DestroyContext(js_cx); /* Free Context */ }