* Write queue is not processed after last write was not proper
@ 2016-10-20 9:43 Naresh
2016-10-20 9:58 ` Luiz Augusto von Dentz
0 siblings, 1 reply; 5+ messages in thread
From: Naresh @ 2016-10-20 9:43 UTC (permalink / raw)
To: linux-bluetooth
Hi,
I've been writing ble client application using latest bluez version
(5.42) and based on gatttool. We have some different requirement, so we
didn't used D-Bus based API's as its not implement with D-BUS API's,
Like we wanted to disable filter duplicate to receive all the
advertisement(Even all the parameters are same) for proximity check and
than connect and pair.
We have used HCI layer api for getting advertisement with filter
duplicate disabled and based on the BD address we connect using the Btio
layer API than used gattrib API to perform read/write/Notification
confirmation operations.
We are performing some write/write_without operation continuously based
on request by the our app(it kind of stress test) but after some write,
its gets stuck I mean write queue is not being processed, there is no
ATT logs once write is failed (returning some negative id) but write are
being queued.
We have debugged this issue in bluez and found that once wakeup_writer
sets the io_set_write_handler for queued operation than set
writer_active to true, after that write is performed and destroyer
callback will set writer_active back to false.
But in failed case before wakeup_writer being set writer_active to true,
the write and destroy operation are being processed i.e writer_active
never set to false and io_set_write_handler are never set for upcoming
operations.
I don't know what causing this scenario.
Thanks in advance for any suggestion/any comments.
Regards,
Naresh K
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: Write queue is not processed after last write was not proper
2016-10-20 9:43 Write queue is not processed after last write was not proper Naresh
@ 2016-10-20 9:58 ` Luiz Augusto von Dentz
[not found] ` <580E24BF.6000206@gmail.com>
0 siblings, 1 reply; 5+ messages in thread
From: Luiz Augusto von Dentz @ 2016-10-20 9:58 UTC (permalink / raw)
To: Naresh; +Cc: linux-bluetooth@vger.kernel.org
Hi Naresh,
On Thu, Oct 20, 2016 at 12:43 PM, Naresh <kbn456@gmail.com> wrote:
> Hi,
>
> I've been writing ble client application using latest bluez version (5.42)
> and based on gatttool. We have some different requirement, so we didn't used
> D-Bus based API's as its not implement with D-BUS API's, Like we wanted to
> disable filter duplicate to receive all the advertisement(Even all the
> parameters are same) for proximity check and than connect and pair.
>
> We have used HCI layer api for getting advertisement with filter duplicate
> disabled and based on the BD address we connect using the Btio layer API
> than used gattrib API to perform read/write/Notification confirmation
> operations.
gattrib API is deprecated, you should use what is under src/shared
since that is what we unit test.
> We are performing some write/write_without operation continuously based on
> request by the our app(it kind of stress test) but after some write, its
> gets stuck I mean write queue is not being processed, there is no ATT logs
> once write is failed (returning some negative id) but write are being
> queued.
>
> We have debugged this issue in bluez and found that once wakeup_writer sets
> the io_set_write_handler for queued operation than set writer_active to
> true, after that write is performed and destroyer callback will set
> writer_active back to false.
>
> But in failed case before wakeup_writer being set writer_active to true, the
> write and destroy operation are being processed i.e writer_active never set
> to false and io_set_write_handler are never set for upcoming operations.
>
> I don't know what causing this scenario.
I guess the first thing to do is to attempt to reproduce with
bt_gatt_client API and have HCI traces so we can see where it fails,
perhaps it is even disconnecting in the meantime, but it shouldn't
queue them up.
--
Luiz Augusto von Dentz
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: Write queue is not processed after last write was not proper
[not found] ` <580E24BF.6000206@gmail.com>
@ 2016-10-24 16:03 ` Luiz Augusto von Dentz
2016-10-25 15:00 ` Naresh
0 siblings, 1 reply; 5+ messages in thread
From: Luiz Augusto von Dentz @ 2016-10-24 16:03 UTC (permalink / raw)
To: Naresh; +Cc: linux-bluetooth@vger.kernel.org
Hi Naresh,
On Mon, Oct 24, 2016 at 6:11 PM, Naresh <kbn456@gmail.com> wrote:
> On Thursday 20 October 2016 03:28 PM, Luiz Augusto von Dentz wrote:
> Hi Luiz,
>>
>> Hi Naresh,
>>
>> On Thu, Oct 20, 2016 at 12:43 PM, Naresh <kbn456@gmail.com> wrote:
>>>
>>> Hi,
>>>
>>> I've been writing ble client application using latest bluez version
>>> (5.42)
>>> and based on gatttool. We have some different requirement, so we didn't
>>> used
>>> D-Bus based API's as its not implement with D-BUS API's, Like we wanted
>>> to
>>> disable filter duplicate to receive all the advertisement(Even all the
>>> parameters are same) for proximity check and than connect and pair.
>>>
>>> We have used HCI layer api for getting advertisement with filter
>>> duplicate
>>> disabled and based on the BD address we connect using the Btio layer API
>>> than used gattrib API to perform read/write/Notification confirmation
>>> operations.
>>
>> gattrib API is deprecated, you should use what is under src/shared
>> since that is what we unit test.
>
> Yes, Now we have migrated and used API's under src/shared for read/Write.
>>>
>>> We are performing some write/write_without operation continuously based
>>> on
>>> request by the our app(it kind of stress test) but after some write, its
>>> gets stuck I mean write queue is not being processed, there is no ATT
>>> logs
>>> once write is failed (returning some negative id) but write are being
>>> queued.
>>>
>>> We have debugged this issue in bluez and found that once wakeup_writer
>>> sets
>>> the io_set_write_handler for queued operation than set writer_active to
>>> true, after that write is performed and destroyer callback will set
>>> writer_active back to false.
>>>
>>> But in failed case before wakeup_writer being set writer_active to true,
>>> the
>>> write and destroy operation are being processed i.e writer_active never
>>> set
>>> to false and io_set_write_handler are never set for upcoming operations.
>>>
>>> I don't know what causing this scenario.
>>
>> I guess the first thing to do is to attempt to reproduce with
>> bt_gatt_client API and have HCI traces so we can see where it fails,
>> perhaps it is even disconnecting in the meantime, but it shouldn't
>> queue them up.
>>
> But we are still facing the same problem with write, Please find an
> attachment of hci trace logs and write logs.
Yep, good luck scanning and transferring data at same time, about half
of the logs are just reports you get from scanning. Btw APIs such as
bt_gatt_client_write_without_response return unsigned int so it can
never be a negative id, either you are printing as a signed or there
is something else perhaps out of memory, bottom line is if it fails it
should return 0.
--
Luiz Augusto von Dentz
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: Write queue is not processed after last write was not proper
2016-10-24 16:03 ` Luiz Augusto von Dentz
@ 2016-10-25 15:00 ` Naresh
2016-10-25 15:07 ` Luiz Augusto von Dentz
0 siblings, 1 reply; 5+ messages in thread
From: Naresh @ 2016-10-25 15:00 UTC (permalink / raw)
To: Luiz Augusto von Dentz; +Cc: linux-bluetooth@vger.kernel.org
Hi Luiz,
On Monday 24 October 2016 09:33 PM, Luiz Augusto von Dentz wrote:
> Hi Naresh,
>
> On Mon, Oct 24, 2016 at 6:11 PM, Naresh <kbn456@gmail.com> wrote:
>> On Thursday 20 October 2016 03:28 PM, Luiz Augusto von Dentz wrote:
>> Hi Luiz,
>>> Hi Naresh,
>>>
>>> On Thu, Oct 20, 2016 at 12:43 PM, Naresh <kbn456@gmail.com> wrote:
>>>> Hi,
>>>>
>>>> I've been writing ble client application using latest bluez version
>>>> (5.42)
>>>> and based on gatttool. We have some different requirement, so we didn't
>>>> used
>>>> D-Bus based API's as its not implement with D-BUS API's, Like we wanted
>>>> to
>>>> disable filter duplicate to receive all the advertisement(Even all the
>>>> parameters are same) for proximity check and than connect and pair.
>>>>
>>>> We have used HCI layer api for getting advertisement with filter
>>>> duplicate
>>>> disabled and based on the BD address we connect using the Btio layer API
>>>> than used gattrib API to perform read/write/Notification confirmation
>>>> operations.
>>> gattrib API is deprecated, you should use what is under src/shared
>>> since that is what we unit test.
>> Yes, Now we have migrated and used API's under src/shared for read/Write.
>>>> We are performing some write/write_without operation continuously based
>>>> on
>>>> request by the our app(it kind of stress test) but after some write, its
>>>> gets stuck I mean write queue is not being processed, there is no ATT
>>>> logs
>>>> once write is failed (returning some negative id) but write are being
>>>> queued.
>>>>
>>>> We have debugged this issue in bluez and found that once wakeup_writer
>>>> sets
>>>> the io_set_write_handler for queued operation than set writer_active to
>>>> true, after that write is performed and destroyer callback will set
>>>> writer_active back to false.
>>>>
>>>> But in failed case before wakeup_writer being set writer_active to true,
>>>> the
>>>> write and destroy operation are being processed i.e writer_active never
>>>> set
>>>> to false and io_set_write_handler are never set for upcoming operations.
>>>>
>>>> I don't know what causing this scenario.
>>> I guess the first thing to do is to attempt to reproduce with
>>> bt_gatt_client API and have HCI traces so we can see where it fails,
>>> perhaps it is even disconnecting in the meantime, but it shouldn't
>>> queue them up.
>>>
>> But we are still facing the same problem with write, Please find an
>> attachment of hci trace logs and write logs.
> Yep, good luck scanning and transferring data at same time, about half
> of the logs are just reports you get from scanning. Btw APIs such as
> bt_gatt_client_write_without_response return unsigned int so it can
> never be a negative id, either you are printing as a signed or there
> is something else perhaps out of memory, bottom line is if it fails it
> should return 0.
>
Below are the scenario's observed while running the stress test,
1) In the success case: "write without response" will internally calls
bt_att_send(bluez version:5.42 file:src/shared/att.c, line:1206) there
it will create att_send_op instance(op) and pushes op into write queue
then calls the wakeup_writer() and returns op->id. afterwards
can_write_data pops data from queue(mainloop thread context) and calls
io_send method. After the successful write op instance will be destroyed.
2)But in failure case: after wakeup_writer() is called and before
returning the proper op->id, can_write_data gets scheduled from mainloop
thread context and op instance is destroyed. So bt_att_send returns
garbage op id, because of this att->writer_active flag is also
corrupted(writer_active remains in true) which doesn't allow any further
calling of io_set_write_handler to schedule write operation.
We ran the test after disabling scan(once client is connected) but still
same problem is observed.
Thanks in advance for any suggestions/comments.
Regards,
Naresh K
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: Write queue is not processed after last write was not proper
2016-10-25 15:00 ` Naresh
@ 2016-10-25 15:07 ` Luiz Augusto von Dentz
0 siblings, 0 replies; 5+ messages in thread
From: Luiz Augusto von Dentz @ 2016-10-25 15:07 UTC (permalink / raw)
To: Naresh; +Cc: linux-bluetooth@vger.kernel.org
Hi Naresh,
On Tue, Oct 25, 2016 at 6:00 PM, Naresh <kbn456@gmail.com> wrote:
> Hi Luiz,
>
>
> On Monday 24 October 2016 09:33 PM, Luiz Augusto von Dentz wrote:
>>
>> Hi Naresh,
>>
>> On Mon, Oct 24, 2016 at 6:11 PM, Naresh <kbn456@gmail.com> wrote:
>>>
>>> On Thursday 20 October 2016 03:28 PM, Luiz Augusto von Dentz wrote:
>>> Hi Luiz,
>>>>
>>>> Hi Naresh,
>>>>
>>>> On Thu, Oct 20, 2016 at 12:43 PM, Naresh <kbn456@gmail.com> wrote:
>>>>>
>>>>> Hi,
>>>>>
>>>>> I've been writing ble client application using latest bluez version
>>>>> (5.42)
>>>>> and based on gatttool. We have some different requirement, so we didn't
>>>>> used
>>>>> D-Bus based API's as its not implement with D-BUS API's, Like we wanted
>>>>> to
>>>>> disable filter duplicate to receive all the advertisement(Even all the
>>>>> parameters are same) for proximity check and than connect and pair.
>>>>>
>>>>> We have used HCI layer api for getting advertisement with filter
>>>>> duplicate
>>>>> disabled and based on the BD address we connect using the Btio layer
>>>>> API
>>>>> than used gattrib API to perform read/write/Notification confirmation
>>>>> operations.
>>>>
>>>> gattrib API is deprecated, you should use what is under src/shared
>>>> since that is what we unit test.
>>>
>>> Yes, Now we have migrated and used API's under src/shared for read/Write.
>>>>>
>>>>> We are performing some write/write_without operation continuously based
>>>>> on
>>>>> request by the our app(it kind of stress test) but after some write,
>>>>> its
>>>>> gets stuck I mean write queue is not being processed, there is no ATT
>>>>> logs
>>>>> once write is failed (returning some negative id) but write are being
>>>>> queued.
>>>>>
>>>>> We have debugged this issue in bluez and found that once wakeup_writer
>>>>> sets
>>>>> the io_set_write_handler for queued operation than set writer_active to
>>>>> true, after that write is performed and destroyer callback will set
>>>>> writer_active back to false.
>>>>>
>>>>> But in failed case before wakeup_writer being set writer_active to
>>>>> true,
>>>>> the
>>>>> write and destroy operation are being processed i.e writer_active never
>>>>> set
>>>>> to false and io_set_write_handler are never set for upcoming
>>>>> operations.
>>>>>
>>>>> I don't know what causing this scenario.
>>>>
>>>> I guess the first thing to do is to attempt to reproduce with
>>>> bt_gatt_client API and have HCI traces so we can see where it fails,
>>>> perhaps it is even disconnecting in the meantime, but it shouldn't
>>>> queue them up.
>>>>
>>> But we are still facing the same problem with write, Please find an
>>> attachment of hci trace logs and write logs.
>>
>> Yep, good luck scanning and transferring data at same time, about half
>> of the logs are just reports you get from scanning. Btw APIs such as
>> bt_gatt_client_write_without_response return unsigned int so it can
>> never be a negative id, either you are printing as a signed or there
>> is something else perhaps out of memory, bottom line is if it fails it
>> should return 0.
>>
> Below are the scenario's observed while running the stress test,
> 1) In the success case: "write without response" will internally calls
> bt_att_send(bluez version:5.42 file:src/shared/att.c, line:1206) there it
> will create att_send_op instance(op) and pushes op into write queue then
> calls the wakeup_writer() and returns op->id. afterwards can_write_data pops
> data from queue(mainloop thread context) and calls io_send method. After the
> successful write op instance will be destroyed.
>
> 2)But in failure case: after wakeup_writer() is called and before returning
> the proper op->id, can_write_data gets scheduled from mainloop thread
> context and op instance is destroyed. So bt_att_send returns garbage op id,
> because of this att->writer_active flag is also corrupted(writer_active
> remains in true) which doesn't allow any further calling of
> io_set_write_handler to schedule write operation.
Then this looks like a thread issue, note our shared libraries are not
thread safe.
> We ran the test after disabling scan(once client is connected) but still
> same problem is observed.
>
> Thanks in advance for any suggestions/comments.
>
>
> Regards,
> Naresh K
--
Luiz Augusto von Dentz
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2016-10-25 15:07 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-10-20 9:43 Write queue is not processed after last write was not proper Naresh
2016-10-20 9:58 ` Luiz Augusto von Dentz
[not found] ` <580E24BF.6000206@gmail.com>
2016-10-24 16:03 ` Luiz Augusto von Dentz
2016-10-25 15:00 ` Naresh
2016-10-25 15:07 ` Luiz Augusto von Dentz
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).