From: Mark Spencer Date: Mon, 21 Jun 2004 03:37:13 +0000 (+0000) Subject: Avoid iflock/chlock race X-Git-Tag: 1.0.0-rc1~208 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=ef4d9eb5b747bfbd6b592bd537c1a528af114e3c;p=thirdparty%2Fasterisk.git Avoid iflock/chlock race git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@3250 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- diff --git a/channels/chan_zap.c b/channels/chan_zap.c index 38759c0664..d9f88c33a4 100755 --- a/channels/chan_zap.c +++ b/channels/chan_zap.c @@ -5484,7 +5484,10 @@ static void *do_monitor(void *data) } if (option_debug) ast_log(LOG_DEBUG, "Monitor doohicky got event %s on channel %d\n", event2str(res), i->channel); + /* Don't hold iflock while handling init events -- race with chlock */ + ast_mutex_unlock(&iflock); handle_init_event(i, res); + ast_mutex_lock(&iflock); } #ifdef ZAPATA_R2 if ((pollres & POLLPRI) || (i->r2 && !i->sigchecked)) @@ -5503,7 +5506,10 @@ static void *do_monitor(void *data) res = zt_get_event(i->subs[SUB_REAL].zfd); if (option_debug) ast_log(LOG_DEBUG, "Monitor doohicky got event %s on channel %d\n", event2str(res), i->channel); + /* Don't hold iflock while handling init events */ + ast_mutex_unlock(&iflock); handle_init_event(i, res); + ast_mutex_lock(&iflock); } } i=i->next;