2009-06-24 22:49:17

by Rodolpho Atoji

[permalink] [raw]
Subject: SDP_RETRY_IF_BUSY and timeout of service search process

Hello,

I'm using bluez-3.32 and I would like to know the timeout
for the service search process, with or without using
SDP_RETRY_IF_BUSY.

Reading the code, it's possible to see that the function
sdp_send_req_w4_resp() is used for all the search functions.

So, without using SDP_RETRY_IF_BUSY the timeout
should be the sum of timeouts of sdp_send_req() and
sdp_read_rsp().

The timeout of sdp_send_req() is the timeout of send(),
which is SO_SNDTIMEO. The timeout of sdp_read_rsp()
is SDP_RESPONSE_TIMEOUT, so the timeout of
the service search process without retries should be
SO_SNDTIMEO + SDP_RESPONSE_TIMEOUT, am I
right?

Regarding to the "busy" state of the device, what is
it, exactly?

As shown on (sdp.c:4095):

do {
...
} while (errno == EBUSY && (flags & SDP_RETRY_IF_BUSY));

When SDP_RETRY_IF_BUSY is used, the timeout of
service search process can be indefinitely extended
above the timeout calculated?

Thanks in advance and best regards,

Rodolpho


2009-06-26 07:04:42

by Marcel Holtmann

[permalink] [raw]
Subject: Re: SDP_RETRY_IF_BUSY and timeout of service search process

Hi Rodolpho,

> >> I'm using bluez-4.42 and I would like to know the timeout
> >> for the service search process, with or without using
> >> SDP_RETRY_IF_BUSY.
> >
> > and where do we actually use that flag inside bluetoothd? If we do that
> > is a bug and it needs to be changed to use SDP async API.
>
> In fact I use a library which is linked to bluez.
>
> This library does the service search just like sdptool does
> in do_search() (sdp.c:3616).
>
> Is this deprecated and shouldn't be used, then?

it is not deprecated, but it shouldn't be used. However feel free to fix
it, but as I mentioned we are not even using it. The SDP async API is
what I would recommend.

Regards

Marcel



2009-06-25 15:23:30

by Rodolpho Atoji

[permalink] [raw]
Subject: Re: SDP_RETRY_IF_BUSY and timeout of service search process

Hi Marcel,

>> I'm using bluez-4.42 and I would like to know the timeout
>> for the service search process, with or without using
>> SDP_RETRY_IF_BUSY.
>
> and where do we actually use that flag inside bluetoothd? If we do that
> is a bug and it needs to be changed to use SDP async API.

In fact I use a library which is linked to bluez.

This library does the service search just like sdptool does
in do_search() (sdp.c:3616).

Is this deprecated and shouldn't be used, then?

Regards,
Rodolpho

2009-06-25 15:17:41

by Marcel Holtmann

[permalink] [raw]
Subject: Re: SDP_RETRY_IF_BUSY and timeout of service search process

Hi Rodolpho,

> >> I'm using bluez-3.32 and I would like to know the timeout
> >> for the service search process, with or without using
> >> SDP_RETRY_IF_BUSY.
> >
> > I can stop you right here. Our current release is 4.42 and the 3.x
> > series is fully in maintenance mode.
>
> Ok!
>
> I'll be moving to 4.42, so I'll update my post based on the 4.42
> sources, which are almost the same regarding to the
> service search routines:
>
> ====== Updated post ======
>
> I'm using bluez-4.42 and I would like to know the timeout
> for the service search process, with or without using
> SDP_RETRY_IF_BUSY.

and where do we actually use that flag inside bluetoothd? If we do that
is a bug and it needs to be changed to use SDP async API.

Regards

Marcel



2009-06-25 15:15:57

by Rodolpho Atoji

[permalink] [raw]
Subject: Re: SDP_RETRY_IF_BUSY and timeout of service search process

Hi Marcel,

>> I'm using bluez-3.32 and I would like to know the timeout
>> for the service search process, with or without using
>> SDP_RETRY_IF_BUSY.
>
> I can stop you right here. Our current release is 4.42 and the 3.x
> series is fully in maintenance mode.

Ok!

I'll be moving to 4.42, so I'll update my post based on the 4.42
sources, which are almost the same regarding to the
service search routines:

====== Updated post ======

I'm using bluez-4.42 and I would like to know the timeout
for the service search process, with or without using
SDP_RETRY_IF_BUSY.

Reading the code, it's possible to see that the function
sdp_send_req_w4_resp() is used by all the search functions.

So, without using SDP_RETRY_IF_BUSY the timeout
should be the sum of timeouts of sdp_send_req() and
sdp_read_rsp().

The timeout of sdp_send_req() is the timeout of send(),
which is SO_SNDTIMEO. The timeout of sdp_read_rsp()
is SDP_RESPONSE_TIMEOUT, so the timeout of
the service search process without retries should be
SO_SNDTIMEO + SDP_RESPONSE_TIMEOUT, am I
right?

Regarding to the "busy" state of the device, what is
it, exactly?

As shown on (sdp.c:4526):

do {
...
} while (errno == EBUSY && (flags & SDP_RETRY_IF_BUSY));

When SDP_RETRY_IF_BUSY is used, the timeout of
service search process can be indefinitely extended
above the timeout calculated?

Thanks and best regards,

Rodolpho

2009-06-25 03:46:06

by Marcel Holtmann

[permalink] [raw]
Subject: Re: SDP_RETRY_IF_BUSY and timeout of service search process

Hi Rodolpho,

> I'm using bluez-3.32 and I would like to know the timeout
> for the service search process, with or without using
> SDP_RETRY_IF_BUSY.

I can stop you right here. Our current release is 4.42 and the 3.x
series is fully in maintenance mode.

Regards

Marcel