From 5fa7dabd3406c36beda7000a434fea63a51f19f3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jefferson=20Gonz=C3=A1lez?= Date: Tue, 27 Dec 2022 19:23:39 -0400 Subject: [PATCH] dirmonitor: fix high cpu usage, fixes #1237 (#1271) --- src/api/dirmonitor/fsevents.c | 3 +++ src/api/dirmonitor/kqueue.c | 4 ++-- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/api/dirmonitor/fsevents.c b/src/api/dirmonitor/fsevents.c index 18e5799f..2b32219c 100644 --- a/src/api/dirmonitor/fsevents.c +++ b/src/api/dirmonitor/fsevents.c @@ -108,6 +108,9 @@ int get_changes_dirmonitor( results = monitor->count; SDL_UnlockMutex(monitor->lock); + if (monitor->count <= 0) + SDL_Delay(100); + return results; } diff --git a/src/api/dirmonitor/kqueue.c b/src/api/dirmonitor/kqueue.c index e549fd39..69e3a74f 100644 --- a/src/api/dirmonitor/kqueue.c +++ b/src/api/dirmonitor/kqueue.c @@ -24,7 +24,7 @@ void deinit_dirmonitor(struct dirmonitor_internal* monitor) { int get_changes_dirmonitor(struct dirmonitor_internal* monitor, char* buffer, int buffer_size) { - struct timespec ts = { 0, 10 * 1000000 }; // 10 ms + struct timespec ts = { 0, 100 * 1000000 }; // 100 ms int nev = kevent(monitor->fd, NULL, 0, (struct kevent*)buffer, buffer_size / sizeof(kevent), &ts); if (nev == -1) @@ -45,7 +45,7 @@ int translate_changes_dirmonitor(struct dirmonitor_internal* monitor, char* buff int add_dirmonitor(struct dirmonitor_internal* monitor, const char* path) { int fd = open(path, O_RDONLY); struct kevent change; - + // a timeout of zero should make kevent return immediately struct timespec ts = { 0, 0 }; // 0 s