From 59e4cc9fbffaf5cfb5c12fcbc08a87dd5492cc2f Mon Sep 17 00:00:00 2001 From: Matheus Date: Thu, 4 Jun 2026 11:38:49 -0300 Subject: [PATCH] futex: misc fixes --- kernel-src/sys/syscalls/futex.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/kernel-src/sys/syscalls/futex.c b/kernel-src/sys/syscalls/futex.c index d992c7d9..3277e355 100644 --- a/kernel-src/sys/syscalls/futex.c +++ b/kernel-src/sys/syscalls/futex.c @@ -103,10 +103,13 @@ syscallret_t syscall_futex(context_t *, uint32_t *futexp, int op, uint32_t value ret.errno = ENOMEM; break; } + POLL_INITHEADER(&futex->pollheader); ret.errno = setfutex(futex, physical); - if (ret.errno) + if (ret.errno) { + free(futex); break; + } } ++futex->waiting; @@ -127,6 +130,8 @@ syscallret_t syscall_futex(context_t *, uint32_t *futexp, int op, uint32_t value } else if (futex->waking == 0) { // should go back to sleep poll_leave(&desc); + desc.event = NULL; + desc.data[0].revents = 0; continue; } else { // can leave normally! @@ -137,16 +142,17 @@ syscallret_t syscall_futex(context_t *, uint32_t *futexp, int op, uint32_t value // clean up if needed if (futex->waiting == 0) { + poll_leave(&desc); doleave = false; - free(futex); removefutex(physical); + free(futex); } ret.ret = 0; break; } break; - default: + default: ret.errno = ENOSYS; }