[asterisk-dev] [Code Review] Fix deadlock when using originate from agent
Jeff Peeler
jpeeler at digium.com
Fri Dec 12 14:18:20 CST 2008
> On 2008-11-11 16:19:17, Tilghman Lesher wrote:
> > branches/1.4/channels/chan_agent.c, line 944
> > <http://reviewboard.digium.com/r/35/diff/1/?file=1248#file1248line944>
> >
> > I'm curious as to why you lock before signalling. The manpage suggests that this is not strictly necessary. Is it only to set p->app_lock_flag ? See my other comment, as it appears that this variable is useless.
>
> wrote:
> You're right - I locked in a bunch of unnecessary places I believe so I'm going to remove them.
>
> wrote:
> I have not had a chance to review these changes from an architectural viewpoint yet, but I did want to comment on this one point.
>
> While locking around a condition signal is not _required_ necessarily, it is almost always the right thing to do if you want to get predictable results. Otherwise, you lack proper synchronization between threads waiting on a signal, and those delivering the signal. You end up with a race condition where you could deliver a signal _right_ before a thread goes to sleep to wait for it.
While normally I would agree, I can't find any chance of a race so I am still leaving the locking out. Perhaps somebody will prove me wrong.
- Jeff
-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
http://reviewboard.digium.com/r/35/#review119
-----------------------------------------------------------
On 2008-11-12 17:58:12, Jeff Peeler wrote:
>
> -----------------------------------------------------------
> This is an automatically generated e-mail. To reply, visit:
> http://reviewboard.digium.com/r/35/
> -----------------------------------------------------------
>
> (Updated 2008-11-12 17:58:12)
>
>
> Review request for Asterisk Developers.
>
>
> Summary
> -------
>
> This changes the behavior of __login_exec to use a pthread condition to wait rather than just waiting for a lock. Using a pthread condition frees the restraint of requiring the same thread to let execution continue (by unlocking the lock), which is important as originate uses multiple threads.
>
>
> This addresses bug 12269.
> http://bugs.digium.com/view.php?id=12269
>
>
> Diffs
> -----
>
> branches/1.4/channels/chan_agent.c 156442
>
> Diff: http://reviewboard.digium.com/r/35/diff
>
>
> Testing
> -------
>
> Testing done both here and by reporters show the problem is resolved, but I wanted to make sure I'm not missing anything as changing locking can be tricky.
>
>
> Thanks,
>
> Jeff
>
>
More information about the asterisk-dev
mailing list