Skip to content

Instantly share code, notes, and snippets.

@sapier
Last active December 29, 2015 11:49
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/7666179 to your computer and use it in GitHub Desktop.
Save sapier/7666179 to your computer and use it in GitHub Desktop.
diff --git a/src/server.cpp b/src/server.cpp
index c29ec3d..ff8c017 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 = 0;
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;
}
void Server::ProcessData(u8 *data, u32 datasize, u16 peer_id)
diff --git a/src/server.h b/src/server.h
index b52ae02..9d97ca4 100644
--- a/src/server.h
+++ b/src/server.h
@@ -357,7 +357,7 @@ class Server : public con::PeerHandler, public MapEventReceiver,
void step(float dtime);
// This is run by ServerThread and does the actual processing
void AsyncRunStep();
- void Receive();
+ int Receive();
void ProcessData(u8 *data, u32 datasize, u16 peer_id);
// Environment must be locked when called
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment