File 4051-Optimize-cover-operations-to-avoid-bytecode-copies.patch of Package erlang

From 851eeb94bd3ea665a1f26a94a58262f89348d237 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jos=C3=A9=20Valim?= <jose.valim@gmail.com>
Date: Wed, 11 Mar 2026 07:44:55 +0100
Subject: [PATCH] Optimize cover operations to avoid bytecode copies

* Do not store bytecode in local only mode
* Do not copy bytecode when traversing modules
---
 lib/tools/src/cover.erl | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/lib/tools/src/cover.erl b/lib/tools/src/cover.erl
index 55d7aa69e1..1733eb4a19 100644
--- a/lib/tools/src/cover.erl
+++ b/lib/tools/src/cover.erl
@@ -2165,7 +2165,7 @@ do_compile_beam2(Module,Beam,UserOptions,Forms0,MainFile,LocalOnly) ->
     case code:load_binary(Module, ?TAG, Binary) of
 	{module, Module} ->
 	    %% Store binary code so it can be loaded on remote nodes.
-	    ets:insert(?BINARY_TABLE, {Module, Binary}),
+        ets:insert(?BINARY_TABLE, {Module, (not LocalOnly) andalso Binary}),
 	    {ok, Module};
 	_Error ->
 	    do_clear(Module),
@@ -2440,7 +2440,7 @@ delete_all_counters() ->
 
 %% Collect data for all modules
 collect(Nodes) ->
-    Modules = [Module || {Module,_} <- ets:tab2list(?BINARY_TABLE)],
+    Modules = [Module || [Module] <- ets:match(?BINARY_TABLE, {'$1', '_'})],
     collect_modules(Modules, Nodes).
 
 %% Collect data for a list of modules
@@ -2537,8 +2537,8 @@ analyse_list(Modules, Analysis, Level, State) ->
 
 analyse_all(Analysis, Level, State) ->
     collect(State#main_state.nodes),
-    All = ets:tab2list(?BINARY_TABLE),
-    Fun = fun({Module,_}) ->
+    All = ets:match(?BINARY_TABLE, {'$1', '_'}),
+    Fun = fun([Module]) ->
 		  do_analyse(Module, Analysis, Level)
 	  end,
     {result, lists:flatten(pmap(Fun, All)), []}.
-- 
2.51.0

openSUSE Build Service is sponsored by