[asterisk-addons-commits] dcb: trunk r448 - /trunk/chan_mobile.c

SVN commits to the Asterisk addons project asterisk-addons-commits at lists.digium.com
Sun Sep 16 06:28:55 CDT 2007


Author: dcb
Date: Sun Sep 16 06:28:54 2007
New Revision: 448

URL: http://svn.digium.com/view/asterisk-addons?view=rev&rev=448
Log:
Fixup module unloading when only headset in use

Modified:
    trunk/chan_mobile.c

Modified: trunk/chan_mobile.c
URL: http://svn.digium.com/view/asterisk-addons/trunk/chan_mobile.c?view=diff&rev=448&r1=447&r2=448
==============================================================================
--- trunk/chan_mobile.c (original)
+++ trunk/chan_mobile.c Sun Sep 16 06:28:54 2007
@@ -117,7 +117,7 @@
 	int hci_socket;					/* device descriptor */
 	char id[31];					/* the 'name' from mobile.conf */
 	bdaddr_t addr;					/* adddress of adapter */
-	unsigned int inuse:1;			/* are we in use ? */
+	unsigned int inuse:1;				/* are we in use ? */
 	int sco_socket;
 	AST_LIST_ENTRY(adapter_pvt) entry;
 };
@@ -187,7 +187,7 @@
 static struct ast_cli_entry mbl_cli[] = {
 	{{"mobile", "show", "devices", NULL}, do_show_devices, "Show Bluetooth Cell / Mobile devices", show_usage},
 	{{"mobile", "search", NULL}, do_search_devices, "Search for Bluetooth Cell / Mobile devices", search_usage},
-	{{"mobile", "rfcomm", NULL}, do_send_rfcomm, "Send commands to the rfcomm port for debugging", rfcomm_usage}
+	{{"mobile", "rfcomm", NULL}, do_send_rfcomm, "Send commands to the rfcomm port for debugging", rfcomm_usage},
 };
 
 /* App stuff */
@@ -764,8 +764,9 @@
 		io_need = DEVICE_FRAME_SIZE - pvt->io_save_len;
 		memcpy(pvt->io_save_buf + pvt->io_save_len, frame->data, io_need);
 		sco_write(pvt->sco_socket, pvt->io_save_buf, DEVICE_FRAME_SIZE);
-		if ((r = sco_read(pvt->sco_socket, buf, DEVICE_FRAME_SIZE)))
+		if ((r = sco_read(pvt->sco_socket, buf, DEVICE_FRAME_SIZE))) {
 			sco_write(pvt->io_pipe[1], buf, r);
+		}
 	}
 	
 	num_frames = (frame->datalen - io_need) / DEVICE_FRAME_SIZE;
@@ -773,8 +774,9 @@
 
 	for (i=0; i<num_frames; i++) {
 		sco_write(pvt->sco_socket, pfr, DEVICE_FRAME_SIZE);
-		if ((r = sco_read(pvt->sco_socket, buf, DEVICE_FRAME_SIZE)))
+		if ((r = sco_read(pvt->sco_socket, buf, DEVICE_FRAME_SIZE))) {
 			sco_write(pvt->io_pipe[1], buf, r);
+		}
 		pfr += DEVICE_FRAME_SIZE;
 	}
 
@@ -1285,7 +1287,6 @@
 					pvt->state = MBL_STATE_PREIDLE;
 				} else if (strstr(buf, "ERROR")) {
 					pvt->has_sms = 0;
-					ast_log(LOG_NOTICE, "Device %s has no bluetooth SMS capability.\n", pvt->id);
 					pvt->state = MBL_STATE_PREIDLE;
 				}
 				break;
@@ -1500,21 +1501,24 @@
 
 	}
 
-	close(pvt->rfcomm_socket);
-	close(pvt->sco_socket);
+	if (pvt->rfcomm_socket > -1)
+		close(pvt->rfcomm_socket);
+	if (pvt->sco_socket > -1)
+		close(pvt->sco_socket);
 	pvt->sco_socket = -1;
 	pvt->connected = 0;
 	pvt->monitor_thread = AST_PTHREADT_NULL;
 	
 	pthread_cancel(pvt->sco_listener_thread);
 	pthread_join(pvt->sco_listener_thread, NULL);
+	pvt->sco_listener_thread = AST_PTHREADT_NULL;
 	
 	close(pvt->adapter->sco_socket);
 	
 	manager_event(EVENT_FLAG_SYSTEM, "MobileStatus", "Status: Disconnect\r\nDevice: %s\r\n", pvt->id);
 
 	pvt->adapter->inuse = 0;
-	
+
 	return NULL;
 
 }
@@ -1586,8 +1590,10 @@
 
 	}
 
-	close(pvt->rfcomm_socket);
-	close(pvt->sco_socket);
+	if (pvt->rfcomm_socket > -1)
+		close(pvt->rfcomm_socket);
+	if (pvt->sco_socket > -1)
+		close(pvt->sco_socket);
 	pvt->sco_socket = -1;
 	pvt->connected = 0;
 	pvt->monitor_thread = AST_PTHREADT_NULL;
@@ -1844,6 +1850,7 @@
 					pvt->rfcomm_buf[0] = 0x00;
 					pvt->sco_socket = -1;
 					pvt->monitor_thread = AST_PTHREADT_NULL;
+					pvt->sco_listener_thread = AST_PTHREADT_NULL;
 					pvt->owner = NULL;
 					pvt->no_callsetup = 0;
 					pvt->has_sms = 0;
@@ -1894,11 +1901,6 @@
 		pthread_join(discovery_thread, NULL);
 	}
 	
-	/* Unregister the CLI & APP */
-	ast_cli_unregister_multiple(mbl_cli, sizeof(mbl_cli) / sizeof(mbl_cli[0]));
-	ast_unregister_application(app_mblstatus);
-	ast_unregister_application(app_mblsendsms);
-
 	/* Destroy the device list */
 	while ((pvt = AST_LIST_REMOVE_HEAD(&devices, entry))) {
 		if (pvt->monitor_thread != AST_PTHREADT_NULL) {
@@ -1930,6 +1932,11 @@
 
 	if (sdp_session)
 		sdp_close(sdp_session);
+
+	/* Unregister the CLI & APP */
+	ast_cli_unregister_multiple(mbl_cli, sizeof(mbl_cli) / sizeof(mbl_cli[0]));
+	ast_unregister_application(app_mblstatus);
+	ast_unregister_application(app_mblsendsms);
 
 	return 0;
 




More information about the asterisk-addons-commits mailing list