]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
skypiax: close the pipes when shutdown the module. Thx anthm
authorGiovanni Maruzzelli <gmaruzz@gmail.com>
Sat, 1 Aug 2009 03:36:01 +0000 (03:36 +0000)
committerGiovanni Maruzzelli <gmaruzz@gmail.com>
Sat, 1 Aug 2009 03:36:01 +0000 (03:36 +0000)
git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@14445 d0543943-73ff-0310-b7d9-9358b9ac24b2

src/mod/endpoints/mod_skypiax/mod_skypiax.c

index 6f9120a2bbb681fae8eef9cd0ffb64959c16adca..ef7d5a86b480035c48cfed65ba508679500fb2e4 100644 (file)
@@ -240,7 +240,7 @@ static switch_status_t interface_exists(char *the_interface)
 
 static switch_status_t remove_interface(char *the_interface)
 {
-       int x = 100;
+       int x = 10;
        unsigned int howmany = 8;
        int interface_id = -1;
        private_t *tech_pvt = NULL;
@@ -318,7 +318,7 @@ static switch_status_t remove_interface(char *the_interface)
 
        while (x) {
                x--;
-               switch_yield(20000);
+               switch_yield(50000);
        }
 
        if (globals.SKYPIAX_INTERFACES[interface_id].skypiax_signaling_thread) {
@@ -1257,7 +1257,7 @@ SWITCH_MODULE_LOAD_FUNCTION(mod_skypiax_load)
 
 SWITCH_MODULE_SHUTDOWN_FUNCTION(mod_skypiax_shutdown)
 {
-       int x = 100;
+       int x;
        private_t *tech_pvt = NULL;
        switch_status_t status;
        unsigned int howmany = 8;
@@ -1268,6 +1268,7 @@ SWITCH_MODULE_SHUTDOWN_FUNCTION(mod_skypiax_shutdown)
        for (interface_id = 0; interface_id < SKYPIAX_MAX_INTERFACES; interface_id++) {
                tech_pvt = &globals.SKYPIAX_INTERFACES[interface_id];
 
+               if (strlen(globals.SKYPIAX_INTERFACES[interface_id].name)) {
                if (globals.SKYPIAX_INTERFACES[interface_id].skypiax_signaling_thread) {
 #ifdef WIN32
                        switch_file_write(tech_pvt->SkypiaxHandles.fdesc[1], "sciutati", &howmany);     // let's the controldev_thread die
@@ -1297,9 +1298,10 @@ SWITCH_MODULE_SHUTDOWN_FUNCTION(mod_skypiax_shutdown)
                        XSync(tech_pvt->SkypiaxHandles.disp, False);
 #endif
                }
-               while (x) {                             //FIXME 2 seconds?
+               x=10;
+               while (x) {                             //FIXME 0.5 seconds?
                        x--;
-                       switch_yield(20000);
+                       switch_yield(50000);
                }
                if (globals.SKYPIAX_INTERFACES[interface_id].skypiax_signaling_thread) {
                        switch_thread_join(&status, globals.SKYPIAX_INTERFACES[interface_id].skypiax_signaling_thread);
@@ -1307,8 +1309,24 @@ SWITCH_MODULE_SHUTDOWN_FUNCTION(mod_skypiax_shutdown)
                if (globals.SKYPIAX_INTERFACES[interface_id].skypiax_api_thread) {
                        switch_thread_join(&status, globals.SKYPIAX_INTERFACES[interface_id].skypiax_api_thread);
                }
-       }
+#ifndef WIN32
+                               WARNINGA("SHUTDOWN interface_id=%d\n", SKYPIAX_P_LOG, interface_id);
+                       shutdown(tech_pvt->audioskypepipe[0], 2);
+                       close(tech_pvt->audioskypepipe[0]);
+                       shutdown(tech_pvt->audioskypepipe[1], 2);
+                       close(tech_pvt->audioskypepipe[1]);
+                       shutdown(tech_pvt->audiopipe[0], 2);
+                       close(tech_pvt->audiopipe[0]);
+                       shutdown(tech_pvt->audiopipe[1], 2);
+                       close(tech_pvt->audiopipe[1]);
+                       shutdown(tech_pvt->SkypiaxHandles.fdesc[0], 2);
+                       close(tech_pvt->SkypiaxHandles.fdesc[0]);
+                       shutdown(tech_pvt->SkypiaxHandles.fdesc[1], 2);
+                       close(tech_pvt->SkypiaxHandles.fdesc[1]);
+               }
+#endif /* WIN32 */
 
+       }
        switch_safe_free(globals.dialplan);
        switch_safe_free(globals.context);
        switch_safe_free(globals.destination);