summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJohan Hedberg <johan.hedberg@nokia.com>2007-08-30 08:12:20 +0000
committerJohan Hedberg <johan.hedberg@nokia.com>2007-08-30 08:12:20 +0000
commit921c1a63009394047b963930cfd49fea60017599 (patch)
tree5fee4f4538985a1ce2043268ab10c2a76596d2ee
parent734b3f84c1e48f241bf1004e57a86fa898d083a5 (diff)
Fix behaviour when no adapter is connected
-rw-r--r--audio/manager.c9
-rw-r--r--audio/manager.h2
-rw-r--r--audio/unix.c3
3 files changed, 11 insertions, 3 deletions
diff --git a/audio/manager.c b/audio/manager.c
index 9c57d17d..30b78632 100644
--- a/audio/manager.c
+++ b/audio/manager.c
@@ -608,6 +608,8 @@ struct device *manager_device_connected(bdaddr_t *bda, const char *uuid)
device = manager_find_device(bda, NULL, FALSE);
if (!device) {
device = create_device(bda);
+ if (!device)
+ return NULL;
if (!add_device(device, TRUE)) {
remove_device(device);
return NULL;
@@ -676,13 +678,18 @@ struct device *manager_device_connected(bdaddr_t *bda, const char *uuid)
return device;
}
-void manager_create_device(bdaddr_t *bda, create_dev_cb_t cb,
+gboolean manager_create_device(bdaddr_t *bda, create_dev_cb_t cb,
void *user_data)
{
struct device *dev;
dev = create_device(bda);
+ if (!dev)
+ return FALSE;
+
resolve_services(NULL, dev, cb, user_data);
+
+ return TRUE;
}
static DBusHandlerResult am_create_device(DBusConnection *conn,
diff --git a/audio/manager.h b/audio/manager.h
index ceabe680..e71e5d62 100644
--- a/audio/manager.h
+++ b/audio/manager.h
@@ -49,7 +49,7 @@ struct device *manager_find_device(bdaddr_t *bda, const char *interface,
struct device *manager_device_connected(bdaddr_t *bda, const char *uuid);
-void manager_create_device(bdaddr_t *bda, create_dev_cb_t cb,
+gboolean manager_create_device(bdaddr_t *bda, create_dev_cb_t cb,
void *user_data);
gboolean manager_authorize(bdaddr_t *dba, const char *uuid,
diff --git a/audio/unix.c b/audio/unix.c
index d980861f..cee56f8a 100644
--- a/audio/unix.c
+++ b/audio/unix.c
@@ -574,7 +574,8 @@ static void cfg_event(struct unix_client *client, struct ipc_packet *pkt, int le
if (!manager_find_device(&bdaddr, NULL, FALSE)) {
if (!bacmp(&bdaddr, BDADDR_ANY))
goto failed;
- manager_create_device(&bdaddr, create_cb, client);
+ if (!manager_create_device(&bdaddr, create_cb, client))
+ goto failed;
return;
}