dbus: keep a ref to DBusConnection if reconnecting is not handled

Several places in the code don't handle reconnecting DBus connections
yet. In those cases, a ref to the DBusConnection handle needs to be
kept, so that there's no use-after-free if it gets freed by spa_dbus
if the connection is broken.

Adjust spa_dbus so that others keeping additional refs is safe.
This commit is contained in:
Pauli Virtanen 2021-05-17 18:19:44 +03:00
parent cb6dbd165a
commit 2b515b5e50
6 changed files with 58 additions and 9 deletions

View file

@ -55,8 +55,10 @@ void *dbus_request_name(struct pw_context *context, const char *name)
return NULL;
bus = spa_dbus_connection_get(conn);
if (bus == NULL)
if (bus == NULL) {
spa_dbus_connection_destroy(conn);
return NULL;
}
dbus_error_init(&error);
@ -72,6 +74,8 @@ void *dbus_request_name(struct pw_context *context, const char *name)
dbus_error_free(&error);
spa_dbus_connection_destroy(conn);
errno = EEXIST;
return NULL;
}