pipewire/spa
Torkel Niklasson f174b4e688 audioconvert: sync filter-graphs out of data loop before forced rebuild
A forced setup_filter_graphs() deactivates and re-instantiates every graph,
which frees and recreates the underlying plugin handles (node_cleanup sets
node->hndl[i] = NULL before re-instantiating). This was done on a graph that
was still referenced by the RT data-loop snapshot (filter_graph[]), so the
RT thread could run a graph whose handles were NULL mid-rebuild, leading to a
NULL handle dereference in the filter-graph process path.

Mirror the safe ordering already used by load_filter_graph()/clean_filter_handles():
before reconfiguring, mark the graphs not-setup and sync_filter_graph() so the
data loop drops them from filter_graph[] under the loop lock. They are
republished by the sync that follows setup. The cheap snapshot swap is done
under the lock; the heavy re-instantiation stays off the RT path.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-06-29 08:17:07 +00:00
..
examples examples: set diffent Clock and Position on source 2026-05-11 14:02:29 +02:00
include adapter: use internalFormat for EnumFormat and Format 2026-06-15 11:12:43 +02:00
include-private/spa-private spa: move dbus helpers out of bluez plugin 2024-02-05 13:03:20 +00:00
lib spa: update lib.c 2026-03-09 18:33:32 +01:00
plugins audioconvert: sync filter-graphs out of data loop before forced rebuild 2026-06-29 08:17:07 +00:00
tests tests: don't redefine spa_assert 2026-05-25 11:05:35 +02:00
tools tools: port various tools to the new json-builder 2026-02-26 10:51:17 +01:00
meson.build meson: Always use -fno-strict-aliasing and -fno-strict-overflow 2025-07-24 07:30:28 +00:00