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:
parent
2f6c42f3c1
commit
a8fa5d4ebb
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue
Block a user