diff options
author | unknown <msvensson@shellback.> | 2006-12-18 11:30:34 +0100 |
---|---|---|
committer | unknown <msvensson@shellback.> | 2006-12-18 11:30:34 +0100 |
commit | e403f0e774e5bec4bf1e878b88ff5ce2fed335e5 (patch) | |
tree | 8a1d7c61c461d8854a77f5f39252584e41bfe7f4 /mysys | |
parent | 1aad903b710c2dc8452cfa64fcda43e5906cfa83 (diff) | |
parent | 43a251011cf7413c3d6728d6f447b78344259c1d (diff) | |
download | mariadb-git-e403f0e774e5bec4bf1e878b88ff5ce2fed335e5.tar.gz |
Merge maint1:/data/localhome/msvensson/mysql-5.0-maint
into shellback.:C:/mysql/mysql-5.0-maint
Diffstat (limited to 'mysys')
-rw-r--r-- | mysys/my_wincond.c | 19 |
1 files changed, 10 insertions, 9 deletions
diff --git a/mysys/my_wincond.c b/mysys/my_wincond.c index 327addff2cc..b56dacc135a 100644 --- a/mysys/my_wincond.c +++ b/mysys/my_wincond.c @@ -37,7 +37,7 @@ int pthread_cond_init(pthread_cond_t *cond, const pthread_condattr_t *attr) int pthread_cond_destroy(pthread_cond_t *cond) { - return CloseHandle(cond->semaphore) ? 0 : EINVAL; + return CloseHandle(cond->semaphore) ? 0 : EINVAL; } @@ -51,6 +51,7 @@ int pthread_cond_wait(pthread_cond_t *cond, pthread_mutex_t *mutex) return 0 ; } + int pthread_cond_timedwait(pthread_cond_t *cond, pthread_mutex_t *mutex, struct timespec *abstime) { @@ -61,26 +62,26 @@ int pthread_cond_timedwait(pthread_cond_t *cond, pthread_mutex_t *mutex, GetSystemTimeAsFileTime(&now.ft); /* - - subtract start time from current time(values are in 100ns units + Calculate time left to abstime + - subtract start time from current time(values are in 100ns units) - convert to millisec by dividing with 10000 - - subtract time since start from max timeout */ - timeout= abstime->timeout_msec - (long)((now.i64 - abstime->start.i64) / 10000); + timeout= (long)((abstime->tv.i64 - now.i64) / 10000); /* Don't allow the timeout to be negative */ if (timeout < 0) - timeout = 0L; + timeout= 0L; /* - Make sure the calucated time does not exceed original timeout + Make sure the calucated timeout does not exceed original timeout value which could cause "wait for ever" if system time changes */ - if (timeout > abstime->timeout_msec) - timeout= abstime->timeout_msec; + if (timeout > abstime->max_timeout_msec) + timeout= abstime->max_timeout_msec; InterlockedIncrement(&cond->waiting); LeaveCriticalSection(mutex); - result=WaitForSingleObject(cond->semaphore,timeout); + result= WaitForSingleObject(cond->semaphore,timeout); InterlockedDecrement(&cond->waiting); EnterCriticalSection(mutex); |