From 386e65c65e4672df6d1f1b05296c3d03d38c3b35 Mon Sep 17 00:00:00 2001 From: Anthony Minessale Date: Tue, 15 Jan 2008 00:06:15 +0000 Subject: [PATCH] fix potential locking issue git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@7230 d0543943-73ff-0310-b7d9-9358b9ac24b2 --- .../languages/mod_spidermonkey/mod_spidermonkey.c | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/src/mod/languages/mod_spidermonkey/mod_spidermonkey.c b/src/mod/languages/mod_spidermonkey/mod_spidermonkey.c index 5744e91787..421fddafae 100644 --- a/src/mod/languages/mod_spidermonkey/mod_spidermonkey.c +++ b/src/mod/languages/mod_spidermonkey/mod_spidermonkey.c @@ -38,6 +38,7 @@ #include #endif static int foo = 0; +static switch_mutex_t *mutex; SWITCH_MODULE_LOAD_FUNCTION(mod_spidermonkey_load); @@ -3404,6 +3405,7 @@ static void js_parse_and_execute(switch_core_session_t *session, const char *inp JSContext *cx = NULL; jsval rval; + switch_mutex_lock(mutex); if ((cx = JS_NewContext(globals.rt, globals.gStackChunkSize))) { JS_BeginRequest(cx); @@ -3423,7 +3425,7 @@ static void js_parse_and_execute(switch_core_session_t *session, const char *inp } else { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CRIT, "Allocation Error!\n"); - return; + goto end; } script = input_code; @@ -3448,11 +3450,17 @@ static void js_parse_and_execute(switch_core_session_t *session, const char *inp eval_some_js(buf, cx, javascript_global_object, &rval); } } - + if (cx) { eval_some_js(script, cx, javascript_global_object, &rval); JS_DestroyContext(cx); } + + end: + switch_mutex_unlock(mutex); + + return; + } SWITCH_STANDARD_APP(js_dp_function) @@ -3579,6 +3587,8 @@ SWITCH_MODULE_LOAD_FUNCTION(mod_spidermonkey_load) curl_global_init(CURL_GLOBAL_ALL); + switch_mutex_init(&mutex, SWITCH_MUTEX_NESTED, pool); + /* indicate that the module should continue to be loaded */ return SWITCH_STATUS_SUCCESS; }