From c4414bc9bc4ac477f9a4fb0cc6173c2c467c4e30 Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Tue, 24 Apr 2018 17:10:17 +0200 Subject: [PATCH] node: register ports in the registering event That way we send registry events in order but only signal global_add when the node is completely registered. --- src/pipewire/node.c | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/src/pipewire/node.c b/src/pipewire/node.c index 8f456d5c2..ed11b5e10 100644 --- a/src/pipewire/node.c +++ b/src/pipewire/node.c @@ -330,8 +330,22 @@ static void global_destroy(void *data) pw_node_destroy(this); } +static void global_registering(void *data) +{ + struct pw_node *this = data; + struct pw_port *port; + + spa_list_for_each(port, &this->input_ports, link) + pw_port_register(port, this->global->owner, this->global, + pw_properties_copy(port->properties)); + spa_list_for_each(port, &this->output_ports, link) + pw_port_register(port, this->global->owner, this->global, + pw_properties_copy(port->properties)); +} + static const struct pw_global_events global_events = { PW_VERSION_GLOBAL_EVENTS, + .registering = global_registering, .destroy = global_destroy, .bind = global_bind, }; @@ -343,7 +357,6 @@ int pw_node_register(struct pw_node *this, { struct pw_core *core = this->core; const char *str; - struct pw_port *port; pw_log_debug("node %p: register", this); @@ -373,15 +386,8 @@ int pw_node_register(struct pw_node *this, pw_global_add_listener(this->global, &this->global_listener, &global_events, this); - pw_global_register(this->global, owner, parent); this->info.id = this->global->id; - - spa_list_for_each(port, &this->input_ports, link) - pw_port_register(port, owner, this->global, - pw_properties_copy(port->properties)); - spa_list_for_each(port, &this->output_ports, link) - pw_port_register(port, owner, this->global, - pw_properties_copy(port->properties)); + pw_global_register(this->global, owner, parent); return pw_node_initialized(this); }