aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorShadowNinja <shadowninja@minetest.net>2014-09-11 20:12:52 -0400
committerShadowNinja <shadowninja@minetest.net>2014-09-21 14:39:36 -0400
commitc061bdd37ff91a4dd6f837f618fa2f48350e1ae6 (patch)
tree0d60a9dfa4216b6bda8518b96f890b13cc8fb561 /src
parent6bc4cad0eddd7a7cf593ca1471599e2d75727379 (diff)
downloadminetest-c061bdd37ff91a4dd6f837f618fa2f48350e1ae6.tar.gz
minetest-c061bdd37ff91a4dd6f837f618fa2f48350e1ae6.tar.bz2
minetest-c061bdd37ff91a4dd6f837f618fa2f48350e1ae6.zip
Fix locking bugs and make inventory deserialization errors more specific
Diffstat (limited to 'src')
-rw-r--r--src/inventory.cpp2
-rw-r--r--src/server.cpp15
2 files changed, 11 insertions, 6 deletions
diff --git a/src/inventory.cpp b/src/inventory.cpp
index 4b1beb230..4766524dd 100644
--- a/src/inventory.cpp
+++ b/src/inventory.cpp
@@ -938,7 +938,7 @@ void Inventory::deSerialize(std::istream &is)
}
else
{
- throw SerializationError("invalid inventory specifier");
+ throw SerializationError("invalid inventory specifier: " + name);
}
}
}
diff --git a/src/server.cpp b/src/server.cpp
index fd9e1ce7b..262970c09 100644
--- a/src/server.cpp
+++ b/src/server.cpp
@@ -1169,10 +1169,15 @@ PlayerSAO* Server::StageTwoClientInit(u16 peer_id)
std::string playername = "";
PlayerSAO *playersao = NULL;
m_clients.Lock();
- RemoteClient* client = m_clients.lockedGetClientNoEx(peer_id, CS_InitDone);
- if (client != NULL) {
- playername = client->getName();
- playersao = emergePlayer(playername.c_str(), peer_id);
+ try {
+ RemoteClient* client = m_clients.lockedGetClientNoEx(peer_id, CS_InitDone);
+ if (client != NULL) {
+ playername = client->getName();
+ playersao = emergePlayer(playername.c_str(), peer_id);
+ }
+ } catch (std::exception &e) {
+ m_clients.Unlock();
+ throw;
}
m_clients.Unlock();
@@ -3869,7 +3874,7 @@ void Server::SendBlocks(float dtime)
RemoteClient *client = m_clients.lockedGetClientNoEx(*i, CS_Active);
if (client == NULL)
- return;
+ continue;
total_sending += client->SendingCount();
client->GetNextBlocks(m_env,m_emerge, dtime, queue);