aboutsummaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorjpeeler <jpeeler@f38db490-d61c-443f-a65b-d21fe96a405b>2010-11-11 19:42:06 +0000
committerjpeeler <jpeeler@f38db490-d61c-443f-a65b-d21fe96a405b>2010-11-11 19:42:06 +0000
commitffa2bb0c7eef8448fb628d36b0fdc67509ec70bf (patch)
tree1831836cf7c858b44945519ba422ebab5afcdd8d /include
parentbc94e7bc1edfefc4bba3743687d58f8d3e1e87d6 (diff)
Merged revisions 294639 via svnmerge from
https://origsvn.digium.com/svn/asterisk/branches/1.6.2 ................ r294639 | jpeeler | 2010-11-11 13:31:00 -0600 (Thu, 11 Nov 2010) | 53 lines Merged revisions 294384 via svnmerge from https://origsvn.digium.com/svn/asterisk/branches/1.4 ........ r294384 | jpeeler | 2010-11-09 11:37:59 -0600 (Tue, 09 Nov 2010) | 47 lines Fix a deadlock in device state change processing. Copied from some notes from the original author (Russell): Deadlock scenario: Thread 1: device state change thread Holds - rdlock on contexts Holds - hints lock Waiting on channels container lock Thread 2: SIP monitor thread Holds the "iflock" Holds a sip_pvt lock Holds channel container lock Waiting for a channel lock Thread 3: A channel thread (chan_local in this case) Holds 2 channel locks acquired within app_dial Holds a 3rd channel lock it got inside of chan_local Holds a local_pvt lock Waiting on a rdlock of the contexts lock A bunch of other threads waiting on a wrlock of the contexts lock To address this deadlock, some locking order rules must be put in place and enforced. Existing relevant rules: 1) channel lock before a pvt lock 2) contexts lock before hints lock 3) channels container before a channel What's missing is some enforcement of the order when you involve more than any two. To fix this problem, I put in some code that ensures that (at least in the code paths involved in this bug) the locks in (3) come before the locks in (2). To change the operation of thread 1 to comply, I converted the storage of hints to an astobj2 container. This allows processing of hints without holding the hints container lock. So, in the code path that led to thread 1's state, it no longer holds either the contexts or hints lock while it attempts to lock the channels container. (closes issue #18165) Reported by: antonio ABE-2583 ........ ................ git-svn-id: http://svn.digium.com/svn/asterisk/branches/1.8@294640 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'include')
-rw-r--r--include/asterisk.h1
1 files changed, 1 insertions, 0 deletions
diff --git a/include/asterisk.h b/include/asterisk.h
index 8019acc02..465c9c7ad 100644
--- a/include/asterisk.h
+++ b/include/asterisk.h
@@ -78,6 +78,7 @@ int __ast_fdleak_dup(int oldfd, const char *file, int line, const char *func);
int ast_set_priority(int); /*!< Provided by asterisk.c */
int ast_fd_init(void); /*!< Provided by astfd.c */
+int ast_pbx_init(void); /*!< Provided by pbx.c */
/*!
* \brief Register a function to be executed before Asterisk exits.