From 082db391349f08c435ea22b8643c8c8f7c2e429d Mon Sep 17 00:00:00 2001 From: Andrew Opalach Date: Thu, 24 Oct 2024 13:15:29 -0400 Subject: Add packet_cache_flush() and thread canceltype Signed-off-by: Andrew Opalach --- src/fs_event/fs_event_inotify.c | 2 +- src/packet_cache.c | 9 +++++++++ src/packet_cache.h | 1 + src/util/thread/thread.h | 15 ++++++++++++++- src/util/thread/thread_linux.c | 7 ++++++- src/util/thread/thread_windows.c | 8 +++++++- 6 files changed, 38 insertions(+), 4 deletions(-) (limited to 'src') 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) { } -- cgit v1.2.3-101-g0448