Boost logo

Boost :

From: Dean Michael Berris (mikhailberis_at_[hidden])
Date: 2008-03-14 04:16:55


Hi Anthony!

On Fri, Mar 14, 2008 at 4:00 PM, Anthony Williams
<anthony_w.geo_at_[hidden]> wrote:
> Hi Dean,
>
> Dean Michael Berris <mikhailberis <at> gmail.com> writes:
>
> >
> http://memcachepp.svn.sourceforge.net/viewvc/memcachepp/trunk/test/memcache_protocol_test.cpp?view=markup
> > is the test which throws on destroying memcache handles, and related
> > to locking mutexes.
>
> Thanks. I'll try it on my linux box later.
>

This will not come as a surprise, but I think I've found the cause --
and the solution.

> > This also uses ASIO underneath, and I'm not sure if it may be ASIO
> > related. For one thing, it throws a boost::system::system_error which
> > encapsulates the 'mutex: Invalid argument' in the 'what()' method. I
> > checked Boost.Thread and it throws system errors like ASIO does -- so
> > right now I'm limiting it to just Boost.Thread because it seems to be
> > the more logical place from which mutex errors would come from.
>
> Boost.Thread doesn't throw system_error anywhere. Most throws are
> thread_resource_error, and some are lock_error, but none are system_error.
>

It does seem like ASIO is involved somehow. The problem lies in the
destruction of ASIO sockets expecially once the io_service it's tied
to is already deleted. This may better be called as a 'dangling
reference' problem, which is caused by my relying on the destructor of
the containers in the memcache handle to do the right thing in the
right order.

All I had to do is add appropriate clearing of the containers in the
handle at the destructor to make sure that the elements of the
containers are deleted before the io_service is stopped (and later
deleted). This evidently fixed the problem in the platform I'm using,
and a subtle bug that doesn't appear in other platforms (yet).

Charge this as PEBKAC instead of an actual bug. ;-)

Have a good day everyone, and sorry for the noise.

-- 
Dean Michael C. Berris
Software Engineer, Friendster, Inc.
[http://blog.cplusplus-soup.com]
[mikhailberis_at_[hidden]]
[+63 928 7291459]
[+1 408 4049523]

Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk