[Freeswitch-svn] [commit] r7890 - freeswitch/trunk/src/mod/endpoints/mod_sofia

Freeswitch SVN anthm at freeswitch.org
Fri Mar 14 09:05:29 EDT 2008


Author: anthm
Date: Fri Mar 14 09:05:28 2008
New Revision: 7890

Modified:
   freeswitch/trunk/src/mod/endpoints/mod_sofia/mod_sofia.c
   freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia_presence.c

Log:
make event thread start once there is an event

Modified: freeswitch/trunk/src/mod/endpoints/mod_sofia/mod_sofia.c
==============================================================================
--- freeswitch/trunk/src/mod/endpoints/mod_sofia/mod_sofia.c	(original)
+++ freeswitch/trunk/src/mod/endpoints/mod_sofia/mod_sofia.c	Fri Mar 14 09:05:28 2008
@@ -1888,7 +1888,6 @@
 
 	switch_queue_create(&mod_sofia_globals.presence_queue, 500000, mod_sofia_globals.pool);
 	switch_queue_create(&mod_sofia_globals.mwi_queue, 500000, mod_sofia_globals.pool);
-	sofia_presence_event_thread_start();
 
 	if (config_sofia(0, NULL) != SWITCH_STATUS_SUCCESS) {
 		mod_sofia_globals.running = 0;

Modified: freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia_presence.c
==============================================================================
--- freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia_presence.c	(original)
+++ freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia_presence.c	Fri Mar 14 09:05:28 2008
@@ -485,16 +485,29 @@
 	switch_safe_free(user);
 }
 
+static int EVENT_THREAD_RUNNING = 0;
+static int EVENT_THREAD_STARTED = 0;
 
 void *SWITCH_THREAD_FUNC sofia_presence_event_thread_run(switch_thread_t *thread, void *obj)
 {
 	void *pop;
-	switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Event Thread Started\n");
+	int done = 0;
 
 	switch_mutex_lock(mod_sofia_globals.mutex);
-	mod_sofia_globals.threads++;
+	if (!EVENT_THREAD_RUNNING) {
+		EVENT_THREAD_RUNNING++;
+		mod_sofia_globals.threads++;
+	} else {
+		done = 1;
+	}
 	switch_mutex_unlock(mod_sofia_globals.mutex);
 
+	if (done) {
+		return NULL;
+	}
+
+	switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CONSOLE, "Event Thread Started\n");
+	
 	while (mod_sofia_globals.running == 1) {
 		int count = 0;
 		
@@ -541,8 +554,9 @@
 
 	switch_mutex_lock(mod_sofia_globals.mutex);
 	mod_sofia_globals.threads--;
+	EVENT_THREAD_RUNNING = EVENT_THREAD_STARTED = 0;
 	switch_mutex_unlock(mod_sofia_globals.mutex);
-
+	
 	return NULL;
 }
 
@@ -550,6 +564,19 @@
 {
 	switch_thread_t *thread;
 	switch_threadattr_t *thd_attr = NULL;
+	int done = 0;
+
+	switch_mutex_lock(mod_sofia_globals.mutex);
+	if (!EVENT_THREAD_STARTED) {
+		EVENT_THREAD_STARTED++;
+	} else {
+		done = 1;
+	}
+	switch_mutex_unlock(mod_sofia_globals.mutex);
+
+	if (done) {
+		return;
+	}
 
 	switch_threadattr_create(&thd_attr, mod_sofia_globals.pool);
 	switch_threadattr_detach_set(thd_attr, 1);
@@ -566,6 +593,10 @@
 	switch_event_dup(&cloned_event, event);
 	switch_assert(cloned_event);
 	switch_queue_push(mod_sofia_globals.presence_queue, cloned_event);
+
+	if (!EVENT_THREAD_STARTED) {
+		sofia_presence_event_thread_start();
+	}
 }
 
 void sofia_presence_mwi_event_handler(switch_event_t *event)
@@ -575,6 +606,10 @@
 	switch_event_dup(&cloned_event, event);
 	switch_assert(cloned_event);
 	switch_queue_push(mod_sofia_globals.mwi_queue, cloned_event);
+
+	if (!EVENT_THREAD_STARTED) {
+		sofia_presence_event_thread_start();
+	}
 }
 
 



More information about the Freeswitch-svn mailing list