From 3161f96838b8f79574ee93b0525942d7c732535e Mon Sep 17 00:00:00 2001 From: Johan Hedberg Date: Wed, 8 Oct 2008 14:44:54 +0200 Subject: Create audio device objects on incoming connections if necessary If we haven't done SDP yet the data structures will be uninitialized. This patch makes sure that the structures are properly initialized if we get an incoming connection before service discovery has been done. --- audio/manager.c | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) (limited to 'audio/manager.c') diff --git a/audio/manager.c b/audio/manager.c index 5a043f5e..ee44835c 100644 --- a/audio/manager.c +++ b/audio/manager.c @@ -491,10 +491,13 @@ static void ag_io_cb(GIOChannel *chan, int err, const bdaddr_t *src, uuid = HFP_AG_UUID; } - device = manager_find_device(dst, NULL, FALSE); + device = manager_get_device(src, dst, NULL); if (!device) goto drop; + if (!device->headset) + device->headset = headset_init(device, NULL, 0); + if (headset_get_state(device) > HEADSET_STATE_DISCONNECTED) { debug("Refusing new connection since one already exists"); goto drop; @@ -685,7 +688,7 @@ static int audio_probe(struct btd_device *device, GSList *records) adapter_get_address(adapter, &src); device_get_address(device, &dst); - dev = manager_get_device(&src, &dst, path, NULL); + dev = manager_get_device(&src, &dst, path); if (!dev) { debug("audio_probe: unable to get a device object"); return -1; @@ -1057,14 +1060,12 @@ struct audio_device *manager_find_device(const bdaddr_t *bda, const char *interf return NULL; } -struct audio_device *manager_get_device(bdaddr_t *src, bdaddr_t *dst, - const char *path, gboolean *created) +struct audio_device *manager_get_device(const bdaddr_t *src, + const bdaddr_t *dst, + const char *path) { struct audio_device *dev; - if (created) - *created = FALSE; - dev = manager_find_device(dst, NULL, FALSE); if (dev) return dev; @@ -1100,8 +1101,5 @@ struct audio_device *manager_get_device(bdaddr_t *src, bdaddr_t *dst, devices = g_slist_append(devices, dev); - if (created) - *created = TRUE; - return dev; } -- cgit