From 4ee643f472067356599946345f48fe7f743e6f38 Mon Sep 17 00:00:00 2001 From: sfan5 Date: Sat, 23 Oct 2021 17:23:30 +0200 Subject: [PATCH] Fixes around emerge handling --- src/emerge.cpp | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/src/emerge.cpp b/src/emerge.cpp index be64d744a..619b1fa8e 100644 --- a/src/emerge.cpp +++ b/src/emerge.cpp @@ -633,13 +633,15 @@ MapBlock *EmergeThread::finishGen(v3s16 pos, BlockMakeData *bmdata, m_server->setAsyncFatalError(e); } - /* - Clear generate notifier events - */ - m_mapgen->gennotify.clearEvents(); - EMERGE_DBG_OUT("ended up with: " << analyze_block(block)); + /* + Clear mapgen state + */ + assert(!m_mapgen->generating); + m_mapgen->gennotify.clearEvents(); + m_mapgen->vm = nullptr; + /* Activate the block */ @@ -654,19 +656,19 @@ void *EmergeThread::run() BEGIN_DEBUG_EXCEPTION_HANDLER v3s16 pos; + std::map modified_blocks; - m_map = (ServerMap *)&(m_server->m_env->getMap()); + m_map = &m_server->m_env->getServerMap(); m_emerge = m_server->m_emerge; m_mapgen = m_emerge->m_mapgens[id]; enable_mapgen_debug_info = m_emerge->enable_mapgen_debug_info; try { while (!stopRequested()) { - std::map modified_blocks; BlockEmergeData bedata; BlockMakeData bmdata; EmergeAction action; - MapBlock *block; + MapBlock *block = nullptr; if (!popBlockEmerge(&pos, &bedata)) { m_queue_event.wait(); @@ -689,6 +691,8 @@ void *EmergeThread::run() } block = finishGen(pos, &bmdata, &modified_blocks); + if (!block) + action = EMERGE_ERRORED; } runCompletionCallbacks(pos, action, bedata.callbacks); @@ -698,6 +702,7 @@ void *EmergeThread::run() if (!modified_blocks.empty()) m_server->SetBlocksNotSent(modified_blocks); + modified_blocks.clear(); } } catch (VersionMismatchException &e) { std::ostringstream err;