From a8fa5d4ebb693201ab4454ca29a74c2e5c4dafd8 Mon Sep 17 00:00:00 2001 From: Leif Andersen Date: Sat, 3 Jun 2017 20:47:34 -0400 Subject: [PATCH] Add scheme_atexit c function. This way programs can actually call atexit. (Otherwise atexit is frequently not provided in libc as a symbol.) --- racket/src/racket/include/mzscheme.exp | 1 + racket/src/racket/include/mzscheme3m.exp | 1 + racket/src/racket/include/mzwin.def | 1 + racket/src/racket/include/racket.exp | 1 + racket/src/racket/include/racket3m.exp | 1 + racket/src/racket/src/schemef.h | 1 + racket/src/racket/src/schemex.h | 1 + racket/src/racket/src/schemex.inc | 1 + racket/src/racket/src/schemexm.h | 1 + racket/src/racket/src/thread.c | 5 +++++ 10 files changed, 14 insertions(+) diff --git a/racket/src/racket/include/mzscheme.exp b/racket/src/racket/include/mzscheme.exp index 49fbd059de..0b4d4df049 100644 --- a/racket/src/racket/include/mzscheme.exp +++ b/racket/src/racket/include/mzscheme.exp @@ -63,6 +63,7 @@ scheme_close_managed scheme_schedule_custodian_close scheme_add_custodian_extractor scheme_add_atexit_closer +scheme_add_atexit scheme_add_evt scheme_add_evt_through_sema scheme_is_evt diff --git a/racket/src/racket/include/mzscheme3m.exp b/racket/src/racket/include/mzscheme3m.exp index 1bb029ade0..4375d1e4ff 100644 --- a/racket/src/racket/include/mzscheme3m.exp +++ b/racket/src/racket/include/mzscheme3m.exp @@ -63,6 +63,7 @@ scheme_close_managed scheme_schedule_custodian_close scheme_add_custodian_extractor scheme_add_atexit_closer +scheme_atexit scheme_add_evt scheme_add_evt_through_sema scheme_is_evt diff --git a/racket/src/racket/include/mzwin.def b/racket/src/racket/include/mzwin.def index 7687687628..a58224a04c 100644 --- a/racket/src/racket/include/mzwin.def +++ b/racket/src/racket/include/mzwin.def @@ -80,6 +80,7 @@ EXPORTS scheme_add_flush scheme_remove_flush scheme_add_atexit_closer + scheme_atexit scheme_add_evt scheme_add_evt_through_sema scheme_is_evt diff --git a/racket/src/racket/include/racket.exp b/racket/src/racket/include/racket.exp index 8152638569..f94b2f41b9 100644 --- a/racket/src/racket/include/racket.exp +++ b/racket/src/racket/include/racket.exp @@ -77,6 +77,7 @@ scheme_flush_managed scheme_add_flush scheme_remove_flush scheme_add_atexit_closer +scheme_atexit scheme_add_evt scheme_add_evt_through_sema scheme_is_evt diff --git a/racket/src/racket/include/racket3m.exp b/racket/src/racket/include/racket3m.exp index 4417e79d44..0f9375de15 100644 --- a/racket/src/racket/include/racket3m.exp +++ b/racket/src/racket/include/racket3m.exp @@ -77,6 +77,7 @@ scheme_flush_managed scheme_add_flush scheme_remove_flush scheme_add_atexit_closer +scheme_atexit scheme_add_evt scheme_add_evt_through_sema scheme_is_evt diff --git a/racket/src/racket/src/schemef.h b/racket/src/racket/src/schemef.h index 3a53e4a845..c3cb8767b4 100644 --- a/racket/src/racket/src/schemef.h +++ b/racket/src/racket/src/schemef.h @@ -172,6 +172,7 @@ MZ_EXTERN Scheme_Object *scheme_add_flush(Scheme_Plumber *p, Scheme_Object *proc MZ_EXTERN void scheme_remove_flush(Scheme_Object *h); MZ_EXTERN void scheme_add_atexit_closer(Scheme_Exit_Closer_Func f); +MZ_EXTERN int scheme_atexit(void (*func)(void)); MZ_EXTERN void scheme_add_evt(Scheme_Type type, Scheme_Ready_Fun ready, diff --git a/racket/src/racket/src/schemex.h b/racket/src/racket/src/schemex.h index 7748135084..350de875e7 100644 --- a/racket/src/racket/src/schemex.h +++ b/racket/src/racket/src/schemex.h @@ -123,6 +123,7 @@ int (*scheme_flush_managed)(Scheme_Plumber *p, int catch_errors); Scheme_Object *(*scheme_add_flush)(Scheme_Plumber *p, Scheme_Object *proc_or_port, int weak_flush); void (*scheme_remove_flush)(Scheme_Object *h); void (*scheme_add_atexit_closer)(Scheme_Exit_Closer_Func f); +int (*scheme_atexit)(void (*func)()); void (*scheme_add_evt)(Scheme_Type type, Scheme_Ready_Fun ready, Scheme_Needs_Wakeup_Fun wakeup, diff --git a/racket/src/racket/src/schemex.inc b/racket/src/racket/src/schemex.inc index 7ad13b66f5..aee33ea7ff 100644 --- a/racket/src/racket/src/schemex.inc +++ b/racket/src/racket/src/schemex.inc @@ -86,6 +86,7 @@ scheme_extension_table->scheme_add_flush = scheme_add_flush; scheme_extension_table->scheme_remove_flush = scheme_remove_flush; scheme_extension_table->scheme_add_atexit_closer = scheme_add_atexit_closer; + scheme_extension_table->scheme_atexit = scheme_atexit scheme_extension_table->scheme_add_evt = scheme_add_evt; scheme_extension_table->scheme_add_evt_through_sema = scheme_add_evt_through_sema; scheme_extension_table->scheme_is_evt = scheme_is_evt; diff --git a/racket/src/racket/src/schemexm.h b/racket/src/racket/src/schemexm.h index 2cd938af2c..7c1135bb19 100644 --- a/racket/src/racket/src/schemexm.h +++ b/racket/src/racket/src/schemexm.h @@ -86,6 +86,7 @@ #define scheme_add_flush (scheme_extension_table->scheme_add_flush) #define scheme_remove_flush (scheme_extension_table->scheme_remove_flush) #define scheme_add_atexit_closer (scheme_extension_table->scheme_add_atexit_closer) +#define scheme_atexit (scheme_extension_table->scheme_atexit) #define scheme_add_evt (scheme_extension_table->scheme_add_evt) #define scheme_add_evt_through_sema (scheme_extension_table->scheme_add_evt_through_sema) #define scheme_is_evt (scheme_extension_table->scheme_is_evt) diff --git a/racket/src/racket/src/thread.c b/racket/src/racket/src/thread.c index 4df1fd7224..668ab4e1e6 100644 --- a/racket/src/racket/src/thread.c +++ b/racket/src/racket/src/thread.c @@ -1984,6 +1984,11 @@ void scheme_add_atexit_closer(Scheme_Exit_Closer_Func f) cust_closers = scheme_make_raw_pair((Scheme_Object *)f, cust_closers); } +int scheme_atexit(void (*func)(void)) +{ + return atexit(func); +} + void scheme_schedule_custodian_close(Scheme_Custodian *c) { /* This procedure might be called by a garbage collector to register