Skip to content

Commit e6244f3

Browse files
committed
Improve release_socket
1 parent 2c288b7 commit e6244f3

2 files changed

Lines changed: 13 additions & 3 deletions

File tree

src/xmpp_socket.erl

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,8 @@
4545
pp/1,
4646
sockname/1,
4747
peername/1,
48-
send_ws_ping/1, get_negotiated_cipher/1, get_tls_last_message/2]).
48+
send_ws_ping/1, get_negotiated_cipher/1, get_tls_last_message/2,
49+
release/1]).
4950

5051
-include("xmpp.hrl").
5152
-include_lib("public_key/include/public_key.hrl").
@@ -345,6 +346,13 @@ get_verify_result(SocketData) ->
345346
close(#socket_state{sockmod = SockMod, socket = Socket}) ->
346347
SockMod:close(Socket).
347348

349+
release(#socket_state{xml_stream = XMLStream} = State) ->
350+
close(State),
351+
case XMLStream of
352+
undefined -> ok;
353+
_ -> fxml_stream:close(XMLStream)
354+
end.
355+
348356
-spec sockname(socket_state()) -> {ok, endpoint()} | {error, inet:posix()}.
349357
sockname(#socket_state{sockmod = SockMod,
350358
socket = Socket,

src/xmpp_stream_in.erl

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -312,8 +312,10 @@ handle_cast({send, Pkt}, State) ->
312312
noreply(send_pkt(State, Pkt));
313313
handle_cast(send_ws_ping, State) ->
314314
noreply(send_ws_ping(State));
315-
handle_cast(release_socket, State) ->
316-
erlang:demonitor(maps:get(socket_monitor, State, make_ref())),
315+
handle_cast(release_socket, #{socket := Socket,
316+
socket_monitor := Monitor} = State) ->
317+
erlang:demonitor(Monitor),
318+
xmpp_socket:release(Socket),
317319
State2 = maps:remove(socket, State),
318320
State3 = maps:remove(socket_monitor, State2),
319321
noreply(State3);

0 commit comments

Comments
 (0)