aboutsummaryrefslogtreecommitdiffstats
path: root/channels
diff options
context:
space:
mode:
authorrussell <russell@f38db490-d61c-443f-a65b-d21fe96a405b>2004-12-15 19:07:10 +0000
committerrussell <russell@f38db490-d61c-443f-a65b-d21fe96a405b>2004-12-15 19:07:10 +0000
commit57db82a658e9112ed15c6507863a7847a43fec1a (patch)
tree5c54b8fe06ba04febb4148f3f55ab4b91015a938 /channels
parentb11f89ea3ca1f12b6cc235250b44998fd897e72d (diff)
Fix use count for agent/local (bug #2996)
git-svn-id: http://svn.digium.com/svn/asterisk/branches/v1-0@4457 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'channels')
-rwxr-xr-xchannels/chan_agent.c4
-rwxr-xr-xchannels/chan_local.c5
2 files changed, 9 insertions, 0 deletions
diff --git a/channels/chan_agent.c b/channels/chan_agent.c
index 6e8c3661a..5d3781017 100755
--- a/channels/chan_agent.c
+++ b/channels/chan_agent.c
@@ -527,6 +527,10 @@ static int agent_hangup(struct ast_channel *ast)
* 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;
diff --git a/channels/chan_local.c b/channels/chan_local.c
index 1a81db14a..439bd3dfe 100755
--- a/channels/chan_local.c
+++ b/channels/chan_local.c
@@ -304,6 +304,10 @@ static int local_hangup(struct ast_channel *ast)
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;
@@ -441,6 +445,7 @@ static struct ast_channel *local_new(struct local_pvt *p, int state)
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);