diff options
author | Howaner <franzi.moos@googlemail.com> | 2014-12-13 20:10:23 +0100 |
---|---|---|
committer | Howaner <franzi.moos@googlemail.com> | 2014-12-13 20:10:23 +0100 |
commit | a595a4a842123f10a4b27ae082794bad0250a307 (patch) | |
tree | b0f50e06e6f7a55a8d5a18cfb37a53234f527236 /src/OSSupport/SocketThreads.cpp | |
parent | Added cocoa pod. (diff) | |
parent | Merge pull request #1663 from mc-server/APIDumpSize (diff) | |
download | cuberite-a595a4a842123f10a4b27ae082794bad0250a307.tar cuberite-a595a4a842123f10a4b27ae082794bad0250a307.tar.gz cuberite-a595a4a842123f10a4b27ae082794bad0250a307.tar.bz2 cuberite-a595a4a842123f10a4b27ae082794bad0250a307.tar.lz cuberite-a595a4a842123f10a4b27ae082794bad0250a307.tar.xz cuberite-a595a4a842123f10a4b27ae082794bad0250a307.tar.zst cuberite-a595a4a842123f10a4b27ae082794bad0250a307.zip |
Diffstat (limited to 'src/OSSupport/SocketThreads.cpp')
-rw-r--r-- | src/OSSupport/SocketThreads.cpp | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/src/OSSupport/SocketThreads.cpp b/src/OSSupport/SocketThreads.cpp index 7a3ef4274..153d6ed1d 100644 --- a/src/OSSupport/SocketThreads.cpp +++ b/src/OSSupport/SocketThreads.cpp @@ -86,7 +86,8 @@ void cSocketThreads::RemoveClient(const cCallback * a_Client) } } // for itr - m_Threads[] - ASSERT(!"Removing an unknown client"); + // This client wasn't found. + // It's not an error, because it may have been removed by a different thread in the meantime. } @@ -491,10 +492,17 @@ void cSocketThreads::cSocketThread::ReadFromSockets(fd_set * a_Read) { case sSlot::ssNormal: { - // Notify the callback that the remote has closed the socket; keep the slot - m_Slots[i].m_Client->SocketClosed(); + // Close the socket on our side: m_Slots[i].m_State = sSlot::ssRemoteClosed; m_Slots[i].m_Socket.CloseSocket(); + + // Notify the callback that the remote has closed the socket, *after* removing the socket: + cCallback * client = m_Slots[i].m_Client; + m_Slots[i] = m_Slots[--m_NumSlots]; + if (client != nullptr) + { + client->SocketClosed(); + } break; } case sSlot::ssWritingRestOut: |