Ticket #824: Race condition in sound auto-close feature may cause sound device to not be opened


git-svn-id: https://svn.pjsip.org/repos/pjproject/trunk@2679 74dad513-b988-da41-8d7b-12977e46ad98
diff --git a/pjsip/src/pjsua-lib/pjsua_media.c b/pjsip/src/pjsua-lib/pjsua_media.c
index 5d81fb0..8d9643b 100644
--- a/pjsip/src/pjsua-lib/pjsua_media.c
+++ b/pjsip/src/pjsua-lib/pjsua_media.c
@@ -522,12 +522,16 @@
 {
     PJ_UNUSED_ARG(th);
 
-    PJ_LOG(4,(THIS_FILE,"Closing sound device after idle for %d seconds", 
-	      pjsua_var.media_cfg.snd_auto_close_time));
+    PJSUA_LOCK();
+    if (entry->id) {
+	PJ_LOG(4,(THIS_FILE,"Closing sound device after idle for %d seconds", 
+		  pjsua_var.media_cfg.snd_auto_close_time));
 
-    entry->id = PJ_FALSE;
+	entry->id = PJ_FALSE;
 
-    close_snd_dev();
+	close_snd_dev();
+    }
+    PJSUA_UNLOCK();
 }
 
 
@@ -1666,10 +1670,12 @@
 					pjsua_conf_port_id sink)
 {
     /* If sound device idle timer is active, cancel it first. */
+    PJSUA_LOCK();
     if (pjsua_var.snd_idle_timer.id) {
 	pjsip_endpt_cancel_timer(pjsua_var.endpt, &pjsua_var.snd_idle_timer);
 	pjsua_var.snd_idle_timer.id = PJ_FALSE;
     }
+    PJSUA_UNLOCK();
 
 
     /* For audio switchboard (i.e. APS-Direct):