diff --git a/main/asterisk.c b/main/asterisk.c index 4e07ac7c26..cefb666753 100644 --- a/main/asterisk.c +++ b/main/asterisk.c @@ -1775,6 +1775,15 @@ static void really_quit(int num, shutdown_nice_t niceness, int restart) } } } + /* The manager event for shutdown must happen prior to ast_run_atexits, as + * the manager interface will dispose of its sessions as part of its + * shutdown. + */ + manager_event(EVENT_FLAG_SYSTEM, "Shutdown", "Shutdown: %s\r\n" + "Restart: %s\r\n", + ast_active_channels() ? "Uncleanly" : "Cleanly", + restart ? "True" : "False"); + if (option_verbose) ast_verbose("Executing last minute cleanups\n"); ast_run_atexits(); @@ -1782,7 +1791,6 @@ static void really_quit(int num, shutdown_nice_t niceness, int restart) if (option_verbose && ast_opt_console) ast_verbose("Asterisk %s ending (%d).\n", ast_active_channels() ? "uncleanly" : "cleanly", num); ast_debug(1, "Asterisk ending (%d).\n", num); - manager_event(EVENT_FLAG_SYSTEM, "Shutdown", "Shutdown: %s\r\nRestart: %s\r\n", ast_active_channels() ? "Uncleanly" : "Cleanly", restart ? "True" : "False"); if (ast_socket > -1) { pthread_cancel(lthread); close(ast_socket);