[asterisk-commits] russell: branch 1.6.0 r116020 - in /branches/1.6.0: ./ main/autoservice.c
SVN commits to the Asterisk project
asterisk-commits at lists.digium.com
Tue May 13 16:12:11 CDT 2008
Author: russell
Date: Tue May 13 16:12:10 2008
New Revision: 116020
URL: http://svn.digium.com/view/asterisk?view=rev&rev=116020
Log:
Merged revisions 116001 via svnmerge from
https://origsvn.digium.com/svn/asterisk/trunk
................
r116001 | russell | 2008-05-13 16:07:59 -0500 (Tue, 13 May 2008) | 13 lines
Merged revisions 115990 via svnmerge from
https://origsvn.digium.com/svn/asterisk/branches/1.4
........
r115990 | russell | 2008-05-13 16:05:57 -0500 (Tue, 13 May 2008) | 5 lines
Fix an issue that I noticed in autoservice while mmichelson and I were debugging
a different problem. I noticed that it was theoretically possible for two threads
to attempt to start the autoservice thread at the same time. This change makes the
process of starting the autoservice thread, thread-safe.
........
................
Modified:
branches/1.6.0/ (props changed)
branches/1.6.0/main/autoservice.c
Propchange: branches/1.6.0/
------------------------------------------------------------------------------
Binary property 'trunk-merged' - no diff available.
Modified: branches/1.6.0/main/autoservice.c
URL: http://svn.digium.com/view/asterisk/branches/1.6.0/main/autoservice.c?view=diff&rev=116020&r1=116019&r2=116020
==============================================================================
--- branches/1.6.0/main/autoservice.c (original)
+++ branches/1.6.0/main/autoservice.c Tue May 13 16:12:10 2008
@@ -195,24 +195,28 @@
ast_channel_unlock(chan);
AST_LIST_LOCK(&aslist);
- if (AST_LIST_EMPTY(&aslist))
+
+ if (AST_LIST_EMPTY(&aslist) && asthread != AST_PTHREADT_NULL) {
ast_cond_signal(&as_cond);
+ }
+
AST_LIST_INSERT_HEAD(&aslist, as, list);
- AST_LIST_UNLOCK(&aslist);
if (asthread == AST_PTHREADT_NULL) { /* need start the thread */
if (ast_pthread_create_background(&asthread, NULL, autoservice_run, NULL)) {
ast_log(LOG_WARNING, "Unable to create autoservice thread :(\n");
/* There will only be a single member in the list at this point,
the one we just added. */
- AST_LIST_LOCK(&aslist);
AST_LIST_REMOVE(&aslist, as, list);
- AST_LIST_UNLOCK(&aslist);
free(as);
+ asthread = AST_PTHREADT_NULL;
res = -1;
- } else
+ } else {
pthread_kill(asthread, SIGURG);
- }
+ }
+ }
+
+ AST_LIST_UNLOCK(&aslist);
return res;
}
More information about the asterisk-commits
mailing list