Fix locking bugs and make inventory deserialization errors more specific
parent
6bc4cad0ed
commit
c061bdd37f
|
@ -938,7 +938,7 @@ void Inventory::deSerialize(std::istream &is)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
throw SerializationError("invalid inventory specifier");
|
throw SerializationError("invalid inventory specifier: " + name);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1169,10 +1169,15 @@ PlayerSAO* Server::StageTwoClientInit(u16 peer_id)
|
||||||
std::string playername = "";
|
std::string playername = "";
|
||||||
PlayerSAO *playersao = NULL;
|
PlayerSAO *playersao = NULL;
|
||||||
m_clients.Lock();
|
m_clients.Lock();
|
||||||
RemoteClient* client = m_clients.lockedGetClientNoEx(peer_id, CS_InitDone);
|
try {
|
||||||
if (client != NULL) {
|
RemoteClient* client = m_clients.lockedGetClientNoEx(peer_id, CS_InitDone);
|
||||||
playername = client->getName();
|
if (client != NULL) {
|
||||||
playersao = emergePlayer(playername.c_str(), peer_id);
|
playername = client->getName();
|
||||||
|
playersao = emergePlayer(playername.c_str(), peer_id);
|
||||||
|
}
|
||||||
|
} catch (std::exception &e) {
|
||||||
|
m_clients.Unlock();
|
||||||
|
throw;
|
||||||
}
|
}
|
||||||
m_clients.Unlock();
|
m_clients.Unlock();
|
||||||
|
|
||||||
|
@ -3869,7 +3874,7 @@ void Server::SendBlocks(float dtime)
|
||||||
RemoteClient *client = m_clients.lockedGetClientNoEx(*i, CS_Active);
|
RemoteClient *client = m_clients.lockedGetClientNoEx(*i, CS_Active);
|
||||||
|
|
||||||
if (client == NULL)
|
if (client == NULL)
|
||||||
return;
|
continue;
|
||||||
|
|
||||||
total_sending += client->SendingCount();
|
total_sending += client->SendingCount();
|
||||||
client->GetNextBlocks(m_env,m_emerge, dtime, queue);
|
client->GetNextBlocks(m_env,m_emerge, dtime, queue);
|
||||||
|
|
Loading…
Reference in New Issue