From b3c6852d2d716580b79c41c84f3d087b86b93d10 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Hoguin?= <lhoguin@vmware.com> Date: Mon, 27 Feb 2023 15:27:32 +0100 Subject: [PATCH] Fix rabbitmq-diagnostics remote_shell for 26.0 (#7441) (cherry picked from commit 74ce1a4bccfb4735d3f395e3556c8763d2a4cc64) (cherry picked from commit e3a356473a1ae351831da0df3ada10316079bbf2) --- .../commands/remote_shell_command.ex | 24 ++++++++++++------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/remote_shell_command.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/remote_shell_command.ex index 1d4726bc61a5..231b09c3ff19 100644 --- a/deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/remote_shell_command.ex +++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/remote_shell_command.ex @@ -6,19 +6,27 @@ defmodule RabbitMQ.CLI.Diagnostics.Commands.RemoteShellCommand do @behaviour RabbitMQ.CLI.CommandBehaviour + @dialyzer :no_missing_calls use RabbitMQ.CLI.Core.MergesNoDefaults use RabbitMQ.CLI.Core.AcceptsNoPositionalArguments def run([], %{node: node_name}) do - _ = Supervisor.terminate_child(:kernel_sup, :user) - Process.flag(:trap_exit, true) - user_drv = :user_drv.start(['tty_sl -c -e', {node_name, :shell, :start, []}]) - Process.link(user_drv) - - receive do - {'EXIT', _user_drv, _} -> - {:ok, "Disconnected from #{node_name}."} + _ = :c.l(:shell) + + if :erlang.function_exported(:shell, :start_interactive, 1) do + :shell.start_interactive({node_name, :shell, :start, []}) + :timer.sleep(:infinity) + else + _ = Supervisor.terminate_child(:kernel_sup, :user) + Process.flag(:trap_exit, true) + user_drv = :user_drv.start(['tty_sl -c -e', {node_name, :shell, :start, []}]) + Process.link(user_drv) + + receive do + {'EXIT', _user_drv, _} -> + {:ok, "Disconnected from #{node_name}."} + end end end