Fix segfaults caused by the Environment not being initialized yet

master
rubenwardy 2015-08-09 21:10:37 +01:00 committed by est31
parent 6b39bc6865
commit a953ff4dfc
2 changed files with 21 additions and 1 deletions

View File

@ -2192,7 +2192,7 @@ These functions return the leftover itemstack.
* `minetest.add_particlespawner(particlespawner definition)` * `minetest.add_particlespawner(particlespawner definition)`
* Add a `ParticleSpawner`, an object that spawns an amount of particles over `time` seconds * Add a `ParticleSpawner`, an object that spawns an amount of particles over `time` seconds
* Returns an `id` * Returns an `id`, and -1 if adding didn't succeed
* `Deprecated: minetest.add_particlespawner(amount, time, * `Deprecated: minetest.add_particlespawner(amount, time,
minpos, maxpos, minpos, maxpos,
minvel, maxvel, minvel, maxvel,

View File

@ -2857,6 +2857,10 @@ std::string Server::getBanDescription(const std::string &ip_or_name)
void Server::notifyPlayer(const char *name, const std::wstring &msg) void Server::notifyPlayer(const char *name, const std::wstring &msg)
{ {
// m_env will be NULL if the server is initializing
if (!m_env)
return;
Player *player = m_env->getPlayer(name); Player *player = m_env->getPlayer(name);
if (!player) if (!player)
return; return;
@ -2870,6 +2874,10 @@ void Server::notifyPlayer(const char *name, const std::wstring &msg)
bool Server::showFormspec(const char *playername, const std::string &formspec, bool Server::showFormspec(const char *playername, const std::string &formspec,
const std::string &formname) const std::string &formname)
{ {
// m_env will be NULL if the server is initializing
if (!m_env)
return false;
Player *player = m_env->getPlayer(playername); Player *player = m_env->getPlayer(playername);
if (!player) if (!player)
return false; return false;
@ -3039,6 +3047,10 @@ void Server::spawnParticle(const std::string &playername, v3f pos,
float expirationtime, float size, bool float expirationtime, float size, bool
collisiondetection, bool vertical, const std::string &texture) collisiondetection, bool vertical, const std::string &texture)
{ {
// m_env will be NULL if the server is initializing
if (!m_env)
return;
u16 peer_id = PEER_ID_INEXISTENT; u16 peer_id = PEER_ID_INEXISTENT;
if (playername != "") { if (playername != "") {
Player* player = m_env->getPlayer(playername.c_str()); Player* player = m_env->getPlayer(playername.c_str());
@ -3057,6 +3069,10 @@ u32 Server::addParticleSpawner(u16 amount, float spawntime,
bool collisiondetection, bool vertical, const std::string &texture, bool collisiondetection, bool vertical, const std::string &texture,
const std::string &playername) const std::string &playername)
{ {
// m_env will be NULL if the server is initializing
if (!m_env)
return -1;
u16 peer_id = PEER_ID_INEXISTENT; u16 peer_id = PEER_ID_INEXISTENT;
if (playername != "") { if (playername != "") {
Player* player = m_env->getPlayer(playername.c_str()); Player* player = m_env->getPlayer(playername.c_str());
@ -3088,6 +3104,10 @@ u32 Server::addParticleSpawner(u16 amount, float spawntime,
void Server::deleteParticleSpawner(const std::string &playername, u32 id) void Server::deleteParticleSpawner(const std::string &playername, u32 id)
{ {
// m_env will be NULL if the server is initializing
if (!m_env)
throw ServerError("Can't delete particle spawners during initialisation!");
u16 peer_id = PEER_ID_INEXISTENT; u16 peer_id = PEER_ID_INEXISTENT;
if (playername != "") { if (playername != "") {
Player* player = m_env->getPlayer(playername.c_str()); Player* player = m_env->getPlayer(playername.c_str());