Boost logo

Boost Users :

Subject: Re: [Boost-users] Boost::Asio crashes all the time when starting multiple connections
From: Andi Clemens (andi.clemens_at_[hidden])
Date: 2011-06-14 06:34:00

Ah I see, so I'm working on a "dead" object, sure this must fail :-)
I took a look at the connectionManager class in the HTTP server example, I
guess this is what I need.

Thanks for your fast and informative answer!


On Tue, 14 Jun 2011 12:28:02 +0200, Igor R <boost.lists_at_[hidden]> wrote:

>> It seems to work fine for one or two connections, but if more
>> connections
>> are openend, boost suddenly crashes, mostly in the bind-template.hpp:
> To be more exact, you application crashes ;).
>> template<class A1, class A2> result_type operator()(A1 const & a1, A2
>> const & a2)
>> {
>> list2<A1 const &, A2 const &> a(a1, a2);
>> CRASH ===> BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
>> }
> This is an invocation of some binder. In your case it's an invocation
> of a completion handler.
> It crashes because it's bound to a dead (i.e. deleted) object - which
> is apparently reasonable, since you don't use shared_from_this()
> idiom.
> Specifically in your code the problem is the following:
> 1) You issue 2 async.requests:
> socket_.async_read_some(..., boost::bind(&session::handle_read,
> this,...));
> sqlsocket_.async_read_some(...,
> boost::bind(&session::handle_sqlserver_read, this, ...));
> 2) One of the requests ends with an error (even just EOF), and you
> delete the connection object.
> 3) Now the completion handler of the seconds request is being invoked...
> crash.
> Conclusion: do not bind your handlers to "this", do not delete objects
> manually. Instead, use shared_from_this() idiom.
> _______________________________________________
> Boost-users mailing list
> Boost-users_at_[hidden]

Using Opera's revolutionary email client:

Boost-users list run by williamkempf at, kalb at, bjorn.karlsson at, gregod at, wekempf at