summaryrefslogtreecommitdiff
path: root/main/asterisk.c
diff options
context:
space:
mode:
authorCorey Farrell <git@cfware.com>2016-10-27 22:49:43 -0400
committerCorey Farrell <git@cfware.com>2016-10-28 10:24:26 -0500
commitd6ad86789702ab2e4161c5ea086cdae64c9b614d (patch)
treeccbcc08dca493d7f0096d897a55a79c80e67bb8f /main/asterisk.c
parent0ec5abe59286ed02377c2d7fe25d2e2e9babc58a (diff)
Fix shutdown crash caused by modules being left open.
It is only safe to run ast_register_cleanup callbacks when all modules have been unloaded. Previously these callbacks were run during graceful shutdown, making it possible to crash during shutdown. ASTERISK-26513 #close Change-Id: Ibfa635bb688d1227ec54aa211d90d6bd45052e21
Diffstat (limited to 'main/asterisk.c')
-rw-r--r--main/asterisk.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/main/asterisk.c b/main/asterisk.c
index d4b39a265..56fc107db 100644
--- a/main/asterisk.c
+++ b/main/asterisk.c
@@ -2010,8 +2010,9 @@ static void really_quit(int num, shutdown_nice_t niceness, int restart)
struct ast_json *json_object = NULL;
int run_cleanups = niceness >= SHUTDOWN_NICE;
- if (run_cleanups) {
- ast_module_shutdown();
+ if (run_cleanups && modules_shutdown()) {
+ ast_verb(0, "Some modules could not be unloaded, switching to fast shutdown\n");
+ run_cleanups = 0;
}
if (!restart) {