You can reproduce it by trying to connect with a wrong password - but its quite hard to reproduce.
The crash occurs in ClientConnection.cpp svn revision 495 on line 5574 looks like that: if (_this->m_nStatusTimer != 0)
Sometimes the local variable _this seems to be already destroyed, probably by another thread.
Because I didn't want to change a lot of code I inserted a try/ catch block around that region. As long as the exception is just caught and not rethrown the error doesn't occur anymore. I just did that for me because thats not critical, it only happens when an user provided a wrong password. Maybe you can implement a better solution.
Here is what I did, maybe you want to keep that until a better solution is implemented:
Code: Select all
case WM_DESTROY:
{
try
{
// sf@2002 - Destroy the status timer... TODO: improve this
if (_this->m_nStatusTimer != 0)
{
KillTimer(hwnd, _this->m_nStatusTimer);
_this->m_nStatusTimer = 0;
}
_this->OldEncodingStatusWindow = -1;
_this->m_fStatusOpen = false;
}
catch( ... )
{
}
return TRUE;
}