diff --git a/include/cluster_info_compat.hrl b/include/cluster_info_compat.hrl new file mode 100644 index 0000000..4b7c5e9 --- /dev/null +++ b/include/cluster_info_compat.hrl @@ -0,0 +1,13 @@ +-ifndef(CLUSTER_INFO_COMPAT_HRL). + +-ifdef(OTP_RELEASE). %% this implies OTP 21 or higher +-define(COMPAT_CATCH(Class, Reason, Stacktrace), Class:Reason:Stacktrace). +-define(COMPAT_GET_STACKTRACE(Stacktrace), Stacktrace). +-else. +-define(COMPAT_CATCH(Class, Reason, _), Class:Reason). +-define(COMPAT_GET_STACKTRACE(_), erlang:get_stacktrace()). +-endif. + +-define(CLUSTER_INFO_COMPAT_HRL, 1). + +-endif. diff --git a/src/cluster_info.erl b/src/cluster_info.erl index c70e3a2..be99287 100644 --- a/src/cluster_info.erl +++ b/src/cluster_info.erl @@ -24,6 +24,8 @@ -define(DICT_KEY, '^_^--cluster_info'). +-include("cluster_info_compat.hrl"). + %% application callbacks %% Note: It is *not* necessary to start this application as a real/true OTP %% application before you can use it. The application behavior here @@ -118,9 +120,9 @@ dump_node(Node, Path, Opts) when is_atom(Node), is_list(Path) -> {ok, MRef} = gmt_util_make_monitor(Remote), Res = try ok = collect_remote_info(Remote, FH) - catch X:Y -> + catch ?COMPAT_CATCH(X, Y, ST) -> io:format("Error: ~P ~P at ~p\n", - [X, 20, Y, 20, erlang:get_stacktrace()]), + [X, 20, Y, 20, ?COMPAT_GET_STACKTRACE(ST)]), error after catch file:close(FH), @@ -262,9 +264,9 @@ dump_local_info(CPid, Opts) -> [Name, node()]), format_noescape(CPid, "
\n", []),
Fun(CPid)
- catch X:Y ->
+ catch ?COMPAT_CATCH(X, Y, ST) ->
format(CPid, "Error in ~p: ~p ~p at ~p\n",
- [Name, X, Y, erlang:get_stacktrace()])
+ [Name, X, Y, ?COMPAT_GET_STACKTRACE(ST)])
after
format_noescape(CPid, "\n", []),
format_noescape(CPid, "\n",[])
diff --git a/src/cluster_info_basic.erl b/src/cluster_info_basic.erl
index 26fa94a..65c2a76 100644
--- a/src/cluster_info_basic.erl
+++ b/src/cluster_info_basic.erl
@@ -17,6 +17,8 @@
-module(cluster_info_basic).
+-include("cluster_info_compat.hrl").
+
%% Registration API
-export([register/0]).
@@ -76,9 +78,9 @@ application_info(C) ->
cluster_info:format(C, " ~p\n\n", [application:get_all_key(App)]),
cluster_info:format(C, " Application:get_all_env(~p):\n", [App]),
cluster_info:format(C, " ~p\n\n", [application:get_all_env(App)])
- catch X:Y ->
+ catch ?COMPAT_CATCH(X, Y, ST) ->
cluster_info:format(C, "Error for ~p: ~p ~p at ~p\n",
- [App, X, Y, erlang:get_stacktrace()])
+ [App, X, Y, ?COMPAT_GET_STACKTRACE(ST)])
end || App <- lists:sort([A || {A, _, _} <- application:which_applications()])].
capture_ets_i(C) ->
@@ -166,9 +168,9 @@ loaded_modules(C) ->
[try
cluster_info:format(C, " Module ~p:\n", [Mod]),
cluster_info:format(C, " ~p\n\n", [Mod:module_info()])
- catch X:Y ->
+ catch ?COMPAT_CATCH(X, Y, ST) ->
cluster_info:format(C, "Error for ~p: ~p ~p at ~p\n",
- [Mod, X, Y, erlang:get_stacktrace()])
+ [Mod, X, Y, ?COMPAT_GET_STACKTRACE(ST)])
end || Mod <- lists:sort([M || {M, _} <- code:all_loaded()])].
memory_hogs(C, Num) ->