A
lgorithmique
N
umérique
D
istribuée
Public GIT Repository
projects
/
simgrid.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Merge branch 'master' of https://framagit.org/simgrid/simgrid
[simgrid.git]
/
src
/
xbt
/
mmalloc
/
mm_legacy.c
diff --git
a/src/xbt/mmalloc/mm_legacy.c
b/src/xbt/mmalloc/mm_legacy.c
index
7ab16fd
..
5cd89d5
100644
(file)
--- a/
src/xbt/mmalloc/mm_legacy.c
+++ b/
src/xbt/mmalloc/mm_legacy.c
@@
-1,5
+1,4
@@
-/* Copyright (c) 2010-2021. The SimGrid Team.
- * All rights reserved. */
+/* Copyright (c) 2010-2023. The SimGrid Team. All rights reserved. */
/* This program is free software; you can redistribute it and/or modify it
* under the terms of the license (GNU LGPL) which comes with this package. */
/* This program is free software; you can redistribute it and/or modify it
* under the terms of the license (GNU LGPL) which comes with this package. */
@@
-7,15
+6,11
@@
/* Redefine the classical malloc/free/realloc functions so that they fit well in the mmalloc framework */
#define _GNU_SOURCE
/* Redefine the classical malloc/free/realloc functions so that they fit well in the mmalloc framework */
#define _GNU_SOURCE
-#include
<stdlib.h>
+#include
"mmprivate.h"
#include <dlfcn.h>
#include <dlfcn.h>
-
-#include "mmprivate.h"
-#include "src/internal_config.h"
-#include "src/mc/remote/mc_protocol.h"
-#include "src/xbt_modinter.h"
#include <math.h>
#include <math.h>
+#include <stdlib.h>
/* ***** Whether to use `mmalloc` of the underlying malloc ***** */
/* ***** Whether to use `mmalloc` of the underlying malloc ***** */
@@
-43,20
+38,14
@@
xbt_mheap_t mmalloc_get_current_heap(void)
}
/* Override the malloc-like functions if MC is activated at compile time */
}
/* Override the malloc-like functions if MC is activated at compile time */
-#if SIMGRID_HAVE_MC
-
/* ***** Temporary allocator
*
* This is used before we have found the real malloc implementation with dlsym.
*/
/* ***** Temporary allocator
*
* This is used before we have found the real malloc implementation with dlsym.
*/
-#ifdef __FreeBSD__ /* FreeBSD require more memory, other might */
-# define BUFFER_SIZE 256
-#else /* Valid on: Linux */
-# define BUFFER_SIZE 32
-#endif
static size_t fake_alloc_index;
static size_t fake_alloc_index;
-static uint64_t buffer[BUFFER_SIZE];
+static uint64_t buffer[mmalloc_preinit_buffer_size];
+uint64_t* mmalloc_preinit_buffer = buffer;
/* Fake implementations, they are used to fool dlsym:
* dlsym used calloc and falls back to some other mechanism
/* Fake implementations, they are used to fool dlsym:
* dlsym used calloc and falls back to some other mechanism
@@
-64,13
+53,18
@@
static uint64_t buffer[BUFFER_SIZE];
*/
static void* mm_fake_malloc(size_t n)
{
*/
static void* mm_fake_malloc(size_t n)
{
+ mmalloc_preinit_buffer = buffer;
+
// How many uint64_t do w need?
size_t count = n / sizeof(uint64_t);
if (n % sizeof(uint64_t))
count++;
// Check that we have enough available memory:
// How many uint64_t do w need?
size_t count = n / sizeof(uint64_t);
if (n % sizeof(uint64_t))
count++;
// Check that we have enough available memory:
- if (fake_alloc_index + count >= BUFFER_SIZE)
+ if (fake_alloc_index + count >= mmalloc_preinit_buffer_size) {
+ puts("mmalloc is not initialized yet, but the static buffer used as malloc replacement is already exhausted. "
+ "Please increase `mmalloc_preinit_buffer_size` in mm_legacy.c\n");
exit(127);
exit(127);
+ }
// Allocate it:
uint64_t* res = buffer + fake_alloc_index;
fake_alloc_index += count;
// Allocate it:
uint64_t* res = buffer + fake_alloc_index;
fake_alloc_index += count;
@@
-116,7
+110,7
@@
XBT_ATTRIB_CONSTRUCTOR(101) static void mm_legacy_constructor()
if (mm_initialized)
return;
mm_initializing = 1;
if (mm_initialized)
return;
mm_initializing = 1;
- __malloc_use_mmalloc = getenv(MC_ENV_SOCKET_FD)
? 1 : 0
;
+ __malloc_use_mmalloc = getenv(MC_ENV_SOCKET_FD)
!= NULL
;
if (__malloc_use_mmalloc) {
__mmalloc_current_heap = mmalloc_preinit();
} else {
if (__malloc_use_mmalloc) {
__mmalloc_current_heap = mmalloc_preinit();
} else {
@@
-132,6
+126,7
@@
XBT_ATTRIB_CONSTRUCTOR(101) static void mm_legacy_constructor()
mm_real_calloc = dlsym(RTLD_NEXT, "calloc");
#endif
}
mm_real_calloc = dlsym(RTLD_NEXT, "calloc");
#endif
}
+
mm_initializing = 0;
mm_initialized = 1;
}
mm_initializing = 0;
mm_initialized = 1;
}
@@
-163,10
+158,7
@@
void *malloc(size_t n)
if (!mdp)
return NULL;
if (!mdp)
return NULL;
- LOCK(mdp);
- void *ret = mmalloc(mdp, n);
- UNLOCK(mdp);
- return ret;
+ return mmalloc(mdp, n);
}
void *calloc(size_t nmemb, size_t size)
}
void *calloc(size_t nmemb, size_t size)
@@
-185,9
+177,7
@@
void *calloc(size_t nmemb, size_t size)
if (!mdp)
return NULL;
if (!mdp)
return NULL;
- LOCK(mdp);
void *ret = mmalloc(mdp, nmemb*size);
void *ret = mmalloc(mdp, nmemb*size);
- UNLOCK(mdp);
// This was already done in the callee:
if(!(mdp->options & XBT_MHEAP_OPTION_MEMSET)) {
memset(ret, 0, nmemb * size);
// This was already done in the callee:
if(!(mdp->options & XBT_MHEAP_OPTION_MEMSET)) {
memset(ret, 0, nmemb * size);
@@
-211,10
+201,7
@@
void *realloc(void *p, size_t s)
if (!mdp)
return NULL;
if (!mdp)
return NULL;
- LOCK(mdp);
- void* ret = mrealloc(mdp, p, s);
- UNLOCK(mdp);
- return ret;
+ return mrealloc(mdp, p, s);
}
void free(void *p)
}
void free(void *p)
@@
-234,8
+221,5
@@
void free(void *p)
return;
xbt_mheap_t mdp = GET_HEAP();
return;
xbt_mheap_t mdp = GET_HEAP();
- LOCK(mdp);
mfree(mdp, p);
mfree(mdp, p);
- UNLOCK(mdp);
}
}
-#endif /* SIMGRID_HAVE_MC */