[Asterisk-cvs] asterisk/channels chan_sip.c,1.593,1.594

markster at lists.digium.com markster at lists.digium.com
Sun Dec 19 13:26:44 CST 2004


Update of /usr/cvsroot/asterisk/channels
In directory mongoose.digium.com:/tmp/cvs-serv5380/channels

Modified Files:
	chan_sip.c 
Log Message:
SIP locking improvements


Index: chan_sip.c
===================================================================
RCS file: /usr/cvsroot/asterisk/channels/chan_sip.c,v
retrieving revision 1.593
retrieving revision 1.594
diff -u -d -r1.593 -r1.594
--- chan_sip.c	18 Dec 2004 21:58:05 -0000	1.593
+++ chan_sip.c	19 Dec 2004 18:22:47 -0000	1.594
@@ -1857,6 +1857,8 @@
 static int sip_senddigit(struct ast_channel *ast, char digit)
 {
 	struct sip_pvt *p = ast->pvt->pvt;
+	int res = 0;
+	ast_mutex_lock(&p->lock);
 	if (p && (p->dtmfmode & SIP_DTMF_INFO)) {
 		transmit_info_with_digit(p, digit);
 	}
@@ -1865,8 +1867,9 @@
 	}
 	/* If in-band DTMF is desired, send that */
 	if (p->dtmfmode & SIP_DTMF_INBAND)
-		return -1;
-	return 0;
+		res = -1;
+	ast_mutex_unlock(&p->lock);
+	return res;
 }
 
 
@@ -1875,7 +1878,9 @@
 {
 	struct sip_pvt *p = ast->pvt->pvt;
 	int res;
+	ast_mutex_lock(&p->lock);
 	res = transmit_refer(p, dest);
+	ast_mutex_unlock(&p->lock);
 	return res;
 }
 
@@ -1885,6 +1890,9 @@
 static int sip_indicate(struct ast_channel *ast, int condition)
 {
 	struct sip_pvt *p = ast->pvt->pvt;
+	int res = 0;
+
+	ast_mutex_lock(&p->lock);
 	switch(condition) {
 	case AST_CONTROL_RINGING:
 		if (ast->_state == AST_STATE_RING) {
@@ -1898,7 +1906,8 @@
 				/* Well, if it's not reasonable, just send in-band */
 			}
 		}
-		return -1;
+		res = -1;
+		break;
 	case AST_CONTROL_BUSY:
 		if (ast->_state != AST_STATE_UP) {
 			transmit_response(p, "486 Busy Here", &p->initreq);
@@ -1906,7 +1915,8 @@
 			ast_softhangup_nolock(ast, AST_SOFTHANGUP_DEV);
 			break;
 		}
-		return -1;
+		res = -1;
+		break;
 	case AST_CONTROL_CONGESTION:
 		if (ast->_state != AST_STATE_UP) {
 			transmit_response(p, "503 Service Unavailable", &p->initreq);
@@ -1914,7 +1924,8 @@
 			ast_softhangup_nolock(ast, AST_SOFTHANGUP_DEV);
 			break;
 		}
-		return -1;
+		res = -1;
+		break;
 	case AST_CONTROL_PROGRESS:
 	case AST_CONTROL_PROCEEDING:
 		if ((ast->_state != AST_STATE_UP) && !p->progress && !p->outgoing) {
@@ -1922,14 +1933,18 @@
 			p->progress = 1;
 			break;
 		}
-		return -1;
+		res = -1;
+		break;
 	case -1:
-		return -1;
+		res = -1;
+		break;
 	default:
 		ast_log(LOG_WARNING, "Don't know how to indicate condition %d\n", condition);
-		return -1;
+		res = -1;
+		break;
 	}
-	return 0;
+	ast_mutex_unlock(&p->lock);
+	return res;
 }
 
 




More information about the svn-commits mailing list