Make sure no mutexes are held when cond API are called

This commit is contained in:
Juliusz Sosinowicz
2023-08-09 16:25:58 +02:00
parent 7ba00f3b84
commit d747df2ae4
4 changed files with 31 additions and 10 deletions

View File

@@ -936,7 +936,10 @@ static int SignalSetup(WOLFSSL_CRL* crl, int status)
return BAD_MUTEX_E;
}
crl->setup = status;
wc_UnLockMutex(&crl->crlLock);
if (wc_UnLockMutex(&crl->crlLock) != 0) {
WOLFSSL_MSG("wc_UnLockMutex crlLock failed");
return BAD_MUTEX_E;
}
ret = wolfSSL_CondSignal(&crl->cond);
if (ret != 0)
@@ -1492,9 +1495,15 @@ static int StartMonitorCRL(WOLFSSL_CRL* crl)
}
while (crl->setup == 0) {
int condRet;
wc_UnLockMutex(&crl->crlLock);
if (wc_UnLockMutex(&crl->crlLock) != 0) {
WOLFSSL_MSG("wc_UnLockMutex crlLock failed");
return BAD_MUTEX_E;
}
condRet = wolfSSL_CondWait(&crl->cond);
wc_LockMutex(&crl->crlLock);
if (wc_LockMutex(&crl->crlLock) != 0) {
WOLFSSL_MSG("wc_LockMutex crlLock failed");
return BAD_MUTEX_E;
}
if (condRet != 0) {
ret = BAD_COND_E;
break;
@@ -1502,12 +1511,15 @@ static int StartMonitorCRL(WOLFSSL_CRL* crl)
}
if (ret >= 0 && crl->setup < 0)
ret = crl->setup; /* store setup error */
wc_UnLockMutex(&crl->crlLock);
if (ret < 0) {
WOLFSSL_MSG("DoMonitor setup failure");
crl->tid = INVALID_THREAD_VAL; /* thread already done */
}
if (wc_UnLockMutex(&crl->crlLock) != 0) {
WOLFSSL_MSG("wc_UnLockMutex crlLock failed");
return BAD_MUTEX_E;
}
return ret;
}