diff options
Diffstat (limited to 'audio/control.c')
-rw-r--r-- | audio/control.c | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/audio/control.c b/audio/control.c index 1dcab3c2..8b3b2d8a 100644 --- a/audio/control.c +++ b/audio/control.c @@ -666,6 +666,7 @@ static void avctp_server_cb(GIOChannel *chan, int err, const bdaddr_t *src, struct l2cap_options l2o; struct avctp *session; GIOCondition flags = G_IO_ERR | G_IO_HUP | G_IO_NVAL; + struct audio_device *dev; char address[18]; if (err < 0) { @@ -685,6 +686,15 @@ static void avctp_server_cb(GIOChannel *chan, int err, const bdaddr_t *src, goto drop; } + dev = manager_get_device(src, dst, NULL); + if (!dev) { + error("Unable to get audio device object for %s", address); + goto drop; + } + + if (!dev->control) + dev->control = control_init(dev); + session->state = AVCTP_STATE_CONNECTING; session->sock = g_io_channel_unix_get_fd(chan); @@ -694,7 +704,6 @@ static void avctp_server_cb(GIOChannel *chan, int err, const bdaddr_t *src, err = errno; error("getsockopt(L2CAP_OPTIONS): %s (%d)", strerror(err), err); - avctp_unref(session); goto drop; } @@ -721,7 +730,8 @@ proceed: return; drop: - close(session->sock); + g_io_channel_close(chan); + avctp_unref(session); } static GIOChannel *avctp_server_socket(const bdaddr_t *src, gboolean master) |