aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorrubenwardy <rubenwardy@gmail.com>2015-08-09 21:10:37 +0100
committerest31 <MTest31@outlook.com>2015-08-09 23:36:55 +0200
commita953ff4dfc9f786ee379643b6b498a5699203ff1 (patch)
treeaad20b89b50ebcde3c6aac05b03db5f4db2a5d69
parent6b39bc686548baa110672c0fd4c18e9a23dca7ad (diff)
downloadminetest-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.txt2
-rw-r--r--src/server.cpp20
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());