[Asterisk-cvs] asterisk channel.c,1.82,1.83

markster at lists.digium.com markster at lists.digium.com
Fri Mar 5 13:39:42 CST 2004


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

Modified Files:
	channel.c 
Log Message:
Minor optimizations and actually set SOFTHANGUP_TIMEOUT if appropriate


Index: channel.c
===================================================================
RCS file: /usr/cvsroot/asterisk/channel.c,v
retrieving revision 1.82
retrieving revision 1.83
diff -u -d -r1.82 -r1.83
--- channel.c	5 Mar 2004 18:22:31 -0000	1.82
+++ channel.c	5 Mar 2004 18:31:06 -0000	1.83
@@ -809,7 +809,7 @@
 	fd_set rfds, efds;
 	int res;
 	int x, y, max=-1;
-	time_t now;
+	time_t now = 0;
 	long whentohangup = 0, havewhen = 0, diff;
 	struct ast_channel *winner = NULL;
 	if (outfd)
@@ -817,11 +817,12 @@
 	if (exception)
 		*exception = 0;
 	
-	time(&now);
 	/* Perform any pending masquerades */
 	for (x=0;x<n;x++) {
 		ast_mutex_lock(&c[x]->lock);
 		if (c[x]->whentohangup) {
+			if (!havewhen)
+				time(&now);
 			diff = c[x]->whentohangup - now;
 			if (!havewhen || (diff < whentohangup)) {
 				havewhen++;
@@ -888,8 +889,12 @@
 		return NULL;
 	}
 
+	if (havewhen)
+		time(&now);
 	for (x=0;x<n;x++) {
 		c[x]->blocking = 0;
+		if (havewhen && c[x]->whentohangup && (now > c[x]->whentohangup))
+			c[x]->_softhangup |= AST_SOFTHANGUP_TIMEOUT;
 		for (y=0;y<AST_MAX_FDS;y++) {
 			if (c[x]->fds[y] > -1) {
 				if ((FD_ISSET(c[x]->fds[y], &rfds) || FD_ISSET(c[x]->fds[y], &efds)) && !winner) {




More information about the svn-commits mailing list