diff options
-rw-r--r-- | networks/openssl.c | 4 | ||||
-rw-r--r-- | networks/openssl_buffered.c | 7 |
2 files changed, 8 insertions, 3 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; diff --git a/networks/openssl_buffered.c b/networks/openssl_buffered.c index 6959d33..c973dcd 100644 --- a/networks/openssl_buffered.c +++ b/networks/openssl_buffered.c @@ -272,9 +272,9 @@ size_t openssl_buffered_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)) { + int ssl_err = SSL_get_error(openssl_handle->ssl, res); + switch(ssl_err) { case SSL_ERROR_WANT_READ: pollfd.events = POLLIN; break; @@ -283,11 +283,13 @@ size_t openssl_buffered_recv(void *handle, char *data, size_t len, char *err) { break; default: *err = 3; + mutex_unlock(&(openssl_handle->mutex)); return 0; } } else { break; } + mutex_unlock(&(openssl_handle->mutex)); res = poll(&pollfd, 1, PING_INTERVAL*1000); if (res == 0) { // Timeout @@ -312,6 +314,7 @@ size_t openssl_buffered_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; |