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;
		}