From 70011b7bafe2ffbc67f1251e4ac49f615aac3bd2 Mon Sep 17 00:00:00 2001 From: getong <3949379+getong@users.noreply.github.com> Date: Sat, 1 Dec 2018 00:27:15 +0800 Subject: [PATCH] erlang/otp deprecated erlang:get_stacktrace/0 function, use the function as platform version detected --- include/exception.hrl | 7 +++++++ src/erllambda.erl | 7 ++++--- src/erllambda_config_srv.erl | 6 +++--- 3 files changed, 14 insertions(+), 6 deletions(-) create mode 100644 include/exception.hrl diff --git a/include/exception.hrl b/include/exception.hrl new file mode 100644 index 0000000..ae64192 --- /dev/null +++ b/include/exception.hrl @@ -0,0 +1,7 @@ +-ifdef(OTP_RELEASE). %% this implies 21 or higher +-define(EXCEPTION(Class, Reason, Stacktrace), Class:Reason:Stacktrace). +-define(GET_STACK(Stacktrace), Stacktrace). +-else. +-define(EXCEPTION(Class, Reason, _), Class:Reason). +-define(GET_STACK(_), erlang:get_stacktrace()). +-endif. diff --git a/src/erllambda.erl b/src/erllambda.erl index b9d8ce8..42e7eda 100644 --- a/src/erllambda.erl +++ b/src/erllambda.erl @@ -25,7 +25,8 @@ %% private - handler invocation entry point, used by http api -export([invoke/3]). --include("include/erllambda.hrl"). +-include("erllambda.hrl"). +-include("exception.hrl"). -include_lib("erlcloud/include/erlcloud_aws.hrl"). -ifdef(TEST). @@ -315,8 +316,8 @@ invoke_exec( Handler, Event, Context ) -> % both top level handler and we can can call success/fail throw:{?MODULE, result, JsonMap} -> {ok, JsonMap}; throw:{?MODULE, failure, JsonMap} -> {handled, JsonMap}; - Type:Reason -> - Trace = erlang:get_stacktrace(), + ?EXCEPTION(Type, Reason, Stacktrace) -> + Trace = ?GET_STACK(Stacktrace), Message = format( "terminated with exception {~p, ~p}", [Type, Reason] ), message_send( format( "~s with trace ~p", [Message, Trace] ) ), Response = #{errorType => 'HandlerFailure', diff --git a/src/erllambda_config_srv.erl b/src/erllambda_config_srv.erl index 572cb94..9344b69 100755 --- a/src/erllambda_config_srv.erl +++ b/src/erllambda_config_srv.erl @@ -17,6 +17,7 @@ -export([start_link/0]). -include("erllambda.hrl"). +-include("exception.hrl"). -ifdef(TEST). -include_lib("eunit/include/eunit.hrl"). -endif. @@ -152,9 +153,8 @@ serialize_run( Key, Generate ) -> try Generate() catch - Type:Reason -> - Trace = erlang:get_stacktrace(), - {error, {exception, Type, Reason, Trace}} + ?EXCEPTION(Type, Reason, Stacktrace) -> + {error, {exception, Type, Reason, ?GET_STACK(Stacktrace)}} end, Message = {complete, self(), Key, Result}, gen_server:cast( Parent, Message )