diff --git a/src/modules/spa/module-node-factory.c b/src/modules/spa/module-node-factory.c index 802fd75a4..2c76ffbd9 100644 --- a/src/modules/spa/module-node-factory.c +++ b/src/modules/spa/module-node-factory.c @@ -45,6 +45,18 @@ struct factory_data { struct node_data { struct spa_list link; struct pw_node *node; + struct spa_hook node_listener; +}; + +static void node_destroy(void *data) +{ + struct node_data *nd = data; + spa_list_remove(&nd->link); +} + +static const struct pw_node_events node_events = { + PW_VERSION_NODE_EVENTS, + .destroy = node_destroy, }; static void *create_object(void *_data, @@ -88,6 +100,8 @@ static void *create_object(void *_data, nd->node = node; spa_list_append(&data->node_list, &nd->link); + pw_node_add_listener(node, &nd->node_listener, &node_events, nd); + if (resource) pw_global_bind(pw_node_get_global(node), pw_resource_get_client(resource),