Skip to content
Snippets Groups Projects
  • Kevin Harwell's avatar
    bb30b224
    cel_pgsql: deadlock on unload and core_event_dispatcher · bb30b224
    Kevin Harwell authored
    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
    ........
    
    Merged revisions 404605 from http://svn.asterisk.org/svn/asterisk/branches/12
    
    
    git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@404606 65c4cc65-6c06-0410-ace0-fbb531ad65f3
    bb30b224
    History
    cel_pgsql: deadlock on unload and core_event_dispatcher
    Kevin Harwell authored
    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
    ........
    
    Merged revisions 404605 from http://svn.asterisk.org/svn/asterisk/branches/12
    
    
    git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@404606 65c4cc65-6c06-0410-ace0-fbb531ad65f3
cel_pgsql.c 17.87 KiB