_internal_accept_owner now checks if _owned isn't already true.

[SVN r43856]
This commit is contained in:
Peter Dimov
2008-03-25 15:46:40 +00:00
parent af7d4fabad
commit dc6a8f0696
2 changed files with 24 additions and 4 deletions
+12 -4
View File
@@ -94,10 +94,18 @@ public:
void _internal_accept_owner(shared_ptr<U> &owner) const
{
init_internal_shared_once();
get_deleter<detail::sp_deleter_wrapper>(_internal_shared_this)->set_deleter(owner);
owner.reset( _internal_shared_this, owner.get() );
_internal_shared_this.reset();
_owned = true;
if( !_owned )
{
detail::sp_deleter_wrapper * pd = get_deleter<detail::sp_deleter_wrapper>(_internal_shared_this);
BOOST_ASSERT( pd != 0 );
pd->set_deleter(owner);
owner.reset( _internal_shared_this, owner.get() );
_internal_shared_this.reset();
_owned = true;
}
}
};