示例#1
0
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;
}
示例#2
0
文件: emerge.cpp 项目: sfan5/minetest
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;
}