Fix directed pickup to a call that is up (bug #5425 with mods)
authorMark Spencer <markster@digium.com>
Tue, 11 Oct 2005 21:08:26 +0000 (21:08 +0000)
committerMark Spencer <markster@digium.com>
Tue, 11 Oct 2005 21:08:26 +0000 (21:08 +0000)
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@6743 65c4cc65-6c06-0410-ace0-fbb531ad65f3

apps/app_directed_pickup.c

index e9282d2..df76636 100755 (executable)
@@ -100,7 +100,6 @@ 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);
@@ -108,24 +107,21 @@ 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 */
-               ast_mutex_unlock(&target->lock);
        } else {
                ast_log(LOG_DEBUG, "No call pickup possible...\n");
                res = -1;
        }
-       
+       /* Done */
  out:
+       if (target) ast_mutex_unlock(&target->lock);
        LOCAL_USER_REMOVE(u);
 
        return res;