CArchive BUG
Posted
by Jeff Knight
on February 13th, 1999
bool sendObject(CObject* pObj)
{
other code ...
CArchive ar(&socketFile, CArchive::store);
ar << pObj;
ar.Flush();
ar.Close();
... other code
}
void someOtherFunction()
{
MyObject obj;
bool bSuccess = false;
try
{
bSuccess = sendObject(&obj);
}
catch (CException* pEx)
{
pEx->Delete();
}
}
The Scenario:
Archiving an object to a CSocketFile that may have had the terminating socket closed.
The Result:
If the terminating socket has been closed, calling Flush on the CArchive will raise an exception (so will calling Close). In the previous case, before the exception is handled, CArchive goes out of scope and its destructor calls Close. Close throws another exception and all hell breaks loose. Never throw exceptions from destructors.
You will need nested try / catch blocks ...
bool sendObject(CObject* pObj)
{
other code ...
CArchive ar(&socketFile, CArchive::store);
try
{
ar << pObj;
ar.Flush();
ar.Close();
}
catch (CException* pEx)
{
pEx->Delete();
return false;
}
... other code
}
someOtherFunction()
{
MyObject obj;
bool bSuccess = false;
try
{
bSuccess = sendObject(&obj);
}
catch (CException* pEx)
{
pEx->Delete();
}
}

Comments
CArchive and CsocketFile
Posted by Legacy on 02/17/2004 12:00amOriginally posted by: guzhenghong
ReplyCArchive
Posted by Legacy on 09/04/2002 12:00amOriginally posted by: Sarah
Do you know if there is an alternative to a CArchive in C#??
ReplyCSocket in Debug vs. Release
Posted by Legacy on 01/08/2002 12:00amOriginally posted by: Kevin Goodman
I've got a different problem. Debug ver. works fine. Release version accepts in WINOCC.CPP COleControlContainer::AttachControlSite call to pSite = (COleControlSite*)m_siteMap.GetValueAt(pWnd->m_hWnd);
The odd thing is I place a break point here in the Debug ver. and it nevers gets hit. The other really strange thing is I don't have any AFX or OLE controls in the app.
Any thoughts?
ReplyUse correct techniques !
Posted by Legacy on 06/14/2001 12:00amOriginally posted by: Maxo
Why did you catch exceptions from archive sooner than you've created CArchive object ?
Reply
avoiding the problem by using abort ??
Posted by Legacy on 01/08/2001 12:00amOriginally posted by: matthias metzner
the command abort doesn't throw an exception at closing the archive (but also doesn't flush the archive) - perhaps this is the MS response to the error?
have nice days ...
ReplyThanks for the clue...
Posted by Legacy on 02/15/1999 12:00amOriginally posted by: Mike Smith
I've been having this somewhat intermittent problem with MFC sockets, got a feeling that what you're saying could be the cause.
ReplyIf you are sure it's a bug
Posted by Legacy on 02/13/1999 12:00amOriginally posted by: Hans Wedemeyer
If you are sure it's a bug why not submit it to MS, they used to have a
reward program for the first person to submit a true bug. The reward used to be
a free compiler upgrade at next release..
regards
ReplyHans Wedemeyer