diff --git a/Socket.cpp b/Socket.cpp index 1274d6ae..2a1d29f2 100644 --- a/Socket.cpp +++ b/Socket.cpp @@ -44,11 +44,15 @@ CSocket::CSocket(CModule* pModule, const CString& sHostname, unsigned short uPor } CSocket::~CSocket() { - CUser *pUser = m_pModule->GetUser(); + CUser *pUser = NULL; - m_pModule->UnlinkSocket(this); + // CWebSock could cause us to have a NULL pointer here + if (m_pModule) { + pUser = m_pModule->GetUser(); + m_pModule->UnlinkSocket(this); + } - if (!m_pModule->IsGlobal() && pUser) { + if (pUser && !m_pModule->IsGlobal()) { pUser->AddBytesWritten(GetBytesWritten()); pUser->AddBytesRead(GetBytesRead()); } else { diff --git a/WebModules.cpp b/WebModules.cpp index aec6f25e..c3578ca3 100644 --- a/WebModules.cpp +++ b/WebModules.cpp @@ -118,10 +118,10 @@ CWebSock::~CWebSock() { } // If the module IsFake() then it was created as a dummy and needs to be deleted - CModule* pMod = GetModule(); - if (pMod && pMod->IsFake()) { - pMod->UnlinkSocket(this); - delete pMod; + if (m_pModule && m_pModule->IsFake()) { + m_pModule->UnlinkSocket(this); + delete m_pModule; + m_pModule = NULL; } }