win32 places: make break-signal semaphore place-local
This commit is contained in:
parent
1f7ac35d8e
commit
ddbb3b02a1
|
@ -169,8 +169,12 @@ typedef struct Thread_Local_Variables {
|
|||
struct Scheme_Object *scheme_orig_stdin_port_;
|
||||
struct mz_fd_set *scheme_fd_set_;
|
||||
struct Scheme_Custodian *new_port_cust_;
|
||||
#if (defined(__WIN32__) || defined(WIN32) || defined(_WIN32))
|
||||
void *scheme_break_semaphore_;
|
||||
#else
|
||||
int external_event_fd_;
|
||||
int put_external_event_fd_;
|
||||
#endif
|
||||
char *read_string_byte_buffer_;
|
||||
struct ITimer_Data *itimerdata_;
|
||||
char *quick_buffer_;
|
||||
|
@ -490,6 +494,7 @@ XFORM_GC_VARIABLE_STACK_THROUGH_THREAD_LOCAL;
|
|||
#define scheme_orig_stdin_port XOA (scheme_get_thread_local_variables()->scheme_orig_stdin_port_)
|
||||
#define scheme_fd_set XOA (scheme_get_thread_local_variables()->scheme_fd_set_)
|
||||
#define new_port_cust XOA (scheme_get_thread_local_variables()->new_port_cust_)
|
||||
#define scheme_break_semaphore XOA (scheme_get_thread_local_variables()->scheme_break_semaphore_)
|
||||
#define external_event_fd XOA (scheme_get_thread_local_variables()->external_event_fd_)
|
||||
#define put_external_event_fd XOA (scheme_get_thread_local_variables()->put_external_event_fd_)
|
||||
#define read_string_byte_buffer XOA (scheme_get_thread_local_variables()->read_string_byte_buffer_)
|
||||
|
|
|
@ -401,7 +401,7 @@ static void register_traversers(void);
|
|||
#endif
|
||||
|
||||
#if defined(WIN32_FD_HANDLES)
|
||||
OS_SEMAPHORE_TYPE scheme_break_semaphore;
|
||||
THREAD_LOCAL_DECL(void *scheme_break_semaphore;)
|
||||
#endif
|
||||
|
||||
#ifdef MZ_FDS
|
||||
|
@ -542,7 +542,7 @@ scheme_init_port (Scheme_Env *env)
|
|||
scheme_redirect_output_port_type = scheme_make_port_type("<redirect-output-port>");
|
||||
|
||||
#ifdef WIN32_FD_HANDLES
|
||||
scheme_break_semaphore = CreateSemaphore(NULL, 0, 1, NULL);
|
||||
scheme_break_semaphore = (void*)CreateSemaphore(NULL, 0, 1, NULL);
|
||||
|
||||
/* We'll need to know whether this is Win95 or WinNT: */
|
||||
{
|
||||
|
@ -8549,7 +8549,7 @@ static void clean_up_wait(intptr_t result, OS_SEMAPHORE_TYPE *array,
|
|||
}
|
||||
|
||||
/* Clear out break semaphore */
|
||||
WaitForSingleObject(scheme_break_semaphore, 0);
|
||||
WaitForSingleObject((HANDLE)scheme_break_semaphore, 0);
|
||||
}
|
||||
|
||||
static int made_progress;
|
||||
|
@ -8709,7 +8709,7 @@ static void default_sleep(float v, void *fds)
|
|||
if (!count) {
|
||||
array = just_two_array;
|
||||
}
|
||||
break_sema = scheme_break_semaphore;
|
||||
break_sema = (HANDLE)scheme_break_semaphore;
|
||||
array[count++] = break_sema;
|
||||
|
||||
/* Extensions may handle events.
|
||||
|
|
|
@ -78,7 +78,7 @@
|
|||
|
||||
#if defined(WINDOWS_PROCESSES) || defined(WINDOWS_FILE_HANDLES)
|
||||
# include <windows.h>
|
||||
extern HANDLE scheme_break_semaphore;
|
||||
THREAD_LOCAL_DECL(extern void *scheme_break_semaphore;)
|
||||
#endif
|
||||
|
||||
#if defined(FILES_HAVE_FDS) \
|
||||
|
@ -3784,7 +3784,7 @@ void scheme_break_thread(Scheme_Thread *p)
|
|||
scheme_weak_resume_thread(p);
|
||||
# if defined(WINDOWS_PROCESSES) || defined(WINDOWS_FILE_HANDLES)
|
||||
if (SAME_OBJ(p, scheme_main_thread))
|
||||
ReleaseSemaphore(scheme_break_semaphore, 1, NULL);
|
||||
ReleaseSemaphore((HANDLE)scheme_break_semaphore, 1, NULL);
|
||||
# endif
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user