summaryrefslogtreecommitdiff
path: root/media-video/wireplumber/files/wireplumber-0.4.11-dbus-reconnect-crash.patch
blob: 6098ed11c30262dea1af625f39751525755cfe1e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
https://gitlab.freedesktop.org/pipewire/wireplumber/-/commit/eb406bdb2cbbcd49c55c71285f8f2eddb624d24b

From eb406bdb2cbbcd49c55c71285f8f2eddb624d24b Mon Sep 17 00:00:00 2001
From: George Kiagiadakis <george.kiagiadakis@collabora.com>
Date: Wed, 13 Jul 2022 13:38:14 +0300
Subject: [PATCH] dbus: fix crash when trying to reconnect

When coming from on_sync_reconnect, data points to the WpDBus object
instead of the activation transition.

Fixes: #305
--- a/lib/wp/dbus.c
+++ b/lib/wp/dbus.c
@@ -58,14 +58,26 @@ wp_dbus_set_state (WpDbus *self, WpDBusState new_state)
 static void
 on_got_bus (GObject * obj, GAsyncResult * res, gpointer data)
 {
-  WpTransition *transition = WP_TRANSITION (data);
-  WpDbus *self = wp_transition_get_source_object (transition);
+  WpTransition *transition;
+  WpDbus *self;
   g_autoptr (GError) error = NULL;
 
+  if (WP_IS_TRANSITION (data)) {
+    // coming from wp_dbus_enable
+    transition = WP_TRANSITION (data);
+    self = wp_transition_get_source_object (transition);
+  } else {
+    // coming from on_sync_reconnect
+    transition = NULL;
+    self = WP_DBUS (data);
+  }
+
   self->connection = g_dbus_connection_new_for_address_finish (res, &error);
   if (!self->connection) {
-    g_prefix_error (&error, "Failed to connect to bus: ");
-    wp_transition_return_error (transition, g_steal_pointer (&error));
+    if (transition) {
+      g_prefix_error (&error, "Failed to connect to bus: ");
+      wp_transition_return_error (transition, g_steal_pointer (&error));
+    }
     return;
   }
 
GitLab