summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMicael Karlberg <bmk@erlang.org>2022-12-02 19:58:53 +0100
committerMicael Karlberg <bmk@erlang.org>2022-12-02 19:58:53 +0100
commit7b8e3e157edf0f4bfbc93eb7265b1f1986171097 (patch)
tree7dc213a2c0f1a75ff7e3d7eb925159bdf5e814b9
parent484b3bb9668054854c6fb2c0682e629d75d04507 (diff)
downloaderlang-7b8e3e157edf0f4bfbc93eb7265b1f1986171097.tar.gz
[snmp|agent] Add explicit socket(s) close when terminating net-if
OTP-18352
-rw-r--r--lib/snmp/src/manager/snmpm_net_if.erl12
1 files changed, 11 insertions, 1 deletions
diff --git a/lib/snmp/src/manager/snmpm_net_if.erl b/lib/snmp/src/manager/snmpm_net_if.erl
index af78308147..af4f6e2f70 100644
--- a/lib/snmp/src/manager/snmpm_net_if.erl
+++ b/lib/snmp/src/manager/snmpm_net_if.erl
@@ -750,8 +750,18 @@ handle_info_down(Info, State) ->
%% Purpose: Shutdown the server
%% Returns: any (ignored by gen_server)
%%--------------------------------------------------------------------
-terminate(Reason, #state{log = Log, irgc = IrGcRef}) ->
+terminate(Reason, #state{log = Log,
+ irgc = IrGcRef,
+ transports = Transports}) ->
?vdebug("terminate: ~p", [Reason]),
+ %% Close all transports:
+ Close =
+ fun(S) ->
+ ?vlog("try close socket ~p", [S]),
+ (catch gen_udp:close(S))
+ end,
+ _ = [Close(Socket) || #transport{socket = Socket} <- Transports],
+ %% Stop IR GC timer
irgc_stop(IrGcRef),
%% Close logs
do_close_log(Log),