Index: channels/chan_agent.c =================================================================== RCS file: /usr/cvsroot/asterisk/channels/chan_agent.c,v retrieving revision 1.96 retrieving revision 1.97 diff -u -r1.96 -r1.97 --- channels/chan_agent.c 10 Dec 2004 17:37:20 -0000 1.96 +++ channels/chan_agent.c 11 Dec 2004 04:46:49 -0000 1.97 @@ -561,6 +561,10 @@ * as in apps/app_chanisavail.c:chanavail_exec() */ + ast_mutex_lock(&usecnt_lock); + usecnt--; + ast_mutex_unlock(&usecnt_lock); + ast_log(LOG_DEBUG, "Hangup called for state %s\n", ast_state2str(ast->_state)); if (p->start && (ast->_state != AST_STATE_UP)) { howlong = time(NULL) - p->start; Index: channels/chan_local.c =================================================================== RCS file: /usr/cvsroot/asterisk/channels/chan_local.c,v retrieving revision 1.38 retrieving revision 1.39 diff -u -r1.38 -r1.39 --- channels/chan_local.c 6 Nov 2004 21:33:01 -0000 1.38 +++ channels/chan_local.c 11 Dec 2004 04:46:49 -0000 1.39 @@ -312,6 +312,10 @@ p->owner = NULL; ast->pvt->pvt = NULL; + ast_mutex_lock(&usecnt_lock); + usecnt--; + ast_mutex_unlock(&usecnt_lock); + if (!p->owner && !p->chan) { /* Okay, done with the private part now, too. */ glaredetect = p->glaredetect; @@ -452,6 +456,7 @@ p->chan = tmp2; ast_mutex_lock(&usecnt_lock); usecnt++; + usecnt++; ast_mutex_unlock(&usecnt_lock); ast_update_use_count(); strncpy(tmp->context, p->context, sizeof(tmp->context)-1);