diff options
author | Test_User <hax@andrewyu.org> | 2024-06-19 07:16:56 -0400 |
---|---|---|
committer | Test_User <hax@andrewyu.org> | 2024-06-19 07:16:56 -0400 |
commit | 2423b203c96814efa1a177222f448527146a1c0c (patch) | |
tree | 8c0c80efb7998ab25710b108e735c15d13db6bbc /networks/openssl_buffered.c | |
parent | 1fccd7a7bca5a980706b098d0b75f6c99edab63d (diff) | |
download | haxircd-2423b203c96814efa1a177222f448527146a1c0c.tar.gz haxircd-2423b203c96814efa1a177222f448527146a1c0c.zip |
Fix some locking bugs
Diffstat (limited to 'networks/openssl_buffered.c')
-rw-r--r-- | networks/openssl_buffered.c | 7 |
1 files changed, 5 insertions, 2 deletions
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; |