2012-12-06 23:41:11

by Andre Guedes

[permalink] [raw]
Subject: [PATCH BlueZ 1/3] adapter: Fix unplugging adapter bug

If we unplug an adapter in powered on state, once it is plugged
again, it doesn't go to powered on state as expected. This bug
happens because Powered info is stored when the adapter is
unplugged from the system.

This patch fixes this bug by only storing adapter info if mode
changing was requested by user application via D-Bus interface.
This patch basically reverts the changes in commit
985d8ac397a7c332c1badcb95430a167ec93e9e7 where the bug was
introduced.
---
src/adapter.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/adapter.c b/src/adapter.c
index 0a0e6f0..25501c4 100644
--- a/src/adapter.c
+++ b/src/adapter.c
@@ -2230,8 +2230,6 @@ static void set_mode_complete(struct btd_adapter *adapter)
struct session_req *pending;
int err;

- store_adapter_info(adapter);
-
DBG("%s", mode2str(adapter->mode));

if (adapter->mode == MODE_OFF) {
@@ -2271,6 +2269,8 @@ static void set_mode_complete(struct btd_adapter *adapter)
if (err != 0)
error("unable to set mode: %s", mode2str(pending->mode));

+ store_adapter_info(adapter);
+
session_unref(pending);
}

--
1.8.0.1



2012-12-07 09:22:50

by Johan Hedberg

[permalink] [raw]
Subject: Re: [PATCH BlueZ 1/3] adapter: Fix unplugging adapter bug

Hi Andre,

On Thu, Dec 06, 2012, Andre Guedes wrote:
> If we unplug an adapter in powered on state, once it is plugged
> again, it doesn't go to powered on state as expected. This bug
> happens because Powered info is stored when the adapter is
> unplugged from the system.
>
> This patch fixes this bug by only storing adapter info if mode
> changing was requested by user application via D-Bus interface.
> This patch basically reverts the changes in commit
> 985d8ac397a7c332c1badcb95430a167ec93e9e7 where the bug was
> introduced.
> ---
> src/adapter.c | 4 ++--
> 1 file changed, 2 insertions(+), 2 deletions(-)

All three patches have been applied (with a couple of coding style
improvements which don't change the logic). Thanks.

Johan

2012-12-06 23:41:13

by Andre Guedes

[permalink] [raw]
Subject: [PATCH BlueZ 3/3] adapter: Discoverable storage

This patch changes store_adapter_info helper so it stores Discoverable
value according to discov_timeout. If discov_timeout is greater than
zero, we store "false" for Discoverable. This change covers the case
when DiscoverableTimeout value is set when Discoverable is true.
---
src/adapter.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/src/adapter.c b/src/adapter.c
index 35a4715..fb6c570 100644
--- a/src/adapter.c
+++ b/src/adapter.c
@@ -231,7 +231,8 @@ static void store_adapter_info(struct btd_adapter *adapter)
adapter->pairable_timeout);

g_key_file_set_boolean(key_file, "General", "Discoverable",
- adapter->discoverable);
+ adapter->discov_timeout ?
+ FALSE : adapter->discoverable);

if (adapter->discov_timeout != main_opts.discovto)
g_key_file_set_integer(key_file, "General",
--
1.8.0.1


2012-12-06 23:41:12

by Andre Guedes

[permalink] [raw]
Subject: [PATCH BlueZ 2/3] adapter: Don't store Discoverable value if DiscoverableTimeout is set

If adapter was set to Discoverable and DiscoverableTimeout is greater
than zero we should not store the Discoverable adapter info as long as
it is a non-persistent state. This way, we don't need to worry about
updating the Discoverable stored value once the timeout expires.
---
src/adapter.c | 4 ++++
1 file changed, 4 insertions(+)

diff --git a/src/adapter.c b/src/adapter.c
index 25501c4..35a4715 100644
--- a/src/adapter.c
+++ b/src/adapter.c
@@ -2269,8 +2269,12 @@ static void set_mode_complete(struct btd_adapter *adapter)
if (err != 0)
error("unable to set mode: %s", mode2str(pending->mode));

+ if (adapter->mode == MODE_DISCOVERABLE && adapter->discov_timeout > 0)
+ goto done;
+
store_adapter_info(adapter);

+done:
session_unref(pending);
}

--
1.8.0.1