blob: 3e29671fdcc412a8a1e3155d061ef2186d3ccc9a (
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
|
#include "memory.h"
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
void *safe_malloc(size_t size) {
for (size_t i = 0; i < MAX_ALLOC_ATTEMPTS; i++) {
void *p = malloc(size);
if (p)
return p;
if (i < MAX_ALLOC_ATTEMPTS - 1) {
fprintf(stderr, "Failed malloc. Retrying in 1s...\n");
sleep(1);
}
}
fprintf(stderr, "FATAL: Failed malloc %d times. Exiting...", MAX_ALLOC_ATTEMPTS);
exit(EXIT_FAILURE);
}
void *safe_realloc(void *ptr, size_t size) {
if (!ptr)
return safe_malloc(size);
for (size_t i = 0; i < MAX_ALLOC_ATTEMPTS; i++) {
void *p = realloc(ptr, size);
if (p)
return p;
if (i < MAX_ALLOC_ATTEMPTS - 1) {
fprintf(stderr, "Failed realloc. Retrying in 1s...\n");
sleep(1);
}
}
fprintf(stderr, "FATAL: Failed realloc %d times. Exiting...", MAX_ALLOC_ATTEMPTS);
exit(EXIT_FAILURE);
}
|