blob: bf2e1d4035a82c58299b3b9362d35c9d49518cf3 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
|
https://bugs.gentoo.org/967251
https://github.com/OpenMathLib/OpenBLAS/issues/5289
https://github.com/OpenMathLib/OpenBLAS/pull/5303
From 31ef2cbbb353c1331a22ed4f909a6ffb5cc45b45 Mon Sep 17 00:00:00 2001
From: Martin Kroeker <martin@ruby.chemie.uni-freiburg.de>
Date: Fri, 13 Jun 2025 14:11:03 +0200
Subject: [PATCH] Exit if memory allocation keeps failing, instead of looping
forever
---
driver/others/memory.c | 13 +++++++++++--
1 file changed, 11 insertions(+), 2 deletions(-)
diff --git a/driver/others/memory.c b/driver/others/memory.c
index c53e798bc1..c8415f348e 100644
--- a/driver/others/memory.c
+++ b/driver/others/memory.c
@@ -2922,6 +2922,7 @@ void *blas_memory_alloc(int procpos){
blas_unlock(&memory[position].lock);
#endif
if (!memory[position].addr) {
+ int failcount = 0;
do {
#ifdef DEBUG
printf("Allocation Start : %lx\n", base_address);
@@ -2973,8 +2974,16 @@ void *blas_memory_alloc(int procpos){
#ifdef DEBUG
printf(" Success -> %08lx\n", map_address);
#endif
- if (((BLASLONG) map_address) == -1) base_address = 0UL;
-
+ if (((BLASLONG) map_address) == -1) {
+ base_address = 0UL;
+ failcount++;
+ if (failcount >10) {
+ fprintf(stderr, "OpenBLAS error: Memory allocation still failed after 10 retries, giving up.\n");
+ exit(1);
+ }
+ } else {
+ failcount = 0;
+ }
if (base_address) base_address += BUFFER_SIZE + FIXED_PAGESIZE;
} while ((BLASLONG)map_address == -1);
|