Don't forget to close socket of timed out flow

This commit is contained in:
Evgeniy Khramtsov 2014-06-12 09:27:32 +04:00
parent 4b82a38cf7
commit 7892b72bcb
1 changed files with 12 additions and 0 deletions

View File

@ -321,6 +321,11 @@ delete_expired_session(US, TRef) ->
fun(#sip_session{reg_tref = T1, fun(#sip_session{reg_tref = T1,
flow_tref = T2} = Session) flow_tref = T2} = Session)
when T1 == TRef; T2 == TRef -> when T1 == TRef; T2 == TRef ->
if T2 /= undefined ->
close_socket(Session);
true ->
ok
end,
delete_session(Session); delete_session(Session);
(_) -> (_) ->
ok ok
@ -518,6 +523,13 @@ set_monitor_and_timer(#sip_session{socket = #sip_socket{type = Type,
set_timer(#sip_session{us = US}, Timeout) -> set_timer(#sip_session{us = US}, Timeout) ->
erlang:start_timer(Timeout * 1000, self(), US). erlang:start_timer(Timeout * 1000, self(), US).
close_socket(#sip_session{socket = SIPSocket}) ->
if SIPSocket#sip_socket.type /= udp ->
esip_socket:close(SIPSocket);
true ->
ok
end.
delete_session(#sip_session{reg_tref = RegTRef, delete_session(#sip_session{reg_tref = RegTRef,
flow_tref = FlowTRef, flow_tref = FlowTRef,
conn_mref = MRef} = Session) -> conn_mref = MRef} = Session) ->