diff options
author | Test_User <hax@andrewyu.org> | 2024-06-21 09:02:51 -0400 |
---|---|---|
committer | Test_User <hax@andrewyu.org> | 2024-06-21 19:55:27 -0400 |
commit | fbd7fc576fb73e9c536cc42a7f2d66b96261e1f0 (patch) | |
tree | 889d9c868b71c78e79cdf107911153e58eb51478 /networks/openssl_buffered.c | |
parent | ef6f87193ab6628a2366b004a21c5cb21304c663 (diff) | |
download | haxircd-fbd7fc576fb73e9c536cc42a7f2d66b96261e1f0.tar.gz haxircd-fbd7fc576fb73e9c536cc42a7f2d66b96261e1f0.zip |
-pthread mutex, +semaphores
Diffstat (limited to 'networks/openssl_buffered.c')
-rw-r--r-- | networks/openssl_buffered.c | 111 |
1 files changed, 17 insertions, 94 deletions
diff --git a/networks/openssl_buffered.c b/networks/openssl_buffered.c index 07714d4..1afc2a3 100644 --- a/networks/openssl_buffered.c +++ b/networks/openssl_buffered.c @@ -35,11 +35,6 @@ #include <pthread.h> #include <unistd.h> -#ifdef USE_FUTEX -#else -#include <semaphore.h> -#endif - #include "../config.h" #include "../main.h" #include "../mutex.h" @@ -51,13 +46,8 @@ struct openssl_buffered_handle { int fd; char valid; char close; -#ifdef USE_FUTEX MUTEX_TYPE release_read; MUTEX_TYPE release_write; -#else - sem_t release_read; - sem_t release_write; -#endif char *buffer; size_t write_buffer_index; size_t buffer_len; @@ -103,12 +93,7 @@ void * openssl_buffered_send_thread(void *handle) { len = info->buffer_len; #endif -#ifdef USE_FUTEX mutex_unlock(&(info->release_write)); -#else - sem_trywait(&(info->release_write)); - sem_post(&(info->release_write)); -#endif #ifdef USE_ATOMICS if (!__sync_fetch_and_or(&(info->valid), 0)) @@ -125,17 +110,10 @@ void * openssl_buffered_send_thread(void *handle) { if (len > OPENSSL_BUFFERED_LEN/2 && OPENSSL_BUFFERED_LEN > 1) len = OPENSSL_BUFFERED_LEN/2; -#ifdef USE_FUTEX if (len == 0) { mutex_lock(&(info->release_read)); continue; } -#else - if (len == 0) { - sem_wait(&(info->release_read)); - continue; - } -#endif struct pollfd pollfd = { .fd = info->fd, @@ -185,12 +163,7 @@ void * openssl_buffered_send_thread(void *handle) { info->valid = 0; mutex_unlock(&(info->mutex)); -#ifdef USE_FUTEX mutex_unlock(&(info->release_write)); -#else - sem_trywait(&(info->release_write)); - sem_post(&(info->release_write)); -#endif while (1) { mutex_lock(&(info->mutex)); if (info->close) { @@ -199,24 +172,14 @@ void * openssl_buffered_send_thread(void *handle) { SSL_free(info->ssl); close(info->fd); free(info->buffer); -#ifdef USE_FUTEX -#else - sem_destroy(&(info->release_read)); - sem_destroy(&(info->release_write)); -#endif + mutex_destroy(&(info->release_read)); + mutex_destroy(&(info->release_write)); free(info); return 0; } else { -#ifdef USE_FUTEX - info->release_read = 1; mutex_unlock(&(info->mutex)); mutex_lock(&(info->release_read)); continue; -#else - mutex_unlock(&(info->mutex)); - sem_wait(&(info->release_read)); - continue; -#endif } mutex_unlock(&(info->mutex)); } @@ -248,18 +211,14 @@ int openssl_buffered_send(void *handle, struct string msg) { } #endif -#ifdef USE_FUTEX if (len == 0) { - mutex_lock(&(openssl_handle->release_write)); - continue; - } +#ifdef USE_ATOMICS #else - if (len == 0) { mutex_unlock(&(openssl_handle->mutex)); - sem_wait(&(openssl_handle->release_write)); +#endif + mutex_lock(&(openssl_handle->release_write)); continue; } -#endif memcpy(&(openssl_handle->buffer[openssl_handle->write_buffer_index]), msg.data, len); #ifdef USE_ATOMICS @@ -270,12 +229,7 @@ int openssl_buffered_send(void *handle, struct string msg) { mutex_unlock(&(openssl_handle->mutex)); #endif -#ifdef USE_FUTEX mutex_unlock(&(openssl_handle->release_read)); -#else - sem_trywait(&(openssl_handle->release_read)); - sem_post(&(openssl_handle->release_read)); -#endif openssl_handle->write_buffer_index += len; if (openssl_handle->write_buffer_index >= OPENSSL_BUFFERED_LEN) @@ -317,6 +271,7 @@ size_t openssl_buffered_recv(void *handle, char *data, size_t len, char *err) { return 0; } } else { + mutex_unlock(&(openssl_handle->mutex)); break; } mutex_unlock(&(openssl_handle->mutex)); @@ -344,7 +299,6 @@ 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; @@ -400,9 +354,7 @@ int openssl_buffered_connect(void **handle, struct string address, struct string goto openssl_connect_free_openssl_handle; SSL_set_fd(openssl_handle->ssl, fd); - res = mutex_init(&(openssl_handle->mutex)); - if (res != 0) - goto openssl_connect_free_ssl; + mutex_init(&(openssl_handle->mutex)); struct pollfd pollfd = { .fd = fd, @@ -449,13 +401,8 @@ int openssl_buffered_connect(void **handle, struct string address, struct string if (!openssl_handle->buffer) goto openssl_connect_destroy_mutex; -#ifdef USE_FUTEX - openssl_handle->release_read = 0; - openssl_handle->release_write = 0; -#else - sem_init(&(openssl_handle->release_read), 0, 0); - sem_init(&(openssl_handle->release_write), 0, 0); -#endif + mutex_init(&(openssl_handle->release_read)); + mutex_init(&(openssl_handle->release_write)); pthread_t trash; if (pthread_create(&trash, &pthread_attr, openssl_buffered_send_thread, openssl_handle) != 0) @@ -464,14 +411,10 @@ int openssl_buffered_connect(void **handle, struct string address, struct string return fd; openssl_connect_destroy_releases: -#ifdef USE_FUTEX -#else - sem_destroy(&(openssl_handle->release_read)); - sem_destroy(&(openssl_handle->release_write)); -#endif + mutex_destroy(&(openssl_handle->release_read)); + mutex_destroy(&(openssl_handle->release_write)); openssl_connect_destroy_mutex: mutex_destroy(&(openssl_handle->mutex)); - openssl_connect_free_ssl: SSL_free(openssl_handle->ssl); openssl_connect_free_openssl_handle: free(openssl_handle); @@ -526,13 +469,12 @@ int openssl_buffered_accept(int listen_fd, void **handle, struct string *addr) { SSL_set_fd(openssl_handle->ssl, con_fd); - int res = mutex_init(&(openssl_handle->mutex)); - if (res != 0) - goto openssl_accept_free_ssl; + mutex_init(&(openssl_handle->mutex)); struct pollfd pollfd = { .fd = con_fd, }; + int res; do { res = SSL_accept(openssl_handle->ssl); if (res == 0) @@ -575,13 +517,8 @@ int openssl_buffered_accept(int listen_fd, void **handle, struct string *addr) { if (!openssl_handle->buffer) goto openssl_accept_destroy_mutex; -#ifdef USE_FUTEX - openssl_handle->release_read = 0; - openssl_handle->release_write = 0; -#else - sem_init(&(openssl_handle->release_read), 0, 0); - sem_init(&(openssl_handle->release_write), 0, 0); -#endif + mutex_init(&(openssl_handle->release_read)); + mutex_init(&(openssl_handle->release_write)); pthread_t trash; if (pthread_create(&trash, &pthread_attr, openssl_buffered_send_thread, openssl_handle) != 0) @@ -590,14 +527,10 @@ int openssl_buffered_accept(int listen_fd, void **handle, struct string *addr) { return con_fd; openssl_accept_destroy_releases: -#ifdef USE_FUTEX -#else - sem_destroy(&(openssl_handle->release_read)); - sem_destroy(&(openssl_handle->release_write)); -#endif + mutex_destroy(&(openssl_handle->release_read)); + mutex_destroy(&(openssl_handle->release_write)); openssl_accept_destroy_mutex: mutex_destroy(&(openssl_handle->mutex)); - openssl_accept_free_ssl: SSL_free(openssl_handle->ssl); openssl_accept_free_openssl_handle: free(openssl_handle); @@ -613,12 +546,7 @@ void openssl_buffered_shutdown(void *handle) { struct openssl_buffered_handle *openssl_handle = handle; mutex_lock(&(openssl_handle->mutex)); openssl_handle->valid = 0; -#ifdef USE_FUTEX mutex_unlock(&(openssl_handle->release_read)); -#else - sem_trywait(&(openssl_handle->release_read)); - sem_post(&(openssl_handle->release_read)); -#endif mutex_unlock(&(openssl_handle->mutex)); shutdown(openssl_handle->fd, SHUT_RDWR); } @@ -627,12 +555,7 @@ void openssl_buffered_close(int fd, void *handle) { struct openssl_buffered_handle *openssl_handle = handle; mutex_lock(&(openssl_handle->mutex)); openssl_handle->valid = 0; -#ifdef USE_FUTEX mutex_unlock(&(openssl_handle->release_read)); -#else - sem_trywait(&(openssl_handle->release_read)); - sem_post(&(openssl_handle->release_read)); -#endif openssl_handle->close = 1; mutex_unlock(&(openssl_handle->mutex)); } |