]> git.saurik.com Git - wxWidgets.git/commitdiff
discard any pending messages for the socket being destroyed to avoid the problem...
authorVadim Zeitlin <vadim@wxwidgets.org>
Sat, 22 Dec 2007 14:05:25 +0000 (14:05 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Sat, 22 Dec 2007 14:05:25 +0000 (14:05 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@50893 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

docs/changes.txt
src/msw/gsockmsw.cpp

index 0f13127a54598a2ca2e1b4b79b4e57600f7dd220..a955d366ea0e3b4919000dc32258c83808c55c06 100644 (file)
@@ -299,6 +299,10 @@ All (GUI):
 
 - Added wxWindow::GetNextSibling() and GetPrevSibling()
 
+wxMSW:
+
+- Fix rare bug with messages delivered to wrong wxSocket (Tim Kosse)
+
 
 2.8.7
 -----
index a1ada1918bceac633f96a474fbe5c618d7184244..79969ac301e8b3a776ca764bd99875bb357d3ca7 100644 (file)
@@ -311,7 +311,19 @@ void GSocketMSWManager::Destroy_Socket(GSocket *socket)
   /* Remove the socket from the list */
   EnterCriticalSection(&critical);
   if ( socket->IsOk() )
-      socketList[(socket->m_msgnumber - WM_USER)] = NULL;
+  {
+      const int msgnum = socket->m_msgnumber;
+
+      // we need to remove any pending messages for this socket to avoid having
+      // them sent to a new socket which could reuse the same message number as
+      // soon as we destroy this one
+      MSG msg;
+      while ( ::PeekMessage(&msg, hWin, msgnum, msgnum, PM_REMOVE) )
+          ;
+
+      socketList[msgnum - WM_USER] = NULL;
+  }
+
   LeaveCriticalSection(&critical);
 }