diff --git a/lisp/gc.c b/lisp/gc.c index a3c7f3a2d7e17d10f80e2d2b5aac793478d95161..1e6b540a76122ec9791b4313f33ca1a3c242f9e4 100644 --- a/lisp/gc.c +++ b/lisp/gc.c @@ -1,7 +1,7 @@ /* * Stop and Copy GC based on Cheney's algorithm. * - * $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/lisp/gc.c,v 1.8 1994/07/05 16:07:20 hallgren Exp $ + * $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/lisp/gc.c,v 1.9 1994/10/24 20:02:41 ram Exp $ * * Written by Christopher Hoover. */ @@ -184,8 +184,14 @@ void collect_garbage(void) lispobj *current_static_space_free_pointer; unsigned long static_space_size; unsigned long control_stack_size, binding_stack_size; +#ifdef POSIX_SIGS + sigset_t tmp, old; +#else int oldmask; +#endif + SAVE_CONTEXT(); + #ifdef PRINTNOISE printf("[Collecting garbage ... \n"); @@ -193,7 +199,13 @@ void collect_garbage(void) gettimeofday(&start_tv, (struct timezone *) 0); #endif +#ifdef POSIX_SIGS + sigemptyset(&tmp); + FILLBLOCKSET(&tmp); + sigprocmask(SIG_BLOCK, &tmp, &old); +#else oldmask = sigblock(BLOCKABLE); +#endif current_static_space_free_pointer = (lispobj *) SymbolValue(STATIC_SPACE_FREE_POINTER); @@ -307,7 +319,11 @@ void collect_garbage(void) #endif zero_stack(); +#ifdef POSIX_SIGS + sigprocmask(SIG_SETMASK, &old, 0); +#else (void) sigsetmask(oldmask); +#endif #ifdef PRINTNOISE @@ -1843,7 +1859,7 @@ void set_auto_gc_trigger(os_vm_size_t dynamic_usage) addr=os_round_up_to_page(addr); length=os_trunc_size_to_page(length); -#ifdef SUNOS +#if defined(SUNOS) || defined(SOLARIS) os_invalidate(addr,length); #else os_protect(addr, length, 0); @@ -1855,7 +1871,7 @@ void set_auto_gc_trigger(os_vm_size_t dynamic_usage) void clear_auto_gc_trigger(void) { if(current_auto_gc_trigger!=NULL){ -#ifdef SUNOS /* don't want to force whole space into swapping mode... */ +#if defined(SUNOS) || defined(SOLARIS)/* don't want to force whole space into swapping mode... */ os_vm_address_t addr=(os_vm_address_t)current_auto_gc_trigger; os_vm_size_t length= DYNAMIC_SPACE_SIZE + (os_vm_address_t)current_dynamic_space - addr;