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
adding sleep sets to reduction techniques
[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 002d9c54da4d3d1a5cecbd7febf867b7968c48cf..07176055d097f1d8ffbdc7ace1cb0683be7a8d7a 100644
(file)
--- a/
src/xbt/mmalloc/mm_legacy.c
+++ b/
src/xbt/mmalloc/mm_legacy.c
@@
-1,5
+1,4
@@
-/* Copyright (c) 2010-2020. 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,20
+6,16
@@
/* 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/mc_base.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 ***** */
static int __malloc_use_mmalloc;
/* ***** Whether to use `mmalloc` of the underlying malloc ***** */
static int __malloc_use_mmalloc;
+int mmalloc_pagesize = 0;
int malloc_use_mmalloc(void)
{
int malloc_use_mmalloc(void)
{
@@
-44,20
+39,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
@@
-65,13
+54,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;
@@
-117,7
+111,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_
VARIABLE) ? 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 {
@@
-133,6
+127,8
@@
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
}
+ mmalloc_pagesize = getpagesize();
+
mm_initializing = 0;
mm_initialized = 1;
}
mm_initializing = 0;
mm_initialized = 1;
}
@@
-164,10
+160,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)
@@
-186,9
+179,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);
@@
-212,10
+203,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)
@@
-235,8
+223,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 */