Add scheme_atexit c function.

This way programs can actually call atexit. (Otherwise atexit
is frequently not provided in libc as a symbol.)
This commit is contained in:
Leif Andersen 2017-06-03 20:47:34 -04:00
parent 2f6c42f3c1
commit a8fa5d4ebb
No known key found for this signature in database
GPG Key ID: BB90BDDE4DBF7C16
10 changed files with 14 additions and 0 deletions

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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,

View File

@ -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,

View File

@ -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;

View File

@ -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)

View File

@ -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