@@ -633,12 +633,14 @@ MapBlock *EmergeThread::finishGen(v3s16 pos, BlockMakeData *bmdata,
633
633
m_server->setAsyncFatalError (e);
634
634
}
635
635
636
+ EMERGE_DBG_OUT (" ended up with: " << analyze_block (block));
637
+
636
638
/*
637
- Clear generate notifier events
639
+ Clear mapgen state
638
640
*/
641
+ assert (!m_mapgen->generating );
639
642
m_mapgen->gennotify .clearEvents ();
640
-
641
- EMERGE_DBG_OUT (" ended up with: " << analyze_block (block));
643
+ m_mapgen->vm = nullptr ;
642
644
643
645
/*
644
646
Activate the block
@@ -654,19 +656,19 @@ void *EmergeThread::run()
654
656
BEGIN_DEBUG_EXCEPTION_HANDLER
655
657
656
658
v3s16 pos;
659
+ std::map<v3s16, MapBlock *> modified_blocks;
657
660
658
- m_map = (ServerMap *)&( m_server->m_env ->getMap () );
661
+ m_map = & m_server->m_env ->getServerMap ( );
659
662
m_emerge = m_server->m_emerge ;
660
663
m_mapgen = m_emerge->m_mapgens [id];
661
664
enable_mapgen_debug_info = m_emerge->enable_mapgen_debug_info ;
662
665
663
666
try {
664
667
while (!stopRequested ()) {
665
- std::map<v3s16, MapBlock *> modified_blocks;
666
668
BlockEmergeData bedata;
667
669
BlockMakeData bmdata;
668
670
EmergeAction action;
669
- MapBlock *block;
671
+ MapBlock *block = nullptr ;
670
672
671
673
if (!popBlockEmerge (&pos, &bedata)) {
672
674
m_queue_event.wait ();
@@ -689,6 +691,8 @@ void *EmergeThread::run()
689
691
}
690
692
691
693
block = finishGen (pos, &bmdata, &modified_blocks);
694
+ if (!block)
695
+ action = EMERGE_ERRORED;
692
696
}
693
697
694
698
runCompletionCallbacks (pos, action, bedata.callbacks );
@@ -698,6 +702,7 @@ void *EmergeThread::run()
698
702
699
703
if (!modified_blocks.empty ())
700
704
m_server->SetBlocksNotSent (modified_blocks);
705
+ modified_blocks.clear ();
701
706
}
702
707
} catch (VersionMismatchException &e) {
703
708
std::ostringstream err;
0 commit comments