]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
Fix some locking and return value funkiness. We really shouldn't be unlocking this...
authorJason Parker <jparker@digium.com>
Wed, 9 Jan 2008 20:05:45 +0000 (20:05 +0000)
committerJason Parker <jparker@digium.com>
Wed, 9 Jan 2008 20:05:45 +0000 (20:05 +0000)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@97618 65c4cc65-6c06-0410-ace0-fbb531ad65f3

main/cli.c

index 8b50878838361684698fa374219465ff9364612b..eee61b5cd87c619d66d5e718e209e442389f2e6d 100644 (file)
@@ -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)