rocr: Fix sem_post overflow errors
WaitSemaphore and PostSemaphore are used in the HybridMutex implementation. If HybridMutex did not have to call WaitSemaphore when acquired, then calling PostSemaphore would cause the internal count inside sem_t to slowly grow to large values and eventually cause overflow. Change-Id: I173fc17c874b49926e56991405e9086ea8c138fc
Cette révision appartient à :
@@ -369,6 +369,14 @@ bool WaitSemaphore(Semaphore sem) {
|
||||
}
|
||||
|
||||
void PostSemaphore(Semaphore sem) {
|
||||
int waitval = 1;
|
||||
if (sem_getvalue(*(sem_t**)&sem, &waitval))
|
||||
assert(false && "Failed to get semaphore waiters");
|
||||
|
||||
/* sem_getvalue return <= 0 when there are threads blocked on sem_wait */
|
||||
if (waitval > 0)
|
||||
return;
|
||||
|
||||
if (sem_post(*(sem_t**)&sem))
|
||||
assert(false && "Failed to post semaphore");
|
||||
}
|
||||
|
||||
Référencer dans un nouveau ticket
Bloquer un utilisateur