From f90d4d883d0d70025599b7c03e6ef90c68372da9 Mon Sep 17 00:00:00 2001 From: cozis Date: Thu, 4 Jun 2026 17:49:53 +0200 Subject: [PATCH] scheduler: wake canceled tasks --- src/node.zig | 4 ++-- src/scheduler.zig | 16 +++++++++------- 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/src/node.zig b/src/node.zig index 47f54c6..775f2f5 100644 --- a/src/node.zig +++ b/src/node.zig @@ -147,8 +147,8 @@ pub fn despawn(self: *Node, id: TaskID) void { self.scheduler.despawnNested(id); } -pub fn cancel(self: *Node, id: TaskID) !void { - try self.scheduler.cancel(id); +pub fn cancel(self: *Node, id: TaskID) void { + self.scheduler.cancel(id); } pub fn checkCancel(self: *Node) !void { diff --git a/src/scheduler.zig b/src/scheduler.zig index 8a7bb4b..387a89f 100644 --- a/src/scheduler.zig +++ b/src/scheduler.zig @@ -384,14 +384,16 @@ pub fn wait(self: *Scheduler, ids: []const TaskID) !TaskID { } } -pub fn cancel(self: *Scheduler, id: TaskID) !void { - const child = self.findTaskByID(id) - orelse return error.InvalidHandle; - - if (child.parent_id != self.current_id) - return error.InvalidHandle; - +pub fn cancel(self: *Scheduler, id: TaskID) void { + const child = self.findTaskByID(id) orelse return; + std.debug.assert(child.parent_id == self.current_id); child.cancel = true; + if (child.state == .blocked) { + child.state = .ready; + child.wakeup_time = null; + child.wakeup_tasks = null; + child.wakeup_futex = null; + } } pub fn checkCancel(self: *Scheduler) !void {