pespin has uploaded this change for review.
s2b: Spawn process for each received packet
Change-Id: I460b382aedbc10b06d846131b4cd838e30668df4
---
M src/epdg_gtpc_s2b.erl
1 file changed, 35 insertions(+), 4 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/erlang/osmo-epdg refs/changes/09/36109/1
diff --git a/src/epdg_gtpc_s2b.erl b/src/epdg_gtpc_s2b.erl
index a4ab573..cef9bab 100644
--- a/src/epdg_gtpc_s2b.erl
+++ b/src/epdg_gtpc_s2b.erl
@@ -179,10 +179,11 @@
%% @callback gen_server
handle_info({udp, _Socket, IP, InPortNo, RxMsg}, State) ->
- lager:info("S2b: Rx from IP ~p port ~p: ~p~n", [IP, InPortNo, RxMsg]),
- Req = gtp_packet:decode(RxMsg),
- lager:info("S2b: Rx from IP ~p port ~p: ~p~n", [IP, InPortNo, Req]),
- rx_gtp(Req, State);
+ lager:debug("S2b: Rx from IP ~p port ~p: ~p~n", [IP, InPortNo, RxMsg]),
+ spawn_wait_ret(fun() ->
+ rx_udp(IP, InPortNo, RxMsg, State)
+ end,
+ {noreply, State});
handle_info(Info, State) ->
lager:info("S2b handle_info: ~p ~n", [Info]),
{noreply, State}.
@@ -359,6 +360,27 @@
connect(Address) ->
connect(?SVC_NAME, Address).
+%% Calls Fun on a spawned monitored process and returns Fun ret.
+%% If spawned process crashes, return DefaultRet.
+spawn_wait_ret(Fun, DefaultRet) ->
+ MyPID=self(),
+ {Pid, MRef} = spawn_monitor(fun() ->
+ Ret = Fun(),
+ MyPID ! {self(), Ret}
+ end),
+ receive
+ {'DOWN', MRef, process, _, _Reason} ->
+ DefaultRet;
+ {Pid, Ret} ->
+ erlang:demonitor(MRef, [flush]),
+ Ret
+ end.
+
+rx_udp(IP, InPortNo, RxMsg, State) ->
+ Req = gtp_packet:decode(RxMsg),
+ lager:debug("S2b: Rx from IP ~p port ~p: ~p~n", [IP, InPortNo, Req]),
+ rx_gtp(Req, State).
+
rx_gtp(Resp = #gtp{version = v2, type = create_session_response}, State0) ->
Sess0 = find_gtp_session_by_local_teic(Resp#gtp.tei, State0),
case Sess0 of
To view, visit change 36109. To unsubscribe, or for help writing mail filters, visit settings.