don't call OnWriteWaiting() if we lost connection in OnReadWaiting() called just before it (closes #10963)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@61336 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -204,7 +204,7 @@ public:
|
|||||||
private:
|
private:
|
||||||
// these functions map directly to XtAdd/RemoveInput() or
|
// these functions map directly to XtAdd/RemoveInput() or
|
||||||
// gdk_input_add/remove()
|
// gdk_input_add/remove()
|
||||||
virtual int AddInput(wxSocketImpl *handler, int fd, SocketDir d) = 0;
|
virtual int AddInput(wxSocketImplUnix *handler, int fd, SocketDir d) = 0;
|
||||||
virtual void RemoveInput(int fd) = 0;
|
virtual void RemoveInput(int fd) = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@@ -28,10 +28,19 @@ void wxSocket_GDK_Input(gpointer data,
|
|||||||
gint WXUNUSED(source),
|
gint WXUNUSED(source),
|
||||||
GdkInputCondition condition)
|
GdkInputCondition condition)
|
||||||
{
|
{
|
||||||
wxSocketImpl * const handler = static_cast<wxSocketImpl *>(data);
|
wxSocketImplUnix * const handler = static_cast<wxSocketImplUnix *>(data);
|
||||||
|
|
||||||
if ( condition & GDK_INPUT_READ )
|
if ( condition & GDK_INPUT_READ )
|
||||||
|
{
|
||||||
handler->OnReadWaiting();
|
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 )
|
if ( condition & GDK_INPUT_WRITE )
|
||||||
handler->OnWriteWaiting();
|
handler->OnWriteWaiting();
|
||||||
}
|
}
|
||||||
@@ -40,7 +49,7 @@ void wxSocket_GDK_Input(gpointer data,
|
|||||||
class GTKSocketManager : public wxSocketInputBasedManager
|
class GTKSocketManager : public wxSocketInputBasedManager
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
virtual int AddInput(wxSocketImpl *handler, int fd, SocketDir d)
|
virtual int AddInput(wxSocketImplUnix *handler, int fd, SocketDir d)
|
||||||
{
|
{
|
||||||
return gdk_input_add
|
return gdk_input_add
|
||||||
(
|
(
|
||||||
|
@@ -28,10 +28,19 @@ void wxSocket_GDK_Input(gpointer data,
|
|||||||
gint WXUNUSED(source),
|
gint WXUNUSED(source),
|
||||||
GdkInputCondition condition)
|
GdkInputCondition condition)
|
||||||
{
|
{
|
||||||
wxSocketImpl * const handler = static_cast<wxSocketImpl *>(data);
|
wxSocketImplUnix * const handler = static_cast<wxSocketImplUnix *>(data);
|
||||||
|
|
||||||
if ( condition & GDK_INPUT_READ )
|
if ( condition & GDK_INPUT_READ )
|
||||||
|
{
|
||||||
handler->OnReadWaiting();
|
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 )
|
if ( condition & GDK_INPUT_WRITE )
|
||||||
handler->OnWriteWaiting();
|
handler->OnWriteWaiting();
|
||||||
}
|
}
|
||||||
@@ -40,7 +49,7 @@ void wxSocket_GDK_Input(gpointer data,
|
|||||||
class GTKSocketManager : public wxSocketInputBasedManager
|
class GTKSocketManager : public wxSocketInputBasedManager
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
virtual int AddInput(wxSocketImpl *handler, int fd, SocketDir d)
|
virtual int AddInput(wxSocketImplUnix *handler, int fd, SocketDir d)
|
||||||
{
|
{
|
||||||
return gdk_input_add
|
return gdk_input_add
|
||||||
(
|
(
|
||||||
|
@@ -23,7 +23,7 @@ extern "C" {
|
|||||||
static void wxSocket_Motif_Input(XtPointer data, int *WXUNUSED(fid),
|
static void wxSocket_Motif_Input(XtPointer data, int *WXUNUSED(fid),
|
||||||
XtInputId *WXUNUSED(id))
|
XtInputId *WXUNUSED(id))
|
||||||
{
|
{
|
||||||
wxSocketImpl * const handler = static_cast<wxSocketImpl *>(data);
|
wxSocketImplUnix * const handler = static_cast<wxSocketImplUnix *>(data);
|
||||||
|
|
||||||
handler->OnReadWaiting();
|
handler->OnReadWaiting();
|
||||||
}
|
}
|
||||||
@@ -31,7 +31,7 @@ static void wxSocket_Motif_Input(XtPointer data, int *WXUNUSED(fid),
|
|||||||
static void wxSocket_Motif_Output(XtPointer data, int *WXUNUSED(fid),
|
static void wxSocket_Motif_Output(XtPointer data, int *WXUNUSED(fid),
|
||||||
XtInputId *WXUNUSED(id))
|
XtInputId *WXUNUSED(id))
|
||||||
{
|
{
|
||||||
wxSocketImpl * const handler = static_cast<wxSocketImpl *>(data);
|
wxSocketImplUnix * const handler = static_cast<wxSocketImplUnix *>(data);
|
||||||
|
|
||||||
handler->OnWriteWaiting();
|
handler->OnWriteWaiting();
|
||||||
}
|
}
|
||||||
@@ -41,7 +41,7 @@ static void wxSocket_Motif_Output(XtPointer data, int *WXUNUSED(fid),
|
|||||||
class MotifSocketManager : public wxSocketInputBasedManager
|
class MotifSocketManager : public wxSocketInputBasedManager
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
virtual int AddInput(wxSocketImpl *handler, int fd, SocketDir d)
|
virtual int AddInput(wxSocketImplUnix *handler, int fd, SocketDir d)
|
||||||
{
|
{
|
||||||
return XtAppAddInput
|
return XtAppAddInput
|
||||||
(
|
(
|
||||||
|
@@ -23,14 +23,14 @@
|
|||||||
|
|
||||||
static void wxSocket_PM_Input(void *data)
|
static void wxSocket_PM_Input(void *data)
|
||||||
{
|
{
|
||||||
wxSocketImpl *handler = static_cast<wxSocketImpl *>(data);
|
wxSocketImplUnix *handler = static_cast<wxSocketImplUnix *>(data);
|
||||||
|
|
||||||
handler->OnReadWaiting();
|
handler->OnReadWaiting();
|
||||||
}
|
}
|
||||||
|
|
||||||
static void wxSocket_PM_Output(void *data)
|
static void wxSocket_PM_Output(void *data)
|
||||||
{
|
{
|
||||||
wxSocketImpl *handler = static_cast<wxSocketImpl *>(data);
|
wxSocketImplUnix *handler = static_cast<wxSocketImplUnix *>(data);
|
||||||
|
|
||||||
handler->OnWriteWaiting();
|
handler->OnWriteWaiting();
|
||||||
}
|
}
|
||||||
@@ -38,7 +38,7 @@ static void wxSocket_PM_Output(void *data)
|
|||||||
class PMSocketManager : public wxSocketInputBasedManager
|
class PMSocketManager : public wxSocketInputBasedManager
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
virtual int AddInput(wxSocketImpl *handler, int fd, SocketDir d)
|
virtual int AddInput(wxSocketImplUnix *handler, int fd, SocketDir d)
|
||||||
{
|
{
|
||||||
if (d == FD_OUTPUT)
|
if (d == FD_OUTPUT)
|
||||||
return wxTheApp->AddSocketHandler(fd, wxSockWriteMask,
|
return wxTheApp->AddSocketHandler(fd, wxSockWriteMask,
|
||||||
|
Reference in New Issue
Block a user