Re: FTP and callback cleanups

From: Robert Collins <robertc@dont-contact.us>
Date: 07 Mar 2003 18:56:11 +1100

On Fri, 2003-03-07 at 10:07, Henrik Nordstrom wrote:
> On Thursday 06 March 2003 20.41, Robert Collins wrote:
>
> > Why? Cbdata is used for handing off to async calls. All such calls
> > should check for cbdataReferenceValid() before accessing the handed
> > off data, and it will be invalid --- no problem.
>
> It is also used in a couple of cases where there is combined
> refcounting and cbdata for the same structure.

OK, so we can follow the refcounting instructions in the programmers
manual - they coexist quite well.

> > > In C++ the cbdataFree handler should be called before delete.
> >
> > Yes - in fact, in C++ it becomes the destructor
> > (FtpStateData::~FtpStateData in this case).
>
> >From what I can tell in the code the situation today is the reverse..
> cbdataFree called by the delete operator.

cbdataFree is called by the delete operator, which is called after the
destructor.

The call path is:
ftpStateDataPointer->deleteSelf()
  delete this;
    FtpStateData::~FtpStateData()
    FtpStateData::operator delete
      cbdataFree

where an indent == a stack frame.

> > Why do we need to defer the delete? That sounds like reference
> > counting, which is very different need to callback protection.
>
> You are probably correct if cbdata and refcounting can be combined
> cleanly for the same object in such way that delete is deferred while
> there is refcounted references but not if there only is cbdata
> references.

Yes they can, see the programmers guide on refcounting, as let me know
if the examples are not sufficient.

Rob

-- 
GPG key available at: <http://users.bigpond.net.au/robertc/keys.txt>.

Received on Fri Mar 07 2003 - 00:56:18 MST

This archive was generated by hypermail pre-2.1.9 : Tue Dec 09 2003 - 16:19:31 MST