:: Re: [Libbitcoin] network connection…
Startseite
Nachricht löschen
Nachricht beantworten
Autor: Noel Maersk
Datum:  
To: libbitcoin
Betreff: Re: [Libbitcoin] network connection algorithm
On Wed, Dec 11, 2013 at 03:44:30PM +0000, Amir Taaki wrote:
> The network flow is something like:
>
> at the start call try_outbound_connects() which does a for loop calling
> try_connect_once() N times.
>
> 1. try_connect_once()
> hosts.fetch_address()
> 2. attempt_connect()
> FAIL: try_connect_once()
> connect()
> 3. handle_connect()
> FAIL: try_connect_once()
> setup_new_channel() / subscribe_stop()
> 4. channel_stopped()
> try_connect_once()
>
> so I'm not sure where it is creating +1 connections. there should be N
> slots that are always reconnecting and that's it. but for some reason it
> manages to get past 8 to 9 connection attempts.


Here's a (sloppy) GDB backtrace right before the ASSERT fails:

http://veox.pw/dump/obworker-2013-12-11.gdb.txt

Note that I've moved the assertion code to the end of
protocol::handle_connect(...), so that it triggers after
connections_ is pushed to, not on the next pass. I can produce a
backtrace with vanilla code, too, if needed, or with an unoptimized
build of libbitcoin/obelisk.

I've tried changing both ASSERTs in protocol.cpp like this:

-    BITCOIN_ASSERT(connections_.size() <= max_outbound_);
+    BITCOIN_ASSERT(connections_.size() <= max_outbound_+1);


It still triggers, so this not an OBOE.

I'll try with more log_debug()'s.