X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/60913641356f364a5efee5966d3a3b0b48c01001..52147d1c4bb54b904253e388da76747e459157c0:/src/gtk/sockgtk.cpp diff --git a/src/gtk/sockgtk.cpp b/src/gtk/sockgtk.cpp index bd80f85942..c8d449cfd8 100644 --- a/src/gtk/sockgtk.cpp +++ b/src/gtk/sockgtk.cpp @@ -28,26 +28,35 @@ void wxSocket_GDK_Input(gpointer data, gint WXUNUSED(source), GdkInputCondition condition) { - wxSocketImpl * const socket = static_cast(data); + wxSocketImplUnix * const handler = static_cast(data); if ( condition & GDK_INPUT_READ ) - socket->Detected_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 ) - socket->Detected_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 ); }