diff options
author | rubenwardy <rubenwardy@gmail.com> | 2015-08-09 21:10:37 +0100 |
---|---|---|
committer | est31 <MTest31@outlook.com> | 2015-08-09 23:36:55 +0200 |
commit | a953ff4dfc9f786ee379643b6b498a5699203ff1 (patch) | |
tree | aad20b89b50ebcde3c6aac05b03db5f4db2a5d69 | |
parent | 6b39bc686548baa110672c0fd4c18e9a23dca7ad (diff) | |
download | minetest-a953ff4dfc9f786ee379643b6b498a5699203ff1.tar.gz minetest-a953ff4dfc9f786ee379643b6b498a5699203ff1.tar.bz2 minetest-a953ff4dfc9f786ee379643b6b498a5699203ff1.zip |
Fix segfaults caused by the Environment not being initialized yet
-rw-r--r-- | doc/lua_api.txt | 2 | ||||
-rw-r--r-- | src/server.cpp | 20 |
2 files changed, 21 insertions, 1 deletions
diff --git a/doc/lua_api.txt b/doc/lua_api.txt index 673eed620..9f435fd44 100644 --- a/doc/lua_api.txt +++ b/doc/lua_api.txt @@ -2192,7 +2192,7 @@ These functions return the leftover itemstack. * `minetest.add_particlespawner(particlespawner definition)` * 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, minpos, maxpos, minvel, maxvel, diff --git a/src/server.cpp b/src/server.cpp index 8a1465faa..144107675 100644 --- a/src/server.cpp +++ b/src/server.cpp @@ -2857,6 +2857,10 @@ std::string Server::getBanDescription(const std::string &ip_or_name) 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); if (!player) 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, 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); if (!player) return false; @@ -3039,6 +3047,10 @@ void Server::spawnParticle(const std::string &playername, v3f pos, float expirationtime, float size, bool 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; if (playername != "") { 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, 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; if (playername != "") { 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) { + // 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; if (playername != "") { Player* player = m_env->getPlayer(playername.c_str()); |