~ chicken-core (chicken-5) 78c15c477f6109bc2f25281c9611c5bc96b13c74
commit 78c15c477f6109bc2f25281c9611c5bc96b13c74 Author: felix <felix@call-with-current-continuation.org> AuthorDate: Sun Jun 16 00:04:55 2013 +0200 Commit: Peter Bex <peter.bex@xs4all.nl> CommitDate: Mon Jun 17 09:23:08 2013 +0200 If sigsetjmp(3) is used, "gc_restart" must be of the correct type. Signed-off-by: Peter Bex <peter.bex@xs4all.nl> diff --git a/chicken.h b/chicken.h index ce54b3c1..fb7418e3 100644 --- a/chicken.h +++ b/chicken.h @@ -1591,7 +1591,11 @@ C_varextern C_TLS C_long C_varextern C_TLS C_byte *C_fromspace_top, *C_fromspace_limit; +#ifdef HAVE_SIGSETJMP +C_varextern C_TLS sigjmp_buf C_restart; +#else C_varextern C_TLS jmp_buf C_restart; +#endif C_varextern C_TLS void *C_restart_address; C_varextern C_TLS int C_entry_point_status; C_varextern C_TLS int C_gui_mode; diff --git a/runtime.c b/runtime.c index 5ce267e1..ea16aadb 100644 --- a/runtime.c +++ b/runtime.c @@ -334,7 +334,11 @@ C_TLS C_long C_TLS C_byte *C_fromspace_top, *C_fromspace_limit; +#ifdef HAVE_SIGSETJMP +C_TLS sigjmp_buf C_restart; +#else C_TLS jmp_buf C_restart; +#endif C_TLS void *C_restart_address; C_TLS int C_entry_point_status; C_TLS int (*C_gc_mutation_hook)(C_word *slot, C_word val); @@ -442,7 +446,11 @@ static C_TLS unsigned int mutation_count, stack_size; static C_TLS int chicken_is_initialized; +#ifdef HAVE_SIGSETJMP +static C_TLS sigjmp_buf gc_restart; +#else static C_TLS jmp_buf gc_restart; +#endif static C_TLS double timer_start_ms, gc_ms, @@ -1917,7 +1925,7 @@ C_word C_fcall C_callback(C_word closure, int argc) if(old && C_block_item(callback_continuation_stack_symbol, 0) == C_SCHEME_END_OF_LIST) panic(C_text("callback invoked in non-safe context")); - C_memcpy(&prev, &C_restart, sizeof(jmp_buf)); + C_memcpy(&prev, &C_restart, sizeof(C_restart)); callback_returned_flag = 0; chicken_is_running = 1; @@ -1931,7 +1939,7 @@ C_word C_fcall C_callback(C_word closure, int argc) if(!callback_returned_flag) (C_restart_trampoline)(C_restart_address); else { - C_memcpy(&C_restart, &prev, sizeof(jmp_buf)); + C_memcpy(&C_restart, &prev, sizeof(C_restart)); callback_returned_flag = 0; }Trap