diff --git a/src/racket/src/number.c b/src/racket/src/number.c index a3a0020ff2..68d8d9cf92 100644 --- a/src/racket/src/number.c +++ b/src/racket/src/number.c @@ -3276,6 +3276,7 @@ static Scheme_Double_Vector *alloc_shared_flvector(long size) original_gc = GC_switch_to_master_gc(); vec = scheme_alloc_flvector(size); + SHARED_ALLOCATED_SET(vec); GC_switch_back_from_master(original_gc); return vec; @@ -3463,6 +3464,7 @@ static Scheme_Vector *alloc_shared_fxvector(long size) original_gc = GC_switch_to_master_gc(); vec = scheme_alloc_fxvector(size); + SHARED_ALLOCATED_SET(vec); GC_switch_back_from_master(original_gc); return vec; diff --git a/src/racket/src/places.c b/src/racket/src/places.c index 461287bfd1..83276f7f95 100644 --- a/src/racket/src/places.c +++ b/src/racket/src/places.c @@ -731,6 +731,9 @@ Scheme_Object *scheme_places_deep_copy_worker(Scheme_Object *so, Scheme_Hash_Tab case scheme_place_bi_channel_type: new_so = so; break; + case scheme_place_type: + new_so = ((Scheme_Place *) so)->channel; + break; case scheme_char_type: new_so = scheme_make_char(SCHEME_CHAR_VAL(so)); break; @@ -746,10 +749,10 @@ Scheme_Object *scheme_places_deep_copy_worker(Scheme_Object *so, Scheme_Hash_Tab } break; case scheme_float_type: - new_so = scheme_make_char(SCHEME_FLT_VAL(so)); + new_so = scheme_make_float(SCHEME_FLT_VAL(so)); break; case scheme_double_type: - new_so = scheme_make_char(SCHEME_DBL_VAL(so)); + new_so = scheme_make_double(SCHEME_DBL_VAL(so)); break; case scheme_complex_type: { @@ -886,7 +889,8 @@ Scheme_Object *scheme_places_deep_copy_worker(Scheme_Object *so, Scheme_Hash_Tab case scheme_resolved_module_path_type: default: - scheme_log_abort("cannot copy object"); + printf("places deep copy cannot copy object of type %hi at %p\n", so->type, so); + scheme_log_abort("places deep copy cannot copy object"); abort(); break; }