Diff between 7103267648b4f9d3d48be8043e29aceeb8db212e and 4b5f50d5cc3639c083d932bbc31d9e0b30d6bfb6

Changed Files

File Additions Deletions Status
profiles/audio/source.c +8 -1 modified
profiles/audio/source.h +2 -1 modified
profiles/audio/transport.c +1 -4 modified

Full Patch

diff --git a/profiles/audio/source.c b/profiles/audio/source.c
index 147a92c..5d9e237 100644
--- a/profiles/audio/source.c
+++ b/profiles/audio/source.c
@@ -70,6 +70,7 @@ struct source {
 
 struct source_state_callback {
 	source_state_cb cb;
+	struct audio_device *dev;
 	void *user_data;
 	unsigned int id;
 };
@@ -96,6 +97,10 @@ static void source_set_state(struct audio_device *dev, source_state_t new_state)
 
 	for (l = source_callbacks; l != NULL; l = l->next) {
 		struct source_state_callback *cb = l->data;
+
+		if (cb->dev != dev)
+			continue;
+
 		cb->cb(dev, old_state, new_state, cb->user_data);
 	}
 
@@ -439,13 +444,15 @@ int source_disconnect(struct audio_device *dev, gboolean shutdown)
 	return avdtp_close(source->session, source->stream, FALSE);
 }
 
-unsigned int source_add_state_cb(source_state_cb cb, void *user_data)
+unsigned int source_add_state_cb(struct audio_device *dev, source_state_cb cb,
+								void *user_data)
 {
 	struct source_state_callback *state_cb;
 	static unsigned int id = 0;
 
 	state_cb = g_new(struct source_state_callback, 1);
 	state_cb->cb = cb;
+	state_cb->dev = dev;
 	state_cb->user_data = user_data;
 	state_cb->id = ++id;
 
diff --git a/profiles/audio/source.h b/profiles/audio/source.h
index 4c01d27..61afd94 100644
--- a/profiles/audio/source.h
+++ b/profiles/audio/source.h
@@ -37,7 +37,8 @@ typedef void (*source_state_cb) (struct audio_device *dev,
 				source_state_t new_state,
 				void *user_data);
 
-unsigned int source_add_state_cb(source_state_cb cb, void *user_data);
+unsigned int source_add_state_cb(struct audio_device *dev, source_state_cb cb,
+							void *user_data);
 gboolean source_remove_state_cb(unsigned int id);
 
 struct source *source_init(struct audio_device *dev);
diff --git a/profiles/audio/transport.c b/profiles/audio/transport.c
index 98106a2..f585c3a 100644
--- a/profiles/audio/transport.c
+++ b/profiles/audio/transport.c
@@ -764,9 +764,6 @@ static void source_state_changed(struct audio_device *dev,
 {
 	struct media_transport *transport = user_data;
 
-	if (dev != transport->device)
-		return;
-
 	if (new_state == SOURCE_STATE_PLAYING)
 		transport_update_playing(transport, TRUE);
 	else
@@ -813,7 +810,7 @@ struct media_transport *media_transport_create(struct audio_device *device,
 		} else {
 			a2dp->volume = 127;
 			avrcp_set_volume(device, a2dp->volume);
-			transport->source_watch = source_add_state_cb(
+			transport->source_watch = source_add_state_cb(device,
 							source_state_changed,
 							transport);
 		}