Fix segfault on directed pickup when no CDR is available (bug #5998)
[asterisk/asterisk.git] / apps / app_directed_pickup.c
index 7008ff0..9e7d3cc 100644 (file)
@@ -77,7 +77,7 @@ static int pickup_exec(struct ast_channel *chan, void *data)
 
        /* Find a channel to pickup */
        origin = ast_get_channel_by_exten_locked(exten, context);
 
        /* Find a channel to pickup */
        origin = ast_get_channel_by_exten_locked(exten, context);
-       if (origin) {
+       if (origin && origin->cdr) {
                ast_cdr_getvar(origin->cdr, "dstchannel", &tmp, workspace,
                               sizeof(workspace), 0);
                if (tmp) {
                ast_cdr_getvar(origin->cdr, "dstchannel", &tmp, workspace,
                               sizeof(workspace), 0);
                if (tmp) {
@@ -89,6 +89,8 @@ static int pickup_exec(struct ast_channel *chan, void *data)
                }
                ast_mutex_unlock(&origin->lock);
        } else {
                }
                ast_mutex_unlock(&origin->lock);
        } else {
+               if (origin)
+                       ast_mutex_unlock(&origin->lock);
                ast_log(LOG_DEBUG, "No originating channel found.\n");
        }
        
                ast_log(LOG_DEBUG, "No originating channel found.\n");
        }