From a67760f7c98a9e57a61ee9c61a2175a33ebcb91b Mon Sep 17 00:00:00 2001 From: "madmaxoft@gmail.com" Date: Sat, 15 Jun 2013 15:29:20 +0000 Subject: First attempt at fixing the inter-threading deadlocks between the tick thread and the socket thread git-svn-id: http://mc-server.googlecode.com/svn/trunk@1591 0a769ca7-a7f5-676a-18bf-c427514a06d6 --- source/ClientHandle.cpp | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) (limited to 'source/ClientHandle.cpp') diff --git a/source/ClientHandle.cpp b/source/ClientHandle.cpp index d0904bfb0..9d5bbaeaf 100644 --- a/source/ClientHandle.cpp +++ b/source/ClientHandle.cpp @@ -1957,7 +1957,17 @@ void cClientHandle::PacketError(unsigned char a_PacketType) void cClientHandle::DataReceived(const char * a_Data, int a_Size) { // Data is received from the client, hand it off to the protocol: - m_Protocol->DataReceived(a_Data, a_Size); + if ((m_Player != NULL) && (m_Player->GetWorld() != NULL)) + { + // Lock the world, so that plugins reacting to protocol events have already the chunkmap locked + cWorld::cLock(*m_Player->GetWorld()); + + m_Protocol->DataReceived(a_Data, a_Size); + } + else + { + m_Protocol->DataReceived(a_Data, a_Size); + } m_TimeSinceLastPacket = 0; } -- cgit v1.2.3