Fix not removing all timers when user request to disconnect audio
This timers can trigger reconnections which is not a desirable behavior
diff --git a/audio/device.c b/audio/device.c
index eff8231..6b93b36 100644
--- a/audio/device.c
+++ b/audio/device.c
@@ -186,6 +186,20 @@
dev->priv->control_timer = 0;
}
+static void device_remove_avdtp_timer(struct audio_device *dev)
+{
+ if (dev->priv->avdtp_timer)
+ g_source_remove(dev->priv->avdtp_timer);
+ dev->priv->avdtp_timer = 0;
+}
+
+static void device_remove_headset_timer(struct audio_device *dev)
+{
+ if (dev->priv->headset_timer)
+ g_source_remove(dev->priv->headset_timer);
+ dev->priv->headset_timer = 0;
+}
+
static void disconnect_cb(struct btd_device *btd_dev, gboolean removal,
void *user_data)
{
@@ -200,10 +214,12 @@
priv->disconnecting = TRUE;
- if (dev->control) {
- device_remove_control_timer(dev);
+ device_remove_control_timer(dev);
+ device_remove_avdtp_timer(dev);
+ device_remove_headset_timer(dev);
+
+ if (dev->control)
avrcp_disconnect(dev);
- }
if (dev->sink && priv->sink_state != SINK_STATE_DISCONNECTED)
sink_shutdown(dev->sink);
@@ -307,13 +323,6 @@
return TRUE;
}
-static void device_remove_avdtp_timer(struct audio_device *dev)
-{
- if (dev->priv->avdtp_timer)
- g_source_remove(dev->priv->avdtp_timer);
- dev->priv->avdtp_timer = 0;
-}
-
static gboolean headset_connect_timeout(gpointer user_data)
{
struct audio_device *dev = user_data;
@@ -350,13 +359,6 @@
return TRUE;
}
-static void device_remove_headset_timer(struct audio_device *dev)
-{
- if (dev->priv->headset_timer)
- g_source_remove(dev->priv->headset_timer);
- dev->priv->headset_timer = 0;
-}
-
static void device_avdtp_cb(struct audio_device *dev, struct avdtp *session,
avdtp_session_state_t old_state,
avdtp_session_state_t new_state,