bool EmergeManager::enqueueBlockEmergeEx( v3s16 blockpos, u16 peer_id, u16 flags, EmergeCompletionCallback callback, void *callback_param) { EmergeThread *thread = NULL; bool entry_already_exists = false; { MutexAutoLock queuelock(m_queue_mutex); if (!pushBlockEmergeData(blockpos, peer_id, flags, callback, callback_param, &entry_already_exists)) return false; if (entry_already_exists) return true; thread = getOptimalThread(); thread->pushBlock(blockpos); } thread->signal(); return true; }
EmergeManager::~EmergeManager() { for (u32 i = 0; i != m_threads.size(); i++) { EmergeThread *thread = m_threads[i]; if (m_threads_active) { thread->stop(); thread->signal(); thread->wait(); } delete thread; delete m_mapgens[i]; } delete biomemgr; delete oremgr; delete decomgr; delete schemmgr; }