Diffstat (limited to 'qmake/tools/qwaitcondition_unix.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r-- | qmake/tools/qwaitcondition_unix.cpp | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/qmake/tools/qwaitcondition_unix.cpp b/qmake/tools/qwaitcondition_unix.cpp index 99c1014..6684617 100644 --- a/qmake/tools/qwaitcondition_unix.cpp +++ b/qmake/tools/qwaitcondition_unix.cpp | |||
@@ -121,13 +121,13 @@ struct QWaitConditionPrivate { | |||
121 | 121 | ||
122 | // Key reading thread code | 122 | // Key reading thread code |
123 | for (;;) { | 123 | for (;;) { |
124 | getchar(); | 124 | getchar(); |
125 | mymutex.lock(); | 125 | mymutex.lock(); |
126 | // Sleep until there are no busy worker threads | 126 | // Sleep until there are no busy worker threads |
127 | while( count > 0 ) { | 127 | while( mycount > 0 ) { |
128 | mymutex.unlock(); | 128 | mymutex.unlock(); |
129 | sleep( 1 ); | 129 | sleep( 1 ); |
130 | mymutex.lock(); | 130 | mymutex.lock(); |
131 | } | 131 | } |
132 | mymutex.unlock(); | 132 | mymutex.unlock(); |
133 | key_pressed.wakeAll(); | 133 | key_pressed.wakeAll(); |
@@ -221,33 +221,38 @@ void QWaitCondition::wakeAll() | |||
221 | \endlist | 221 | \endlist |
222 | 222 | ||
223 | \sa wakeOne(), wakeAll() | 223 | \sa wakeOne(), wakeAll() |
224 | */ | 224 | */ |
225 | bool QWaitCondition::wait(unsigned long time) | 225 | bool QWaitCondition::wait(unsigned long time) |
226 | { | 226 | { |
227 | pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; | 227 | pthread_mutex_t mutex; |
228 | pthread_mutex_init( &mutex, 0 ); | ||
229 | pthread_mutex_lock( &mutex ); | ||
228 | 230 | ||
229 | int ret; | 231 | int ret; |
230 | if (time != ULONG_MAX) { | 232 | if (time != ULONG_MAX) { |
231 | struct timeval tv; | 233 | struct timeval tv; |
232 | gettimeofday(&tv, 0); | 234 | gettimeofday(&tv, 0); |
233 | 235 | ||
234 | timespec ti; | 236 | timespec ti; |
235 | ti.tv_nsec = (tv.tv_usec * 1000) + (time % 1000) * 1000; | 237 | ti.tv_nsec = ( tv.tv_usec + ( time % 1000 ) * 1000 ) * 1000; |
236 | ti.tv_sec = tv.tv_sec + (time / 1000) + ( ti.tv_nsec / 1000000000 ); | 238 | ti.tv_sec = tv.tv_sec + (time / 1000) + ( ti.tv_nsec / 1000000000 ); |
237 | ti.tv_nsec %= 1000000000; | 239 | ti.tv_nsec %= 1000000000; |
238 | 240 | ||
239 | ret = pthread_cond_timedwait(&d->cond, &mutex, &ti); | 241 | ret = pthread_cond_timedwait(&d->cond, &mutex, &ti); |
240 | } else | 242 | } else |
241 | ret = pthread_cond_wait(&d->cond, &mutex); | 243 | ret = pthread_cond_wait(&d->cond, &mutex); |
242 | 244 | ||
243 | #ifdef QT_CHECK_RANGE | 245 | #ifdef QT_CHECK_RANGE |
244 | if (ret && ret != ETIMEDOUT) | 246 | if (ret && ret != ETIMEDOUT) |
245 | qWarning("Wait condition wait failure: %s",strerror(ret)); | 247 | qWarning("Wait condition wait failure: %s",strerror(ret)); |
246 | #endif | 248 | #endif |
247 | 249 | ||
250 | pthread_mutex_unlock( &mutex ); | ||
251 | pthread_mutex_destroy( &mutex ); | ||
252 | |||
248 | return (ret == 0); | 253 | return (ret == 0); |
249 | } | 254 | } |
250 | 255 | ||
251 | /*! | 256 | /*! |
252 | \overload | 257 | \overload |
253 | 258 | ||
@@ -288,13 +293,13 @@ bool QWaitCondition::wait(QMutex *mutex, unsigned long time) | |||
288 | int ret; | 293 | int ret; |
289 | if (time != ULONG_MAX) { | 294 | if (time != ULONG_MAX) { |
290 | struct timeval tv; | 295 | struct timeval tv; |
291 | gettimeofday(&tv, 0); | 296 | gettimeofday(&tv, 0); |
292 | 297 | ||
293 | timespec ti; | 298 | timespec ti; |
294 | ti.tv_nsec = (tv.tv_usec * 1000) + (time % 1000) * 1000; | 299 | ti.tv_nsec = ( tv.tv_usec + ( time % 1000 ) * 1000 ) * 1000; |
295 | ti.tv_sec = tv.tv_sec + (time / 1000) + ( ti.tv_nsec / 1000000000 ); | 300 | ti.tv_sec = tv.tv_sec + (time / 1000) + ( ti.tv_nsec / 1000000000 ); |
296 | ti.tv_nsec %= 1000000000; | 301 | ti.tv_nsec %= 1000000000; |
297 | 302 | ||
298 | ret = pthread_cond_timedwait(&d->cond, &mutex->d->handle, &ti); | 303 | ret = pthread_cond_timedwait(&d->cond, &mutex->d->handle, &ti); |
299 | } else | 304 | } else |
300 | ret = pthread_cond_wait(&d->cond, &mutex->d->handle); | 305 | ret = pthread_cond_wait(&d->cond, &mutex->d->handle); |