diff options
author | Nick Pelly <> | 2009-03-24 19:52:15 -0700 |
---|---|---|
committer | The Android Open Source Project <initial-contribution@android.com> | 2009-03-24 19:52:15 -0700 |
commit | 0cc23751000ae5e829be623279b592b293c5238d (patch) | |
tree | 39b68a010613309b332ee394b531cfe20efd3b2c | |
parent | f8b34f1795a98164af2992661ee372502704e93f (diff) | |
download | bluez-0cc23751000ae5e829be623279b592b293c5238d.tar.gz |
Automated import from //branches/donutburger/...@141219,141219
-rw-r--r-- | utils/audio/avdtp.c | 2 | ||||
-rw-r--r-- | utils/audio/sink.c | 23 | ||||
-rw-r--r-- | utils/audio/sink.h | 3 |
3 files changed, 16 insertions, 12 deletions
diff --git a/utils/audio/avdtp.c b/utils/audio/avdtp.c index 5e74b7e1..4710e66a 100644 --- a/utils/audio/avdtp.c +++ b/utils/audio/avdtp.c @@ -589,7 +589,7 @@ static gboolean disconnect_timeout(gpointer user_data) dev = manager_find_device(&session->dst, AUDIO_CONTROL_INTERFACE, FALSE); if (dev && dev->sink && stream_setup) - sink_setup_stream(dev->sink, session); + sink_setup_stream(dev->sink, session, NULL, NULL); else connection_lost(session, -ETIMEDOUT); return FALSE; diff --git a/utils/audio/sink.c b/utils/audio/sink.c index d25a91a3..f95d23af 100644 --- a/utils/audio/sink.c +++ b/utils/audio/sink.c @@ -394,18 +394,26 @@ failed: sink->session = NULL; } -gboolean sink_setup_stream(struct sink *sink, struct avdtp *session) +gboolean sink_setup_stream(struct sink *sink, struct avdtp *session, + DBusConnection *conn, DBusMessage *msg) { + struct pending_request *pending; + if (sink->connect || sink->disconnect) return FALSE; if (session && !sink->session) sink->session = avdtp_ref(session); - if (avdtp_discover(sink->session, discovery_complete, sink) < 0) - return FALSE; + pending = g_new0(struct pending_request, 1); + pending->conn = dbus_connection_ref(conn); + pending->msg = dbus_message_ref(msg); + sink->connect = pending; - sink->connect = g_new0(struct pending_request, 1); + if (avdtp_discover(sink->session, discovery_complete, sink) < 0) { + pending_request_free(pending); + return FALSE; + } return TRUE; } @@ -415,7 +423,6 @@ static DBusMessage *sink_connect(DBusConnection *conn, { struct audio_device *dev = data; struct sink *sink = dev->sink; - struct pending_request *pending; if (!sink->session) sink->session = avdtp_get(&dev->src, &dev->dst); @@ -433,14 +440,10 @@ static DBusMessage *sink_connect(DBusConnection *conn, ".AlreadyConnected", "Device Already Connected"); - if (!sink_setup_stream(sink, NULL)) + if (!sink_setup_stream(sink, NULL, conn, msg)) return g_dbus_create_error(msg, ERROR_INTERFACE ".FAILED", "Failed to create a stream"); - pending = sink->connect; - pending->conn = dbus_connection_ref(conn); - pending->msg = dbus_message_ref(msg); - debug("stream creation in progress"); return NULL; diff --git a/utils/audio/sink.h b/utils/audio/sink.h index 7adfa958..26eecd31 100644 --- a/utils/audio/sink.h +++ b/utils/audio/sink.h @@ -30,4 +30,5 @@ gboolean sink_is_active(struct audio_device *dev); avdtp_state_t sink_get_state(struct audio_device *dev); gboolean sink_new_stream(struct audio_device *dev, struct avdtp *session, struct avdtp_stream *stream); -gboolean sink_setup_stream(struct sink *sink, struct avdtp *session); +gboolean sink_setup_stream(struct sink *sink, struct avdtp *session, + DBusConnection *conn, DBusMessage *msg); |