Mercurial > dwindows
comparison mac/dw.m @ 728:55f22b39ab57
Changes to correctly set the main thread and lock the run mutex when not running a loop and when called from a callback.
author | bsmith@81767d24-ef19-dc11-ae90-00e081727c95 |
---|---|
date | Mon, 14 Mar 2011 22:25:01 +0000 |
parents | f190b5c2ce16 |
children | 6712e4211522 |
comparison
equal
deleted
inserted
replaced
727:f190b5c2ce16 | 728:55f22b39ab57 |
---|---|
1935 if(DWThread == (DWTID)-1 || DWThread == curr) | 1935 if(DWThread == (DWTID)-1 || DWThread == curr) |
1936 { | 1936 { |
1937 DWTID orig = DWThread; | 1937 DWTID orig = DWThread; |
1938 NSDate *until = [NSDate dateWithTimeIntervalSinceNow:(milliseconds/1000.0)]; | 1938 NSDate *until = [NSDate dateWithTimeIntervalSinceNow:(milliseconds/1000.0)]; |
1939 | 1939 |
1940 dw_mutex_lock(DWRunMutex); | |
1941 if(orig == (DWTID)-1) | 1940 if(orig == (DWTID)-1) |
1942 { | 1941 { |
1942 dw_mutex_lock(DWRunMutex); | |
1943 DWThread = curr; | 1943 DWThread = curr; |
1944 } | 1944 } |
1945 /* Process any pending events */ | 1945 /* Process any pending events */ |
1946 while(_dw_main_iteration(until)) | 1946 while(_dw_main_iteration(until)) |
1947 { | 1947 { |
1948 /* Just loop */ | 1948 /* Just loop */ |
1949 } | 1949 } |
1950 if(orig == (DWTID)-1) | 1950 if(orig == (DWTID)-1) |
1951 { | 1951 { |
1952 DWThread = orig; | 1952 DWThread = orig; |
1953 dw_mutex_unlock(DWRunMutex); | |
1953 } | 1954 } |
1954 dw_mutex_unlock(DWRunMutex); | |
1955 } | 1955 } |
1956 else | 1956 else |
1957 { | 1957 { |
1958 usleep(milliseconds * 1000); | 1958 usleep(milliseconds * 1000); |
1959 } | 1959 } |
1978 /* | 1978 /* |
1979 * Processes a single message iteration and returns. | 1979 * Processes a single message iteration and returns. |
1980 */ | 1980 */ |
1981 void API dw_main_iteration(void) | 1981 void API dw_main_iteration(void) |
1982 { | 1982 { |
1983 dw_mutex_lock(DWRunMutex); | 1983 DWTID curr = pthread_self(); |
1984 _dw_main_iteration([NSDate distantPast]); | 1984 |
1985 dw_mutex_unlock(DWRunMutex); | 1985 if(DWThread == (DWTID)-1) |
1986 { | |
1987 dw_mutex_lock(DWRunMutex); | |
1988 DWThread = curr; | |
1989 _dw_main_iteration([NSDate distantPast]); | |
1990 DWThread = (DWTID)-1; | |
1991 dw_mutex_unlock(DWRunMutex); | |
1992 } | |
1993 else if(DWThread == curr) | |
1994 { | |
1995 _dw_main_iteration([NSDate distantPast]); | |
1996 } | |
1986 } | 1997 } |
1987 | 1998 |
1988 /* | 1999 /* |
1989 * Cleanly terminates a DW session, should be signal handler safe. | 2000 * Cleanly terminates a DW session, should be signal handler safe. |
1990 * Parameters: | 2001 * Parameters: |