Skip to content

Commit 9f988e3

Browse files
committedJan 19, 2016
EmergeManager: Do not queue duplicate block requests
1 parent b67eab3 commit 9f988e3

File tree

2 files changed

+18
-6
lines changed

2 files changed

+18
-6
lines changed
 

Diff for: ‎src/emerge.cpp

+9-4
Original file line numberDiff line numberDiff line change
@@ -292,14 +292,18 @@ bool EmergeManager::enqueueBlockEmergeEx(
292292
void *callback_param)
293293
{
294294
EmergeThread *thread = NULL;
295+
bool entry_already_exists = false;
295296

296297
{
297298
MutexAutoLock queuelock(m_queue_mutex);
298299

299300
if (!pushBlockEmergeData(blockpos, peer_id, flags,
300-
callback, callback_param))
301+
callback, callback_param, &entry_already_exists))
301302
return false;
302303

304+
if (entry_already_exists)
305+
return true;
306+
303307
thread = getOptimalThread();
304308
thread->pushBlock(blockpos);
305309
}
@@ -382,7 +386,8 @@ bool EmergeManager::pushBlockEmergeData(
382386
u16 peer_requested,
383387
u16 flags,
384388
EmergeCompletionCallback callback,
385-
void *callback_param)
389+
void *callback_param,
390+
bool *entry_already_exists)
386391
{
387392
u16 &count_peer = m_peer_queue_count[peer_requested];
388393

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

404409
BlockEmergeData &bedata = findres.first->second;
405-
bool update_existing = !findres.second;
410+
*entry_already_exists = !findres.second;
406411

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

410-
if (update_existing) {
415+
if (*entry_already_exists) {
411416
bedata.flags |= flags;
412417
} else {
413418
bedata.flags = flags;

Diff for: ‎src/emerge.h

+9-2
Original file line numberDiff line numberDiff line change
@@ -159,8 +159,15 @@ class EmergeManager {
159159

160160
// Requires m_queue_mutex held
161161
EmergeThread *getOptimalThread();
162-
bool pushBlockEmergeData(v3s16 pos, u16 peer_requested, u16 flags,
163-
EmergeCompletionCallback callback, void *callback_param);
162+
163+
bool pushBlockEmergeData(
164+
v3s16 pos,
165+
u16 peer_requested,
166+
u16 flags,
167+
EmergeCompletionCallback callback,
168+
void *callback_param,
169+
bool *entry_already_exists);
170+
164171
bool popBlockEmergeData(v3s16 pos, BlockEmergeData *bedata);
165172

166173
friend class EmergeThread;

0 commit comments

Comments
 (0)