[asterisk-commits] kharwell: branch 12 r404605 - in /branches/12: ./ cel/cel_pgsql.c
SVN commits to the Asterisk project
asterisk-commits at lists.digium.com
Tue Dec 31 15:38:50 CST 2013
Author: kharwell
Date: Tue Dec 31 15:38:48 2013
New Revision: 404605
URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=404605
Log:
cel_pgsql: deadlock on unload and core_event_dispatcher
A deadlock can happen between a thread unloading or reloading the cel_pgsql
module and the core_event_dispatcher taskprocessor thread. Description of
what is happening:
Thread 1 (for example, a netconsole thread):
a "module reload cel_pgsql" is launched
the thread enter the "my_unload_module" function (cel_pgsql.c)
the thread acquire the write lock on psql_columns
the thread enter the "ast_event_unsubscribe" function (event.c)
the thread try to acquire the write lock on ast_event_subs[sub->type]
Thread 2 (core_event_dispatcher taskprocessor thread):
the taskprocessor pop a CEL event
the thread enter the "handle_event" function (event.c)
the thread acquire the read lock on ast_event_subs[sub->type]
the thread callback the "pgsql_log" function (cel_pgsql.c), since it's a subscriber of CEL events
the thread try to acquire a read lock on psql_columns
(closes issue ASTERISK-22854)
Reported by: Etienne Lessard
Patches:
cel_pgsql_fix_deadlock_event.patch uploaded by hexanol (license 6394)
........
Merged revisions 404603 from http://svn.asterisk.org/svn/asterisk/branches/1.8
........
Merged revisions 404604 from http://svn.asterisk.org/svn/asterisk/branches/11
Modified:
branches/12/ (props changed)
branches/12/cel/cel_pgsql.c
Propchange: branches/12/
------------------------------------------------------------------------------
Binary property 'branch-11-merged' - no diff available.
Modified: branches/12/cel/cel_pgsql.c
URL: http://svnview.digium.com/svn/asterisk/branches/12/cel/cel_pgsql.c?view=diff&rev=404605&r1=404604&r2=404605
==============================================================================
--- branches/12/cel/cel_pgsql.c (original)
+++ branches/12/cel/cel_pgsql.c Tue Dec 31 15:38:48 2013
@@ -346,8 +346,9 @@
static int my_unload_module(void)
{
struct columns *current;
+
+ ast_cel_backend_unregister(PGSQL_BACKEND_NAME);
AST_RWLIST_WRLOCK(&psql_columns);
- ast_cel_backend_unregister(PGSQL_BACKEND_NAME);
if (conn) {
PQfinish(conn);
conn = NULL;
More information about the asterisk-commits
mailing list