File 3882-Refactor-remove-client-set.patch of Package erlang

From a6c11b12be9e2e4805e2e5a07e8e7776a3be4421 Mon Sep 17 00:00:00 2001
From: Dan Gudmundsson <dgud@erlang.org>
Date: Wed, 4 Jan 2023 10:51:45 +0100
Subject: [PATCH 2/3] Refactor, remove client set

Was only used to lookup if {ip,port} existed, but
we have already have the qeueu for that.
---
 lib/ssl/src/dtls_packet_demux.erl | 72 ++++++++++++-------------------
 1 file changed, 28 insertions(+), 44 deletions(-)

diff --git a/lib/ssl/src/dtls_packet_demux.erl b/lib/ssl/src/dtls_packet_demux.erl
index 19f1d2359c..5c4556fbb8 100644
--- a/lib/ssl/src/dtls_packet_demux.erl
+++ b/lib/ssl/src/dtls_packet_demux.erl
@@ -55,7 +55,6 @@
 	 dtls_options,
 	 emulated_options,
 	 dtls_msq_queues = kv_new(),
-	 clients = set_new(),
 	 dtls_processes = kv_new(),
 	 accepters  = queue:new(),
 	 first,
@@ -194,10 +193,10 @@ handle_info({ErrorTag, Socket, Error}, #state{listener = Socket, transport = {_,
     ?LOG_NOTICE(Report),
     {noreply, State#state{close=true}};
 
-handle_info({'DOWN', _, process, Pid, _}, #state{clients = Clients,
-						 dtls_processes = Processes0,
-                                                 dtls_msq_queues = MsgQueues0,
-                                                 close = ListenClosed} = State) ->
+handle_info({'DOWN', _, process, Pid, _},
+            #state{dtls_processes = Processes0,
+                   dtls_msq_queues = MsgQueues0,
+                   close = ListenClosed} = State) ->
     Client = kv_get(Pid, Processes0),
     Processes = kv_delete(Pid, Processes0),
     MsgQueues = kv_delete(Client, MsgQueues0),
@@ -205,8 +204,7 @@ handle_info({'DOWN', _, process, Pid, _}, #state{clients = Clients,
         true ->
             {stop, normal, State};
         false ->
-            {noreply, State#state{clients = set_delete(Client, Clients),
-                                  dtls_processes = Processes,
+            {noreply, State#state{dtls_processes = Processes,
                                   dtls_msq_queues = MsgQueues}}
     end.
 
@@ -219,38 +217,35 @@ code_change(_OldVsn, State, _Extra) ->
 %%%===================================================================
 %%% Internal functions
 %%%===================================================================
-handle_datagram(Client, Msg, #state{clients = Clients,
-				    accepters = AcceptorsQueue0} = State) ->
-    case set_is_member(Client, Clients) of
-	false ->
+handle_datagram(Client, Msg, #state{dtls_msq_queues = MsgQueues, accepters = AcceptorsQueue0} = State) ->
+    case kv_lookup(Client, MsgQueues) of
+	none ->
 	    case queue:out(AcceptorsQueue0) of
-		{{value, {UserPid, From}}, AcceptorsQueue} ->	
-		    setup_new_connection(UserPid, From, Client, Msg, 
+		{{value, {UserPid, From}}, AcceptorsQueue} ->
+		    setup_new_connection(UserPid, From, Client, Msg,
 					 State#state{accepters = AcceptorsQueue});
 		{empty, _} ->
 		    %% Drop packet client will resend
 		    State
 	    end;
-	true -> 
-	    dispatch(Client, Msg, State)
+	{value, Queue} ->
+	    dispatch(Queue, Client, Msg, State)
     end.
 
-dispatch(Client, Msg, #state{dtls_msq_queues = MsgQueues} = State) ->
-    case kv_lookup(Client, MsgQueues) of
-	{value, Queue0} ->
-	    case queue:out(Queue0) of
-		{{value, Pid}, Queue} when is_pid(Pid) ->
-		    Pid ! Msg,
-		    State#state{dtls_msq_queues = 
-				    kv_update(Client, Queue, MsgQueues)};
-		{{value, _UDP}, _Queue} ->
-		    State#state{dtls_msq_queues = 
-				    kv_update(Client, queue:in(Msg, Queue0), MsgQueues)};
-		{empty, Queue} ->
-		    State#state{dtls_msq_queues = 
-				    kv_update(Client, queue:in(Msg, Queue), MsgQueues)}
-	    end
+dispatch(Queue0, Client, Msg, #state{dtls_msq_queues = MsgQueues} = State) ->
+    case queue:out(Queue0) of
+        {{value, Pid}, Queue} when is_pid(Pid) ->
+            Pid ! Msg,
+            State#state{dtls_msq_queues =
+                            kv_update(Client, Queue, MsgQueues)};
+        {{value, _UDP}, _Queue} ->
+            State#state{dtls_msq_queues =
+                            kv_update(Client, queue:in(Msg, Queue0), MsgQueues)};
+        {empty, Queue} ->
+            State#state{dtls_msq_queues =
+                            kv_update(Client, queue:in(Msg, Queue), MsgQueues)}
     end.
+
 next_datagram(Socket, N) ->
     inet:setopts(Socket, [{active, N}]).
 
@@ -259,7 +254,7 @@ handle_active_once(Client, Pid, #state{dtls_msq_queues = MsgQueues} = State0) ->
     case queue:out(Queue0) of
 	{{value, Pid}, _} when is_pid(Pid) ->
 	    State0;
-	{{value, Msg}, Queue} ->	      
+	{{value, Msg}, Queue} ->
 	    Pid ! Msg,
 	    State0#state{dtls_msq_queues = kv_update(Client, Queue, MsgQueues)};
 	{empty, Queue0} ->
@@ -267,7 +262,6 @@ handle_active_once(Client, Pid, #state{dtls_msq_queues = MsgQueues} = State0) ->
     end.
 
 setup_new_connection(User, From, Client, Msg, #state{dtls_processes = Processes,
-						     clients = Clients,
 						     dtls_msq_queues = MsgQueues,
 						     dtls_options = DTLSOpts,
 						     port = Port,
@@ -281,8 +275,7 @@ setup_new_connection(User, From, Client, Msg, #state{dtls_processes = Processes,
 	    erlang:monitor(process, Pid),
 	    gen_server:reply(From, {ok, Pid, {Client, Socket}}),
 	    Pid ! Msg,
-	    State#state{clients = set_insert(Client, Clients), 
-			dtls_msq_queues = kv_insert(Client, queue:new(), MsgQueues),
+	    State#state{dtls_msq_queues = kv_insert(Client, queue:new(), MsgQueues),
 			dtls_processes = kv_insert(Pid, Client, Processes)};
 	{error, Reason} ->
 	    gen_server:reply(From, {error, Reason}),
@@ -295,7 +288,7 @@ kv_lookup(Key, Store) ->
     gb_trees:lookup(Key, Store).
 kv_insert(Key, Value, Store) ->
     gb_trees:insert(Key, Value, Store).
-kv_get(Key, Store) -> 
+kv_get(Key, Store) ->
     gb_trees:get(Key, Store).
 kv_delete(Key, Store) ->
     gb_trees:delete(Key, Store).
@@ -304,15 +297,6 @@ kv_new() ->
 kv_empty(Store) ->
     gb_trees:is_empty(Store).
 
-set_new() ->
-    gb_sets:empty().
-set_insert(Item, Set) ->
-    gb_sets:insert(Item, Set).
-set_delete(Item, Set) ->
-    gb_sets:delete(Item, Set).
-set_is_member(Item, Set) ->
-    gb_sets:is_member(Item, Set).
-
 call(Server, Msg) ->
     try
         gen_server:call(Server, Msg, infinity)
-- 
2.35.3

openSUSE Build Service is sponsored by