mirror of
https://gitlab.freedesktop.org/pipewire/wireplumber.git
synced 2025-12-20 15:50:03 +01:00
node/software-dsp: ensure that filter chains are properly unloaded
Indexing into the subject from a node-removed event is slightly quirky. As a result, we were not properly freeing filter chains tied to disconnected nodes. Change how we store the list of loaded filters and ensure they are properly freed when their parent node is removed from the graph. Signed-off-by: James Calligeros <jcalligeros99@gmail.com>
This commit is contained in:
parent
eb707096f7
commit
f57a46308d
1 changed files with 7 additions and 6 deletions
|
|
@ -34,7 +34,7 @@ SimpleEventHook {
|
|||
|
||||
if props["filter-graph"] then
|
||||
log:debug("Loading filter graph for " .. node.properties["node.name"])
|
||||
filter_nodes[node.properties["object.id"]] = LocalModule("libpipewire-module-filter-chain", props["filter-graph"], {})
|
||||
filter_nodes[node.id] = LocalModule("libpipewire-module-filter-chain", props["filter-graph"], {})
|
||||
elseif props["filter-path"] then
|
||||
log:debug("Loading filter graph for " .. node.properties["node.name"] .. " from disk")
|
||||
local conf = Conf(props["filter-path"], {
|
||||
|
|
@ -44,7 +44,7 @@ SimpleEventHook {
|
|||
local err = conf:open()
|
||||
if not err then
|
||||
local args = conf:get_section_as_json("node.software-dsp.graph"):to_string()
|
||||
filter_nodes[node.properties["object.id"]] = LocalModule("libpipewire-module-filter-chain", args, {})
|
||||
filter_nodes[node.id] = LocalModule("libpipewire-module-filter-chain", args, {})
|
||||
else
|
||||
log:warning("Unable to load filter graph for " .. node.properties["node.name"])
|
||||
end
|
||||
|
|
@ -57,7 +57,7 @@ SimpleEventHook {
|
|||
client:update_permissions{ [node["bound-id"]] = "-" }
|
||||
end
|
||||
end
|
||||
hidden_nodes[node["bound-id"]] = node.properties["object.id"]
|
||||
hidden_nodes[node["bound-id"]] = node.id
|
||||
end
|
||||
end
|
||||
end)
|
||||
|
|
@ -73,9 +73,10 @@ SimpleEventHook {
|
|||
},
|
||||
execute = function(event)
|
||||
local node = event:get_subject()
|
||||
if filter_nodes[node.properties["object.id"]] then
|
||||
log:debug("Freeing filter graph on disconnected node " .. node.properties["node.name"])
|
||||
filter_nodes[node.properties["object.id"]] = nil
|
||||
if filter_nodes[node.id] then
|
||||
log:debug("Freeing filter on node " .. node.id)
|
||||
filter_nodes[node.id] = nil
|
||||
hidden_nodes[node["bound-id"]] = nil
|
||||
end
|
||||
end
|
||||
}:register()
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue