From 8eab4f83b9d184f608682639411c69acf21a958b Mon Sep 17 00:00:00 2001 From: "madmaxoft@gmail.com" Date: Thu, 22 Nov 2012 14:10:21 +0000 Subject: SocketThreads fixes for crashes reported in FS #272 http://www.mc-server.org/support/index.php?do=details&task_id=272&project=2 git-svn-id: http://mc-server.googlecode.com/svn/trunk@1061 0a769ca7-a7f5-676a-18bf-c427514a06d6 --- source/OSSupport/Socket.cpp | 6 +++--- source/OSSupport/Socket.h | 14 ++++++++------ source/OSSupport/SocketThreads.cpp | 6 ++++-- 3 files changed, 15 insertions(+), 11 deletions(-) diff --git a/source/OSSupport/Socket.cpp b/source/OSSupport/Socket.cpp index d44a343e0..cad120fbe 100644 --- a/source/OSSupport/Socket.cpp +++ b/source/OSSupport/Socket.cpp @@ -51,12 +51,12 @@ cSocket::xSocket cSocket::GetSocket() const -bool cSocket::IsValid(void) const +bool cSocket::IsValidSocket(cSocket::xSocket a_Socket) { #ifdef _WIN32 - return (m_Socket != INVALID_SOCKET); + return (a_Socket != INVALID_SOCKET); #else // _WIN32 - return (m_Socket >= 0); + return (a_Socket >= 0); #endif // else _WIN32 } diff --git a/source/OSSupport/Socket.h b/source/OSSupport/Socket.h index f1c3f233c..43a80dca5 100644 --- a/source/OSSupport/Socket.h +++ b/source/OSSupport/Socket.h @@ -19,7 +19,7 @@ public: cSocket(xSocket a_Socket); ~cSocket(); - bool IsValid(void) const; + bool IsValid(void) const { return IsValidSocket(m_Socket); } void CloseSocket(); operator xSocket() const; @@ -43,12 +43,14 @@ public: inline static bool IsSocketError( int a_ReturnedValue ) { -#ifdef _WIN32 - return (a_ReturnedValue == SOCKET_ERROR || a_ReturnedValue == 0); -#else - return (a_ReturnedValue <= 0); -#endif + #ifdef _WIN32 + return (a_ReturnedValue == SOCKET_ERROR || a_ReturnedValue == 0); + #else + return (a_ReturnedValue <= 0); + #endif } + + static bool IsValidSocket(xSocket a_Socket); struct SockAddr_In { diff --git a/source/OSSupport/SocketThreads.cpp b/source/OSSupport/SocketThreads.cpp index 13336a0c4..5058f3313 100644 --- a/source/OSSupport/SocketThreads.cpp +++ b/source/OSSupport/SocketThreads.cpp @@ -577,7 +577,8 @@ void cSocketThreads::cSocketThread::ReadFromSockets(fd_set * a_Read) cCSLock Lock(m_Parent->m_CS); for (int i = m_NumSlots - 1; i >= 0; --i) { - if (!FD_ISSET(m_Slots[i].m_Socket.GetSocket(), a_Read)) + cSocket::xSocket Socket = m_Slots[i].m_Socket.GetSocket(); + if (!cSocket::IsValidSocket(Socket) || !FD_ISSET(Socket, a_Read)) { continue; } @@ -621,7 +622,8 @@ void cSocketThreads::cSocketThread::WriteToSockets(fd_set * a_Write) cCSLock Lock(m_Parent->m_CS); for (int i = m_NumSlots - 1; i >= 0; --i) { - if (!m_Slots[i].m_Socket.IsValid() || !FD_ISSET(m_Slots[i].m_Socket.GetSocket(), a_Write)) + cSocket::xSocket Socket = m_Slots[i].m_Socket.GetSocket(); + if (!cSocket::IsValidSocket(Socket) || !FD_ISSET(Socket, a_Write)) { continue; } -- cgit v1.2.3