]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
cleaning up stupid mess (lesson in regressions for Math`)
authorAnthony Minessale <anthony.minessale@gmail.com>
Thu, 20 Nov 2008 02:27:59 +0000 (02:27 +0000)
committerAnthony Minessale <anthony.minessale@gmail.com>
Thu, 20 Nov 2008 02:27:59 +0000 (02:27 +0000)
git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@10472 d0543943-73ff-0310-b7d9-9358b9ac24b2

src/include/switch_core.h
src/mod/languages/mod_spidermonkey/mod_spidermonkey.c
src/switch_core_rwlock.c
src/switch_core_state_machine.c

index 7f9efc6d9b4c9db94e5bcb1b693adb94ab844eec..7670435c3087d5a1f1a2524866e433ec8b8d4b3f 100644 (file)
@@ -320,6 +320,22 @@ SWITCH_DECLARE(switch_status_t) switch_core_session_read_lock(_In_ switch_core_s
 #endif
 
 
+#ifdef SWITCH_DEBUG_RWLOCKS
+SWITCH_DECLARE(switch_status_t) switch_core_session_perform_read_lock_hangup(_In_ switch_core_session_t *session, const char *file, const char *func, int line);
+#endif
+
+/*! 
+  \brief Acquire a read lock on the session
+  \param session the session to acquire from
+  \return success if it is safe to read from the session
+*/
+#ifdef SWITCH_DEBUG_RWLOCKS
+#define switch_core_session_read_lock(session) switch_core_session_perform_read_lock_hangup(session, __FILE__, __SWITCH_FUNC__, __LINE__)
+#else
+SWITCH_DECLARE(switch_status_t) switch_core_session_read_lock_hangup(_In_ switch_core_session_t *session);
+#endif
+
+
 #ifdef SWITCH_DEBUG_RWLOCKS
 SWITCH_DECLARE(void) switch_core_session_perform_write_lock(_In_ switch_core_session_t *session, const char *file, const char *func, int line);
 #endif
index 93dcf10e4686adec8a91a2b6e5109a554ed95fc2..2c0155b3f14b442b3c8dfb564b0cbd244126275d 100644 (file)
@@ -2727,7 +2727,7 @@ static JSObject *new_js_session(JSContext * cx, JSObject * obj, switch_core_sess
                (*jss)->stack_depth = 0;
                if ((JS_SetPrivate(cx, session_obj, *jss) &&
                         JS_DefineProperties(cx, session_obj, session_props) && JS_DefineFunctions(cx, session_obj, session_methods))) {
-                       if (switch_core_session_read_lock(session) != SWITCH_STATUS_SUCCESS) {
+                       if (switch_core_session_read_lock_hangup(session) != SWITCH_STATUS_SUCCESS) {
                                switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CRIT, "Read Lock Failure.\n");
                                free(*jss);
                                return NULL;
@@ -3508,8 +3508,9 @@ static void js_parse_and_execute(switch_core_session_t *session, const char *inp
 
                /* Emaculent conception of session object into the script if one is available */
                if (!(session && new_js_session(cx, javascript_global_object, session, &jss, "session", flags))) {
-                       switch_snprintf(buf, sizeof(buf), "~var session = false;");
+                       switch_snprintf(buf, sizeof(buf), "~var session = new Object();");
                        eval_some_js(buf, cx, javascript_global_object, &rval);
+                       return;
                }
                if (ro) {
                        new_request(cx, javascript_global_object, ro);
index a7cb9d77fe7ff1722f092df36d64fadf0083d1f8..93841e932e5f70b6e82806962a9b2bcaed727282 100644 (file)
@@ -63,6 +63,34 @@ SWITCH_DECLARE(switch_status_t) switch_core_session_read_lock(switch_core_sessio
        return status;
 }
 
+
+#ifdef SWITCH_DEBUG_RWLOCKS
+SWITCH_DECLARE(switch_status_t) switch_core_session_perform_read_lock_hangup(switch_core_session_t *session, const char *file, const char *func, int line)
+#else
+SWITCH_DECLARE(switch_status_t) switch_core_session_read_lock_hangup(switch_core_session_t *session)
+#endif
+{
+       switch_status_t status = SWITCH_STATUS_FALSE;
+
+       if (session->rwlock) {
+               if (switch_test_flag(session, SSF_DESTROYED) || switch_channel_get_state(session->channel) >= CS_DONE) {
+                       status = SWITCH_STATUS_FALSE;
+#ifdef SWITCH_DEBUG_RWLOCKS
+                       switch_log_printf(SWITCH_CHANNEL_ID_LOG, file, func, line, NULL, SWITCH_LOG_ERROR, "%s Read lock FAIL\n",
+                                                         switch_channel_get_name(session->channel));
+#endif
+               } else {
+                       status = (switch_status_t) switch_thread_rwlock_tryrdlock(session->rwlock);
+#ifdef SWITCH_DEBUG_RWLOCKS
+                       switch_log_printf(SWITCH_CHANNEL_ID_LOG, file, func, line, NULL, SWITCH_LOG_ERROR, "%s Read lock ACQUIRED\n",
+                                                         switch_channel_get_name(session->channel));
+#endif
+               }
+       }
+
+       return status;
+}
+
 #ifdef SWITCH_DEBUG_RWLOCKS
 SWITCH_DECLARE(void) switch_core_session_perform_write_lock(switch_core_session_t *session, const char *file, const char *func, int line)
 {
index a864a3bf624a8faca6816d821c4926f2529d1dd1..109d93bc0c52b46efa2269aad9abc41ee4df0224 100644 (file)
@@ -421,9 +421,10 @@ SWITCH_DECLARE(void) switch_core_session_run(switch_core_session_t *session)
                                                switch_channel_get_variables(session->channel, &stream.param_event);
                                                expanded = switch_channel_expand_variables(session->channel, arg);
                                                
-                                               switch_api_execute(cmd, expanded, use_session, &stream);
+
                                                switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Hangup Command %s(%s):\n%s\n", cmd, expanded,
                                                                                  switch_str_nil((char *) stream.data));
+                                               switch_api_execute(cmd, expanded, use_session, &stream);
                                                if (expanded != arg) {
                                                        switch_safe_free(expanded);
                                                }