# HG changeset patch # User bsmith@81767d24-ef19-dc11-ae90-00e081727c95 # Date 1299812578 0 # Node ID 7953f0471e4da9e542e9279ca68ede083d76ab68 # Parent b793008314957778b3c6e31cb8ca194745854995 Some cleanups for the run loop iteration and thread system. diff -r b79300831495 -r 7953f0471e4d mac/dw.m --- a/mac/dw.m Fri Mar 11 02:33:19 2011 +0000 +++ b/mac/dw.m Fri Mar 11 03:02:58 2011 +0000 @@ -23,14 +23,11 @@ dw_mutex_lock(DWThreadMutex); \ _dw_mutex_locked = pthread_self(); \ dw_mutex_lock(DWThreadMutex2); \ - /*NSLog(@"Thread %d asking the main thread to stop %x", (int)pthread_self(), (int)DWObj);*/ \ [DWObj performSelectorOnMainThread:@selector(synchronizeThread:) withObject:nil waitUntilDone:NO]; \ dw_mutex_lock(DWRunMutex); \ - /*NSLog(@"Thread %d proceeding", (int)pthread_self());*/ \ _locked_by_me = TRUE; } } #define DW_MUTEX_UNLOCK { \ if(pthread_self() != DWThread && _locked_by_me == TRUE) { \ - /*NSLog(@"Thread %d releasing", (int)pthread_self());*/ \ dw_mutex_unlock(DWRunMutex); \ dw_mutex_unlock(DWThreadMutex2); \ _dw_mutex_locked = (pthread_t)-1; \ @@ -87,6 +84,7 @@ /* Some internal prototypes */ static void _do_resize(Box *thisbox, int x, int y); int _remove_userdata(UserData **root, char *varname, int all); +void _dw_main_iteration(void); SignalHandler *_get_handler(HWND window, int messageid) { @@ -1737,7 +1735,7 @@ } while(((tv.tv_sec - start.tv_sec)*1000) + ((tv.tv_usec - start.tv_usec)/1000) <= milliseconds) { - dw_main_iteration(); + _dw_main_iteration(); gettimeofday(&tv, NULL); } if(orig == (DWTID)-1) @@ -1750,10 +1748,8 @@ usleep(milliseconds * 1000); } -/* - * Processes a single message iteration and returns. - */ -void API dw_main_iteration(void) +/* Internal version that doesn't lock the run mutex */ +void _dw_main_iteration(void) { NSDate *distant_future = [NSDate distantFuture]; NSEvent *event = [DWApp nextEventMatchingMask:NSAnyEventMask @@ -1767,6 +1763,16 @@ } /* + * Processes a single message iteration and returns. + */ +void API dw_main_iteration(void) +{ + dw_mutex_lock(DWRunMutex); + _dw_main_iteration(); + dw_mutex_unlock(DWRunMutex); +} + +/* * Cleanly terminates a DW session, should be signal handler safe. * Parameters: * exitcode: Exit code reported to the operating system. @@ -2025,7 +2031,7 @@ while(!dialog->done) { - dw_main_iteration(); + _dw_main_iteration(); } dw_event_close(&dialog->eve); tmp = dialog->result; @@ -6511,7 +6517,7 @@ { while(pthread_mutex_trylock(mutex) != 0) { - dw_main_iteration(); + _dw_main_iteration(); } } else