try to fix Windows freezing problem

svn: r14867
This commit is contained in:
Matthew Flatt 2009-05-19 12:54:07 +00:00
parent 67a8ebecdb
commit e51ca461ae
11 changed files with 14 additions and 4 deletions

View File

@ -180,6 +180,7 @@ static BOOL CALLBACK CheckWindow(HWND wnd, LPARAM param)
info->remove ? PM_REMOVE : PM_NOREMOVE)) { info->remove ? PM_REMOVE : PM_NOREMOVE)) {
info->wnd = wnd; info->wnd = wnd;
info->c_return = c; info->c_return = c;
scheme_notify_sleep_progress();
return FALSE; return FALSE;
} }
} }
@ -217,6 +218,7 @@ int FindReady(MrEdContext *c, MSG *msg, int remove, MrEdContext **c_return)
while (PeekMessage(&pmsg, NULL, 0x4000, 0xFFFF, PM_REMOVE)) { while (PeekMessage(&pmsg, NULL, 0x4000, 0xFFFF, PM_REMOVE)) {
wxTranslateMessage(&pmsg); wxTranslateMessage(&pmsg);
DispatchMessage(&pmsg); DispatchMessage(&pmsg);
scheme_notify_sleep_progress();
} }
} }

View File

@ -47,6 +47,7 @@ scheme_in_main_thread
scheme_cancel_sleep scheme_cancel_sleep
scheme_start_sleeper_thread scheme_start_sleeper_thread
scheme_end_sleeper_thread scheme_end_sleeper_thread
scheme_notify_sleep_progress
scheme_make_thread_cell scheme_make_thread_cell
scheme_thread_cell_get scheme_thread_cell_get
scheme_thread_cell_set scheme_thread_cell_set

View File

@ -47,6 +47,7 @@ scheme_in_main_thread
scheme_cancel_sleep scheme_cancel_sleep
scheme_start_sleeper_thread scheme_start_sleeper_thread
scheme_end_sleeper_thread scheme_end_sleeper_thread
scheme_notify_sleep_progress
scheme_make_thread_cell scheme_make_thread_cell
scheme_thread_cell_get scheme_thread_cell_get
scheme_thread_cell_set scheme_thread_cell_set

View File

@ -49,6 +49,7 @@ EXPORTS
scheme_cancel_sleep scheme_cancel_sleep
scheme_start_sleeper_thread scheme_start_sleeper_thread
scheme_end_sleeper_thread scheme_end_sleeper_thread
scheme_notify_sleep_progress
scheme_make_thread_cell scheme_make_thread_cell
scheme_thread_cell_get scheme_thread_cell_get
scheme_thread_cell_set scheme_thread_cell_set

View File

@ -49,6 +49,7 @@ EXPORTS
scheme_cancel_sleep scheme_cancel_sleep
scheme_start_sleeper_thread scheme_start_sleeper_thread
scheme_end_sleeper_thread scheme_end_sleeper_thread
scheme_notify_sleep_progress
scheme_make_thread_cell scheme_make_thread_cell
scheme_thread_cell_get scheme_thread_cell_get
scheme_thread_cell_set scheme_thread_cell_set

View File

@ -8061,14 +8061,14 @@ static void clean_up_wait(long result, OS_SEMAPHORE_TYPE *array,
static int made_progress; static int made_progress;
static DWORD max_sleep_time; static DWORD max_sleep_time;
void scheme_notify_sleep_progres() void scheme_notify_sleep_progress()
{ {
made_progress = 1; made_progress = 1;
} }
#else #else
void scheme_notify_sleep_progres() void scheme_notify_sleep_progress()
{ {
} }

View File

@ -125,6 +125,8 @@ MZ_EXTERN void scheme_cancel_sleep(void);
MZ_EXTERN void scheme_start_sleeper_thread(void (*mzsleep)(float seconds, void *fds), float secs, void *fds, int hit_fd); MZ_EXTERN void scheme_start_sleeper_thread(void (*mzsleep)(float seconds, void *fds), float secs, void *fds, int hit_fd);
MZ_EXTERN void scheme_end_sleeper_thread(); MZ_EXTERN void scheme_end_sleeper_thread();
MZ_EXTERN void scheme_notify_sleep_progress();
MZ_EXTERN Scheme_Object *scheme_make_thread_cell(Scheme_Object *def_val, int inherited); MZ_EXTERN Scheme_Object *scheme_make_thread_cell(Scheme_Object *def_val, int inherited);
MZ_EXTERN Scheme_Object *scheme_thread_cell_get(Scheme_Object *cell, Scheme_Thread_Cell_Table *cells); MZ_EXTERN Scheme_Object *scheme_thread_cell_get(Scheme_Object *cell, Scheme_Thread_Cell_Table *cells);
MZ_EXTERN void scheme_thread_cell_set(Scheme_Object *cell, Scheme_Thread_Cell_Table *cells, Scheme_Object *v); MZ_EXTERN void scheme_thread_cell_set(Scheme_Object *cell, Scheme_Thread_Cell_Table *cells, Scheme_Object *v);

View File

@ -99,6 +99,7 @@ int (*scheme_in_main_thread)(void);
void (*scheme_cancel_sleep)(void); void (*scheme_cancel_sleep)(void);
void (*scheme_start_sleeper_thread)(void (*mzsleep)(float seconds, void *fds), float secs, void *fds, int hit_fd); void (*scheme_start_sleeper_thread)(void (*mzsleep)(float seconds, void *fds), float secs, void *fds, int hit_fd);
void (*scheme_end_sleeper_thread)(); void (*scheme_end_sleeper_thread)();
void (*scheme_notify_sleep_progress)();
Scheme_Object *(*scheme_make_thread_cell)(Scheme_Object *def_val, int inherited); Scheme_Object *(*scheme_make_thread_cell)(Scheme_Object *def_val, int inherited);
Scheme_Object *(*scheme_thread_cell_get)(Scheme_Object *cell, Scheme_Thread_Cell_Table *cells); Scheme_Object *(*scheme_thread_cell_get)(Scheme_Object *cell, Scheme_Thread_Cell_Table *cells);
void (*scheme_thread_cell_set)(Scheme_Object *cell, Scheme_Thread_Cell_Table *cells, Scheme_Object *v); void (*scheme_thread_cell_set)(Scheme_Object *cell, Scheme_Thread_Cell_Table *cells, Scheme_Object *v);

View File

@ -55,6 +55,7 @@
scheme_extension_table->scheme_cancel_sleep = scheme_cancel_sleep; scheme_extension_table->scheme_cancel_sleep = scheme_cancel_sleep;
scheme_extension_table->scheme_start_sleeper_thread = scheme_start_sleeper_thread; scheme_extension_table->scheme_start_sleeper_thread = scheme_start_sleeper_thread;
scheme_extension_table->scheme_end_sleeper_thread = scheme_end_sleeper_thread; scheme_extension_table->scheme_end_sleeper_thread = scheme_end_sleeper_thread;
scheme_extension_table->scheme_notify_sleep_progress = scheme_notify_sleep_progress;
scheme_extension_table->scheme_make_thread_cell = scheme_make_thread_cell; scheme_extension_table->scheme_make_thread_cell = scheme_make_thread_cell;
scheme_extension_table->scheme_thread_cell_get = scheme_thread_cell_get; scheme_extension_table->scheme_thread_cell_get = scheme_thread_cell_get;
scheme_extension_table->scheme_thread_cell_set = scheme_thread_cell_set; scheme_extension_table->scheme_thread_cell_set = scheme_thread_cell_set;

View File

@ -55,6 +55,7 @@
#define scheme_cancel_sleep (scheme_extension_table->scheme_cancel_sleep) #define scheme_cancel_sleep (scheme_extension_table->scheme_cancel_sleep)
#define scheme_start_sleeper_thread (scheme_extension_table->scheme_start_sleeper_thread) #define scheme_start_sleeper_thread (scheme_extension_table->scheme_start_sleeper_thread)
#define scheme_end_sleeper_thread (scheme_extension_table->scheme_end_sleeper_thread) #define scheme_end_sleeper_thread (scheme_extension_table->scheme_end_sleeper_thread)
#define scheme_notify_sleep_progress (scheme_extension_table->scheme_notify_sleep_progress)
#define scheme_make_thread_cell (scheme_extension_table->scheme_make_thread_cell) #define scheme_make_thread_cell (scheme_extension_table->scheme_make_thread_cell)
#define scheme_thread_cell_get (scheme_extension_table->scheme_thread_cell_get) #define scheme_thread_cell_get (scheme_extension_table->scheme_thread_cell_get)
#define scheme_thread_cell_set (scheme_extension_table->scheme_thread_cell_set) #define scheme_thread_cell_set (scheme_extension_table->scheme_thread_cell_set)

View File

@ -118,7 +118,6 @@ extern void *scheme_gmp_tls_load(long *s);
extern void scheme_gmp_tls_unload(long *s, void *p); extern void scheme_gmp_tls_unload(long *s, void *p);
extern void scheme_gmp_tls_snapshot(long *s, long *save); extern void scheme_gmp_tls_snapshot(long *s, long *save);
extern void scheme_gmp_tls_restore_snapshot(long *s, void *data, long *save, int do_free); extern void scheme_gmp_tls_restore_snapshot(long *s, void *data, long *save, int do_free);
extern void scheme_notify_sleep_progres();
static void check_ready_break(); static void check_ready_break();
@ -3493,7 +3492,7 @@ static int check_sleep(int need_activity, int sleep_now)
p2 = scheme_first_thread; p2 = scheme_first_thread;
while (p2) { while (p2) {
if (p2->ran_some) { if (p2->ran_some) {
scheme_notify_sleep_progres(); scheme_notify_sleep_progress();
p2->ran_some = 0; p2->ran_some = 0;
} }
p2 = p2->next; p2 = p2->next;