diff --git a/C/alloc.c b/C/alloc.c index 5af9fbdb5..764978e90 100644 --- a/C/alloc.c +++ b/C/alloc.c @@ -64,9 +64,11 @@ static char SccsId[] = "%W% %G%"; #if USE_SYSTEM_MALLOC #define my_malloc(sz) malloc(sz) #define my_realloc(ptr, sz, osz, safe) realloc(ptr, sz) +#define my_realloc0(ptr, sz) realloc0(ptr, sz) #define my_free(ptr) free(ptr) #else #define my_malloc(sz) Yap_dlmalloc(sz) +#define my_realloc0(ptr, sz) Yap_dlrealloc(ptr, sz) #define my_free(sz) Yap_dlfree(sz) static char * my_realloc(char *ptr, UInt sz, UInt osz, int safe) @@ -152,6 +154,28 @@ Yap_AllocCodeSpace(unsigned long int size) return call_malloc(size); } +static inline char * +call_realloc(char *p, unsigned long int size) +{ + char *out; +#if INSTRUMENT_MALLOC + if (mallocs % 1024*4 == 0) + minfo('A'); + mallocs++; + tmalloc += size; +#endif + Yap_PrologMode |= MallocMode; + out = (char *) my_realloc0(p, size); + Yap_PrologMode &= ~MallocMode; + return out; +} + +char * +Yap_ReallocCodeSpace(char *p, unsigned long int size) +{ + return call_realloc(p, size); +} + void Yap_FreeCodeSpace(char *p) { diff --git a/C/c_interface.c b/C/c_interface.c index 676b6c399..557767b66 100644 --- a/C/c_interface.c +++ b/C/c_interface.c @@ -1304,7 +1304,7 @@ X_API void * YAP_ReallocSpaceFromYap(void *ptr,unsigned int size) { void *new_ptr; BACKUP_MACHINE_REGS(); - while ((new_ptr = Yap_ExpandPreAllocCodeSpace(size,ptr,TRUE)) == NULL) { + while ((new_ptr = Yap_ReallocCodeSpace(size,ptr)) == NULL) { if (!Yap_growheap(FALSE, size, NULL)) { Yap_Error(OUT_OF_HEAP_ERROR, TermNil, Yap_ErrorMessage); return NULL; @@ -1325,7 +1325,6 @@ YAP_AllocSpaceFromYap(unsigned int size) return NULL; } } - RECOVER_MACHINE_REGS(); return ptr; } diff --git a/C/tracer.c b/C/tracer.c index 7a5e6d9bc..54e333105 100644 --- a/C/tracer.c +++ b/C/tracer.c @@ -269,7 +269,7 @@ low_level_trace(yap_low_level_port port, PredEntry *pred, CELL *args) printf("\n"); } #endif - fprintf(Yap_stderr,"%lld %p ", vsc_count, TR); + fprintf(Yap_stderr,"%lld ",vsc_count); #if defined(THREADS) || defined(YAPOR) fprintf(Yap_stderr,"(%d)", worker_id); #endif diff --git a/H/Yapproto.h b/H/Yapproto.h index 7fb11b88e..e9649294d 100644 --- a/H/Yapproto.h +++ b/H/Yapproto.h @@ -91,6 +91,7 @@ void STD_PROTO(Yap_init_agc, (void)); void STD_PROTO(Yap_FreeCodeSpace,(char *)); char *STD_PROTO(Yap_AllocAtomSpace,(unsigned long int)); char *STD_PROTO(Yap_AllocCodeSpace,(unsigned long int)); +char *STD_PROTO(Yap_ReallocCodeSpace,(char *,unsigned long int)); ADDR STD_PROTO(Yap_AllocFromForeignArea,(Int)); int STD_PROTO(Yap_ExtendWorkSpace,(Int)); void STD_PROTO(Yap_FreeAtomSpace,(char *)); diff --git a/library/yap2swi/yap2swi.c b/library/yap2swi/yap2swi.c index 367db2429..282c1d08f 100644 --- a/library/yap2swi/yap2swi.c +++ b/library/yap2swi/yap2swi.c @@ -2204,19 +2204,19 @@ PL_set_engine(PL_engine_t engine, PL_engine_t *old) X_API void * PL_malloc(int sz) { - return YAP_AllocSpaceFromYap(sz); + return (void *)Yap_AllocCodeSpace((long unsigned int)sz); } X_API void * PL_realloc(void *ptr, int sz) { - return YAP_ReallocSpaceFromYap(ptr,sz); + return Yap_ReallocCodeSpace((char *)ptr,(long unsigned int)sz); } X_API void PL_free(void *obj) { - return YAP_FreeSpaceFromYap(obj); + return Yap_FreeCodeSpace((char *)obj); } X_API int