From feddab7944a12746bcbdb6fc82cc9d4951d61eb5 Mon Sep 17 00:00:00 2001 From: Richard Mudgett Date: Wed, 11 Feb 2015 17:28:13 +0000 Subject: 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 --- main/http.c | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'main/http.c') diff --git a/main/http.c b/main/http.c index ef3b4b22b..3346cadb4 100644 --- a/main/http.c +++ b/main/http.c @@ -1873,6 +1873,11 @@ static int httpd_process_request(struct ast_tcptls_session_instance *ser) return -1; } + if (ast_shutdown_final()) { + ast_http_error(ser, 503, "Service Unavailable", "Shutdown in progress"); + return -1; + } + /* process "Request Headers" lines */ if (http_request_headers_get(ser, &headers)) { return -1; -- cgit v1.2.3