Skip to content

Commit 18c645a

Browse files
committed
[2/4 for #2365, #2671] Fix exit/kill race with tasks during rust_kernel::fail
1 parent 5bb4a12 commit 18c645a

File tree

1 file changed

+7
-2
lines changed

1 file changed

+7
-2
lines changed

src/rt/rust_sched_loop.cpp

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -68,18 +68,23 @@ rust_sched_loop::kill_all_tasks() {
6868
killed = true;
6969

7070
for (size_t i = 0; i < running_tasks.length(); i++) {
71-
all_tasks.push_back(running_tasks[i]);
71+
rust_task *t = running_tasks[i];
72+
t->ref();
73+
all_tasks.push_back(t);
7274
}
7375

7476
for (size_t i = 0; i < blocked_tasks.length(); i++) {
75-
all_tasks.push_back(blocked_tasks[i]);
77+
rust_task *t = blocked_tasks[i];
78+
t->ref();
79+
all_tasks.push_back(t);
7680
}
7781
}
7882

7983
while (!all_tasks.empty()) {
8084
rust_task *task = all_tasks.back();
8185
all_tasks.pop_back();
8286
task->kill();
87+
task->deref();
8388
}
8489
}
8590

0 commit comments

Comments
 (0)