From 4112b34f4d72290b0be90b825894263a8ffa2150 Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Fri, 26 Mar 2021 15:14:53 +0100 Subject: [PATCH] pulse-server: also release and free the dbus name --- src/modules/module-protocol-pulse/dbus-name.c | 21 +++++++++++++------ .../module-protocol-pulse/pulse-server.c | 15 +++++++++---- 2 files changed, 26 insertions(+), 10 deletions(-) diff --git a/src/modules/module-protocol-pulse/dbus-name.c b/src/modules/module-protocol-pulse/dbus-name.c index dfd1faca6..0f82a740d 100644 --- a/src/modules/module-protocol-pulse/dbus-name.c +++ b/src/modules/module-protocol-pulse/dbus-name.c @@ -25,7 +25,7 @@ #include #include -static int dbus_request_name(struct pw_context *context, const char *name) +static void *dbus_request_name(struct pw_context *context, const char *name) { struct spa_dbus *dbus; struct spa_dbus_connection *conn; @@ -37,12 +37,14 @@ static int dbus_request_name(struct pw_context *context, const char *name) support = pw_context_get_support(context, &n_support); dbus = spa_support_find(support, n_support, SPA_TYPE_INTERFACE_DBus); - if (dbus == NULL) - return -ENOTSUP; + if (dbus == NULL) { + errno = ENOTSUP; + return NULL; + } conn = spa_dbus_get_connection(dbus, SPA_DBUS_TYPE_SESSION); if (conn == NULL) - return -errno; + return NULL; bus = spa_dbus_connection_get(conn); @@ -51,7 +53,7 @@ static int dbus_request_name(struct pw_context *context, const char *name) if (dbus_bus_request_name(bus, name, DBUS_NAME_FLAG_DO_NOT_QUEUE, &error) == DBUS_REQUEST_NAME_REPLY_PRIMARY_OWNER) - return 0; + return conn; if (dbus_error_is_set(&error)) pw_log_error("Failed to acquire %s: %s: %s", name, error.name, error.message); @@ -60,5 +62,12 @@ static int dbus_request_name(struct pw_context *context, const char *name) dbus_error_free(&error); - return -EEXIST; + errno = EEXIST; + return NULL; +} + +static void dbus_release_name(void *data) +{ + struct spa_dbus_connection *conn = data; + spa_dbus_connection_destroy(conn); } diff --git a/src/modules/module-protocol-pulse/pulse-server.c b/src/modules/module-protocol-pulse/pulse-server.c index d54695c93..11dcf7667 100644 --- a/src/modules/module-protocol-pulse/pulse-server.c +++ b/src/modules/module-protocol-pulse/pulse-server.c @@ -265,6 +265,7 @@ struct impl { struct spa_hook context_listener; struct pw_properties *props; + void *dbus_name; struct ratelimit rate_limit; @@ -6272,6 +6273,13 @@ static void impl_free(struct impl *impl) { struct server *s; struct client *c; + struct message *msg; + + if (impl->dbus_name) + dbus_release_name(impl->dbus_name); + + spa_list_consume(msg, &impl->free_messages, link) + message_free(impl, msg, true, true); if (impl->context != NULL) spa_hook_remove(&impl->context_listener); @@ -6279,10 +6287,12 @@ static void impl_free(struct impl *impl) client_free(c); spa_list_consume(s, &impl->servers, link) server_free(s); + pw_map_for_each(&impl->samples, impl_free_sample, impl); pw_map_clear(&impl->samples); pw_map_for_each(&impl->modules, impl_free_module, impl); pw_map_clear(&impl->modules); + if (impl->cleanup != NULL) pw_loop_destroy_source(impl->loop, impl->cleanup); pw_properties_free(impl->props); @@ -6399,7 +6409,7 @@ struct pw_protocol_pulse *pw_protocol_pulse_new(struct pw_context *context, } } - dbus_request_name(context, "org.pulseaudio.Server"); + impl->dbus_name = dbus_request_name(context, "org.pulseaudio.Server"); return (struct pw_protocol_pulse*)impl; @@ -6419,8 +6429,5 @@ void *pw_protocol_pulse_get_user_data(struct pw_protocol_pulse *pulse) void pw_protocol_pulse_destroy(struct pw_protocol_pulse *pulse) { struct impl *impl = (struct impl*)pulse; - struct message *msg; - spa_list_consume(msg, &impl->free_messages, link) - message_free(impl, msg, true, true); impl_free(impl); }