diff --git a/src/mzscheme/gc2/weak.c b/src/mzscheme/gc2/weak.c index f8644a200c..4e68b4567f 100644 --- a/src/mzscheme/gc2/weak.c +++ b/src/mzscheme/gc2/weak.c @@ -63,7 +63,7 @@ static int mark_weak_array(void *p) for (i = a->count; i--; ) { if (data[i] && (*(short *)(data[i]) != 45) - && (*(short *)(data[i]) != 54)) + && (*(short *)(data[i]) != 55)) CRASH(1); } } diff --git a/src/mzscheme/src/env.c b/src/mzscheme/src/env.c index 666c12c791..575d1b3fc6 100644 --- a/src/mzscheme/src/env.c +++ b/src/mzscheme/src/env.c @@ -276,6 +276,14 @@ Scheme_Env *scheme_basic_env() } } +#ifdef MZ_PRECISE_GC + scheme_register_traversers(); + register_traversers(); + scheme_init_hash_key_procs(); +#endif + + scheme_init_true_false(); + REGISTER_SO(toplevels_ht); REGISTER_SO(locals_ht[0]); REGISTER_SO(locals_ht[1]); @@ -289,14 +297,6 @@ Scheme_Env *scheme_basic_env() locals_ht[1] = ht; } - scheme_init_true_false(); - -#ifdef MZ_PRECISE_GC - scheme_register_traversers(); - register_traversers(); - scheme_init_hash_key_procs(); -#endif - #ifdef TIME_STARTUP_PROCESS printf("pre-process @ %ld\n", scheme_get_process_milliseconds()); #endif diff --git a/src/mzscheme/src/port.c b/src/mzscheme/src/port.c index 967066bf41..8072390c98 100644 --- a/src/mzscheme/src/port.c +++ b/src/mzscheme/src/port.c @@ -1379,8 +1379,7 @@ long scheme_get_byte_string_unless(const char *who, unsigned char *s; i = ip->ungotten_count; - s = (unsigned char *)ip->ungotten; - /* s is in reverse order */ + /* s will be in reverse order */ if (peek) { if (!SCHEME_INTP(peek_skip) || (i < SCHEME_INT_VAL(peek_skip))) { @@ -1398,9 +1397,11 @@ long scheme_get_byte_string_unless(const char *who, l = size; size -= l; + s = (unsigned char *)ip->ungotten; /* Not GC-safe! */ while (l--) { buffer[offset + got++] = s[--i]; } + s = NULL; if (!peek) ip->ungotten_count = i;