summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuke Bakken <luke@bakken.io>2023-02-22 12:35:22 -0800
committerLuke Bakken <luke@bakken.io>2023-02-22 12:35:22 -0800
commit1901b2a39b24dc04643b5dbd26a52671f7f0dec5 (patch)
tree7666363f1bb231e37e5108a3c465a84b748b2905
parent9918b03b2c41926aa31d405d217f7a5c6e1b2735 (diff)
downloadrabbitmq-server-git-rabbitmq-server-7253.tar.gz
Add signal handler for SIGTERMrabbitmq-server-7253
-rw-r--r--deps/rabbit/apps/rabbitmq_prelaunch/src/rabbit_prelaunch_sighandler.erl23
1 files changed, 12 insertions, 11 deletions
diff --git a/deps/rabbit/apps/rabbitmq_prelaunch/src/rabbit_prelaunch_sighandler.erl b/deps/rabbit/apps/rabbitmq_prelaunch/src/rabbit_prelaunch_sighandler.erl
index 3da0109d98..cb707a74a8 100644
--- a/deps/rabbit/apps/rabbitmq_prelaunch/src/rabbit_prelaunch_sighandler.erl
+++ b/deps/rabbit/apps/rabbitmq_prelaunch/src/rabbit_prelaunch_sighandler.erl
@@ -25,13 +25,17 @@
%% we can't handle SIGCONT, the signal used to resume the
%% program. Unfortunately, it makes a SIGTSTP handler less
%% useful here.
- sigtstp => ignore
+ sigtstp => ignore,
+
+ %% SIGTERM is triggered by Ctrl+C when Erlang is running in
+ %% the foreground. This is also the signal used by Docker to
+ %% stop a running container.
+ sigterm => stop
}).
-define(SIGNAL_HANDLED_BY_ERLANG(Signal),
Signal =:= sigusr1 orelse
- Signal =:= sigquit orelse
- Signal =:= sigterm).
+ Signal =:= sigquit).
-define(SERVER, erl_signal_server).
@@ -65,14 +69,11 @@ handle_event(Signal, State) when ?SIGNAL_HANDLED_BY_ERLANG(Signal) ->
{ok, State};
handle_event(Signal, State) ->
case ?SIGNALS_HANDLED_BY_US of
- %% The code below can be uncommented if we introduce a signal
- %% which should stop RabbitMQ.
- %
- %#{Signal := stop} ->
- % logger:info(
- % "~ts received - shutting down",
- % [string:uppercase(atom_to_list(Signal))]),
- % ok = init:stop();
+ #{Signal := stop} ->
+ logger:info(
+ "~ts received - shutting down",
+ [string:uppercase(atom_to_list(Signal))]),
+ ok = rabbit:stop_and_halt();
_ ->
logger:info(
"~ts received - unhandled signal",