From 4b50bdd0023505ac3af1b1793a8dbca4921c622c Mon Sep 17 00:00:00 2001 From: Diana Parra Corbacho Date: Fri, 7 Jun 2024 16:58:22 +0200 Subject: [PATCH] rabbit_feature_flags: avoid deadlock on terminating controller If the global process is itself, it means it just crashed. It shouldn't wait but terminate (cherry picked from commit e8986588d0ed381917bb0e769f8eb5145927f932) --- deps/rabbit/src/rabbit_ff_controller.erl | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/deps/rabbit/src/rabbit_ff_controller.erl b/deps/rabbit/src/rabbit_ff_controller.erl index ce8266768013..b1f919d489ec 100644 --- a/deps/rabbit/src/rabbit_ff_controller.erl +++ b/deps/rabbit/src/rabbit_ff_controller.erl @@ -306,6 +306,14 @@ terminate(_Reason, _State, _Data) -> ok. wait_for_in_flight_operations() -> + case global:whereis_name(?GLOBAL_NAME) of + Pid when Pid == self() -> + ok; + _ -> + wait_for_in_flight_operations0() + end. + +wait_for_in_flight_operations0() -> case register_globally() of yes -> %% We don't unregister so the controller holds the lock until it