aboutsummaryrefslogtreecommitdiff
path: root/src/emerge.cpp
diff options
context:
space:
mode:
authorElias Fleckenstein <eliasfleckenstein@web.de>2021-09-19 20:56:13 +0200
committerElias Fleckenstein <eliasfleckenstein@web.de>2021-09-19 20:56:13 +0200
commitc8900e169a1ddceec07a449f1ae7c4322ff02036 (patch)
tree5156605fb473d25786426eb6876ba2e7d3b7507b /src/emerge.cpp
parent950d2c9b3e10cbace9236e820c8119d1abb9e01f (diff)
parente0529da5c84f224c380e6d5e063392cb01f85683 (diff)
downloaddragonfireclient-c8900e169a1ddceec07a449f1ae7c4322ff02036.tar.xz
Merge branch 'master' of https://github.com/minetest/minetest
Diffstat (limited to 'src/emerge.cpp')
-rw-r--r--src/emerge.cpp38
1 files changed, 20 insertions, 18 deletions
diff --git a/src/emerge.cpp b/src/emerge.cpp
index 32e7d9f24..9234fe6d3 100644
--- a/src/emerge.cpp
+++ b/src/emerge.cpp
@@ -165,20 +165,17 @@ EmergeManager::EmergeManager(Server *server)
if (nthreads < 1)
nthreads = 1;
- m_qlimit_total = g_settings->getU16("emergequeue_limit_total");
+ m_qlimit_total = g_settings->getU32("emergequeue_limit_total");
// FIXME: these fallback values are probably not good
- if (!g_settings->getU16NoEx("emergequeue_limit_diskonly", m_qlimit_diskonly))
+ if (!g_settings->getU32NoEx("emergequeue_limit_diskonly", m_qlimit_diskonly))
m_qlimit_diskonly = nthreads * 5 + 1;
- if (!g_settings->getU16NoEx("emergequeue_limit_generate", m_qlimit_generate))
+ if (!g_settings->getU32NoEx("emergequeue_limit_generate", m_qlimit_generate))
m_qlimit_generate = nthreads + 1;
// don't trust user input for something very important like this
- if (m_qlimit_total < 1)
- m_qlimit_total = 1;
- if (m_qlimit_diskonly < 1)
- m_qlimit_diskonly = 1;
- if (m_qlimit_generate < 1)
- m_qlimit_generate = 1;
+ m_qlimit_total = rangelim(m_qlimit_total, 1, 1000000);
+ m_qlimit_diskonly = rangelim(m_qlimit_diskonly, 1, 1000000);
+ m_qlimit_generate = rangelim(m_qlimit_generate, 1, 1000000);
for (s16 i = 0; i < nthreads; i++)
m_threads.push_back(new EmergeThread(server, i));
@@ -358,6 +355,13 @@ bool EmergeManager::enqueueBlockEmergeEx(
}
+bool EmergeManager::isBlockInQueue(v3s16 pos)
+{
+ MutexAutoLock queuelock(m_queue_mutex);
+ return m_blocks_enqueued.find(pos) != m_blocks_enqueued.end();
+}
+
+
//
// Mapgen-related helper functions
//
@@ -418,14 +422,14 @@ bool EmergeManager::pushBlockEmergeData(
void *callback_param,
bool *entry_already_exists)
{
- u16 &count_peer = m_peer_queue_count[peer_requested];
+ u32 &count_peer = m_peer_queue_count[peer_requested];
if ((flags & BLOCK_EMERGE_FORCE_QUEUE) == 0) {
if (m_blocks_enqueued.size() >= m_qlimit_total)
return false;
if (peer_requested != PEER_ID_INEXISTENT) {
- u16 qlimit_peer = (flags & BLOCK_EMERGE_ALLOW_GEN) ?
+ u32 qlimit_peer = (flags & BLOCK_EMERGE_ALLOW_GEN) ?
m_qlimit_generate : m_qlimit_diskonly;
if (count_peer >= qlimit_peer)
return false;
@@ -460,20 +464,18 @@ bool EmergeManager::pushBlockEmergeData(
bool EmergeManager::popBlockEmergeData(v3s16 pos, BlockEmergeData *bedata)
{
- std::map<v3s16, BlockEmergeData>::iterator it;
- std::unordered_map<u16, u16>::iterator it2;
-
- it = m_blocks_enqueued.find(pos);
+ auto it = m_blocks_enqueued.find(pos);
if (it == m_blocks_enqueued.end())
return false;
*bedata = it->second;
- it2 = m_peer_queue_count.find(bedata->peer_requested);
+ auto it2 = m_peer_queue_count.find(bedata->peer_requested);
if (it2 == m_peer_queue_count.end())
return false;
- u16 &count_peer = it2->second;
+ u32 &count_peer = it2->second;
+
assert(count_peer != 0);
count_peer--;
@@ -645,7 +647,7 @@ MapBlock *EmergeThread::finishGen(v3s16 pos, BlockMakeData *bmdata,
m_server->getScriptIface()->environment_OnGenerated(
minp, maxp, m_mapgen->blockseed);
} catch (LuaError &e) {
- m_server->setAsyncFatalError("Lua: finishGen" + std::string(e.what()));
+ m_server->setAsyncFatalError(e);
}
/*