Merge "res_calendar: Specialized calendars depend on symbols of general calendar."
[asterisk/asterisk.git] / main / pbx_app.c
index 0c030d1..ec6bc75 100644 (file)
@@ -313,7 +313,6 @@ static char *handle_show_applications(struct ast_cli_entry *e, int cmd, struct a
        int like = 0, describing = 0;
        int total_match = 0;    /* Number of matches in like clause */
        int total_apps = 0;     /* Number of apps registered */
-       static const char * const choices[] = { "like", "describing", NULL };
 
        switch (cmd) {
        case CLI_INIT:
@@ -325,7 +324,7 @@ static char *handle_show_applications(struct ast_cli_entry *e, int cmd, struct a
                        "       If 'describing', <text> will be a substring of the description\n";
                return NULL;
        case CLI_GENERATE:
-               return (a->pos != 3) ? NULL : ast_cli_complete(a->word, choices, a->n);
+               return NULL;
        }
 
        AST_RWLIST_RDLOCK(&apps);
@@ -395,6 +394,11 @@ int ast_unregister_application(const char *app)
        struct ast_app *cur;
        int cmp;
 
+       /* Anticipate need for conlock in unreference_cached_app(), in order to avoid
+        * possible deadlock with pbx_extension_helper()/pbx_findapp()
+        */
+       ast_rdlock_contexts();
+
        AST_RWLIST_WRLOCK(&apps);
        AST_RWLIST_TRAVERSE_SAFE_BEGIN(&apps, cur, list) {
                cmp = strcasecmp(app, cur->name);
@@ -417,6 +421,8 @@ int ast_unregister_application(const char *app)
        AST_RWLIST_TRAVERSE_SAFE_END;
        AST_RWLIST_UNLOCK(&apps);
 
+       ast_unlock_contexts();
+
        return cur ? 0 : -1;
 }