[asterisk-commits] dvossel: branch 1.8 r292595 - /branches/1.8/main/manager.c

SVN commits to the Asterisk project asterisk-commits at lists.digium.com
Thu Oct 21 11:14:36 CDT 2010


Author: dvossel
Date: Thu Oct 21 11:14:33 2010
New Revision: 292595

URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=292595
Log:
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



Modified:
    branches/1.8/main/manager.c

Modified: branches/1.8/main/manager.c
URL: http://svnview.digium.com/svn/asterisk/branches/1.8/main/manager.c?view=diff&rev=292595&r1=292594&r2=292595
==============================================================================
--- branches/1.8/main/manager.c (original)
+++ branches/1.8/main/manager.c Thu Oct 21 11:14:33 2010
@@ -2834,7 +2834,6 @@
 	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)) {
@@ -2842,7 +2841,6 @@
 			}
 			s->session->last_ev = eqe;
 		}
-		AST_RWLIST_UNLOCK(&all_events);
 		astman_append(s,
 			"Event: WaitEventComplete\r\n"
 			"%s"
@@ -4107,7 +4105,7 @@
 	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 &&
@@ -4119,7 +4117,6 @@
 			}
 			s->session->last_ev = eqe;
 		}
-		AST_RWLIST_UNLOCK(&all_events);
 	}
 	ao2_unlock(s->session);
 	return ret;




More information about the asterisk-commits mailing list