Revision
14445
Author
gmaruzz
Date
2009-07-31 22:36:01 -0500 (Fri, 31 Jul 2009)

Log Message

skypiax: close the pipes when shutdown the module. Thx anthm

Modified Paths

Diff

Modified: freeswitch/trunk/src/mod/endpoints/mod_skypiax/mod_skypiax.c (14444 => 14445)


--- freeswitch/trunk/src/mod/endpoints/mod_skypiax/mod_skypiax.c	2009-08-01 02:47:35 UTC (rev 14444)
+++ freeswitch/trunk/src/mod/endpoints/mod_skypiax/mod_skypiax.c	2009-08-01 03:36:01 UTC (rev 14445)
@@ -240,7 +240,7 @@
 
 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 @@
 
 	while (x) {
 		x--;
-		switch_yield(20000);
+		switch_yield(50000);
 	}
 
 	if (globals.SKYPIAX_INTERFACES[interface_id].skypiax_signaling_thread) {
@@ -1257,7 +1257,7 @@
 
 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 @@
 	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 @@
 			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 @@
 		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);