public inbox for linux-bluetooth@vger.kernel.org
 help / color / mirror / Atom feed
From: Stefan Mischke <survivor@uni-paderborn.de>
To: Marcel Holtmann <marcel@holtmann.org>
Cc: BlueZ Mailing List <bluez-devel@lists.sourceforge.net>
Subject: Re: [Bluez-devel] sdp_search and l2cap concurrently
Date: Sun, 12 Sep 2004 16:55:10 +0200	[thread overview]
Message-ID: <4144634E.4070404@uni-paderborn.de> (raw)
In-Reply-To: <1094997749.5695.13.camel@pegasus>

Hi Marcel!

Marcel Holtmann schrieb:

>what do you mean by cripple L2CAP and use it concurrently. Explain in
>more detail what your program is really doing 
>
Ok, I'll explain it in Pseudo-Code:

DiscoveryThread does all the time {
  InquiryInfo[] ii = do_inquiry();
  DiscoveryInfo[] di = sdp_filter_for(my_l2cap_service, ii);
  pass_to_UpdateThread(di):
}

UpdateThread does all the time {
  check_for_new_DiscoveryInfo_and_add_them_to(internal_di, di);
  do_for_all(di_item = internal_di[i]) {
    int sock = l2cap_connect(di_item);
    di_item.name = l2cap_read_descriptive_name(sock);
    di_item.content = l2cap_read_website_content(sock);
    di_item.rssi = hci_readRSSI(l2cap_sock2hci_conn(sock));
    di_item.lq = hci_getLinkQuality(l2cap_sock2hci_conn(sock));
    l2cap_close(sock);
    di_item.sum = evaluate(di_item.rssi, di_item.lq);
  }
  sort_by_sum(di_internal);
  show_nearest_website_content(di_internal[0]);
}

By "cripple" I mean if one device is almost out of range (l2cap 
connections would fail, but inquiry discovered it anyway) 
"sdp_filter_for(my_service, ii)" takes quite long to fail by timeout. 
And in this time, the UpdateThread doesn't seem to run eigther. The 
whole thing hangs. I think that is because all Java-Threads belong to 
only one Linux-Process which communicates with BlueZ. And this process 
is blocked by SDP for up to SDP_RESPONSE_TIMEOUT (see 
bluez-sdp/libs/utils.c, sdp_read_rsp(..)). I tried to lower this timeout 
by applying smaller timeouts SO_SNDTIMEO and SO_RCVTIMEO to the 
sdp_session's l2cap socket, but this doesn't seem to work because of the 
use of select().

In my opinion there are three ways to solve this:
1. Make SDP_RESPONSE_TIMEOUT a settable parameter
2. Don't use select(); instead put the socket to non-blocking state 
("fcntl(sock, F_SETFL, flags | O_NONBLOCK)") while connecting.
3. Don't use select(); instead let the user/programmer chose to put a 
SO_SNDTIMEO and SO_RCVTIMEO on the socket.

2. and 3. may be combined.

But probably, it is something quite different or there's an easy 
solution. I just wanted to ask for it :-). I'll test further...

>and check how many low
>level HCI connections are opened at the same time.
>  
>
I think there can only be one low level (ACL) connection to each device 
at a time. Unfortunately, I have only 3 devices for testing. So this 
can't be the problem.

Regards,
Stefan

  reply	other threads:[~2004-09-12 14:55 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2004-09-11 14:14 [Bluez-devel] sdp_search and l2cap concurrently Stefan Mischke
2004-09-12 14:02 ` Marcel Holtmann
2004-09-12 14:55   ` Stefan Mischke [this message]
2004-09-14 14:15   ` Stefan Mischke

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=4144634E.4070404@uni-paderborn.de \
    --to=survivor@uni-paderborn.de \
    --cc=bluez-devel@lists.sourceforge.net \
    --cc=marcel@holtmann.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox