summaryrefslogtreecommitdiff
path: root/main/bridge.c
diff options
context:
space:
mode:
authorRichard Mudgett <rmudgett@digium.com>2015-02-11 17:28:13 +0000
committerRichard Mudgett <rmudgett@digium.com>2015-02-11 17:28:13 +0000
commitfeddab7944a12746bcbdb6fc82cc9d4951d61eb5 (patch)
treec2aafc025e36fccf736fd7dcfd1fd6650b995e5c /main/bridge.c
parent29f3ff0b615bb0847727e2df45d5590f5f9ebcee (diff)
HTTP: Stop accepting requests on final system shutdown.
There are three CLI commands to stop and restart Asterisk each. 1) core stop/restart now - Hangup all calls and stop or restart Asterisk. New channels are prevented while the shutdown request is pending. 2) core stop/restart gracefully - Stop or restart Asterisk when there are no calls remaining in the system. New channels are prevented while the shutdown request is pending. 3) core stop/restart when convenient - Stop or restart Asterisk when there are no calls in the system. New calls are not prevented while the shutdown request is pending. ARI has made stopping/restarting Asterisk more problematic. While a shutdown request is pending it is desirable to continue to process ARI HTTP requests for current calls. To handle the current calls while a shutdown request is pending, a new committed to shutdown phase is needed so ARI applications can deal with the calls until the system is fully committed to shutdown. * Added a new shutdown committed phase so ARI applications can deal with calls until the final committed to shutdown phase is reached. * Made refuse new HTTP requests when the system has reached the final system shutdown phase. Starting anything while the system is actively releasing resources and unloading modules is not a good thing. * Split the bridging framework shutdown to not cleanup the global bridging containers when shutting down in a hurry. This is similar to how other modules prevent crashes on rapid system shutdown. * Moved ast_begin_shutdown(), ast_cancel_shutdown(), and ast_shutting_down(). You should not have to include channel.h just to access these system functions. ASTERISK-24752 #close Reported by: Matthew Jordan Review: https://reviewboard.asterisk.org/r/4399/ git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@431692 65c4cc65-6c06-0410-ace0-fbb531ad65f3
Diffstat (limited to 'main/bridge.c')
-rw-r--r--main/bridge.c14
1 files changed, 13 insertions, 1 deletions
diff --git a/main/bridge.c b/main/bridge.c
index c1fc145c6..6737fa62f 100644
--- a/main/bridge.c
+++ b/main/bridge.c
@@ -5322,7 +5322,7 @@ static void bridge_prnt_obj(void *v_obj, void *where, ao2_prnt_fn *prnt)
/*!
* \internal
- * \brief Shutdown the bridging system.
+ * \brief Shutdown the bridging system. Stuff to always do.
* \since 12.0.0
*
* \return Nothing
@@ -5334,6 +5334,17 @@ static void bridge_shutdown(void)
ast_manager_unregister("BridgeTechnologyUnsuspend");
ast_cli_unregister_multiple(bridge_cli, ARRAY_LEN(bridge_cli));
ao2_container_unregister("bridges");
+}
+
+/*!
+ * \internal
+ * \brief Shutdown the bridging system. More stuff to do on graceful shutdown.
+ * \since 13.3.0
+ *
+ * \return Nothing
+ */
+static void bridge_cleanup(void)
+{
ao2_cleanup(bridges);
bridges = NULL;
ao2_cleanup(bridge_manager);
@@ -5342,6 +5353,7 @@ static void bridge_shutdown(void)
int ast_bridging_init(void)
{
+ ast_register_cleanup(bridge_cleanup);
ast_register_atexit(bridge_shutdown);
if (ast_stasis_bridging_init()) {