IF_CANCEL(int cancel_state;)
DCL_LOCK_STATE;
- if (!GC_is_initialized) GC_init();
+ if (!EXPECT(GC_is_initialized, TRUE)) GC_init();
if (GC_debugging_started) GC_print_all_smashed();
GC_INVOKE_FINALIZERS();
LOCK();
DCL_LOCK_STATE;
LOCK();
- if (!GC_is_initialized) GC_init();
+ if (!EXPECT(GC_is_initialized, TRUE)) GC_init();
result = (int)GC_expand_hp_inner(divHBLKSZ((word)bytes));
if (result) GC_requested_heapsize += bytes;
UNLOCK();
int nthreads = 0;
word total_size = 0;
mach_msg_type_number_t listcount = (mach_msg_type_number_t)THREAD_TABLE_SZ;
- if (!GC_thr_initialized)
+ if (!EXPECT(GC_thr_initialized, TRUE))
GC_thr_init();
# ifndef DARWIN_DONT_PARSE_STACK
{
static GC_bool excluded_segs = FALSE;
n_load_segs = 0;
- if (!excluded_segs) {
+ if (!EXPECT(excluded_segs, TRUE)) {
GC_exclude_static_roots_inner((ptr_t)load_segs,
(ptr_t)load_segs + sizeof(load_segs));
excluded_segs = TRUE;
static word last_finalized_no = 0;
DCL_LOCK_STATE;
- if (GC_gc_no == last_finalized_no) return;
- if (!GC_is_initialized) return;
+ if (GC_gc_no == last_finalized_no ||
+ !EXPECT(GC_is_initialized, TRUE)) return;
UNLOCK();
GC_INVOKE_FINALIZERS();
LOCK();
#ifndef NO_DEBUGGING
GC_EXTERN GC_bool GC_dump_regularly;
/* Generate regular debugging dumps. */
-# define COND_DUMP if (GC_dump_regularly) GC_dump()
+# define COND_DUMP if (EXPECT(GC_dump_regularly, FALSE)) GC_dump()
#else
# define COND_DUMP /* empty */
#endif
/* Round up to a multiple of a granule. */
lb = (lb + GRANULE_BYTES - 1) & ~(GRANULE_BYTES - 1);
n_blocks = OBJ_SZ_TO_BLOCKS(lb);
- if (!GC_is_initialized) GC_init();
+ if (!EXPECT(GC_is_initialized, TRUE)) GC_init();
/* Do our share of marking work */
if (GC_incremental && !GC_dont_gc)
GC_collect_a_little_inner((int)n_blocks);
if( (op = *opp) == 0 ) {
if (GC_size_map[lb] == 0) {
- if (!GC_is_initialized) GC_init();
+ if (!EXPECT(GC_is_initialized, TRUE)) GC_init();
if (GC_size_map[lb] == 0) GC_extend_size_map(lb);
return(GC_generic_malloc_inner(lb, k));
}
void * result;
DCL_LOCK_STATE;
- if (GC_have_errors) GC_print_all_errors();
+ if (EXPECT(GC_have_errors, FALSE))
+ GC_print_all_errors();
GC_INVOKE_FINALIZERS();
if (SMALL_OBJ(lb)) {
LOCK();
* The thread implementation may well call malloc at other
* inopportune times.
*/
- if (!GC_is_initialized) return sbrk(lb);
+ if (!EXPECT(GC_is_initialized, TRUE)) return sbrk(lb);
# endif /* I386 && GC_SOLARIS_THREADS */
return((void *)REDIRECT_MALLOC(lb));
}
ptr_t caller = (ptr_t)__builtin_return_address(0);
/* This test does not need to ensure memory visibility, since */
/* the bounds will be set when/if we create another thread. */
- if (!lib_bounds_set) {
+ if (!EXPECT(lib_bounds_set, TRUE)) {
GC_init_lib_bounds();
lib_bounds_set = TRUE;
}
lb_rounded = GRANULES_TO_BYTES(lg);
n_blocks = OBJ_SZ_TO_BLOCKS(lb_rounded);
init = GC_obj_kinds[k].ok_init;
- if (GC_have_errors) GC_print_all_errors();
+ if (EXPECT(GC_have_errors, FALSE))
+ GC_print_all_errors();
GC_INVOKE_FINALIZERS();
LOCK();
result = (ptr_t)GC_alloc_large(ADD_SLOP(lb), k, IGNORE_OFF_PAGE);
}
lw = BYTES_TO_WORDS(lb);
lg = BYTES_TO_GRANULES(lb);
- if (GC_have_errors) GC_print_all_errors();
+ if (EXPECT(GC_have_errors, FALSE))
+ GC_print_all_errors();
GC_INVOKE_FINALIZERS();
LOCK();
- if (!GC_is_initialized) GC_init();
+ if (!EXPECT(GC_is_initialized, TRUE)) GC_init();
/* Do our share of marking work */
if (GC_incremental && !GC_dont_gc) {
ENTER_GC();
{
DCL_LOCK_STATE;
- if (!GC_is_initialized) GC_init();
+ if (!EXPECT(GC_is_initialized, TRUE)) GC_init();
LOCK();
GC_add_roots_inner((ptr_t)b, (ptr_t)e, FALSE);
UNLOCK();
{
DCL_LOCK_STATE;
- if (!GC_is_initialized) GC_init();
+ if (!EXPECT(GC_is_initialized, TRUE)) GC_init();
LOCK();
roots_were_cleared = TRUE;
n_root_sets = 0;
ptr_t limit;
r = p;
- if (!GC_is_initialized) return 0;
+ if (!EXPECT(GC_is_initialized, TRUE)) return 0;
h = HBLKPTR(r);
GET_BI(r, bi);
candidate_hdr = HDR_FROM_BI(bi, r);
word initial_heap_sz;
IF_CANCEL(int cancel_state;)
- if (GC_is_initialized) return;
+ if (EXPECT(GC_is_initialized, TRUE)) return;
# ifdef REDIRECT_MALLOC
{
static GC_bool init_started = FALSE;
# ifndef USE_MMAP_ANON
static GC_bool initialized = FALSE;
- if (!initialized) {
+ if (!EXPECT(initialized, TRUE)) {
zero_fd = open("/dev/zero", O_RDONLY);
fcntl(zero_fd, F_SETFD, FD_CLOEXEC);
initialized = TRUE;
pthread_t self = pthread_self();
word total_size = 0;
- if (!GC_thr_initialized) GC_thr_init();
+ if (!EXPECT(GC_thr_initialized, TRUE))
+ GC_thr_init();
# ifdef DEBUG_THREADS
GC_log_printf("Pushing stacks from thread 0x%x\n", (unsigned)self);
# endif
{
int i;
pthread_mutex_lock(&GC_nacl_thread_alloc_lock);
- if (!GC_nacl_thread_parking_inited) {
+ if (!EXPECT(GC_nacl_thread_parking_inited, TRUE)) {
BZERO(GC_nacl_thread_parked, sizeof(GC_nacl_thread_parked));
BZERO(GC_nacl_thread_used, sizeof(GC_nacl_thread_used));
GC_nacl_thread_parking_inited = TRUE;
GC_syms_initialized = TRUE;
}
-# define INIT_REAL_SYMS() if (!GC_syms_initialized) GC_init_real_syms();
+# define INIT_REAL_SYMS() if (!EXPECT(GC_syms_initialized, TRUE)) \
+ GC_init_real_syms()
#else
# define INIT_REAL_SYMS()
#endif
static GC_bool first_thread_used = FALSE;
GC_ASSERT(I_HOLD_LOCK());
- if (!first_thread_used) {
+ if (!EXPECT(first_thread_used, TRUE)) {
result = &first_thread;
first_thread_used = TRUE;
} else {
si = (struct start_info *)GC_INTERNAL_MALLOC(sizeof(struct start_info),
NORMAL);
UNLOCK();
- if (!parallel_initialized) GC_init_parallel();
- if (0 == si &&
+ if (!EXPECT(parallel_initialized, TRUE))
+ GC_init_parallel();
+ if (EXPECT(0 == si, FALSE) &&
(si = (struct start_info *)
(*GC_get_oom_fn())(sizeof(struct start_info))) == 0)
return(ENOMEM);
si -> start_routine = start_routine;
si -> arg = arg;
LOCK();
- if (!GC_thr_initialized) GC_thr_init();
+ if (!EXPECT(GC_thr_initialized, TRUE))
+ GC_thr_init();
# ifdef GC_ASSERTIONS
{
size_t stack_size = 0;
ptr_t base, limit;
word sz;
- if (!GC_is_initialized) GC_init();
+ if (!EXPECT(GC_is_initialized, TRUE)) GC_init();
hhdr = HDR((word)p);
if (hhdr == 0) {
if (divHBLKSZ((word)p) != divHBLKSZ((word)q)
struct hblk *h;
word sz;
- if (!GC_is_initialized) GC_init();
+ if (!EXPECT(GC_is_initialized, TRUE)) GC_init();
hhdr = HDR((word)p);
if (hhdr == 0) return(p);
h = HBLKPTR(p);
hdr *hhdr;
if ((word)p & (ALIGNMENT - 1)) goto fail;
- if (!GC_is_initialized) GC_init();
+ if (!EXPECT(GC_is_initialized, TRUE)) GC_init();
# ifdef THREADS
hhdr = HDR((word)p);
if (hhdr != 0 && GC_base(p) == 0) {
int i;
GC_ASSERT(I_HOLD_LOCK());
- if (!keys_initialized) {
+ if (!EXPECT(keys_initialized, TRUE)) {
if (0 != GC_key_create(&GC_thread_key, 0)) {
ABORT("Failed to create key for local allocator");
}
signed_word i;
# define HIGH_BIT (((word)1) << (WORDSZ - 1))
- if (!GC_explicit_typing_initialized) GC_init_explicit_typing();
+ if (!EXPECT(GC_explicit_typing_initialized, TRUE))
+ GC_init_explicit_typing();
+
while (last_set_bit >= 0 && !GC_get_bit(bm, last_set_bit))
last_set_bit--;
if (last_set_bit < 0) return(0 /* no pointers */);
GC_thread result;
GC_ASSERT(I_HOLD_LOCK());
- if (!first_thread_used) {
+ if (!EXPECT(first_thread_used, TRUE)) {
result = &first_thread;
first_thread_used = TRUE;
} else {
HANDLE thread_h;
thread_args *args;
- if (!parallel_initialized) GC_init_parallel();
+ if (!EXPECT(parallel_initialized, TRUE))
+ GC_init_parallel();
/* make sure GC is initialized (i.e. main thread is */
/* attached, tls initialized). */
GC_uintptr_t thread_h;
thread_args *args;
- if (!parallel_initialized) GC_init_parallel();
+ if (!EXPECT(parallel_initialized, TRUE))
+ GC_init_parallel();
/* make sure GC is initialized (i.e. main thread is */
/* attached, tls initialized). */
# ifdef DEBUG_THREADS
(long)GetCurrentThreadId(), GC_PTHREAD_PTRVAL(pthread_id));
# endif
- if (!parallel_initialized) GC_init_parallel();
+ if (!EXPECT(parallel_initialized, TRUE))
+ GC_init_parallel();
/* Thread being joined might not have registered itself yet. */
/* After the join,thread id may have been recycled. */
GC_PTHREAD_CREATE_CONST pthread_attr_t *attr,
void *(*start_routine)(void *), void *arg)
{
- if (!parallel_initialized) GC_init_parallel();
+ if (!EXPECT(parallel_initialized, TRUE))
+ GC_init_parallel();
/* make sure GC is initialized (i.e. main thread is attached) */
if (GC_win32_dll_threads) {
return pthread_create(new_thread, attr, start_routine, arg);
GC_API int GC_pthread_sigmask(int how, const sigset_t *set,
sigset_t *oset)
{
- if (!parallel_initialized) GC_init_parallel();
+ if (!EXPECT(parallel_initialized, TRUE))
+ GC_init_parallel();
return pthread_sigmask(how, set, oset);
}
# endif /* !GC_NO_PTHREAD_SIGMASK */
GC_thread t;
DCL_LOCK_STATE;
- if (!parallel_initialized) GC_init_parallel();
+ if (!EXPECT(parallel_initialized, TRUE))
+ GC_init_parallel();
LOCK();
t = GC_lookup_pthread(thread);
UNLOCK();