Code:
class CMyHttp: public CBase, public MHTTPDataSupplier, public MHTTPAuthenticationCallback
{
MHttpObserver iObserver;
CMyHttpHandler* iHttpHandler;
RHTTPSession iSession;
RHTTPTransaction iTransaction;
}
class CMyNet: public CActive, public MHttpObserver
{
CMyNet& iHttp;
CMyHttp* iThis;
public:
static CancelProcess();
}
class CMyHttpHandler: public CBase, public MHTTPTransactionCallback
{
}
CMyHttp::~CMyHttp()
{
iSession.Close(); //<- this line causes panic in main thread
delete iTransaction;
iTransaction = NULL;
}
// please remember that CMyNet has own, separated thread, runl is running this separated thread, CActiveScheduler has been also started in this thread
CMyNet::RunL()
{
switch (iStatus.Int())
{
case X:
iHttp = new CMyHttp(*this);
iHttp->Start();
iStatus = KRequestPending;
SetActive();
break;
}
}
//this function is called from main thread
CMyNet::CancelProcess()
{
iThis->Cancel();
}
CMyNet::DoCancel()
{
delete iHttp;
iHttp = NULL;
}
Problem occurs only in one case - CMyNet::CancelProcess() is called between iTransaction.SumbitL() and response from server