scheduler: wake canceled tasks
This commit is contained in:
+2
-2
@@ -147,8 +147,8 @@ pub fn despawn(self: *Node, id: TaskID) void {
|
|||||||
self.scheduler.despawnNested(id);
|
self.scheduler.despawnNested(id);
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn cancel(self: *Node, id: TaskID) !void {
|
pub fn cancel(self: *Node, id: TaskID) void {
|
||||||
try self.scheduler.cancel(id);
|
self.scheduler.cancel(id);
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn checkCancel(self: *Node) !void {
|
pub fn checkCancel(self: *Node) !void {
|
||||||
|
|||||||
+9
-7
@@ -384,14 +384,16 @@ pub fn wait(self: *Scheduler, ids: []const TaskID) !TaskID {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn cancel(self: *Scheduler, id: TaskID) !void {
|
pub fn cancel(self: *Scheduler, id: TaskID) void {
|
||||||
const child = self.findTaskByID(id)
|
const child = self.findTaskByID(id) orelse return;
|
||||||
orelse return error.InvalidHandle;
|
std.debug.assert(child.parent_id == self.current_id);
|
||||||
|
|
||||||
if (child.parent_id != self.current_id)
|
|
||||||
return error.InvalidHandle;
|
|
||||||
|
|
||||||
child.cancel = true;
|
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 {
|
pub fn checkCancel(self: *Scheduler) !void {
|
||||||
|
|||||||
Reference in New Issue
Block a user