2011-04-06 00:44:52

by Jaikumar Ganesh

[permalink] [raw]
Subject: [PATCH] Fix setting of mode after discovery times out.

When discovery times out, we were not setting the mode appropriately.
Thus, if the adapter is turned off and on, we will get the incorrect mode.
Also add a forward declaration for the introduced circular dependency.
---
src/adapter.c | 4 +++-
1 files changed, 3 insertions(+), 1 deletions(-)

diff --git a/src/adapter.c b/src/adapter.c
index c400bfd..014cc0c 100644
--- a/src/adapter.c
+++ b/src/adapter.c
@@ -156,6 +156,8 @@ struct btd_adapter {

static void adapter_set_pairable_timeout(struct btd_adapter *adapter,
guint interval);
+static DBusMessage *set_discoverable(DBusConnection *conn, DBusMessage *msg,
+ gboolean discoverable, void *data);

static int found_device_cmp(const struct remote_dev_info *d1,
const struct remote_dev_info *d2)
@@ -374,7 +376,7 @@ static gboolean discov_timeout_handler(gpointer user_data)

adapter->discov_timeout_id = 0;

- adapter_ops->set_discoverable(adapter->dev_id, FALSE);
+ set_discoverable(NULL, NULL, FALSE, user_data);

return FALSE;
}
--
1.7.3.1



2011-04-09 17:35:53

by Johan Hedberg

[permalink] [raw]
Subject: Re: [PATCH] Fix setting of mode after discovery times out.

Hi Jaikumar,

On Tue, Apr 05, 2011, Jaikumar Ganesh wrote:
> diff --git a/src/adapter.c b/src/adapter.c
> index c400bfd..014cc0c 100644
> --- a/src/adapter.c
> +++ b/src/adapter.c
> @@ -156,6 +156,8 @@ struct btd_adapter {
>
> static void adapter_set_pairable_timeout(struct btd_adapter *adapter,
> guint interval);
> +static DBusMessage *set_discoverable(DBusConnection *conn, DBusMessage *msg,
> + gboolean discoverable, void *data);
>
> static int found_device_cmp(const struct remote_dev_info *d1,
> const struct remote_dev_info *d2)
> @@ -374,7 +376,7 @@ static gboolean discov_timeout_handler(gpointer user_data)
>
> adapter->discov_timeout_id = 0;
>
> - adapter_ops->set_discoverable(adapter->dev_id, FALSE);
> + set_discoverable(NULL, NULL, FALSE, user_data);
>
> return FALSE;

I don't think it's appropriate to reuse set_discoverable here since it's
a D-Bus method callback. It can e.g. result in passing the DBusMessage
parameter to btd_error_failed which might cause a crash with a NULL
pointer. I think duplicating some code from set_discoverable would make
more sense, either within discov_timeout_handler or as a separate static
function.

Johan