Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
EmergeManager: Do not queue duplicate block requests
  • Loading branch information
kwolekr committed Jan 19, 2016
1 parent b67eab3 commit 9f988e3
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 6 deletions.
13 changes: 9 additions & 4 deletions src/emerge.cpp
Expand Up @@ -292,14 +292,18 @@ bool EmergeManager::enqueueBlockEmergeEx(
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))
callback, callback_param, &entry_already_exists))
return false;

if (entry_already_exists)
return true;

thread = getOptimalThread();
thread->pushBlock(blockpos);
}
Expand Down Expand Up @@ -382,7 +386,8 @@ bool EmergeManager::pushBlockEmergeData(
u16 peer_requested,
u16 flags,
EmergeCompletionCallback callback,
void *callback_param)
void *callback_param,
bool *entry_already_exists)
{
u16 &count_peer = m_peer_queue_count[peer_requested];

Expand All @@ -402,12 +407,12 @@ bool EmergeManager::pushBlockEmergeData(
findres = m_blocks_enqueued.insert(std::make_pair(pos, BlockEmergeData()));

BlockEmergeData &bedata = findres.first->second;
bool update_existing = !findres.second;
*entry_already_exists = !findres.second;

if (callback)
bedata.callbacks.push_back(std::make_pair(callback, callback_param));

if (update_existing) {
if (*entry_already_exists) {
bedata.flags |= flags;
} else {
bedata.flags = flags;
Expand Down
11 changes: 9 additions & 2 deletions src/emerge.h
Expand Up @@ -159,8 +159,15 @@ class EmergeManager {

// Requires m_queue_mutex held
EmergeThread *getOptimalThread();
bool pushBlockEmergeData(v3s16 pos, u16 peer_requested, u16 flags,
EmergeCompletionCallback callback, void *callback_param);

bool pushBlockEmergeData(
v3s16 pos,
u16 peer_requested,
u16 flags,
EmergeCompletionCallback callback,
void *callback_param,
bool *entry_already_exists);

bool popBlockEmergeData(v3s16 pos, BlockEmergeData *bedata);

friend class EmergeThread;
Expand Down

0 comments on commit 9f988e3

Please sign in to comment.