From fbd7fc576fb73e9c536cc42a7f2d66b96261e1f0 Mon Sep 17 00:00:00 2001 From: Test_User Date: Fri, 21 Jun 2024 09:02:51 -0400 Subject: -pthread mutex, +semaphores --- networks/gnutls.c | 13 ++--- networks/openssl.c | 11 ++--- networks/openssl_buffered.c | 111 +++++++----------------------------------- networks/plaintext_buffered.c | 108 ++++++---------------------------------- 4 files changed, 40 insertions(+), 203 deletions(-) (limited to 'networks') diff --git a/networks/gnutls.c b/networks/gnutls.c index c5a4122..cb59a51 100644 --- a/networks/gnutls.c +++ b/networks/gnutls.c @@ -207,9 +207,7 @@ int gnutls_connect(void **handle, struct string address, struct string port, str *handle = gnutls_handle; - int res = mutex_init(&(gnutls_handle->mutex)); - if (res != 0) - goto gnutls_connect_free_gnutls_handle; + mutex_init(&(gnutls_handle->mutex)); struct sockaddr sockaddr; if (resolve(address, port, &sockaddr) != 0) @@ -222,6 +220,7 @@ int gnutls_connect(void **handle, struct string address, struct string port, str gnutls_handle->fd = fd; gnutls_handle->valid = 1; + int res; do { res = connect(fd, &sockaddr, sizeof(sockaddr)); } while (res < 0 && errno == EINTR); @@ -303,7 +302,6 @@ int gnutls_connect(void **handle, struct string address, struct string port, str close(fd); gnutls_connect_destroy_mutex: mutex_destroy(&(gnutls_handle->mutex)); - gnutls_connect_free_gnutls_handle: free(gnutls_handle); return -1; @@ -339,9 +337,7 @@ int gnutls_accept(int listen_fd, void **handle, struct string *addr) { gnutls_handle->valid = 1; gnutls_handle->fd = con_fd; - int res = mutex_init(&(gnutls_handle->mutex)); - if (res != 0) - goto gnutls_accept_free_gnutls_handle; + mutex_init(&(gnutls_handle->mutex)); addr->data = malloc(address_len); if (addr->data == 0 && address_len != 0) @@ -372,7 +368,7 @@ int gnutls_accept(int listen_fd, void **handle, struct string *addr) { int poll_res; do { gnutls_res = gnutls_handshake(gnutls_handle->session); - } while (res == GNUTLS_E_INTERRUPTED); + } while (gnutls_res == GNUTLS_E_INTERRUPTED); if (gnutls_res < 0) { if (gnutls_res == GNUTLS_E_AGAIN) { pollfd.events = POLLIN | POLLOUT; @@ -412,7 +408,6 @@ int gnutls_accept(int listen_fd, void **handle, struct string *addr) { free(addr->data); gnutls_accept_destroy_mutex: mutex_destroy(&(gnutls_handle->mutex)); - gnutls_accept_free_gnutls_handle: free(gnutls_handle); gnutls_accept_close: close(con_fd); diff --git a/networks/openssl.c b/networks/openssl.c index 6b67f11..8d41c25 100644 --- a/networks/openssl.c +++ b/networks/openssl.c @@ -237,9 +237,7 @@ int openssl_connect(void **handle, struct string address, struct string port, st 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, @@ -283,7 +281,6 @@ int openssl_connect(void **handle, struct string address, struct string port, st 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); @@ -338,13 +335,12 @@ int openssl_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) @@ -384,7 +380,6 @@ int openssl_accept(int listen_fd, void **handle, struct string *addr) { 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); 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 #include -#ifdef USE_FUTEX -#else -#include -#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)); } diff --git a/networks/plaintext_buffered.c b/networks/plaintext_buffered.c index 33bface..3112875 100644 --- a/networks/plaintext_buffered.c +++ b/networks/plaintext_buffered.c @@ -36,11 +36,6 @@ #include #include -#ifdef USE_FUTEX -#else -#include -#endif - #include "../config.h" #include "../general_network.h" #include "../haxstring.h" @@ -50,13 +45,8 @@ struct plaintext_buffered_handle { MUTEX_TYPE mutex; -#ifdef USE_FUTEX MUTEX_TYPE release_read; MUTEX_TYPE release_write; -#else - sem_t release_read; - sem_t release_write; -#endif int fd; char valid; char close; @@ -84,12 +74,7 @@ void * plaintext_buffered_send_thread(void *handle) { size_t 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)) { // TODO: Clean up mutexes in exit code too @@ -103,19 +88,11 @@ void * plaintext_buffered_send_thread(void *handle) { mutex_unlock(&(info->mutex)); #endif -#ifdef USE_FUTEX if (len == 0) { res = 0; mutex_lock(&(info->release_read)); continue; } -#else - if (len == 0) { - res = 0; - sem_wait(&(info->release_read)); - continue; - } -#endif if (read_buffer_index + len > PLAINTEXT_BUFFERED_LEN) len = PLAINTEXT_BUFFERED_LEN - read_buffer_index; @@ -138,12 +115,7 @@ void * plaintext_buffered_send_thread(void *handle) { plaintext_buffered_send_thread_error_unlock: 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) { @@ -151,24 +123,14 @@ void * plaintext_buffered_send_thread(void *handle) { free(info->buffer); mutex_unlock(&(info->mutex)); mutex_destroy(&(info->mutex)); -#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)); } @@ -202,18 +164,15 @@ int plaintext_buffered_send(void *handle, struct string msg) { } #endif -#ifdef USE_FUTEX if (len == 0) { - mutex_lock(&(plaintext_handle->release_write)); - continue; - } +#ifdef USE_ATOMICS #else - if (len == 0) { mutex_unlock(&(plaintext_handle->mutex)); - sem_wait(&(plaintext_handle->release_write)); +#endif + mutex_lock(&(plaintext_handle->release_write)); continue; } -#endif + memcpy(&(plaintext_handle->buffer[plaintext_handle->write_buffer_index]), msg.data, len); #ifdef USE_ATOMICS @@ -224,12 +183,7 @@ int plaintext_buffered_send(void *handle, struct string msg) { mutex_unlock(&(plaintext_handle->mutex)); #endif -#ifdef USE_FUTEX mutex_unlock(&(plaintext_handle->release_read)); -#else - sem_trywait(&(plaintext_handle->release_read)); - sem_post(&(plaintext_handle->release_read)); -#endif plaintext_handle->write_buffer_index += len; if (plaintext_handle->write_buffer_index >= PLAINTEXT_BUFFERED_LEN) @@ -310,16 +264,10 @@ int plaintext_buffered_connect(void **handle, struct string address, struct stri plaintext_handle->write_buffer_index = 0; plaintext_handle->buffer_len = 0; - if (mutex_init(&(plaintext_handle->mutex)) != 0) - goto plaintext_buffered_connect_free_buffer; + mutex_init(&(plaintext_handle->mutex)); -#ifdef USE_FUTEX - plaintext_handle->release_read = 0; - plaintext_handle->release_write = 0; -#else - sem_init(&(plaintext_handle->release_read), 0, 0); - sem_init(&(plaintext_handle->release_write), 0, 0); -#endif + mutex_init(&(plaintext_handle->release_read)); + mutex_init(&(plaintext_handle->release_write)); pthread_t trash; if (pthread_create(&trash, &pthread_attr, plaintext_buffered_send_thread, plaintext_handle) != 0) @@ -329,12 +277,8 @@ int plaintext_buffered_connect(void **handle, struct string address, struct stri plaintext_buffered_connect_destroy_mutex: mutex_destroy(&(plaintext_handle->mutex)); -#ifdef USE_FUTEX -#else - sem_destroy(&(plaintext_handle->release_read)); - sem_destroy(&(plaintext_handle->release_write)); -#endif - plaintext_buffered_connect_free_buffer: + mutex_destroy(&(plaintext_handle->release_read)); + mutex_destroy(&(plaintext_handle->release_write)); free(plaintext_handle->buffer); plaintext_buffered_connect_free_addr: free(addr_out->data); @@ -388,16 +332,10 @@ int plaintext_buffered_accept(int listen_fd, void **handle, struct string *addr) plaintext_handle->write_buffer_index = 0; plaintext_handle->buffer_len = 0; - if (mutex_init(&(plaintext_handle->mutex)) != 0) - goto plaintext_buffered_accept_free_buffer; + mutex_init(&(plaintext_handle->mutex)); -#ifdef USE_FUTEX - plaintext_handle->release_read = 0; - plaintext_handle->release_write = 0; -#else - sem_init(&(plaintext_handle->release_read), 0, 0); - sem_init(&(plaintext_handle->release_write), 0, 0); -#endif + mutex_init(&(plaintext_handle->release_read)); + mutex_init(&(plaintext_handle->release_write)); pthread_t trash; if (pthread_create(&trash, &pthread_attr, plaintext_buffered_send_thread, plaintext_handle) != 0) @@ -407,12 +345,8 @@ int plaintext_buffered_accept(int listen_fd, void **handle, struct string *addr) plaintext_buffered_accept_destroy_mutex: mutex_destroy(&(plaintext_handle->mutex)); -#ifdef USE_FUTEX -#else - sem_destroy(&(plaintext_handle->release_read)); - sem_destroy(&(plaintext_handle->release_write)); -#endif - plaintext_buffered_accept_free_buffer: + mutex_destroy(&(plaintext_handle->release_read)); + mutex_destroy(&(plaintext_handle->release_write)); free(plaintext_handle->buffer); plaintext_buffered_accept_free_addr: free(addr->data); @@ -428,12 +362,7 @@ void plaintext_buffered_shutdown(void *handle) { struct plaintext_buffered_handle *plaintext_handle = handle; mutex_lock(&(plaintext_handle->mutex)); plaintext_handle->valid = 0; -#ifdef USE_FUTEX mutex_unlock(&(plaintext_handle->release_read)); -#else - sem_trywait(&(plaintext_handle->release_read)); - sem_post(&(plaintext_handle->release_read)); -#endif mutex_unlock(&(plaintext_handle->mutex)); shutdown(plaintext_handle->fd, SHUT_RDWR); } @@ -442,12 +371,7 @@ void plaintext_buffered_close(int fd, void *handle) { struct plaintext_buffered_handle *plaintext_handle = handle; mutex_lock(&(plaintext_handle->mutex)); plaintext_handle->valid = 0; -#ifdef USE_FUTEX mutex_unlock(&(plaintext_handle->release_read)); -#else - sem_trywait(&(plaintext_handle->release_read)); - sem_post(&(plaintext_handle->release_read)); -#endif plaintext_handle->close = 1; mutex_unlock(&(plaintext_handle->mutex)); } -- cgit v1.2.3