Merged revisions 329331 via svnmerge from
authorRichard Mudgett <rmudgett@digium.com>
Fri, 22 Jul 2011 20:46:36 +0000 (20:46 +0000)
committerRichard Mudgett <rmudgett@digium.com>
Fri, 22 Jul 2011 20:46:36 +0000 (20:46 +0000)
commita5c65bb93910b94341a95f3bcb8a2029019651fe
treef0be6e3197e233d11924c5ffce78546502ab6f74
parentf243d129c960ef6ffbf17a7eba0995c5b72c3407
Merged revisions 329331 via svnmerge from
https://origsvn.digium.com/svn/asterisk/branches/10

................
  r329331 | rmudgett | 2011-07-22 15:43:07 -0500 (Fri, 22 Jul 2011) | 55 lines

  Merged revisions 329299 via svnmerge from
  https://origsvn.digium.com/svn/asterisk/branches/1.8

  ........
    r329299 | rmudgett | 2011-07-22 10:44:58 -0500 (Fri, 22 Jul 2011) | 48 lines

    Deadlocks dealing with dialplan hints during reload.

    There are two remaining different deadlocks reported dealing with dialplan
    hints.

    The deadlock in ASTERISK-17666 is caused by invalid locking order in
    ast_remove_hint().  The hints container must be locked before the hint
    object.

    The deadlock in ASTERISK-17760 is caused by a catch-22 situation in
    handle_statechange().  The deadlock is caused by not having the conlock
    before calling the watcher callbacks.  Unfortunately, having that lock
    causes a different deadlock as reported in ASTERISK-16961.

    * Fixed ast_remove_hint() locking order.

    * Made handle_statechange() no longer call the watcher callbacks holding
    any locks that matter.

    * Made hint ao2 destructor do the watcher callbacks for extension
    deactivation to guarantee that they get called.

    * Fixed hint reference leak in ast_add_hint() if the callback container
    constructor failed.

    * Fixed hint reference leak in complete_core_show_hint() for every hint it
    found for CLI tab completion.

    * Adjusted locking in ast_merge_contexts_and_delete() for safety.

    * Added context_merge_lock to prevent ast_merge_contexts_and_delete() and
    handle_statechange() from interfering with each other.

    * Fixed ast_change_hint() not taking into account that the extension is
    used for the hash key.

    (closes issue ASTERISK-17666)
    Reported by: irroot
    Tested by: irroot
    JIRA SWP-3318

    (closes issue ASTERISK-17760)
    Reported by: Byron Clark
    Tested by: irroot
    JIRA SWP-3393

    Review: https://reviewboard.asterisk.org/r/1313/
  ........
................

git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@329332 65c4cc65-6c06-0410-ace0-fbb531ad65f3
main/pbx.c