diff options
| author | Luiz Augusto von Dentz <luiz.dentz@openbossa.org> | 2008-09-23 09:33:04 -0700 | 
|---|---|---|
| committer | Luiz Augusto von Dentz <luiz.dentz@openbossa.org> | 2008-09-23 09:33:04 -0700 | 
| commit | 54a7a2f4e5a5cae1bef9f8edbcb4650e3d835c9f (patch) | |
| tree | 41a5623b83ec480e1c2b5696289f08e266973bba | |
| parent | 0c20e0b7a706307ffdb9a76c22634e9b2d50cc45 (diff) | |
Fix OffMode = DevDown race condition.
| -rw-r--r-- | src/adapter.c | 11 | ||||
| -rw-r--r-- | 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; @@ -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); | 
