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