This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
diff --git a/minetest.conf.example b/minetest.conf.example | |
index ee22e9f..365a25a 100644 | |
--- a/minetest.conf.example | |
+++ b/minetest.conf.example | |
@@ -248,6 +248,8 @@ | |
#disable_anticheat = false | |
# If true, actions are recorded for rollback | |
#enable_rollback_recording = false | |
+#maximum time for single server step | |
+#dedicated_server_step = 0.1 | |
# Profiler data print interval. #0 = disable. | |
#profiler_print_interval = 0 | |
diff --git a/src/defaultsettings.cpp b/src/defaultsettings.cpp | |
index 9df9b3a..31ee23b 100644 | |
--- a/src/defaultsettings.cpp | |
+++ b/src/defaultsettings.cpp | |
@@ -204,6 +204,7 @@ void set_default_settings(Settings *settings) | |
settings->setDefault("emergequeue_limit_diskonly", ""); | |
settings->setDefault("emergequeue_limit_generate", ""); | |
settings->setDefault("num_emerge_threads", "1"); | |
+ settings->setDefault("dedicated_server_step","0.1"); | |
// physics stuff | |
settings->setDefault("movement_acceleration_default", "3"); | |
diff --git a/src/server.cpp b/src/server.cpp | |
index c29ec3d..1798b3c 100644 | |
--- a/src/server.cpp | |
+++ b/src/server.cpp | |
@@ -98,6 +98,8 @@ void * ServerThread::Thread() | |
BEGIN_DEBUG_EXCEPTION_HANDLER | |
+ f32 dedicated_server_step = g_settings->getFloat("dedicated_server_step"); | |
+ | |
while(getRun()) | |
{ | |
try{ | |
@@ -109,7 +111,15 @@ void * ServerThread::Thread() | |
} | |
//infostream<<"Running m_server->Receive()"<<std::endl; | |
- m_server->Receive(); | |
+ // receive up to 1000 packets or till dedicated server time limit is hit | |
+ // usually only a single packet is queued so this will only loop on | |
+ // high cpu load | |
+ u32 end_ms = porting::getTimeMs() + 1000 * dedicated_server_step; | |
+ for (size_t i = 0; i < 1000; ++i) | |
+ { | |
+ if (!m_server->Receive() || porting::getTimeMs() > end_ms) | |
+ break; | |
+ } | |
} | |
catch(con::NoIncomingDataException &e) | |
{ | |
@@ -1719,12 +1729,13 @@ void Server::AsyncRunStep() | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment