summaryrefslogtreecommitdiff
path: root/gcj_mlc.c
diff options
context:
space:
mode:
authorhboehm <hboehm>2009-06-13 00:00:06 +0000
committerIvan Maidanski <ivmai@mail.ru>2011-07-26 21:06:45 +0400
commit4faed82e614d119f649a5e1dcfac2174f06d59a8 (patch)
treeeb0580dc2d507b1cf5b79f3f1ec757bee0556390 /gcj_mlc.c
parentf9c7d77d0cff9d52082a422052cab1480fda858d (diff)
downloadbdwgc-4faed82e614d119f649a5e1dcfac2174f06d59a8.tar.gz
2009-06-12 Hans Boehm <Hans.Boehm@hp.com> (Really mostly Ivan Maidanski)
diff98_cvs(resembling diff3, diff27, diff59, diff61, diff66, diff73 partly) * dbg_mlc.c (GC_print_smashed_obj): Convert a group of printf() calls into a single one (for output atomicity). * typd_mlc.c (GC_calloc_explicitly_typed): Don't declare and use GC_finalization_failures variable; check the result of GC_general_register_disappearing_link() (for lack of memory) instead. * finalize.c (GC_finalization_failures): Remove unused global variable. * finalize.c (GC_general_register_disappearing_link, GC_general_register_disappearing_link): Don't update the value of GC_finalization_failures (since unused). * include/private/gc_pmark.h (PUSH_ONE_CHECKED_STACK, GC_PUSH_ONE_STACK, GC_PUSH_ONE_HEAP): The first parameter is of word type now (as FIXUP_POINTER requires numeric argument). * finalize.c (GC_ignore_self_finalize_mark_proc): GC_PUSH_ONE_HEAP requires the first parameter of word type. * mark.c (PUSH_GRANULE): Ditto. * mark.c (GC_push_one, GC_push_all_eager): Ditto (for GC_PUSH_ONE_STACK). * finalize.c (GC_finalize_all): Call GC_invoke_finalizers() or GC_finalizer_notifier directly, instead of GC_INVOKE_FINALIZERS() to prevent infinite looping. * include/javaxfc.h: Clarify GC_finalize_all comment. * gcj_mlc.c: Include gc_pmark.h before "ifdef GC_GCJ_SUPPORT" (not after) for configuration information. * gcj_mlc.c (GC_gcj_malloc_ignore_off_page): Add comment. * gcj_mlc.c (GC_gcj_malloc_ignore_off_page): Check "op" local variable for NULL before dereferencing it, return GC_oom_fn() in this case. * typd_mlc.c (GC_malloc_explicitly_typed, GC_malloc_explicitly_typed_ignore_off_page): Transform the code to suppress compiler warning (for uninitialized "lg" variable).
Diffstat (limited to 'gcj_mlc.c')
-rw-r--r--gcj_mlc.c19
1 files changed, 12 insertions, 7 deletions
diff --git a/gcj_mlc.c b/gcj_mlc.c
index 9035f212..6441ca2e 100644
--- a/gcj_mlc.c
+++ b/gcj_mlc.c
@@ -14,6 +14,8 @@
*/
/* Boehm, July 31, 1995 5:02 pm PDT */
+#include "private/gc_pmark.h" /* includes gc_priv.h */
+
#ifdef GC_GCJ_SUPPORT
/*
@@ -35,7 +37,6 @@
* 2) FASTLOCK is not a significant win.
*/
-#include "private/gc_pmark.h" /* includes gc_priv.h */
#include "gc_gcj.h"
#include "private/dbg_mlc.h"
@@ -208,6 +209,7 @@ GC_API void * GC_CALL GC_debug_gcj_malloc(size_t lb,
return (GC_store_debug_info(result, (word)lb, s, (word)i));
}
+/* There is no THREAD_LOCAL_ALLOC for GC_gcj_malloc_ignore_off_page(). */
GC_API void * GC_CALL GC_gcj_malloc_ignore_off_page(size_t lb,
void * ptr_to_struct_containing_descr)
{
@@ -223,22 +225,25 @@ GC_API void * GC_CALL GC_gcj_malloc_ignore_off_page(size_t lb,
if( (op = *opp) == 0 ) {
maybe_finalize();
op = (ptr_t)GENERAL_MALLOC_IOP(lb, GC_gcj_kind);
- /* lg = GC_size_map[lb]; */ /* May have been uninitialized. */
+ if (0 == op) {
+ UNLOCK();
+ return(GC_oom_fn(lb));
+ }
} else {
*opp = obj_link(op);
GC_bytes_allocd += GRANULES_TO_BYTES(lg);
}
- *(void **)op = ptr_to_struct_containing_descr;
- UNLOCK();
} else {
LOCK();
maybe_finalize();
op = (ptr_t)GENERAL_MALLOC_IOP(lb, GC_gcj_kind);
- if (0 != op) {
- *(void **)op = ptr_to_struct_containing_descr;
+ if (0 == op) {
+ UNLOCK();
+ return(GC_oom_fn(lb));
}
- UNLOCK();
}
+ *(void **)op = ptr_to_struct_containing_descr;
+ UNLOCK();
return((void *) op);
}