path: root/malloc.c
diff options
authorhboehm <hboehm>2008-07-26 02:51:33 +0200
committerIvan Maidanski <>2011-07-26 19:06:43 +0200
commit68b9f2740e77bfae2b94392140608d952114b199 (patch)
tree492d095c29a2cfc5cbbc4a49b41fa1f5b06bc6ff /malloc.c
parent1867d249698c81214418b2cf9752a987abb7b4f2 (diff)
2008-07-25 Hans Boehm <> (Really mostly Ivan Maidanski)
Ivan's description of the patch follows. Note that a few pieces like the GC_malloc(0) patch, were not applied since an alternate had been previously applied. A few differed stylistically from the rest of the code (mostly casts to void * instead of target type), or were classified as too minor to bother. Note that all of Ivan's static declarations which did not correct outright naming bugs (as a few did), where replaced by STATIC, which is ignored by default. - minor bug fixing (for FreeBSD, for THREAD_LOCAL_ALLOC and for GC_malloc(0)); - addition of missing getter/setter functions for public variables (may be useful if compiled as Win32 DLL); - addition of missing GC_API for some exported functions; - addition of missing "static" declarator for internal functions and variables (where possible); - replacement of all remaining K&R-style definitions with ANSI C ones (__STDC__ macro is not used anymore); - addition of some Win32 macro definitions (that may be missing in the standard headers supplied with a compiler) for GWW_VDB mode; - elimination of most compiler warnings (except for "uninitialized data" warning); - several typos correction; - missing parenthesis addition in macros in some header files of "libatomic_ops" module. My highlights based on reading the patch: * allchblk.c: Remove GC_freehblk_ptr decl. Make free_list_index_of() static. * include/gc.h: Use __int64 on win64, define GC_oom_func, GC_finalizer_notifier_proc, GC_finalizer_notifier_proc, add getter and setters: GC_get_gc_no, GC_get_parallel, GC_set_oom_fn, GC_set_finalize_on_demand, GC_set_java_finalization, GC_set_dont_expand, GC_set_no_dls, GC_set_max_retries, GC_set_dont_precollect, GC_set_finalizer_notifier. Always define GC_win32_free_heap. gc_config_macros.h: Define _REENTRANT after processing GC_THREADS. * include/gc_cpp.h: Improve GC_PLACEMENT_DELETE test, handling of operator new[] for old Windows compilers. * include/gc_inline.h (GC_MALLOC_FAST_GRANS): Add parentheses around arguments. * dbg_mlc.c, malloc.c, misc.c: Add many GC_API specs. * mark.c (GC_mark_and_push_stack): Fix source argument for blacklist printing. * misc.c: Fix log file naming based on environment variable for Windows. Make GC_set_warn_proc and GC_set_free_space_divisor just return current value with 0 argument. Add DONT_USER_USER32_DLL. Add various getters and setters as in gc.h. * os_dep.c: Remove no longer used GC_disable/enable_signals implementations. (GC_get_stack_base): Add pthread_attr_destroy call. No longer set GC_old_bus_handler in DARWIN workaround. * pthread_support.c: GC_register_my_thread must also call GC_init_thread_local.
Diffstat (limited to 'malloc.c')
1 files changed, 8 insertions, 13 deletions
diff --git a/malloc.c b/malloc.c
index 270d0f1..67e7422 100644
--- a/malloc.c
+++ b/malloc.c
@@ -23,7 +23,7 @@ void GC_extend_size_map(size_t); /* in misc.c. */
/* Allocate reclaim list for kind: */
/* Return TRUE on success */
-GC_bool GC_alloc_reclaim_list(struct obj_kind *kind)
+STATIC GC_bool GC_alloc_reclaim_list(struct obj_kind *kind)
struct hblk ** result = (struct hblk **)
GC_scratch_alloc((MAXOBJGRANULES+1) * sizeof(struct hblk *));
@@ -206,7 +206,7 @@ void * GC_generic_malloc(size_t lb, int k)
void * GC_core_malloc_atomic(size_t lb)
- void * GC_malloc_atomic(size_t lb)
+ GC_API void * GC_malloc_atomic(size_t lb)
void *op;
@@ -233,12 +233,7 @@ void * GC_generic_malloc(size_t lb, int k)
/* provide a version of strdup() that uses the collector to allocate the
copy of the string */
-# ifdef __STDC__
- char *GC_strdup(const char *s)
-# else
- char *GC_strdup(s)
- char *s;
+GC_API char *GC_strdup(const char *s)
char *copy;
@@ -255,7 +250,7 @@ void * GC_generic_malloc(size_t lb, int k)
void * GC_core_malloc(size_t lb)
- void * GC_malloc(size_t lb)
+ GC_API void * GC_malloc(size_t lb)
void *op;
@@ -273,10 +268,10 @@ void * GC_generic_malloc(size_t lb, int k)
/* See above comment on signals. */
GC_ASSERT(0 == obj_link(op)
- || (word)obj_link(op)
+ || ((word)obj_link(op)
<= (word)GC_greatest_plausible_heap_addr
&& (word)obj_link(op)
- >= (word)GC_least_plausible_heap_addr);
+ >= (word)GC_least_plausible_heap_addr));
*opp = obj_link(op);
obj_link(op) = 0;
GC_bytes_allocd += GRANULES_TO_BYTES(lg);
@@ -327,7 +322,7 @@ void * malloc(size_t lb)
extern GC_bool GC_text_mapping(char *nm, ptr_t *startp, ptr_t *endp);
/* From os_dep.c */
- void GC_init_lib_bounds(void)
+ STATIC void GC_init_lib_bounds(void)
if (GC_libpthread_start != 0) return;
if (!GC_text_mapping("libpthread-",
@@ -391,7 +386,7 @@ void * calloc(size_t n, size_t lb)
# endif /* REDIRECT_MALLOC */
/* Explicitly deallocate an object p. */
-void GC_free(void * p)
+GC_API void GC_free(void * p)
struct hblk *h;
hdr *hhdr;