[asterisk-dev] need help debugging a deadlock in 1.6.2.13
Russell Bryant
russell at digium.com
Tue Oct 5 15:31:39 CDT 2010
----- Original Message -----
> Hello,
>
> I am new to this list. I have a deadlock in 1.6.2.13, that I am trying
> to debug myself.
> What happens is there are two threads that lock resources in a
> different order causing a deadlock.
>
> The threads are:
>
> 1. from taskprocessor handle_statechange() is called.
> This one locks ast_rdlock_contexts, and then eventually call
> cb_extensionstate()
> which immediately does a sip_pvt_lock()
>
> 2. do_monitor calls sipsock_read() which calls handle_request_do()
> which calls
> find_call(), which does a sip_pvt_lock() too.
> The incoming request is a subscription, so it calls ast_get_hint(),
> which calls
> ast_hint_extension() which calls ast_rdlock_contexts(). Deadlock.
>
> From what I know, I'd say the last thread uses the wrong order. It
> would probably
> not be appropriate to lock the contexts for each incoming request
> would it?
>
> Can anyone suggest how to handle this?
I have a patch that I started working on last week for Asterisk 1.4 that would address this deadlock. It will eventually have to be ported to all versions of Asterisk.
The change that I made was to change the operation of thread #1. I modified the storage of hints to use astobj2. The code path in #1 no longer holds the hints lock and contexts lock while processing each configured hint.
--
Russell Bryant
Digium, Inc. | Engineering Manager, Open Source Software
445 Jan Davis Drive NW - Huntsville, AL 35806 - USA
jabber: rbryant at digium.com -=- skype: russell-bryant
www.digium.com -=- www.asterisk.org -=- blogs.asterisk.org
More information about the asterisk-dev
mailing list