[Asterisk-cvs] asterisk/channels chan_iax2.c,1.188.2.8,1.188.2.9

russell at lists.digium.com russell at lists.digium.com
Thu Dec 23 15:26:13 CST 2004


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

Modified Files:
      Tag: v1-0
	chan_iax2.c 
Log Message:
Don't hold the iaxsl[x] lock while finding the peer, do it ahead of time.


Index: chan_iax2.c
===================================================================
RCS file: /usr/cvsroot/asterisk/channels/chan_iax2.c,v
retrieving revision 1.188.2.8
retrieving revision 1.188.2.9
diff -u -d -r1.188.2.8 -r1.188.2.9
--- chan_iax2.c	21 Dec 2004 20:15:29 -0000	1.188.2.8
+++ chan_iax2.c	23 Dec 2004 20:21:49 -0000	1.188.2.9
@@ -641,10 +641,9 @@
 	return res;
 }
 
-static struct chan_iax2_pvt *new_iax(struct sockaddr_in *sin, int lockpeer)
+static struct chan_iax2_pvt *new_iax(struct sockaddr_in *sin, int lockpeer, const char *host)
 {
 	struct chan_iax2_pvt *tmp;
-	char iabuf[INET_ADDRSTRLEN];
 	tmp = malloc(sizeof(struct chan_iax2_pvt));
 	if (tmp) {
 		memset(tmp, 0, sizeof(struct chan_iax2_pvt));
@@ -659,8 +658,7 @@
 		tmp->initid = -1;
 		/* strncpy(tmp->context, context, sizeof(tmp->context)-1); */
 		strncpy(tmp->exten, "s", sizeof(tmp->exten)-1);
-		if (!iax2_getpeername(*sin, tmp->host, sizeof(tmp->host), lockpeer))
-			snprintf(tmp->host, sizeof(tmp->host), "%s:%d", ast_inet_ntoa(iabuf, sizeof(iabuf), sin->sin_addr), ntohs(sin->sin_port));
+		strncpy(tmp->host, host, sizeof(tmp->host)-1);
 	}
 	return tmp;
 }
@@ -826,6 +824,8 @@
 	int res = 0;
 	int x;
 	struct timeval now;
+	char iabuf[INET_ADDRSTRLEN];
+	char host[80];
 	if (new <= NEW_ALLOW) {
 		/* Look for an existing connection first */
 		for (x=1;(res < 1) && (x<maxnontrunkcall);x++) {
@@ -850,6 +850,8 @@
 		}
 	}
 	if ((res < 1) && (new >= NEW_ALLOW)) {
+		if (!iax2_getpeername(*sin, host, sizeof(host), lockpeer))
+			snprintf(host, sizeof(host), "%s:%d", ast_inet_ntoa(iabuf, sizeof(iabuf), sin->sin_addr), ntohs(sin->sin_port));
 		gettimeofday(&now, NULL);
 		for (x=1;x<TRUNK_CALL_START;x++) {
 			/* Find first unused call number that hasn't been used in a while */
@@ -862,7 +864,7 @@
 			ast_log(LOG_WARNING, "No more space\n");
 			return -1;
 		}
-		iaxs[x] = new_iax(sin, lockpeer);
+		iaxs[x] = new_iax(sin, lockpeer, host);
 		update_max_nontrunk();
 		if (iaxs[x]) {
 			if (option_debug)




More information about the svn-commits mailing list