YAPOR: lock memory allocation under YAPOR/dlmalloc
This commit is contained in:
parent
eb6ac94e45
commit
f8070bdd59
45
C/alloc.c
45
C/alloc.c
@ -136,6 +136,9 @@ static inline char *
|
|||||||
call_malloc(unsigned long int size)
|
call_malloc(unsigned long int size)
|
||||||
{
|
{
|
||||||
char *out;
|
char *out;
|
||||||
|
#if USE_DL_MALLOC
|
||||||
|
LOCK(DLMallocLock);
|
||||||
|
#endif
|
||||||
#if INSTRUMENT_MALLOC
|
#if INSTRUMENT_MALLOC
|
||||||
if (mallocs % 1024*4 == 0)
|
if (mallocs % 1024*4 == 0)
|
||||||
minfo('A');
|
minfo('A');
|
||||||
@ -145,6 +148,9 @@ call_malloc(unsigned long int size)
|
|||||||
Yap_PrologMode |= MallocMode;
|
Yap_PrologMode |= MallocMode;
|
||||||
out = (char *) my_malloc(size);
|
out = (char *) my_malloc(size);
|
||||||
Yap_PrologMode &= ~MallocMode;
|
Yap_PrologMode &= ~MallocMode;
|
||||||
|
#if USE_DL_MALLOC
|
||||||
|
UNLOCK(DLMallocLock);
|
||||||
|
#endif
|
||||||
return out;
|
return out;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -158,6 +164,9 @@ static inline char *
|
|||||||
call_realloc(char *p, unsigned long int size)
|
call_realloc(char *p, unsigned long int size)
|
||||||
{
|
{
|
||||||
char *out;
|
char *out;
|
||||||
|
#if USE_DL_MALLOC
|
||||||
|
LOCK(DLMallocLock);
|
||||||
|
#endif
|
||||||
#if INSTRUMENT_MALLOC
|
#if INSTRUMENT_MALLOC
|
||||||
if (mallocs % 1024*4 == 0)
|
if (mallocs % 1024*4 == 0)
|
||||||
minfo('A');
|
minfo('A');
|
||||||
@ -167,6 +176,9 @@ call_realloc(char *p, unsigned long int size)
|
|||||||
Yap_PrologMode |= MallocMode;
|
Yap_PrologMode |= MallocMode;
|
||||||
out = (char *) my_realloc0(p, size);
|
out = (char *) my_realloc0(p, size);
|
||||||
Yap_PrologMode &= ~MallocMode;
|
Yap_PrologMode &= ~MallocMode;
|
||||||
|
#if USE_DL_MALLOC
|
||||||
|
UNLOCK(DLMallocLock);
|
||||||
|
#endif
|
||||||
return out;
|
return out;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -179,6 +191,9 @@ Yap_ReallocCodeSpace(char *p, unsigned long int size)
|
|||||||
void
|
void
|
||||||
Yap_FreeCodeSpace(char *p)
|
Yap_FreeCodeSpace(char *p)
|
||||||
{
|
{
|
||||||
|
#if USE_DL_MALLOC
|
||||||
|
LOCK(DLMallocLock);
|
||||||
|
#endif
|
||||||
Yap_PrologMode |= MallocMode;
|
Yap_PrologMode |= MallocMode;
|
||||||
|
|
||||||
#if INSTRUMENT_MALLOC
|
#if INSTRUMENT_MALLOC
|
||||||
@ -188,6 +203,9 @@ Yap_FreeCodeSpace(char *p)
|
|||||||
#endif
|
#endif
|
||||||
my_free (p);
|
my_free (p);
|
||||||
Yap_PrologMode &= ~MallocMode;
|
Yap_PrologMode &= ~MallocMode;
|
||||||
|
#if USE_DL_MALLOC
|
||||||
|
UNLOCK(DLMallocLock);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
char *
|
char *
|
||||||
@ -199,6 +217,9 @@ Yap_AllocAtomSpace(unsigned long int size)
|
|||||||
void
|
void
|
||||||
Yap_FreeAtomSpace(char *p)
|
Yap_FreeAtomSpace(char *p)
|
||||||
{
|
{
|
||||||
|
#if USE_DL_MALLOC
|
||||||
|
LOCK(DLMallocLock);
|
||||||
|
#endif
|
||||||
Yap_PrologMode |= MallocMode;
|
Yap_PrologMode |= MallocMode;
|
||||||
#if INSTRUMENT_MALLOC
|
#if INSTRUMENT_MALLOC
|
||||||
if (frees % 1024*4 == 0)
|
if (frees % 1024*4 == 0)
|
||||||
@ -207,6 +228,9 @@ Yap_FreeAtomSpace(char *p)
|
|||||||
#endif
|
#endif
|
||||||
my_free (p);
|
my_free (p);
|
||||||
Yap_PrologMode &= ~MallocMode;
|
Yap_PrologMode &= ~MallocMode;
|
||||||
|
#if USE_DL_MALLOC
|
||||||
|
UNLOCK(DLMallocLock);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
@ -219,16 +243,28 @@ Yap_InitPreAllocCodeSpace(void)
|
|||||||
char *ptr;
|
char *ptr;
|
||||||
UInt sz = ScratchPad.msz;
|
UInt sz = ScratchPad.msz;
|
||||||
if (ScratchPad.ptr == NULL) {
|
if (ScratchPad.ptr == NULL) {
|
||||||
|
#if USE_DL_MALLOC
|
||||||
|
LOCK(DLMallocLock);
|
||||||
|
#endif
|
||||||
Yap_PrologMode |= MallocMode;
|
Yap_PrologMode |= MallocMode;
|
||||||
while (!(ptr = my_malloc(sz))) {
|
while (!(ptr = my_malloc(sz))) {
|
||||||
Yap_PrologMode &= ~MallocMode;
|
Yap_PrologMode &= ~MallocMode;
|
||||||
|
#if USE_DL_MALLOC
|
||||||
|
UNLOCK(DLMallocLock);
|
||||||
|
#endif
|
||||||
if (!Yap_growheap(FALSE, Yap_Error_Size, NULL)) {
|
if (!Yap_growheap(FALSE, Yap_Error_Size, NULL)) {
|
||||||
Yap_Error(OUT_OF_HEAP_ERROR, TermNil, Yap_ErrorMessage);
|
Yap_Error(OUT_OF_HEAP_ERROR, TermNil, Yap_ErrorMessage);
|
||||||
return(NULL);
|
return(NULL);
|
||||||
}
|
}
|
||||||
|
#if USE_DL_MALLOC
|
||||||
|
LOCK(DLMallocLock);
|
||||||
|
#endif
|
||||||
Yap_PrologMode |= MallocMode;
|
Yap_PrologMode |= MallocMode;
|
||||||
}
|
}
|
||||||
Yap_PrologMode &= ~MallocMode;
|
Yap_PrologMode &= ~MallocMode;
|
||||||
|
#if USE_DL_MALLOC
|
||||||
|
UNLOCK(DLMallocLock);
|
||||||
|
#endif
|
||||||
ScratchPad.ptr = ptr;
|
ScratchPad.ptr = ptr;
|
||||||
} else {
|
} else {
|
||||||
ptr = ScratchPad.ptr;
|
ptr = ScratchPad.ptr;
|
||||||
@ -251,6 +287,9 @@ Yap_ExpandPreAllocCodeSpace(UInt sz0, void *cip, int safe)
|
|||||||
sz = sz0;
|
sz = sz0;
|
||||||
sz = AdjustLargePageSize(sz+sz/4);
|
sz = AdjustLargePageSize(sz+sz/4);
|
||||||
|
|
||||||
|
#if USE_DL_MALLOC
|
||||||
|
LOCK(DLMallocLock);
|
||||||
|
#endif
|
||||||
#if INSTRUMENT_MALLOC
|
#if INSTRUMENT_MALLOC
|
||||||
if (reallocs % 1024*4 == 0)
|
if (reallocs % 1024*4 == 0)
|
||||||
minfo('R');
|
minfo('R');
|
||||||
@ -259,9 +298,15 @@ Yap_ExpandPreAllocCodeSpace(UInt sz0, void *cip, int safe)
|
|||||||
Yap_PrologMode |= MallocMode;
|
Yap_PrologMode |= MallocMode;
|
||||||
if (!(ptr = my_realloc(ScratchPad.ptr, sz, ScratchPad.sz, safe))) {
|
if (!(ptr = my_realloc(ScratchPad.ptr, sz, ScratchPad.sz, safe))) {
|
||||||
Yap_PrologMode &= ~MallocMode;
|
Yap_PrologMode &= ~MallocMode;
|
||||||
|
#if USE_DL_MALLOC
|
||||||
|
UNLOCK(DLMallocLock);
|
||||||
|
#endif
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
Yap_PrologMode &= ~MallocMode;
|
Yap_PrologMode &= ~MallocMode;
|
||||||
|
#if USE_DL_MALLOC
|
||||||
|
UNLOCK(DLMallocLock);
|
||||||
|
#endif
|
||||||
ScratchPad.sz = ScratchPad.msz = sz;
|
ScratchPad.sz = ScratchPad.msz = sz;
|
||||||
ScratchPad.ptr = ptr;
|
ScratchPad.ptr = ptr;
|
||||||
AuxBase = ptr;
|
AuxBase = ptr;
|
||||||
|
@ -51,6 +51,9 @@
|
|||||||
#if USE_DL_MALLOC
|
#if USE_DL_MALLOC
|
||||||
#define Yap_MemoryHoles Yap_heap_regs->memory_holes
|
#define Yap_MemoryHoles Yap_heap_regs->memory_holes
|
||||||
#define Yap_NOfMemoryHoles Yap_heap_regs->nof_memory_holes
|
#define Yap_NOfMemoryHoles Yap_heap_regs->nof_memory_holes
|
||||||
|
#if defined(YAPOR) || defined(THREADS)
|
||||||
|
#define DLMallocLock Yap_heap_regs->dlmalloc_lock
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
#if USE_DL_MALLOC || (USE_SYSTEM_MALLOC && HAVE_MALLINFO)
|
#if USE_DL_MALLOC || (USE_SYSTEM_MALLOC && HAVE_MALLINFO)
|
||||||
#ifndef HeapUsed
|
#ifndef HeapUsed
|
||||||
|
@ -51,6 +51,9 @@
|
|||||||
#if USE_DL_MALLOC
|
#if USE_DL_MALLOC
|
||||||
struct memory_hole memory_holes[MAX_DLMALLOC_HOLES];
|
struct memory_hole memory_holes[MAX_DLMALLOC_HOLES];
|
||||||
UInt nof_memory_holes;
|
UInt nof_memory_holes;
|
||||||
|
#if defined(YAPOR) || defined(THREADS)
|
||||||
|
lockvar dlmalloc_lock;
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
#if USE_DL_MALLOC || (USE_SYSTEM_MALLOC && HAVE_MALLINFO)
|
#if USE_DL_MALLOC || (USE_SYSTEM_MALLOC && HAVE_MALLINFO)
|
||||||
#ifndef HeapUsed
|
#ifndef HeapUsed
|
||||||
|
@ -51,6 +51,9 @@
|
|||||||
#if USE_DL_MALLOC
|
#if USE_DL_MALLOC
|
||||||
|
|
||||||
|
|
||||||
|
#if defined(YAPOR) || defined(THREADS)
|
||||||
|
INIT_LOCK(Yap_heap_regs->dlmalloc_lock);
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
#if USE_DL_MALLOC || (USE_SYSTEM_MALLOC && HAVE_MALLINFO)
|
#if USE_DL_MALLOC || (USE_SYSTEM_MALLOC && HAVE_MALLINFO)
|
||||||
#ifndef HeapUsed
|
#ifndef HeapUsed
|
||||||
|
@ -51,6 +51,9 @@
|
|||||||
#if USE_DL_MALLOC
|
#if USE_DL_MALLOC
|
||||||
|
|
||||||
|
|
||||||
|
#if defined(YAPOR) || defined(THREADS)
|
||||||
|
REINIT_LOCK(Yap_heap_regs->dlmalloc_lock);
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
#if USE_DL_MALLOC || (USE_SYSTEM_MALLOC && HAVE_MALLINFO)
|
#if USE_DL_MALLOC || (USE_SYSTEM_MALLOC && HAVE_MALLINFO)
|
||||||
#ifndef HeapUsed
|
#ifndef HeapUsed
|
||||||
|
@ -53,6 +53,9 @@ struct malloc_state *av_ Yap_av void void
|
|||||||
#if USE_DL_MALLOC
|
#if USE_DL_MALLOC
|
||||||
struct memory_hole memory_holes[MAX_DLMALLOC_HOLES] Yap_MemoryHoles void void
|
struct memory_hole memory_holes[MAX_DLMALLOC_HOLES] Yap_MemoryHoles void void
|
||||||
UInt nof_memory_holes Yap_NOfMemoryHoles void void
|
UInt nof_memory_holes Yap_NOfMemoryHoles void void
|
||||||
|
#if defined(YAPOR) || defined(THREADS)
|
||||||
|
lockvar dlmalloc_lock DLMallocLock MkLock
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
#if USE_DL_MALLOC || (USE_SYSTEM_MALLOC && HAVE_MALLINFO)
|
#if USE_DL_MALLOC || (USE_SYSTEM_MALLOC && HAVE_MALLINFO)
|
||||||
#ifndef HeapUsed
|
#ifndef HeapUsed
|
||||||
|
Reference in New Issue
Block a user