Open
Description
If the FIXME
line in rust/kernel/kasync/executor/workqueue.rs
in #958 is removed, klint
gives the following error:
error: trait method annotated to have preemption count expectation of 0..
--> rust/kernel/kasync/executor/workqueue.rs:147:5
|
147 | fn wake(self: Arc<Self>) {
| ^^^^^^^^^^^^^^^^^^^^^^^^
|
= note: but the expectation of this implementing function is 0
note: the trait method is defined here
--> rust/kernel/kasync/executor.rs:73:5
|
73 | fn wake(self: Arc<Self>) {
| ^^^^^^^^^^^^^^^^^^^^^^^^
note: which may drop type `kernel::sync::Arc<kernel::kasync::executor::workqueue::Task<core::future::from_generator::GenFuture<[static generator@samples/rust/rust_echo_server.rs:25:75: 31:2]>>>` with preemption count 0..
--> rust/kernel/kasync/executor/workqueue.rs:149:5
|
147 | fn wake(self: Arc<Self>) {
| ---- value being dropped is here
148 | Self::wake_by_ref(self.as_arc_borrow());
149 | }
| ^
note: which may call this function with preemption count 0..
--> rust/kernel/sync/arc.rs:236:5
|
236 | fn drop(&mut self) {
| ^^^^^^^^^^^^^^^^^^
note: which may drop type `kernel::sync::arc::ArcInner<kernel::kasync::executor::workqueue::Task<core::future::from_generator::GenFuture<[static generator@samples/rust/rust_echo_server.rs:25:75: 31:2]>>>` with preemption count 0..
--> rust/kernel/sync/arc.rs:255:22
|
255 | unsafe { core::ptr::drop_in_place(inner) };
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
= note: which may drop type `kernel::kasync::executor::workqueue::Task<core::future::from_generator::GenFuture<[static generator@samples/rust/rust_echo_server.rs:25:75: 31:2]>>` with preemption count 0..
= note: which may drop type `kernel::sync::Arc<kernel::kasync::executor::workqueue::Executor>` with preemption count 0..
note: which may call this function with preemption count 0..
--> rust/kernel/sync/arc.rs:236:5
|
236 | fn drop(&mut self) {
| ^^^^^^^^^^^^^^^^^^
note: which may drop type `kernel::sync::arc::ArcInner<kernel::kasync::executor::workqueue::Executor>` with preemption count 0..
--> rust/kernel/sync/arc.rs:255:22
|
255 | unsafe { core::ptr::drop_in_place(inner) };
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
= note: which may drop type `kernel::kasync::executor::workqueue::Executor` with preemption count 0..
= note: which may drop type `kernel::Either<kernel::workqueue::BoxedQueue, &kernel::workqueue::Queue>` with preemption count 0..
= note: which may drop type `kernel::workqueue::BoxedQueue` with preemption count 0..
note: which may call this function with preemption count 0..
--> rust/kernel/workqueue.rs:433:5
|
433 | fn drop(&mut self) {
| ^^^^^^^^^^^^^^^^^^
= note: but this function expects preemption count 0
this can happen is a Waker
is called after the executor is dropped (and the tasks cancelled).