=================================================================== RCS file: /home/cvs/OpenXM_contrib2/asir2000/parse/gc_risa.c,v retrieving revision 1.2 retrieving revision 1.18 diff -u -p -r1.2 -r1.18 --- OpenXM_contrib2/asir2000/parse/gc_risa.c 2005/11/12 08:10:56 1.2 +++ OpenXM_contrib2/asir2000/parse/gc_risa.c 2018/03/12 02:37:08 1.18 @@ -1,15 +1,37 @@ -#include "private/gc_priv.h" +/* $OpenXM: OpenXM_contrib2/asir2000/parse/gc_risa.c,v 1.17 2017/08/30 09:40:30 ohara Exp $ */ + +#if defined(VISUAL) || defined(__MINGW32__) +#include "private/gcconfig.h" +#endif +#include "gc.h" #include +#include void error(char *); +void int_handler(); int *StackBottom; +int in_gc, caught_intr; +void check_caught_intr() +{ + if ( caught_intr == 1 ) { + caught_intr = 0; + int_handler(SIGINT); + } else if ( caught_intr == 2 ) { + caught_intr = 0; + ox_usr1_handler(SIGUSR1); + } +} + void *Risa_GC_malloc(size_t d) { void *ret; + in_gc = 1; ret = (void *)GC_malloc(d); + in_gc = 0; + check_caught_intr(); if ( !ret ) error("GC_malloc : failed to allocate memory"); return ret; @@ -19,35 +41,66 @@ void *Risa_GC_malloc_atomic(size_t d) { void *ret; + in_gc = 1; ret = (void *)GC_malloc_atomic(d); + in_gc = 0; + check_caught_intr(); if ( !ret ) error("GC_malloc_atomic : failed to allocate memory"); return ret; } +void *Risa_GC_malloc_atomic_ignore_off_page(size_t d) +{ + void *ret; + + in_gc = 1; + ret = (void *)GC_malloc_atomic_ignore_off_page(d); + in_gc = 0; + check_caught_intr(); + if ( !ret ) + error("GC_malloc_atomic_ignore_off_page : failed to allocate memory"); + return ret; +} + void *Risa_GC_realloc(void *p,size_t d) { void *ret; + in_gc = 1; ret = (void *)GC_realloc(p,d); + in_gc = 0; + check_caught_intr(); if ( !ret ) error("GC_realloc : failed to reallocate memory"); return ret; } -int get_heapsize() +void Risa_GC_free(void *p) { - return GC_heapsize; + in_gc = 1; + GC_free(p); + in_gc = 0; + check_caught_intr(); } -long get_allocwords() +size_t get_heapsize() { - return GC_words_allocd_before_gc + GC_words_allocd; + return GC_get_heap_size(); } -double gctime; -static double gcstart,asir_start_time; +#if !defined(BYTES_TO_WORDS) +#define BYTES_TO_WORDS(x) ((x)>>2) +#endif +size_t get_allocwords() +{ + size_t n = GC_get_total_bytes(); + return BYTES_TO_WORDS(n); /* bytes to words */ +} + +static double asir_start_time; + double get_clock(), get_rtime(), get_current_time(); void rtime_init() @@ -67,9 +120,7 @@ double get_rtime() return get_current_time() - asir_start_time; } -#if defined(THINK_C) || defined(__MWERKS__) || defined(VISUAL) || defined(MSWIN32) - -#if defined(VISUAL) +#if defined(VISUAL) || defined(__MINGW32__) #include extern int recv_intr,doing_batch; @@ -77,10 +128,13 @@ void send_intr(); BOOL set_ctrlc_flag(DWORD type) { - if ( doing_batch ) + enter_signal_cs(); + if ( doing_batch ) { send_intr(); - else + }else { recv_intr = 1; + } + leave_signal_cs(); return TRUE; } @@ -124,7 +178,7 @@ double get_clock() } else return get_current_time(); } -#else +#elif defined(THINK_C) || defined(__MWERKS__) || defined(MSWIN32) double get_current_time() { return get_clock(); @@ -137,8 +191,6 @@ double get_clock() c = clock(); return (double)c/(double)CLOCKS_PER_SEC; } -#endif - #else #include @@ -165,7 +217,6 @@ double get_clock() } #else -#include #include double get_clock() @@ -181,15 +232,34 @@ double get_clock() #endif #endif -void GC_timerstart() { - gcstart = get_clock(); +#if !defined(NO_ASIR_GC) +extern int GC_free_space_numerator; + +void Risa_GC_get_adj(int *nm, int *dn) { + *nm = GC_free_space_numerator; + *dn = GC_free_space_divisor; } -void GC_timerstop() { - gctime += get_clock() - gcstart; +void Risa_GC_set_adj(int nm, int dn) { + GC_free_space_numerator = nm; + GC_free_space_divisor = dn; } +#else +void Risa_GC_get_adj(int *nm, int *dn) { + *nm = 1; + *dn = GC_free_space_divisor; +} -#if defined(MSWIN32) && !defined(VISUAL) +void Risa_GC_set_adj(int nm, int dn) { + GC_free_space_divisor = dn/nm; +} + +double GC_get_gctime() { + return 0.0; +} +#endif + +#if defined(MSWIN32) && !defined(VISUAL) && !defined(__MINGW32__) #include void process_events() { if ( check_break() ) @@ -222,7 +292,7 @@ void process_events() { } #endif -#if defined(VISUAL) && !defined(MSWIN32) +#if (defined(VISUAL) || defined(__MINGW32__)) && !defined(MSWIN32) int sigsetmask(mask) int mask; { return 0; } void process_events() { @@ -234,6 +304,6 @@ int c; #else if ( c == ('c' & 037 ) ) #endif - int_handler(); + int_handler(SIGINT); } #endif