|
Lines 374-381
check_suspend(struct pthread *curthread)
Link Here
|
| 374 |
*/ |
374 |
*/ |
| 375 |
curthread->critical_count++; |
375 |
curthread->critical_count++; |
| 376 |
THR_UMUTEX_LOCK(curthread, &(curthread)->lock); |
376 |
THR_UMUTEX_LOCK(curthread, &(curthread)->lock); |
| 377 |
while ((curthread->flags & (THR_FLAGS_NEED_SUSPEND | |
377 |
while ((curthread->flags & THR_FLAGS_NEED_SUSPEND) != 0) { |
| 378 |
THR_FLAGS_SUSPENDED)) == THR_FLAGS_NEED_SUSPEND) { |
|
|
| 379 |
curthread->cycle++; |
378 |
curthread->cycle++; |
| 380 |
cycle = curthread->cycle; |
379 |
cycle = curthread->cycle; |
| 381 |
|
380 |
|
|
Lines 392-398
check_suspend(struct pthread *curthread)
Link Here
|
| 392 |
THR_UMUTEX_UNLOCK(curthread, &(curthread)->lock); |
391 |
THR_UMUTEX_UNLOCK(curthread, &(curthread)->lock); |
| 393 |
_thr_umtx_wait_uint(&curthread->cycle, cycle, NULL, 0); |
392 |
_thr_umtx_wait_uint(&curthread->cycle, cycle, NULL, 0); |
| 394 |
THR_UMUTEX_LOCK(curthread, &(curthread)->lock); |
393 |
THR_UMUTEX_LOCK(curthread, &(curthread)->lock); |
| 395 |
curthread->flags &= ~THR_FLAGS_SUSPENDED; |
|
|
| 396 |
} |
394 |
} |
| 397 |
THR_UMUTEX_UNLOCK(curthread, &(curthread)->lock); |
395 |
THR_UMUTEX_UNLOCK(curthread, &(curthread)->lock); |
| 398 |
curthread->critical_count--; |
396 |
curthread->critical_count--; |