diff --git a/src/modules/spa/spa-node.c b/src/modules/spa/spa-node.c index c2907cb6e..09ce3f813 100644 --- a/src/modules/spa/spa-node.c +++ b/src/modules/spa/spa-node.c @@ -10,6 +10,7 @@ #include #include +#include #include #include #include @@ -223,16 +224,27 @@ struct pw_impl_node *pw_spa_node_load(struct pw_context *context, struct spa_handle *handle; void *iface; const struct pw_properties *p; + struct pw_loop *loop; if (properties) { p = pw_context_get_properties(context); pw_properties_set(properties, "clock.quantum-limit", pw_properties_get(p, "default.clock.quantum-limit")); + } else { + properties = pw_properties_new(NULL, NULL); + if (properties == NULL) + return NULL; + } + loop = pw_context_acquire_loop(context, &properties->dict); + if (loop == NULL) { + res = -errno; + goto error_exit; } - handle = pw_context_load_spa_handle(context, - factory_name, - properties ? &properties->dict : NULL); + pw_properties_set(properties, PW_KEY_NODE_LOOP_NAME, loop->name); + pw_context_release_loop(context, loop); + + handle = pw_context_load_spa_handle(context, factory_name, &properties->dict); if (handle == NULL) { res = -errno; goto error_exit; @@ -247,20 +259,15 @@ struct pw_impl_node *pw_spa_node_load(struct pw_context *context, spa_node = iface; - if (properties != NULL) { - if ((res = setup_props(context, spa_node, properties)) < 0) { - pw_log_warn("can't setup properties: %s", spa_strerror(res)); - } - } + if ((res = setup_props(context, spa_node, properties)) < 0) + pw_log_warn("can't setup properties: %s", spa_strerror(res)); this = pw_spa_node_new(context, flags, - spa_node, handle, properties, user_data_size); + spa_node, handle, spa_steal_ptr(properties), user_data_size); if (this == NULL) { res = -errno; - properties = NULL; goto error_exit_unload; } - return this; error_exit_unload: diff --git a/src/pipewire/context.c b/src/pipewire/context.c index 75c19b050..dbf5bb2e3 100644 --- a/src/pipewire/context.c +++ b/src/pipewire/context.c @@ -700,7 +700,8 @@ static struct pw_data_loop *acquire_data_loop(struct impl *impl, const char *nam return NULL; } - pw_log_info("using name:'%s' class:'%s' ref:%d", best_loop->impl->loop->name, + pw_log_info("%p: using name:'%s' class:'%s' ref:%d", impl, + best_loop->impl->loop->name, best_loop->impl->class, best_loop->ref); return best_loop->impl; @@ -723,12 +724,12 @@ struct pw_loop *pw_context_acquire_loop(struct pw_context *context, const struct name = props ? spa_dict_lookup(props, PW_KEY_NODE_LOOP_NAME) : NULL; klass = props ? spa_dict_lookup(props, PW_KEY_NODE_LOOP_CLASS) : NULL; - pw_log_info("looking for name:'%s' class:'%s'", name, klass); + pw_log_info("%p: looking for name:'%s' class:'%s'", context, name, klass); if ((impl->n_data_loops == 0) || (name && fnmatch(name, context->main_loop->name, FNM_EXTMATCH) == 0) || (klass && fnmatch(klass, "main", FNM_EXTMATCH) == 0)) { - pw_log_info("using main loop num-data-loops:%d", impl->n_data_loops); + pw_log_info("%p: using main loop num-data-loops:%d", context, impl->n_data_loops); return context->main_loop; } diff --git a/src/pipewire/impl-node.c b/src/pipewire/impl-node.c index d541b3635..a2851f0f0 100644 --- a/src/pipewire/impl-node.c +++ b/src/pipewire/impl-node.c @@ -1561,7 +1561,7 @@ struct pw_impl_node *pw_context_create_node(struct pw_context *context, SPA_FD_CLOEXEC | SPA_FD_NONBLOCK)) < 0) goto error_clean; - pw_log_debug("%p: new fd:%d", this, res); + pw_log_debug("%p: new fd:%d loop:%s", this, res, this->data_loop->name); this->source.fd = res; this->source.func = node_on_fd_events; diff --git a/src/pipewire/impl-port.c b/src/pipewire/impl-port.c index a23daeb31..961531343 100644 --- a/src/pipewire/impl-port.c +++ b/src/pipewire/impl-port.c @@ -894,7 +894,7 @@ static int setup_mixer(struct pw_impl_port *port, const struct spa_pod *param) int res; const char *fallback_lib, *factory_name; struct spa_handle *handle; - struct spa_dict_item items[2]; + struct spa_dict_item items[3]; char quantum_limit[16]; void *iface; struct pw_context *context = port->node->context; @@ -902,7 +902,7 @@ static int setup_mixer(struct pw_impl_port *port, const struct spa_pod *param) if ((res = spa_format_parse(param, &media_type, &media_subtype)) < 0) return res; - pw_log_debug("%p: %s/%s", port, + pw_log_debug("%p/%p: %s/%s", port->node, port, spa_debug_type_find_name(spa_type_media_type, media_type), spa_debug_type_find_name(spa_type_media_subtype, media_subtype)); @@ -950,6 +950,7 @@ static int setup_mixer(struct pw_impl_port *port, const struct spa_pod *param) spa_scnprintf(quantum_limit, sizeof(quantum_limit), "%u", context->settings.clock_quantum_limit); items[1] = SPA_DICT_ITEM_INIT("clock.quantum-limit", quantum_limit); + items[2] = SPA_DICT_ITEM_INIT(PW_KEY_NODE_LOOP_NAME, port->node->data_loop->name); handle = pw_context_load_spa_handle(context, factory_name, &SPA_DICT_INIT_ARRAY(items));