:: Re: [Libbitcoin] network connection…
Página Principal
Delete this message
Reply to this message
Autor: Amir Taaki
Data:  
Para: libbitcoin
Assunto: Re: [Libbitcoin] network connection algorithm
great, at some point in the code path, something is happening that
try_connect_once() gets spawned twice.

that async code path should only be spawned and running exactly N times.

On 11/12/13 22:59, Noel Maersk wrote:
> 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.
>
>
>
> _______________________________________________
> Libbitcoin mailing list
> Libbitcoin@???
> https://mailinglists.dyne.org/cgi-bin/mailman/listinfo/libbitcoin
>