From 5583996b227b8de23e5b5c64069793725ba33b4d Mon Sep 17 00:00:00 2001 From: Jason Parker Date: Wed, 9 Jan 2008 20:05:45 +0000 Subject: [PATCH] Fix some locking and return value funkiness. We really shouldn't be unlocking this lock inside of a function, unless we locked it there too. git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@97618 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- main/cli.c | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/main/cli.c b/main/cli.c index 8b50878838..eee61b5cd8 100644 --- a/main/cli.c +++ b/main/cli.c @@ -1755,10 +1755,11 @@ static int help1(int fd, char *match[], int locked) ast_cli(fd, "%25.25s %s\n", e->_full_cmd, S_OR(e->summary, "")); found++; } - AST_LIST_UNLOCK(&helpers); + if (!locked) + AST_LIST_UNLOCK(&helpers); if (!locked && !found && matchstr[0]) ast_cli(fd, "No such command '%s'.\n", matchstr); - return 0; + return RESULT_SUCCESS; } static int help_workhorse(int fd, char *match[]) @@ -1770,6 +1771,7 @@ static int handle_help(int fd, int argc, char *argv[]) { char fullcmd[80]; struct ast_cli_entry *e; + int res = RESULT_SUCCESS; if (argc < 1) return RESULT_SHOWUSAGE; @@ -1778,8 +1780,11 @@ static int handle_help(int fd, int argc, char *argv[]) AST_LIST_LOCK(&helpers); e = find_cli(argv + 1, 1); /* try exact match first */ - if (!e) - return help1(fd, argv + 1, 1 /* locked */); + if (!e) { + res = help1(fd, argv + 1, 1 /* locked */); + AST_LIST_UNLOCK(&helpers); + return res; + } if (e->usage) ast_cli(fd, "%s", e->usage); else { @@ -1787,7 +1792,7 @@ static int handle_help(int fd, int argc, char *argv[]) ast_cli(fd, "No help text available for '%s'.\n", fullcmd); } AST_LIST_UNLOCK(&helpers); - return RESULT_SUCCESS; + return res; } static char *parse_args(const char *s, int *argc, char *argv[], int max, int *trailingwhitespace)