diff options
author | Corey Farrell <git@cfware.com> | 2016-10-27 22:49:43 -0400 |
---|---|---|
committer | Corey Farrell <git@cfware.com> | 2016-10-28 10:24:26 -0500 |
commit | d6ad86789702ab2e4161c5ea086cdae64c9b614d (patch) | |
tree | ccbcc08dca493d7f0096d897a55a79c80e67bb8f /main/asterisk.c | |
parent | 0ec5abe59286ed02377c2d7fe25d2e2e9babc58a (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.c | 5 |
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) { |