mirror of
https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs.git
synced 2024-11-29 06:50:59 +00:00
ts/Task: split iterate into try_next and handle_item
Previous Task iteration model suffered from the following shortcomings: - When an iteration was engaged it could be cancelled at await points by Stop or Flush state transitions, which could lead to inconsistent states. - When an iteration was engaged it could not be cancelled by a Pause state transition so as to prevent data loss. This meant we couldn't block on the Pause request because the mechanism couldn't guarantee Paused would be reached in a timely manner. This commit split the Task iteration into: - `try_next`: this function returns a future that awaits for a new iteration to begin. The regular use case is to return an item to process. The item can be left to `()` if `try_next` acts as a tick generator. It can also return an error. This function can be cancelled at await points when a state transition request occurs. - `handle_item`: this function is called with the item returned by `try_next` and is guaranteed to run to completion even if a transition request is received. Note that this model plays well with the common Future cancellation pitfalls in Rust.
This commit is contained in:
parent
07cbc2f025
commit
8b54c3fed6
1 changed files with 372 additions and 416 deletions
File diff suppressed because it is too large
Load diff
Loading…
Reference in a new issue