aboutsummaryrefslogtreecommitdiff
path: root/networks/openssl.c
diff options
context:
space:
mode:
Diffstat (limited to 'networks/openssl.c')
-rw-r--r--networks/openssl.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/networks/openssl.c b/networks/openssl.c
index fdfd602..6b67f11 100644
--- a/networks/openssl.c
+++ b/networks/openssl.c
@@ -140,7 +140,6 @@ size_t openssl_recv(void *handle, char *data, size_t len, char *err) {
return 0;
}
res = SSL_read(openssl_handle->ssl, data, len);
- mutex_unlock(&(openssl_handle->mutex));
if (res <= 0) {
switch(SSL_get_error(openssl_handle->ssl, res)) {
case SSL_ERROR_WANT_READ:
@@ -150,12 +149,14 @@ size_t openssl_recv(void *handle, char *data, size_t len, char *err) {
pollfd.events = POLLOUT;
break;
default:
+ mutex_unlock(&(openssl_handle->mutex));
*err = 3;
return 0;
}
} else {
break;
}
+ mutex_unlock(&(openssl_handle->mutex));
res = poll(&pollfd, 1, PING_INTERVAL*1000);
if (res == 0) { // Timeout
@@ -180,6 +181,7 @@ size_t openssl_recv(void *handle, char *data, size_t len, char *err) {
return 0;
}
} while (1);
+ mutex_unlock(&(openssl_handle->mutex));
*err = 0;
return (size_t)res;