summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAndrew Opalach <andrew@akon.city> 2024-10-24 13:15:29 -0400
committerAndrew Opalach <andrew@akon.city> 2024-10-24 13:15:29 -0400
commit082db391349f08c435ea22b8643c8c8f7c2e429d (patch)
treee5323e3fd4e9b7c3526b2e7aea9f14f5e1248ab7 /src
parentb8abe660fab174d37f8f49142f2261e93f463527 (diff)
downloadlibnaunet-082db391349f08c435ea22b8643c8c8f7c2e429d.tar.gz
libnaunet-082db391349f08c435ea22b8643c8c8f7c2e429d.tar.bz2
libnaunet-082db391349f08c435ea22b8643c8c8f7c2e429d.zip
Add packet_cache_flush() and thread canceltype
Signed-off-by: Andrew Opalach <andrew@akon.city>
Diffstat (limited to 'src')
-rw-r--r--src/fs_event/fs_event_inotify.c2
-rw-r--r--src/packet_cache.c9
-rw-r--r--src/packet_cache.h1
-rw-r--r--src/util/thread/thread.h15
-rw-r--r--src/util/thread/thread_linux.c7
-rw-r--r--src/util/thread/thread_windows.c8
6 files changed, 38 insertions, 4 deletions
diff --git a/src/fs_event/fs_event_inotify.c b/src/fs_event/fs_event_inotify.c
index 0fc19b4..0c0dd01 100644
--- a/src/fs_event/fs_event_inotify.c
+++ b/src/fs_event/fs_event_inotify.c
@@ -24,10 +24,10 @@ void aki_fs_event_init(struct aki_fs_event *fs, str *path, u32 mask,
{
fs->fd = inotify_init();
aki_fd_set_blocking(fs->fd, true);
+ fs->path = al_str_to_c_str(path);
fs->mask = mask;
fs->callback = callback;
fs->userdata = userdata;
- fs->path = al_str_to_c_str(path);
fs->event.data = fs;
ev_io_init(&fs->event, event_callback, fs->fd, EV_READ);
}
diff --git a/src/packet_cache.c b/src/packet_cache.c
index c279982..b234259 100644
--- a/src/packet_cache.c
+++ b/src/packet_cache.c
@@ -26,6 +26,15 @@ bool aki_packet_cache_send_packet(struct aki_packet_cache *cache, struct aki_pac
return true;
}
+void aki_packet_cache_flush(struct aki_packet_cache *cache)
+{
+ aki_mutex_lock(&cache->mutex);
+ if (aki_cond_is_waiting(&cache->cond)) {
+ aki_cond_signal(&cache->cond);
+ }
+ aki_mutex_unlock(&cache->mutex);
+}
+
bool aki_packet_cache_wait(struct aki_packet_cache *cache, u32 *count)
{
aki_mutex_lock(&cache->mutex);
diff --git a/src/packet_cache.h b/src/packet_cache.h
index 9045e54..57133d7 100644
--- a/src/packet_cache.h
+++ b/src/packet_cache.h
@@ -15,6 +15,7 @@ struct aki_packet_cache {
void aki_packet_cache_init(struct aki_packet_cache *cache, u32 size);
bool aki_packet_cache_send_packet(struct aki_packet_cache *cache, struct aki_packet *packet);
+void aki_packet_cache_flush(struct aki_packet_cache *cache);
bool aki_packet_cache_wait(struct aki_packet_cache *cache, u32 *count);
struct aki_packet *aki_packet_cache_pop(struct aki_packet_cache *cache);
void aki_packet_cache_unlock(struct aki_packet_cache *cache);
diff --git a/src/util/thread/thread.h b/src/util/thread/thread.h
index 6a04647..0c5042e 100644
--- a/src/util/thread/thread.h
+++ b/src/util/thread/thread.h
@@ -8,6 +8,18 @@
#include "../../winwrap.h"
#endif
+#ifndef _WIN32
+enum {
+ AKI_THREAD_CANCEL_DEFERRED = PTHREAD_CANCEL_DEFERRED,
+ AKI_THREAD_CANCEL_ASYNCHRONOUS = PTHREAD_CANCEL_ASYNCHRONOUS
+};
+#else
+enum {
+ AKI_THREAD_CANCEL_DEFERRED = 0,
+ AKI_THREAD_CANCEL_ASYNCHRONOUS
+};
+#endif
+
struct aki_thread {
#ifndef _WIN32
pthread_t thread;
@@ -51,7 +63,8 @@ void aki_thread_sleep(aki_os_tstamp delay);
void aki_thread_create(struct aki_thread *thread, aki_thread_func func, void *userdata);
void aki_thread_join(struct aki_thread *thread);
-//void aki_thread_cancel(struct aki_thread *thread);
+void aki_thread_cancel(struct aki_thread *thread);
+void aki_thread_setcanceltype(s32 type);
//void aki_thread_detach(struct aki_thread *thread);
void aki_mutex_init(struct aki_mutex *mutex);
diff --git a/src/util/thread/thread_linux.c b/src/util/thread/thread_linux.c
index 6df84e9..04b0868 100644
--- a/src/util/thread/thread_linux.c
+++ b/src/util/thread/thread_linux.c
@@ -22,12 +22,17 @@ void aki_thread_join(struct aki_thread *thread)
pthread_join(thread->thread, NULL);
}
-/*
void aki_thread_cancel(struct aki_thread *thread)
{
pthread_cancel(thread->thread);
}
+void aki_thread_setcanceltype(s32 type)
+{
+ pthread_setcanceltype(type, NULL);
+}
+
+/*
void aki_thread_detach(struct aki_thread *thread)
{
pthread_detach(thread->thread);
diff --git a/src/util/thread/thread_windows.c b/src/util/thread/thread_windows.c
index b948d3e..b7bc0ec 100644
--- a/src/util/thread/thread_windows.c
+++ b/src/util/thread/thread_windows.c
@@ -18,11 +18,17 @@ void aki_thread_join(struct aki_thread *thread)
CloseHandle(thread->thread);
}
-/*
void aki_thread_cancel(struct aki_thread *thread)
{
+ (void)thread;
}
+void aki_thread_setcanceltype(s32 type)
+{
+ (void)type;
+}
+
+/*
void aki_thread_detach(struct aki_thread *thread)
{
}