]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
skypopen: fixed crash on closing XDisplay before is used by interface shutdown/remove
authorGiovanni Maruzzelli <gmaruzz@gmail.com>
Tue, 26 Oct 2010 11:06:05 +0000 (06:06 -0500)
committerGiovanni Maruzzelli <gmaruzz@gmail.com>
Wed, 27 Oct 2010 14:44:51 +0000 (09:44 -0500)
src/mod/endpoints/mod_skypopen/mod_skypopen.c
src/mod/endpoints/mod_skypopen/skypopen_protocol.c

index 38d47eb50d8fae189c8342accea849317deff3e3..bd9f10cf17a3afd1f0f23c7c8c343f6ca2bdbe3f 100644 (file)
@@ -397,6 +397,12 @@ static switch_status_t interface_exists(char *the_interface)
                switch_yield(50000);
        }
 
+       if (tech_pvt->SkypopenHandles.disp) {
+               NOTICA("REMOVE CLOSIN X\n", SKYPOPEN_P_LOG);
+               XCloseDisplay(tech_pvt->SkypopenHandles.disp);
+               NOTICA("REMOVE CLOSIN X END\n", SKYPOPEN_P_LOG);
+       }
+
        if (globals.SKYPOPEN_INTERFACES[interface_id].skypopen_signaling_thread) {
                switch_thread_join(&status, globals.SKYPOPEN_INTERFACES[interface_id].skypopen_signaling_thread);
        }
@@ -1993,6 +1999,11 @@ SWITCH_MODULE_SHUTDOWN_FUNCTION(mod_skypopen_shutdown)
                                x--;
                                switch_yield(50000);
                        }
+                       if (tech_pvt->SkypopenHandles.disp) {
+                               NOTICA("CLOSIN X\n", SKYPOPEN_P_LOG);
+                               XCloseDisplay(tech_pvt->SkypopenHandles.disp);
+                               NOTICA("CLOSIN X END\n", SKYPOPEN_P_LOG);
+                       }
                        if (globals.SKYPOPEN_INTERFACES[interface_id].skypopen_signaling_thread) {
                                switch_thread_join(&status, globals.SKYPOPEN_INTERFACES[interface_id].skypopen_signaling_thread);
                        }
@@ -3106,11 +3117,15 @@ struct SkypopenHandles *skypopen_list_remove_by_value(struct SkypopenList *list,
 // CLOUDTREE (THomas Hazel) - is there a capable freeswitch list?
 struct SkypopenHandles *skypopen_list_remove_by_reference(struct SkypopenList *list, struct SkypopenHandles *handle)
 {
+       private_t *tech_pvt=NULL;
+
        switch_mutex_lock(globals.list_mutex);
 
+       NOTICA("BEGIN REMOVE\n", SKYPOPEN_P_LOG);
        if (handle->managed == SWITCH_FALSE) {
                // already removed
                switch_mutex_unlock(globals.list_mutex);
+       NOTICA("EXIT REMOVE\n", SKYPOPEN_P_LOG);
                return 0;
        }
 
@@ -3135,6 +3150,7 @@ struct SkypopenHandles *skypopen_list_remove_by_reference(struct SkypopenList *l
        list->entries--;
 
        switch_mutex_unlock(globals.list_mutex);
+       NOTICA("EXIT REMOVE\n", SKYPOPEN_P_LOG);
 
        return handle;
 }
index 0dc34b7d65439a28935e96e7b66fe0b00234658d..2ea46dc35605f279a1e82d2651e2e9e3eab9f230 100644 (file)
@@ -1883,7 +1883,7 @@ void *skypopen_do_skypeapi_thread_func(void *obj)
 #endif
 
        tech_pvt->skypopen_api_thread = NULL;
-       XCloseDisplay(disp);
+       //XCloseDisplay(disp);
        return NULL;
 
 }