Commit graph

23 commits

Author SHA1 Message Date
François Laignel 6163589ac7 ts/executor: replace tokio with smol-like implementation
The threadshare executor was based on a modified version of tokio
which implemented the throttling strategy in the BasicScheduler.
Upstream tokio codebase has significantly diverged from what it
was when the throttling strategy was implemented making it hard
to follow. This means that we can hardly get updates from the
upstream project and when we cherry pick fixes, we can't reflect
the state of the project on our fork's version. As a consequence,
tools such as cargo-deny can't check for RUSTSEC fixes in our fork.

The smol ecosystem makes it quite easy to implement and maintain
a custom async executor. This MR imports the smol parts that
need modifications to comply with the threadshare model and implements
a throttling executor in place of the tokio fork.

Networking tokio specific types are replaced with Async wrappers
in the spirit of [smol-rs/async-io]. Note however that the Async
wrappers needed modifications in order to use the per thread
Reactor model. This means that higher level upstream networking
crates such as [async-net] can not be used with our Async
implementation.

Based on the example benchmark with ts-udpsrc, performances seem on par
with what we achieved using the tokio fork.

Fixes https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/issues/118

Related to https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/604
2021-12-25 11:25:56 +00:00
François Laignel db9c38aa93 ts/runtime: shuffle some structs to dedicated modules 2021-12-25 11:25:56 +00:00
François Laignel 53bfb58751 ts: update tokio fork for RUSTSEC-2021-0124
A data race condition was discovered in tokio, which can lead
to memory corruption. This vulnerability affects our fork.

See:

- https://rustsec.org/advisories/RUSTSEC-2021-0124
- https://github.com/tokio-rs/tokio/issues/4225
- https://github.com/tokio-rs/tokio/pull/4226
- https://github.com/fengalin/tokio/pull/1

Fixes: https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/issues/174
2021-11-17 14:51:03 +01:00
Sebastian Dröge 0a7d1639e7 Update to Rust edition 2021 and minimum supported Rust version to 1.56 2021-10-31 17:40:05 +02:00
Sebastian Dröge 848b296390 Add capi feature to all plugin crates
This fixes the build with cargo-c 0.9.2.
2021-08-11 20:51:36 +03:00
Ruben Gonzalez 54d8c5f6a9 Delete minimum GStremer required version for some plugins
Tested building the pluging with cargo-c and running gst-inspect-1.0
in a Ubuntu Xenial 18.04 LTS. It contains GStreamer 1.8.3.
2021-07-20 21:49:24 +02:00
Sebastian Dröge 24ec79cd1a Update versions to 0.8.0 for the master branch 2021-07-09 13:49:33 +03:00
Sebastian Dröge 1c3ae0f89a Update versions to 0.7.0 2021-07-09 13:49:21 +03:00
François Laignel 8dfc872544 use gst::glib where applicable 2021-06-03 20:53:16 +02:00
Sebastian Dröge 04a60b8f46 Update repository URL for gtk-rs "core" crates 2021-05-13 09:50:08 +03:00
Sebastian Dröge b919d226b1 threadshare: Update to socket2 0.4 2021-03-21 12:57:10 +02:00
Sebastian Dröge 84896e6468 Update to rand 0.8 2021-01-09 12:34:42 +02:00
Guillaume Desmottes 8bc2e5ebb8 use cargo-c to produce cdy and static libs
cargo-c will produce a pkg-config file making it easier to statically
link plugins.

Also add 'static' features for plugins depending on < 1.14 as this is the
minimal required version to use static linking because of ABI changes in
core.
2021-01-04 12:26:45 +01:00
Sebastian Dröge 1c9c22df0c generic: Update to 2018 edition 2020-11-23 10:28:33 +02:00
Guillaume Desmottes b9f8ce9995 meson: add support for static build
There is no way to dynamically ask Cargo to build static or dynamic lib
so we have to build both and pick the one we care when doing the meson
processing.

Fix #88
2020-11-16 15:30:32 +01:00
Sebastian Dröge 1f446f6b64 Switch to the combined gtk-rs and gstreamer-rs repositories 2020-11-01 10:24:57 +02:00
Sebastian Dröge eced2006e3 threadshare: Update pin-project dependency to 1.0 2020-10-17 12:07:30 +03:00
François Laignel e2f27e77ce threadshare: use tokio tag 2020-06-30 09:25:20 +00:00
Sebastian Dröge 08da51744b threadshare: Update from the deprecated net2 to the socket2 crate 2020-05-29 13:07:14 +03:00
François Laignel 725eb0a093 threadshare: spawn StateMachine on the futures::executor::ThreadPool
StateMachines are spawned on a runtime::Context which uses a tokio
runtime. The StateMachine doesn't need all the features from tokio
such as the IO and timers drivers.

This commit makes use of a light-weight futures executor to spawn
the StateMachines.
2020-05-25 18:31:49 +02:00
François Laignel 1bea2ad279 threadshare: introduce TaskImpl trait
TaskImpl is the trait for specific Task behaviour. It is the basis
of a new Task model. The main motivation for this model is to ease
threadsafe implementations of state transitions.

See https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/298
2020-05-25 18:31:48 +02:00
Guillaume Desmottes bdb0e72cc7 fix LGPL-2.1+ license in Cargo.toml
The proper SPDX name is LGPL-2.1-or-later, see https://spdx.org/licenses/
2020-04-16 13:07:21 +02:00
Arun Raghavan dc3c8fd049 Drop gst-plugin- prefix in plugin directory name 2020-04-05 19:10:47 +00:00
Renamed from generic/gst-plugin-threadshare/Cargo.toml (Browse further)