From 54a7a2f4e5a5cae1bef9f8edbcb4650e3d835c9f Mon Sep 17 00:00:00 2001 From: Luiz Augusto von Dentz Date: Tue, 23 Sep 2008 09:33:04 -0700 Subject: Fix OffMode = DevDown race condition. --- src/adapter.c | 11 ++++++++--- src/main.c | 11 ----------- 2 files changed, 8 insertions(+), 14 deletions(-) diff --git a/src/adapter.c b/src/adapter.c index a59f2b12..4a6ea8c2 100644 --- a/src/adapter.c +++ b/src/adapter.c @@ -2242,9 +2242,14 @@ static void adapter_up(struct btd_adapter *adapter, int dd) /* Set scan mode */ if (read_device_mode(srcaddr, mode, sizeof(mode)) == 0) { - if (!strcmp(mode, "off") && main_opts.offmode == HCID_OFFMODE_NOSCAN) { - adapter->mode = MODE_OFF; - adapter->scan_mode= SCAN_DISABLED; + if (!strcmp(mode, "off")) { + if (main_opts.offmode == HCID_OFFMODE_NOSCAN) { + adapter->mode = MODE_OFF; + adapter->scan_mode= SCAN_DISABLED; + } else if (main_opts.offmode == HCID_OFFMODE_DEVDOWN) { + ioctl(dd, HCIDEVDOWN, adapter->dev_id); + return; + } } else if (!strcmp(mode, "connectable")) { adapter->mode = MODE_CONNECTABLE; adapter->scan_mode = SCAN_PAGE; diff --git a/src/main.c b/src/main.c index db257428..9bfeb512 100644 --- a/src/main.c +++ b/src/main.c @@ -452,17 +452,6 @@ static void init_device(int dev_id) if (hci_test_bit(HCI_RAW, &di.flags)) goto done; - if (main_opts.offmode == HCID_OFFMODE_DEVDOWN) { - char mode[16], src[18]; - - ba2str(&di.bdaddr, src); - if (read_device_mode(src, mode, sizeof(mode)) == 0 && - strcmp(mode, "off") == 0) { - ioctl(dd, HCIDEVDOWN, dev_id); - goto done; - } - } - done: hci_close_dev(dd); exit(0); -- cgit