https://origsvn.digium.com/svn/asterisk/branches/1.4
........
r103821 | russell | 2008-02-19 14:02:49 -0600 (Tue, 19 Feb 2008) | 8 lines
Account for the fact that the "other" channel can disappear while the local pvt
is not locked.
(fixes a problem introduced in rev 100581)
(closes issue #12012)
Reported by: stevedavies
Patch by me
........
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@103822
65c4cc65-6c06-0410-ace0-
fbb531ad65f3
- ast_mutex_unlock(&p->lock);
-
/* Ensure that we have both channels locked */
/* Ensure that we have both channels locked */
- if (us) {
- while (ast_channel_trylock(other)) {
+ while (other && ast_channel_trylock(other)) {
+ ast_mutex_unlock(&p->lock);
+ if (us)
- }
- } else {
- ast_channel_lock(other);
+ ast_mutex_lock(&p->lock);
+ other = isoutbound ? p->owner : p->chan;
- ast_queue_frame(other, f);
-
- ast_channel_unlock(other);
-
- ast_mutex_lock(&p->lock);
+ if (other) {
+ ast_queue_frame(other, f);
+ ast_channel_unlock(other);
+ }
ast_clear_flag(p, LOCAL_GLARE_DETECT);
ast_clear_flag(p, LOCAL_GLARE_DETECT);