X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/60913641356f364a5efee5966d3a3b0b48c01001..4f260c9c68b42e6ccc82710efe6ca6e8418e721d:/src/gtk1/sockgtk.cpp

diff --git a/src/gtk1/sockgtk.cpp b/src/gtk1/sockgtk.cpp
index b8b1ecb612..c8d449cfd8 100644
--- a/src/gtk1/sockgtk.cpp
+++ b/src/gtk1/sockgtk.cpp
@@ -28,26 +28,35 @@ void wxSocket_GDK_Input(gpointer data,
                         gint WXUNUSED(source),
                         GdkInputCondition condition)
 {
-  wxSocketImpl const *socket = static_cast<wxSocketImpl *>(data);
+    wxSocketImplUnix * const handler = static_cast<wxSocketImplUnix *>(data);
 
-  if ( condition & GDK_INPUT_READ )
-    socket->Detected_Read();
-  if ( condition & GDK_INPUT_WRITE )
-    socket->Detected_Write();
+    if ( condition & GDK_INPUT_READ )
+    {
+        handler->OnReadWaiting();
+
+        // we could have lost connection while reading in which case we
+        // shouldn't call OnWriteWaiting() as the socket is now closed and it
+        // would assert
+        if ( handler->m_fd == INVALID_SOCKET )
+            return;
+    }
+
+    if ( condition & GDK_INPUT_WRITE )
+        handler->OnWriteWaiting();
 }
 }
 
 class GTKSocketManager : public wxSocketInputBasedManager
 {
 public:
-    virtual int AddInput(wxSocketImpl *socket, SocketDir d)
+    virtual int AddInput(wxSocketImplUnix *handler, int fd, SocketDir d)
     {
         return gdk_input_add
                (
-                    socket->m_fd,
+                    fd,
                     d == FD_OUTPUT ? GDK_INPUT_WRITE : GDK_INPUT_READ,
                     wxSocket_GDK_Input,
-                    socket
+                    handler
                );
     }