pespin has uploaded this change for review. ( https://gerrit.osmocom.org/c/erlang/osmo-epdg/+/35895?usp=email )
Change subject: epdg_diameter_swm: Update PID if session already exists ......................................................................
epdg_diameter_swm: Update PID if session already exists
If the FSM was recreated, during the first step it may have a different PID. Update it so that we send the answer back to the proper PID.
Change-Id: I5e4f0ff4292c364f47d61ba629df50e8e3d35017 --- M src/epdg_diameter_swm.erl 1 file changed, 22 insertions(+), 2 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/erlang/osmo-epdg refs/changes/95/35895/1
diff --git a/src/epdg_diameter_swm.erl b/src/epdg_diameter_swm.erl index 57c0921..800df44 100644 --- a/src/epdg_diameter_swm.erl +++ b/src/epdg_diameter_swm.erl @@ -181,7 +181,15 @@ Sess = find_swm_session_by_imsi(Imsi, State), case Sess of #swm_session{imsi = Imsi} -> - {Sess, State}; + % Update Pid since it may have changed: + Sess1 = Sess#swm_session{pid = Pid}, + State1 = update_swm_session(Sess, Sess1, State), + {Sess1, State1}; undefined -> new_swm_session(Imsi, Pid, State) - end. \ No newline at end of file + end. + +update_swm_session(OldSess, NewSess, State) -> + SetRemoved = sets:del_element(OldSess, State#swm_state.sessions), + SetUpdated = sets:add_element(NewSess, SetRemoved), + State#swm_state{sessions = SetUpdated}.