Enum devices::virtio::async_device::AsyncQueueState
source · pub enum AsyncQueueState<T: 'static> {
Stopped(T),
Running((TaskHandle<T>, Executor, AbortHandle)),
Broken,
}
Expand description
A queue for which processing can be started on an async executor.
T
is the resource type of the queue, i.e. the device-specific data it needs in order to run.
For instance, a block device will likely need a file to provide its data.
Variants§
Stopped(T)
Queue is currently stopped.
Running((TaskHandle<T>, Executor, AbortHandle))
Queue is being processed as a Task
on an Executor
, and can be stopped by aborting the
AbortHandle
.
Broken
Something terrible happened and this queue is in a non-recoverable state.
Implementations§
source§impl<T: 'static> AsyncQueueState<T>
impl<T: 'static> AsyncQueueState<T>
sourcepub fn start<U: Future<Output = T> + 'static, F: FnOnce(T, Abortable<Pending<()>>) -> Result<U>>(
&mut self,
ex: &Executor,
fut_provider: F
) -> Result<()>
pub fn start<U: Future<Output = T> + 'static, F: FnOnce(T, Abortable<Pending<()>>) -> Result<U>>( &mut self, ex: &Executor, fut_provider: F ) -> Result<()>
Start processing of the queue on ex
, or stop and restart it with the new parameters if
it was already running.
fut_provider
is a closure that is passed the resource of the queue, as well as a
Abortable
future. It must return a Future
that takes ownership of the device’s resource
and processes the queue for as long as possible, but immediately quits and returns the
device resource when the Abortable
is signaled.
If fut_provider
or the Future
it returns end with an error, the queue is considered
broken and cannot be used anymore.
The task is only scheduled and no processing actually starts in this method. The task is
scheduled locally, which implies that ex
must be run on the current thread.
sourcepub fn stop(&mut self) -> AsyncResult<bool>
pub fn stop(&mut self) -> AsyncResult<bool>
Stops a previously started queue.
The executor on which the task has been started will be run if needed in order to retrieve the queue’s resource.
Returns true
if the queue was running, false
if it wasn’t.
sourcepub async fn stop_async(&mut self) -> AsyncResult<bool>
pub async fn stop_async(&mut self) -> AsyncResult<bool>
Stops a previously started queue.
The executor on which the task has been started will be run if needed in order to retrieve the queue’s resource.
Returns true
if the queue was running, false
if it wasn’t.
Auto Trait Implementations§
impl<T> !RefUnwindSafe for AsyncQueueState<T>
impl<T> Send for AsyncQueueState<T>where
T: Send,
impl<T> Sync for AsyncQueueState<T>
impl<T> Unpin for AsyncQueueState<T>where
T: Unpin,
impl<T> !UnwindSafe for AsyncQueueState<T>
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait>
(where Trait: Downcast
) to Box<dyn Any>
. Box<dyn Any>
can
then be further downcast
into Box<ConcreteType>
where ConcreteType
implements Trait
.§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait>
(where Trait: Downcast
) to Rc<Any>
. Rc<Any>
can then be
further downcast
into Rc<ConcreteType>
where ConcreteType
implements Trait
.§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &Any
’s vtable from &Trait
’s.§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &mut Any
’s vtable from &mut Trait
’s.