From 6780626f29257b53daedd493f69e5fddf0d9e3ac Mon Sep 17 00:00:00 2001 From: wnstngs <64602598+wnstngs@users.noreply.github.com> Date: Wed, 23 Sep 2026 15:49:36 +0300 Subject: [PATCH] kernel: cancel interrupted nanosleep timer without remaining pointer --- kernel-src/sys/syscalls/sleep.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/kernel-src/sys/syscalls/sleep.c b/kernel-src/sys/syscalls/sleep.c index a5652139..c32c780a 100644 --- a/kernel-src/sys/syscalls/sleep.c +++ b/kernel-src/sys/syscalls/sleep.c @@ -32,11 +32,13 @@ syscallret_t syscall_nanosleep(context_t *, timespec_t *utime, timespec_t *remai ret.errno = sched_yield() == SCHED_WAKEUP_REASON_INTERRUPTED ? EINTR : 0; - if (ret.errno && remaining) { + if (ret.errno) { uintmax_t remainingus = timer_remove(current_cpu()->timer, &sleepentry); - time.ns = (remainingus % 1000000) * 1000; - time.s = (remainingus / 1000000); - ret.errno = usercopy_touser(remaining, &time, sizeof(timespec_t)) ? EFAULT : EINTR; + if (remaining) { + time.ns = (remainingus % 1000000) * 1000; + time.s = (remainingus / 1000000); + ret.errno = usercopy_touser(remaining, &time, sizeof(timespec_t)) ? EFAULT : EINTR; + } } sched_target_cpu(NULL);