File 0631-GC-Support-heap-needs-of-more-than-2-GiB.patch of Package erlang

From dd75c3792bc35bf431435fdb62c448c847397652 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Bj=C3=B6rn=20Gustavsson?= <bjorn@erlang.org>
Date: Wed, 18 Jan 2023 15:55:10 +0100
Subject: [PATCH 1/3] GC: Support heap needs of more than 2 GiB

Use the `Uint` type instead of `int`.
---
 erts/emulator/beam/erl_gc.c | 16 ++++++++--------
 erts/emulator/beam/erl_gc.h |  4 ++--
 2 files changed, 10 insertions(+), 10 deletions(-)

diff --git a/erts/emulator/beam/erl_gc.c b/erts/emulator/beam/erl_gc.c
index 2ef36009c7..582f3c7485 100644
--- a/erts/emulator/beam/erl_gc.c
+++ b/erts/emulator/beam/erl_gc.c
@@ -123,13 +123,13 @@ static Eterm *full_sweep_heaps(Process *p,
 			       char *oh, Uint oh_size,
 			       Eterm *objv, int nobj);
 static int garbage_collect(Process* p, ErlHeapFragment *live_hf_end,
-			   int need, Eterm* objv, int nobj, int fcalls,
+			   Uint need, Eterm* objv, int nobj, int fcalls,
 			   Uint max_young_gen_usage);
 static int major_collection(Process* p, ErlHeapFragment *live_hf_end,
-			    int need, Eterm* objv, int nobj,
+			    Uint need, Eterm* objv, int nobj,
 			    Uint ygen_usage, Uint *recl);
 static int minor_collection(Process* p, ErlHeapFragment *live_hf_end,
-			    int need, Eterm* objv, int nobj,
+			    Uint need, Eterm* objv, int nobj,
 			    Uint ygen_usage, Uint *recl);
 static void do_minor(Process *p, ErlHeapFragment *live_hf_end,
 		     char *mature, Uint mature_size,
@@ -674,7 +674,7 @@ check_for_possibly_long_gc(Process *p, Uint ygen_usage)
  */
 static int
 garbage_collect(Process* p, ErlHeapFragment *live_hf_end,
-		int need, Eterm* objv, int nobj, int fcalls,
+		Uint need, Eterm* objv, int nobj, int fcalls,
 		Uint max_young_gen_usage)
 {
     Uint reclaimed_now = 0;
@@ -876,7 +876,7 @@ do_major_collection:
 }
 
 int
-erts_garbage_collect_nobump(Process* p, int need, Eterm* objv, int nobj, int fcalls)
+erts_garbage_collect_nobump(Process* p, Uint need, Eterm* objv, int nobj, int fcalls)
 {
     int reds, reds_left;
     if (p->sig_qs.flags & (FS_ON_HEAP_MSGQ|FS_OFF_HEAP_MSGQ_CHNG)) {
@@ -893,7 +893,7 @@ erts_garbage_collect_nobump(Process* p, int need, Eterm* objv, int nobj, int fca
 }
 
 void
-erts_garbage_collect(Process* p, int need, Eterm* objv, int nobj)
+erts_garbage_collect(Process* p, Uint need, Eterm* objv, int nobj)
 {
     int reds;
     if (p->sig_qs.flags & (FS_ON_HEAP_MSGQ|FS_OFF_HEAP_MSGQ_CHNG)) {
@@ -1354,7 +1354,7 @@ erts_garbage_collect_literals(Process* p, Eterm* literals,
 
 static int
 minor_collection(Process* p, ErlHeapFragment *live_hf_end,
-		 int need, Eterm* objv, int nobj,
+		 Uint need, Eterm* objv, int nobj,
 		 Uint ygen_usage, Uint *recl)
 {
     Eterm *mature = p->abandoned_heap ? p->abandoned_heap : p->heap;
@@ -1789,7 +1789,7 @@ do_minor(Process *p, ErlHeapFragment *live_hf_end,
 
 static int
 major_collection(Process* p, ErlHeapFragment *live_hf_end,
-		 int need, Eterm* objv, int nobj,
+		 Uint need, Eterm* objv, int nobj,
 		 Uint ygen_usage, Uint *recl)
 {
     Uint size_before, size_after, stack_size;
diff --git a/erts/emulator/beam/erl_gc.h b/erts/emulator/beam/erl_gc.h
index da4e5723c1..fab739c538 100644
--- a/erts/emulator/beam/erl_gc.h
+++ b/erts/emulator/beam/erl_gc.h
@@ -169,8 +169,8 @@ Eterm erts_process_gc_info(struct process*, Uint *, Eterm **, Uint, Uint);
 
 void erts_gc_info(ErtsGCInfo *gcip);
 void erts_init_gc(void);
-int erts_garbage_collect_nobump(struct process*, int, Eterm*, int, int);
-void erts_garbage_collect(struct process*, int, Eterm*, int);
+int erts_garbage_collect_nobump(struct process*, Uint, Eterm*, int, int);
+void erts_garbage_collect(struct process*, Uint, Eterm*, int);
 void erts_garbage_collect_hibernate(struct process* p);
 Eterm erts_gc_after_bif_call_lhf(struct process* p, ErlHeapFragment *live_hf_end,
 				 Eterm result, Eterm* regs, Uint arity);
-- 
2.35.3

openSUSE Build Service is sponsored by