support multiple signal-received handles
svn: r16838
This commit is contained in:
parent
a91ff1c603
commit
1fac4829a6
|
@ -575,4 +575,6 @@ scheme_make_provided_string
|
|||
scheme_make_args_string
|
||||
scheme_system_library_subpath
|
||||
scheme_signal_received
|
||||
scheme_signal_received_at
|
||||
scheme_get_signal_handle
|
||||
scheme_char_strlen
|
||||
|
|
|
@ -587,4 +587,6 @@ scheme_make_provided_string
|
|||
scheme_make_args_string
|
||||
scheme_system_library_subpath
|
||||
scheme_signal_received
|
||||
scheme_signal_received_at
|
||||
scheme_get_signal_handle
|
||||
scheme_char_strlen
|
||||
|
|
|
@ -563,4 +563,6 @@ EXPORTS
|
|||
scheme_make_args_string
|
||||
scheme_system_library_subpath
|
||||
scheme_signal_received
|
||||
scheme_signal_received_at
|
||||
scheme_get_signal_handle
|
||||
scheme_char_strlen
|
||||
|
|
|
@ -579,4 +579,6 @@ EXPORTS
|
|||
scheme_make_args_string
|
||||
scheme_system_library_subpath
|
||||
scheme_signal_received
|
||||
scheme_signal_received_at
|
||||
scheme_get_signal_handle
|
||||
scheme_char_strlen
|
||||
|
|
|
@ -8369,22 +8369,41 @@ END_XFORM_SKIP;
|
|||
START_XFORM_SKIP;
|
||||
#endif
|
||||
|
||||
void scheme_signal_received(void)
|
||||
void scheme_signal_received_at(void *h)
|
||||
/* Ensure that MzScheme wakes up if asleep. */
|
||||
{
|
||||
#if defined(FILES_HAVE_FDS)
|
||||
if (put_external_event_fd) {
|
||||
int put_ext_event_fd = *(int *)h;
|
||||
if (put_ext_event_fd) {
|
||||
int v;
|
||||
do {
|
||||
v = write(put_external_event_fd, "!", 1);
|
||||
v = write(put_ext_event_fd, "!", 1);
|
||||
} while ((v == -1) && (errno == EINTR));
|
||||
}
|
||||
#endif
|
||||
#if defined(WINDOWS_PROCESSES) || defined(WINDOWS_FILE_HANDLES)
|
||||
ReleaseSemaphore(scheme_break_semaphore, 1, NULL);
|
||||
ReleaseSemaphore(*(OS_SEMAPHORE_TYPE *)h, 1, NULL);
|
||||
#endif
|
||||
}
|
||||
|
||||
void *scheme_get_signal_handle()
|
||||
{
|
||||
#if defined(FILES_HAVE_FDS)
|
||||
return &put_external_event_fd;
|
||||
#else
|
||||
# if defined(WINDOWS_PROCESSES) || defined(WINDOWS_FILE_HANDLES)
|
||||
return &scheme_break_semaphore;
|
||||
# else
|
||||
return NULL;
|
||||
# endif
|
||||
#endif
|
||||
}
|
||||
|
||||
void scheme_signal_received(void)
|
||||
{
|
||||
scheme_signal_received_at(scheme_get_signal_handle());
|
||||
}
|
||||
|
||||
#ifdef MZ_XFORM
|
||||
END_XFORM_SKIP;
|
||||
#endif
|
||||
|
|
|
@ -1089,5 +1089,7 @@ MZ_EXTERN char *scheme_make_args_string(char *s, int which, int argc, Scheme_Obj
|
|||
MZ_EXTERN const char *scheme_system_library_subpath();
|
||||
|
||||
MZ_EXTERN void scheme_signal_received(void);
|
||||
MZ_EXTERN void scheme_signal_received_at(void *);
|
||||
MZ_EXTERN void *scheme_get_signal_handle();
|
||||
|
||||
MZ_EXTERN int scheme_char_strlen(const mzchar *s);
|
||||
|
|
|
@ -899,6 +899,8 @@ char *(*scheme_make_provided_string)(Scheme_Object *o, int count, int *len);
|
|||
char *(*scheme_make_args_string)(char *s, int which, int argc, Scheme_Object **argv, long *len);
|
||||
const char *(*scheme_system_library_subpath)();
|
||||
void (*scheme_signal_received)(void);
|
||||
void (*scheme_signal_received_at)(void *);
|
||||
void *(*scheme_get_signal_handle)();
|
||||
int (*scheme_char_strlen)(const mzchar *s);
|
||||
#ifndef SCHEME_EX_INLINE
|
||||
} Scheme_Extension_Table;
|
||||
|
|
|
@ -633,4 +633,6 @@
|
|||
scheme_extension_table->scheme_make_args_string = scheme_make_args_string;
|
||||
scheme_extension_table->scheme_system_library_subpath = scheme_system_library_subpath;
|
||||
scheme_extension_table->scheme_signal_received = scheme_signal_received;
|
||||
scheme_extension_table->scheme_signal_received_at = scheme_signal_received_at;
|
||||
scheme_extension_table->scheme_get_signal_handle = scheme_get_signal_handle;
|
||||
scheme_extension_table->scheme_char_strlen = scheme_char_strlen;
|
||||
|
|
|
@ -633,6 +633,8 @@
|
|||
#define scheme_make_args_string (scheme_extension_table->scheme_make_args_string)
|
||||
#define scheme_system_library_subpath (scheme_extension_table->scheme_system_library_subpath)
|
||||
#define scheme_signal_received (scheme_extension_table->scheme_signal_received)
|
||||
#define scheme_signal_received_at (scheme_extension_table->scheme_signal_received_at)
|
||||
#define scheme_get_signal_handle (scheme_extension_table->scheme_get_signal_handle)
|
||||
#define scheme_char_strlen (scheme_extension_table->scheme_char_strlen)
|
||||
#ifdef MZ_PRECISE_GC
|
||||
#pragma GC_VARIABLE_STACK_THOUGH_TABLE
|
||||
|
|
Loading…
Reference in New Issue
Block a user