Skip to content

Instantly share code, notes, and snippets.

@sapier
Created November 26, 2013 20:41
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save sapier/7665838 to your computer and use it in GitHub Desktop.
Save sapier/7665838 to your computer and use it in GitHub Desktop.
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()
}
}
-void Server::Receive()
+int Server::Receive()
{
DSTACK(__FUNCTION_NAME);
SharedBuffer<u8> data;
u16 peer_id;
u32 datasize;
+ int received;
try{
{
JMutexAutoLock conlock(m_con_mutex);
@@ -1736,6 +1747,7 @@ void Server::Receive()
handlePeerChanges();
ProcessData(*data, datasize, peer_id);
+ ++received;
}
catch(con::InvalidIncomingDataException &e)
{
@@ -1758,6 +1770,7 @@ void Server::Receive()
m_env->removePlayer(peer_id);*/
}
+ return received;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment