File 0447-asn1-Unload-generated-code-after-each-test-case.patch of Package erlang

From fd1ea68fbe7b98b651aaf050f100aab136a5be80 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Bj=C3=B6rn=20Gustavsson?= <bjorn@erlang.org>
Date: Thu, 31 Aug 2023 10:51:52 +0200
Subject: [PATCH] asn1: Unload generated code after each test case

On 32-bit systems, we sometimes run out of address space when running
the asn1 test suite. Try mitigating that by unloading generated code
after each test case.
---
 lib/asn1/test/asn1_SUITE.erl | 17 +++++++++++++++++
 1 file changed, 17 insertions(+)

diff --git a/lib/asn1/test/asn1_SUITE.erl b/lib/asn1/test/asn1_SUITE.erl
index 2a02f08a95..b45a62ceab 100644
--- a/lib/asn1/test/asn1_SUITE.erl
+++ b/lib/asn1/test/asn1_SUITE.erl
@@ -191,9 +191,26 @@ init_per_testcase(Func, Config) ->
 
 end_per_testcase(_Func, Config) ->
     CaseDir = proplists:get_value(case_dir, Config),
+    unload_modules(CaseDir),
     asn1_test_lib:rm_dirs([CaseDir]),
     code:del_path(CaseDir).
 
+unload_modules(CaseDir) ->
+    F = fun(Name0, Acc) ->
+                Name1 = filename:rootname(filename:basename(Name0)),
+                Name = list_to_existing_atom(Name1),
+                [Name|Acc]
+        end,
+    Beams1 = lists:usort(filelib:fold_files(CaseDir, "[.]beam\$", true, F, [])),
+    Beams = [M || M <- Beams1, code:is_loaded(M) =/= false],
+    _ = [begin
+             code:purge(M),
+             code:delete(M),
+             code:purge(M),
+             io:format("Unloaded ~p", [M])
+         end || M <- Beams],
+    ok.
+
 %%------------------------------------------------------------------------------
 %% Test runners
 %%------------------------------------------------------------------------------
-- 
2.35.3

openSUSE Build Service is sponsored by