diff options
author | Mark Spencer <markster@digium.com> | 2004-03-05 18:31:06 +0000 |
---|---|---|
committer | Mark Spencer <markster@digium.com> | 2004-03-05 18:31:06 +0000 |
commit | c07a37b91d3924ed58d6e5718260cf982adb847e (patch) | |
tree | cdbed37453af81324f2b57ba55af561a3178bb30 /channel.c | |
parent | 94f3b5751af5d9a885af3706ae0a72eca9160079 (diff) |
Minor optimizations and actually set SOFTHANGUP_TIMEOUT if appropriate
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@2351 65c4cc65-6c06-0410-ace0-fbb531ad65f3
Diffstat (limited to 'channel.c')
-rwxr-xr-x | channel.c | 9 |
1 files changed, 7 insertions, 2 deletions
@@ -809,7 +809,7 @@ struct ast_channel *ast_waitfor_nandfds(struct ast_channel **c, int n, int *fds, 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 @@ struct ast_channel *ast_waitfor_nandfds(struct ast_channel **c, int n, int *fds, 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 @@ struct ast_channel *ast_waitfor_nandfds(struct ast_channel **c, int n, int *fds, 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) { |