From f345d81fe368294091c4f87be1f80e2226ef4ce1 Mon Sep 17 00:00:00 2001 From: Johan Hedberg Date: Mon, 1 Dec 2008 01:56:51 +0200 Subject: Stop the security manager if we do a DEVDOWN in adapter_up --- src/adapter.c | 16 +++++++++------- src/main.c | 5 ++++- src/manager.c | 2 +- 3 files changed, 14 insertions(+), 9 deletions(-) diff --git a/src/adapter.c b/src/adapter.c index 854e419f..0f427ef4 100644 --- a/src/adapter.c +++ b/src/adapter.c @@ -2512,7 +2512,7 @@ static int get_pairable_timeout(const char *src) return main_opts.pairto; } -static void adapter_up(struct btd_adapter *adapter, int dd) +static int adapter_up(struct btd_adapter *adapter, int dd) { char mode[14], srcaddr[18]; int i; @@ -2555,9 +2555,7 @@ static void adapter_up(struct btd_adapter *adapter, int dd) else write_device_mode(&adapter->bdaddr, mode); - adapter_up(adapter, dd); - - return; + return adapter_up(adapter, dd); } } else if (!g_str_equal(mode, "connectable") && adapter->discov_timeout == 0) { @@ -2604,8 +2602,12 @@ proceed: adapter->initialized = TRUE; } - if (dev_down) + if (dev_down) { ioctl(dd, HCIDEVDOWN, adapter->dev_id); + return 1; + } + + return 0; } int adapter_start(struct btd_adapter *adapter) @@ -2712,13 +2714,13 @@ setup: adapter->state &= ~STD_INQUIRY; adapter_setup(adapter, dd); - adapter_up(adapter, dd); + err = adapter_up(adapter, dd); hci_close_dev(dd); info("Adapter %s has been enabled", adapter->path); - return 0; + return err; } static void reply_pending_requests(struct btd_adapter *adapter) diff --git a/src/main.c b/src/main.c index 46d5568d..e9454603 100644 --- a/src/main.c +++ b/src/main.c @@ -484,7 +484,10 @@ static void device_devup_setup(int dev_id) configure_device(dev_id); start_security_manager(dev_id); - manager_start_adapter(dev_id); + + /* Return value 1 means ioctl(DEVDOWN) was performed */ + if (manager_start_adapter(dev_id) == 1) + stop_security_manager(dev_id); } static void init_all_devices(int ctl) diff --git a/src/manager.c b/src/manager.c index 10876161..b290852e 100644 --- a/src/manager.c +++ b/src/manager.c @@ -455,7 +455,7 @@ int manager_start_adapter(int id) if (default_adapter_id < 0) manager_set_default_adapter(id); - return 0; + return ret; } int manager_stop_adapter(int id) -- cgit