aboutsummaryrefslogtreecommitdiffstats
path: root/main/manager.c
diff options
context:
space:
mode:
authordvossel <dvossel@f38db490-d61c-443f-a65b-d21fe96a405b>2010-10-21 16:46:15 +0000
committerdvossel <dvossel@f38db490-d61c-443f-a65b-d21fe96a405b>2010-10-21 16:46:15 +0000
commit32a77a3667491abbc7fa54c980fda10b030f4de2 (patch)
tree168a2487bdba6aab221636d36e1563a7abb03d8c /main/manager.c
parent9bcf3482a4f4be718efc0e7fc76e49c71c44a327 (diff)
Merged revisions 292595 via svnmerge from
https://origsvn.digium.com/svn/asterisk/branches/1.8 ........ r292595 | dvossel | 2010-10-21 11:14:33 -0500 (Thu, 21 Oct 2010) | 14 lines Fixes recursive lock problem in manager.c It is possible for a AMI session to freeze because of invalid use of recursive locks during the EVENT processing. This patch removes the unnecessary locks. (closes issue #18167) Reported by: sustav Patches: manager_locking_v1.diff uploaded by dvossel (license 671) Tested by: sustav ........ git-svn-id: http://svn.digium.com/svn/asterisk/trunk@292597 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'main/manager.c')
-rw-r--r--main/manager.c5
1 files changed, 1 insertions, 4 deletions
diff --git a/main/manager.c b/main/manager.c
index 8f1403c7e..4f8a151b1 100644
--- a/main/manager.c
+++ b/main/manager.c
@@ -2828,7 +2828,6 @@ static int action_waitevent(struct mansession *s, const struct message *m)
if (s->session->waiting_thread == pthread_self()) {
struct eventqent *eqe = s->session->last_ev;
astman_send_response(s, m, "Success", "Waiting for Event completed.");
- AST_RWLIST_RDLOCK(&all_events);
while ((eqe = advance_event(eqe))) {
if (((s->session->readperm & eqe->category) == eqe->category) &&
((s->session->send_events & eqe->category) == eqe->category)) {
@@ -2836,7 +2835,6 @@ static int action_waitevent(struct mansession *s, const struct message *m)
}
s->session->last_ev = eqe;
}
- AST_RWLIST_UNLOCK(&all_events);
astman_append(s,
"Event: WaitEventComplete\r\n"
"%s"
@@ -4101,7 +4099,7 @@ static int process_events(struct mansession *s)
ao2_lock(s->session);
if (s->session->f != NULL) {
struct eventqent *eqe = s->session->last_ev;
- AST_RWLIST_RDLOCK(&all_events);
+
while ((eqe = advance_event(eqe))) {
if (!ret && s->session->authenticated &&
(s->session->readperm & eqe->category) == eqe->category &&
@@ -4113,7 +4111,6 @@ static int process_events(struct mansession *s)
}
s->session->last_ev = eqe;
}
- AST_RWLIST_UNLOCK(&all_events);
}
ao2_unlock(s->session);
return ret;