aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTest_User <hax@andrewyu.org>2024-06-21 09:02:51 -0400
committerTest_User <hax@andrewyu.org>2024-06-21 19:55:27 -0400
commitfbd7fc576fb73e9c536cc42a7f2d66b96261e1f0 (patch)
tree889d9c868b71c78e79cdf107911153e58eb51478
parentef6f87193ab6628a2366b004a21c5cb21304c663 (diff)
downloadhaxircd-fbd7fc576fb73e9c536cc42a7f2d66b96261e1f0.tar.gz
haxircd-fbd7fc576fb73e9c536cc42a7f2d66b96261e1f0.zip
-pthread mutex, +semaphores
-rw-r--r--mutex.c7
-rw-r--r--mutex.h46
-rw-r--r--networks/gnutls.c13
-rw-r--r--networks/openssl.c11
-rw-r--r--networks/openssl_buffered.c111
-rw-r--r--networks/plaintext_buffered.c108
-rw-r--r--real_main.c6
7 files changed, 64 insertions, 238 deletions
diff --git a/mutex.c b/mutex.c
index bc53356..d2bd860 100644
--- a/mutex.c
+++ b/mutex.c
@@ -28,12 +28,7 @@
#include "mutex.h"
-#ifdef USE_FUTEX
-#else
-pthread_mutexattr_t pthread_mutexattr;
-#endif
-
-extern inline int mutex_init(MUTEX_TYPE *);
+extern inline void mutex_init(MUTEX_TYPE *);
extern inline void mutex_lock(MUTEX_TYPE *);
extern inline void mutex_unlock(MUTEX_TYPE *);
extern inline void mutex_destroy(MUTEX_TYPE *);
diff --git a/mutex.h b/mutex.h
index fd513eb..a341152 100644
--- a/mutex.h
+++ b/mutex.h
@@ -33,29 +33,28 @@
#include <stdint.h>
#include <linux/futex.h>
-#define SETUP_MUTEX() 0
#define MUTEX_TYPE uint32_t
-inline int mutex_init(uint32_t *futex) {
+inline void mutex_init(uint32_t *futex) {
*futex = 0;
- return 0;
}
inline void mutex_lock(uint32_t *futex) {
- do {
- if (__sync_fetch_and_or(futex, 0x1) == 0)
- return;
+ if ((__sync_fetch_and_or(futex, 0x1) & 0x1) == 0)
+ return;
- if (__sync_fetch_and_or(futex, 0x3) == 0)
- return;
+ __sync_fetch_and_add(futex, 0x2);
- syscall(SYS_futex, futex, FUTEX_PRIVATE_FLAG | FUTEX_WAIT, 3, 0, 0, 0);
- } while (1);
+ uint32_t val;
+ while ((val = __sync_fetch_and_or(futex, 0x1)) & 0x1)
+ syscall(SYS_futex, futex, FUTEX_PRIVATE_FLAG | FUTEX_WAIT, val | 0x1, NULL, 0, 0);
+
+ __sync_fetch_and_sub(futex, 0x2);
}
inline void mutex_unlock(uint32_t *futex) {
- if (__sync_fetch_and_and(futex, 0) & 0x2)
- syscall(SYS_futex, futex, FUTEX_PRIVATE_FLAG | FUTEX_WAKE, 1, 0, 0, 0);
+ if (__sync_and_and_fetch(futex, 0xFFFFFFFE))
+ syscall(SYS_futex, futex, FUTEX_PRIVATE_FLAG | FUTEX_WAKE, 1, NULL, 0, 0);
}
inline void mutex_destroy(uint32_t *futex) {
@@ -64,26 +63,25 @@ inline void mutex_destroy(uint32_t *futex) {
#else
-#include <pthread.h>
+#include <semaphore.h>
-#define SETUP_MUTEX() pthread_mutexattr_init(&pthread_mutexattr)
-#define MUTEX_TYPE pthread_mutex_t
+#define MUTEX_TYPE sem_t
-extern pthread_mutexattr_t pthread_mutexattr;
-inline int mutex_init(pthread_mutex_t *mutex) {
- return pthread_mutex_init(mutex, &pthread_mutexattr);
+inline void mutex_init(sem_t *mutex) {
+ sem_init(mutex, 0, 1);
}
-inline void mutex_lock(pthread_mutex_t *mutex) {
- pthread_mutex_lock(mutex);
+inline void mutex_lock(sem_t *mutex) {
+ while (sem_wait(mutex) == -1);
}
-inline void mutex_unlock(pthread_mutex_t *mutex) {
- pthread_mutex_unlock(mutex);
+inline void mutex_unlock(sem_t *mutex) {
+ sem_trywait(mutex);
+ sem_post(mutex);
}
-inline void mutex_destroy(pthread_mutex_t *mutex) {
- pthread_mutex_destroy(mutex);
+inline void mutex_destroy(sem_t *mutex) {
+ sem_destroy(mutex);
}
#endif
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 <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));
}
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 <sys/types.h>
#include <unistd.h>
-#ifdef USE_FUTEX
-#else
-#include <semaphore.h>
-#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));
}
diff --git a/real_main.c b/real_main.c
index 15f665a..946af63 100644
--- a/real_main.c
+++ b/real_main.c
@@ -73,8 +73,7 @@ pthread_attr_t pthread_attr;
MUTEX_TYPE state_lock;
int real_main(void) {
- if (mutex_init(&state_lock) != 0)
- return 1;
+ mutex_init(&state_lock);
if (init_general_network() != 0)
return 1;
@@ -134,9 +133,6 @@ int real_main(void) {
if (pthread_attr_init(&pthread_attr) != 0)
return 1;
- if (SETUP_MUTEX() != 0)
- return 1;
-
if (pthread_attr_setdetachstate(&pthread_attr, PTHREAD_CREATE_DETACHED) != 0) // shouldn't actually happen
return 1;