Index: main/aoc.c =================================================================== --- main/aoc.c (revision 375799) +++ main/aoc.c (working copy) @@ -1605,7 +1605,12 @@ AST_CLI_DEFINE(aoc_cli_debug_enable, "enable cli debugging of AOC messages"), }; +static void aoc_shutdown(void) +{ + ast_cli_unregister_multiple(aoc_cli, ARRAY_LEN(aoc_cli)); +} int ast_aoc_cli_init(void) { + ast_register_atexit(aoc_shutdown); return ast_cli_register_multiple(aoc_cli, ARRAY_LEN(aoc_cli)); } Index: main/cel.c =================================================================== --- main/cel.c (revision 375799) +++ main/cel.c (working copy) @@ -715,6 +715,7 @@ ao2_ref(linkedids, -1); linkedids = NULL; } + ast_cli_unregister(&cli_status); } int ast_cel_engine_init(void) Index: main/channel.c =================================================================== --- main/channel.c (revision 375799) +++ main/channel.c (working copy) @@ -8065,6 +8065,7 @@ static void channels_shutdown(void) { ast_data_unregister(NULL); + ast_cli_unregister_multiple(cli_channel, ARRAY_LEN(cli_channel)); if (channels) { ao2_ref(channels, -1); channels = NULL; Index: main/data.c =================================================================== --- main/data.c (revision 375799) +++ main/data.c (working copy) @@ -3286,6 +3286,7 @@ static void data_shutdown(void) { ast_manager_unregister("DataGet"); + ast_cli_unregister_multiple(cli_data, ARRAY_LEN(cli_data)); ao2_t_ref(root_data.container, -1, "Unref root_data.container in data_shutdown"); ast_rwlock_destroy(&root_data.lock); } Index: main/file.c =================================================================== --- main/file.c (revision 375799) +++ main/file.c (working copy) @@ -1492,8 +1492,14 @@ AST_CLI_DEFINE(handle_cli_core_show_file_formats, "Displays file formats") }; +static void file_shutdown(void) +{ + ast_cli_unregister_multiple(cli_file, ARRAY_LEN(cli_file)); +} + int ast_file_init(void) { ast_cli_register_multiple(cli_file, ARRAY_LEN(cli_file)); + ast_register_atexit(file_shutdown); return 0; } Index: main/http.c =================================================================== --- main/http.c (revision 375799) +++ main/http.c (working copy) @@ -1204,11 +1204,17 @@ AST_CLI_DEFINE(handle_show_http, "Display HTTP server status"), }; +static void http_shutdown(void) +{ + ast_cli_unregister_multiple(cli_http, ARRAY_LEN(cli_http)); +} + int ast_http_init(void) { ast_http_uri_link(&statusuri); ast_http_uri_link(&staticuri); ast_cli_register_multiple(cli_http, ARRAY_LEN(cli_http)); + ast_register_atexit(http_shutdown); return __ast_http_load(0); } Index: main/image.c =================================================================== --- main/image.c (revision 375799) +++ main/image.c (working copy) @@ -205,8 +205,14 @@ AST_CLI_DEFINE(handle_core_show_image_formats, "Displays image formats") }; +static void image_shutdown(void) +{ + ast_cli_unregister_multiple(cli_image, ARRAY_LEN(cli_image)); +} + int ast_image_init(void) { ast_cli_register_multiple(cli_image, ARRAY_LEN(cli_image)); + ast_register_atexit(image_shutdown); return 0; } Index: main/stun.c =================================================================== --- main/stun.c (revision 375799) +++ main/stun.c (working copy) @@ -499,8 +499,14 @@ AST_CLI_DEFINE(handle_cli_stun_set_debug, "Enable/Disable STUN debugging"), }; +static void stun_shutdown(void) +{ + ast_cli_unregister_multiple(cli_stun, sizeof(cli_stun) / sizeof(struct ast_cli_entry)); +} + /*! \brief Initialize the STUN system in Asterisk */ void ast_stun_init(void) { ast_cli_register_multiple(cli_stun, sizeof(cli_stun) / sizeof(struct ast_cli_entry)); + ast_register_atexit(stun_shutdown); } Index: main/timing.c =================================================================== --- main/timing.c (revision 375799) +++ main/timing.c (working copy) @@ -289,11 +289,21 @@ AST_CLI_DEFINE(timing_test, "Run a timing test"), }; +static void timing_shutdown(void) +{ + ast_cli_unregister_multiple(cli_timing, ARRAY_LEN(cli_timing)); + + ast_heap_destroy(timing_interfaces); + timing_interfaces = NULL; +} + int ast_timing_init(void) { if (!(timing_interfaces = ast_heap_create(2, timing_holder_cmp, 0))) { return -1; } + ast_register_atexit(timing_shutdown); + return ast_cli_register_multiple(cli_timing, ARRAY_LEN(cli_timing)); }