Re: [Bluez PATCH v2] device: don't wait for timeout if RemoveDevice is called

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Bluez maintainers,

May I bother you to review this patch?

Thanks,
Archie


On Fri, 11 Sep 2020 at 10:56, Archie Pusaka <apusaka@xxxxxxxxxx> wrote:
>
> Hi Bluez maintainers,
>
> May I bother you to review this patch?
>
> Thanks,
> Archie
>
> On Mon, 7 Sep 2020 at 10:38, Archie Pusaka <apusaka@xxxxxxxxxx> wrote:
>>
>> Hi Bluez maintainers,
>>
>> Could you take another look at this patch?
>>
>> Thanks,
>> Archie
>>
>> On Tue, 1 Sep 2020 at 11:37, Archie Pusaka <apusaka@xxxxxxxxxx> wrote:
>> >
>> > From: Archie Pusaka <apusaka@xxxxxxxxxxxx>
>> >
>> > RemoveDevice on adapter interface used to remove a device, even when
>> > the device is connected. However, since the introduction of the new
>> > 30 seconds timeout when setting a device as temporary, RemoveDevice
>> > doesn't immediately remove a connected device, but only disconnects
>> > it and waits for the timer to expire before effectively removes it.
>> >
>> > This patch removes the device as soon as it gets disconnected,
>> > provided the disconnection is triggered by a call to RemoveDevice.
>> > The regular timeout still applies for other cases.
>> >
>> > Tested manually by calling RemoveDevice on a connected device,
>> > and with ChromeOS autotest setup.
>> >
>> > Reviewed-by: Daniel Winkler <danielwinkler@xxxxxxxxxx>
>> >
>> > Signed-off-by: Archie Pusaka <apusaka@xxxxxxxxxxxx>
>> > ---
>> >
>> > Changes in v2:
>> > * Rebasing to HEAD
>> >
>> >  src/adapter.c |  2 --
>> >  src/adapter.h |  2 ++
>> >  src/device.c  | 11 +++++++++++
>> >  3 files changed, 13 insertions(+), 2 deletions(-)
>> >
>> > diff --git a/src/adapter.c b/src/adapter.c
>> > index 1435e2bd7..ffd05aa0b 100644
>> > --- a/src/adapter.c
>> > +++ b/src/adapter.c
>> > @@ -79,8 +79,6 @@
>> >  #include "advertising.h"
>> >  #include "eir.h"
>> >
>> > -#define ADAPTER_INTERFACE      "org.bluez.Adapter1"
>> > -
>> >  #define MODE_OFF               0x00
>> >  #define MODE_CONNECTABLE       0x01
>> >  #define MODE_DISCOVERABLE      0x02
>> > diff --git a/src/adapter.h b/src/adapter.h
>> > index f8ac20261..f835c984f 100644
>> > --- a/src/adapter.h
>> > +++ b/src/adapter.h
>> > @@ -26,6 +26,8 @@
>> >  #include <dbus/dbus.h>
>> >  #include <glib.h>
>> >
>> > +#define ADAPTER_INTERFACE      "org.bluez.Adapter1"
>> > +
>> >  #define MAX_NAME_LENGTH                248
>> >
>> >  /* Invalid SSP passkey value used to indicate negative replies */
>> > diff --git a/src/device.c b/src/device.c
>> > index df440ce09..f20270017 100644
>> > --- a/src/device.c
>> > +++ b/src/device.c
>> > @@ -3007,6 +3007,7 @@ void device_remove_connection(struct btd_device *device, uint8_t bdaddr_type)
>> >  {
>> >         struct bearer_state *state = get_state(device, bdaddr_type);
>> >         DBusMessage *reply;
>> > +       bool remove_device = false;
>> >
>> >         if (!state->connected)
>> >                 return;
>> > @@ -3036,6 +3037,10 @@ void device_remove_connection(struct btd_device *device, uint8_t bdaddr_type)
>> >         while (device->disconnects) {
>> >                 DBusMessage *msg = device->disconnects->data;
>> >
>> > +               if (dbus_message_is_method_call(msg, ADAPTER_INTERFACE,
>> > +                                                               "RemoveDevice"))
>> > +                       remove_device = true;
>> > +
>> >                 g_dbus_send_reply(dbus_conn, msg, DBUS_TYPE_INVALID);
>> >                 device->disconnects = g_slist_remove(device->disconnects, msg);
>> >                 dbus_message_unref(msg);
>> > @@ -3061,6 +3066,9 @@ void device_remove_connection(struct btd_device *device, uint8_t bdaddr_type)
>> >
>> >         g_dbus_emit_property_changed(dbus_conn, device->path,
>> >                                                 DEVICE_INTERFACE, "Connected");
>> > +
>> > +       if (remove_device)
>> > +               btd_adapter_remove_device(device->adapter, device);
>> >  }
>> >
>> >  guint device_add_disconnect_watch(struct btd_device *device,
>> > @@ -4477,6 +4485,9 @@ void device_remove(struct btd_device *device, gboolean remove_stored)
>> >                 disconnect_all(device);
>> >         }
>> >
>> > +       if (device->temporary_timer > 0)
>> > +               g_source_remove(device->temporary_timer);
>> > +
>> >         if (device->store_id > 0) {
>> >                 g_source_remove(device->store_id);
>> >                 device->store_id = 0;
>> > --
>> > 2.28.0.402.g5ffc5be6b7-goog
>> >



[Index of Archives]     [Bluez Devel]     [Linux Wireless Networking]     [Linux Wireless Personal Area Networking]     [Linux ATH6KL]     [Linux USB Devel]     [Linux Media Drivers]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Big List of Linux Books]

  Powered by Linux