Skip to content
Snippets Groups Projects
Commit 206ec36c authored by kwolekr's avatar kwolekr
Browse files

Fix EmergeThread hang on exit

parent 3b7a445c
No related branches found
No related tags found
No related merge requests found
......@@ -56,6 +56,7 @@ EmergeManager::EmergeManager(IGameDef *gamedef, BiomeDefManager *bdef) {
EmergeManager::~EmergeManager() {
emergethread->setRun(false);
emergethread->qevent.signal();
emergethread->stop();
delete emergethread;
......@@ -360,8 +361,11 @@ void *EmergeThread::Thread() {
while (getRun())
try {
while (!emerge->popBlockEmerge(&p, &flags))
while (!emerge->popBlockEmerge(&p, &flags)) {
qevent.wait();
if (!getRun())
goto exit_emerge_loop;
}
last_tried_pos = p;
if (blockpos_over_limit(p))
......@@ -393,7 +397,7 @@ void *EmergeThread::Thread() {
//envlock: usually 0ms, but can take either 30 or 400ms to acquire
JMutexAutoLock envlock(m_server->m_env_mutex);
ScopeProfiler sp(g_profiler, "EmergeThread: after "
"mapgen::make_block (envlock)", SPT_AVG);
"Mapgen::makeChunk (envlock)", SPT_AVG);
map->finishBlockMake(&data, modified_blocks);
......@@ -465,6 +469,7 @@ void *EmergeThread::Thread() {
}
END_DEBUG_EXCEPTION_HANDLER(errorstream)
exit_emerge_loop:
log_deregister_thread();
return NULL;
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment