From d4c563761087b34ff2f248c3d6de0a0dea30d1b1 Mon Sep 17 00:00:00 2001 From: markster Date: Sat, 24 Sep 2005 14:22:12 +0000 Subject: Fix directed pickup deadlock bug (bug #5270) git-svn-id: http://svn.digium.com/svn/asterisk/trunk@6634 f38db490-d61c-443f-a65b-d21fe96a405b --- apps/app_directed_pickup.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'apps/app_directed_pickup.c') diff --git a/apps/app_directed_pickup.c b/apps/app_directed_pickup.c index 53f39649f..e9282d262 100755 --- a/apps/app_directed_pickup.c +++ b/apps/app_directed_pickup.c @@ -51,7 +51,7 @@ LOCAL_USER_DECL; static int pickup_exec(struct ast_channel *chan, void *data) { - int res = -1; + int res = 0; struct localuser *u = NULL; struct ast_channel *origin = NULL, *target = NULL; char *tmp = NULL, *exten = NULL, *context = NULL; @@ -100,6 +100,7 @@ static int pickup_exec(struct ast_channel *chan, void *data) if (res) { ast_log(LOG_WARNING, "Unable to answer '%s'\n", chan->name); res = -1; + ast_mutex_unlock(&target->lock); goto out; } res = ast_queue_control(chan, AST_CONTROL_ANSWER); @@ -107,12 +108,14 @@ static int pickup_exec(struct ast_channel *chan, void *data) ast_log(LOG_WARNING, "Unable to queue answer on '%s'\n", chan->name); res = -1; + ast_mutex_unlock(&target->lock); goto out; } res = ast_channel_masquerade(target, chan); if (res) { ast_log(LOG_WARNING, "Unable to masquerade '%s' into '%s'\n", chan->name, target->name); res = -1; + ast_mutex_unlock(&target->lock); goto out; } /* Done */ -- cgit v1.2.3