diff options
author | russell <russell@f38db490-d61c-443f-a65b-d21fe96a405b> | 2008-03-03 15:50:43 +0000 |
---|---|---|
committer | russell <russell@f38db490-d61c-443f-a65b-d21fe96a405b> | 2008-03-03 15:50:43 +0000 |
commit | b307b8a507544dacfff603e39a9299c6bab5b4f9 (patch) | |
tree | 68b69520c403cd9beee78cd2aa1334ad397b6b3a /main/asterisk.c | |
parent | 5ce9b392d75b4fc1cb8c49b72b8a9c0b65567fa4 (diff) |
Merge in some changes from team/russell/autoservice-nochans-1.4
These changes fix up some dubious code that I came across while auditing what
happens in the autoservice thread when there are no channels currently in
autoservice.
1) Change it so that autoservice thread doesn't keep looping around calling
ast_waitfor_n() on 0 channels twice a second. Instead, use a thread condition
so that the thread properly goes to sleep and does not wake up until a
channel is put into autoservice.
This actually fixes an interesting bug, as well. If the autoservice thread
is already running (almost always is the case), then when the thread goes
from having 0 channels to have 1 channel to autoservice, that channel would
have to wait for up to 1/2 of a second to have the first frame read from it.
2) Fix up the code in ast_waitfor_nandfds() for when it gets called with no
channels and no fds to poll() on, such as was the case with the previous code
for the autoservice thread. In this case, the code would call alloca(0), and
pass the result as the first argument to poll(). In this case, the 2nd
argument to poll() specified that there were no fds, so this invalid pointer
shouldn't actually get dereferenced, but, this code makes it explicit and
ensures the pointers are NULL unless we have valid data to put there.
(related to issue #12116)
git-svn-id: http://svn.digium.com/svn/asterisk/branches/1.4@105563 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'main/asterisk.c')
-rw-r--r-- | main/asterisk.c | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/main/asterisk.c b/main/asterisk.c index 52266b455..51423bf55 100644 --- a/main/asterisk.c +++ b/main/asterisk.c @@ -2896,6 +2896,8 @@ int main(int argc, char *argv[]) astobj2_init(); + ast_autoservice_init(); + if (load_modules(1)) { printf(term_quit()); exit(1); |