mirror of https://github.com/wolfSSL/wolfssl.git
better error checking on condition variable operations, cleanup
parent
b9f0243528
commit
91b7cddb7c
45
src/crl.c
45
src/crl.c
|
@ -58,10 +58,15 @@ int InitCRL(WOLFSSL_CRL* crl, WOLFSSL_CERT_MANAGER* cm)
|
||||||
crl->tid = 0;
|
crl->tid = 0;
|
||||||
crl->mfd = -1; /* mfd for bsd is kqueue fd, eventfd for linux */
|
crl->mfd = -1; /* mfd for bsd is kqueue fd, eventfd for linux */
|
||||||
crl->setup = 0; /* thread setup done predicate */
|
crl->setup = 0; /* thread setup done predicate */
|
||||||
pthread_cond_init(&crl->cond, 0);
|
if (pthread_cond_init(&crl->cond, 0) != 0) {
|
||||||
|
WOLFSSL_MSG("Pthread condition init failed");
|
||||||
|
return BAD_COND_E;
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
if (InitMutex(&crl->crlLock) != 0)
|
if (InitMutex(&crl->crlLock) != 0) {
|
||||||
|
WOLFSSL_MSG("Init Mutex failed");
|
||||||
return BAD_MUTEX_E;
|
return BAD_MUTEX_E;
|
||||||
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -329,6 +334,8 @@ int BufferLoadCRL(WOLFSSL_CRL* crl, const byte* buff, long sz, int type)
|
||||||
/* Signal Monitor thread is setup, save status to setup flag, 0 on success */
|
/* Signal Monitor thread is setup, save status to setup flag, 0 on success */
|
||||||
static int SignalSetup(WOLFSSL_CRL* crl, int status)
|
static int SignalSetup(WOLFSSL_CRL* crl, int status)
|
||||||
{
|
{
|
||||||
|
int ret;
|
||||||
|
|
||||||
/* signal to calling thread we're setup */
|
/* signal to calling thread we're setup */
|
||||||
if (LockMutex(&crl->crlLock) != 0) {
|
if (LockMutex(&crl->crlLock) != 0) {
|
||||||
WOLFSSL_MSG("LockMutex crlLock failed");
|
WOLFSSL_MSG("LockMutex crlLock failed");
|
||||||
|
@ -336,10 +343,13 @@ static int SignalSetup(WOLFSSL_CRL* crl, int status)
|
||||||
}
|
}
|
||||||
|
|
||||||
crl->setup = status;
|
crl->setup = status;
|
||||||
pthread_cond_signal(&crl->cond);
|
ret = pthread_cond_signal(&crl->cond);
|
||||||
|
|
||||||
UnLockMutex(&crl->crlLock);
|
UnLockMutex(&crl->crlLock);
|
||||||
|
|
||||||
|
if (ret != 0)
|
||||||
|
return BAD_COND_E;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -501,6 +511,8 @@ static void* DoMonitor(void* arg)
|
||||||
fDER = open(crl->monitors[1].path, XEVENT_MODE);
|
fDER = open(crl->monitors[1].path, XEVENT_MODE);
|
||||||
if (fDER == -1) {
|
if (fDER == -1) {
|
||||||
WOLFSSL_MSG("DER event dir open failed");
|
WOLFSSL_MSG("DER event dir open failed");
|
||||||
|
if (fPEM != -1)
|
||||||
|
close(fPEM);
|
||||||
close(crl->mfd);
|
close(crl->mfd);
|
||||||
SignalSetup(crl, MONITOR_SETUP_E);
|
SignalSetup(crl, MONITOR_SETUP_E);
|
||||||
return NULL;
|
return NULL;
|
||||||
|
@ -516,8 +528,14 @@ static void* DoMonitor(void* arg)
|
||||||
NOTE_DELETE | NOTE_EXTEND | NOTE_WRITE | NOTE_ATTRIB, 0, 0);
|
NOTE_DELETE | NOTE_EXTEND | NOTE_WRITE | NOTE_ATTRIB, 0, 0);
|
||||||
|
|
||||||
/* signal to calling thread we're setup */
|
/* signal to calling thread we're setup */
|
||||||
if (SignalSetup(crl, 1) != 0)
|
if (SignalSetup(crl, 1) != 0) {
|
||||||
|
if (fPEM != -1)
|
||||||
|
close(fPEM);
|
||||||
|
if (fDER != -1)
|
||||||
|
close(fDER);
|
||||||
|
close(crl->mfd);
|
||||||
return NULL;
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
for (;;) {
|
for (;;) {
|
||||||
struct kevent event;
|
struct kevent event;
|
||||||
|
@ -642,8 +660,17 @@ static void* DoMonitor(void* arg)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* signal to calling thread we're setup */
|
/* signal to calling thread we're setup */
|
||||||
if (SignalSetup(crl, 1) != 0)
|
if (SignalSetup(crl, 1) != 0) {
|
||||||
|
#ifdef WOLFSSL_SMALL_STACK
|
||||||
|
XFREE(buff, NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
if (wd > 0)
|
||||||
|
inotify_rm_watch(notifyFd, wd);
|
||||||
|
close(crl->mfd);
|
||||||
|
close(notifyFd);
|
||||||
return NULL;
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
for (;;) {
|
for (;;) {
|
||||||
fd_set readfds;
|
fd_set readfds;
|
||||||
|
@ -725,8 +752,12 @@ static int StartMonitorCRL(WOLFSSL_CRL* crl)
|
||||||
return BAD_MUTEX_E;
|
return BAD_MUTEX_E;
|
||||||
}
|
}
|
||||||
|
|
||||||
while (crl->setup == 0)
|
while (crl->setup == 0) {
|
||||||
pthread_cond_wait(&crl->cond, &crl->crlLock);
|
if (pthread_cond_wait(&crl->cond, &crl->crlLock) != 0) {
|
||||||
|
ret = BAD_COND_E;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (crl->setup < 0)
|
if (crl->setup < 0)
|
||||||
ret = crl->setup; /* store setup error */
|
ret = crl->setup; /* store setup error */
|
||||||
|
|
|
@ -364,6 +364,9 @@ const char* wc_GetErrorString(int error)
|
||||||
case SIG_VERIFY_E:
|
case SIG_VERIFY_E:
|
||||||
return "Signature verify error";
|
return "Signature verify error";
|
||||||
|
|
||||||
|
case BAD_COND_E:
|
||||||
|
return "Bad condition variable operation error";
|
||||||
|
|
||||||
default:
|
default:
|
||||||
return "unknown error number";
|
return "unknown error number";
|
||||||
|
|
||||||
|
|
|
@ -163,6 +163,7 @@ enum {
|
||||||
|
|
||||||
WC_INIT_E = -228, /* wolfcrypt failed to initialize */
|
WC_INIT_E = -228, /* wolfcrypt failed to initialize */
|
||||||
SIG_VERIFY_E = -229, /* wolfcrypt signature verify error */
|
SIG_VERIFY_E = -229, /* wolfcrypt signature verify error */
|
||||||
|
BAD_COND_E = -230, /* Bad condition variable operation */
|
||||||
|
|
||||||
MIN_CODE_E = -300 /* errors -101 - -299 */
|
MIN_CODE_E = -300 /* errors -101 - -299 */
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in New Issue