commit f40853665f512d3fc952369d97d02c3705bf24d2
parent 150f8d8044a1c6bc8476fd36d355aa58c5e603a0
Author: cfillion <cfillion@users.noreply.github.com>
Date: Wed, 20 Jan 2016 15:28:22 -0800
prevent syncing the same remote multiple times in a single transaction
Diffstat:
2 files changed, 8 insertions(+), 3 deletions(-)
diff --git a/src/transaction.cpp b/src/transaction.cpp
@@ -59,10 +59,14 @@ Transaction::~Transaction()
void Transaction::synchronize(const Remote &remote)
{
+ if(m_remotes.count(remote))
+ return;
+
Download *dl = new Download(remote.name(), remote.url());
dl->onFinish(bind(&Transaction::upgradeAll, this, dl));
m_downloadQueue.push(dl);
+ m_remotes.insert(remote);
}
void Transaction::upgradeAll(Download *dl)
diff --git a/src/transaction.hpp b/src/transaction.hpp
@@ -85,17 +85,18 @@ private:
Path m_dbPath;
bool m_isCancelled;
+ std::set<Remote> m_remotes;
std::vector<RemoteIndex *> m_remoteIndexes;
DownloadQueue m_downloadQueue;
std::queue<PackageEntry> m_installQueue;
+ std::vector<Task *> m_tasks;
+ std::queue<Task *> m_taskQueue;
+
PackageEntryList m_new;
PackageEntryList m_updates;
std::set<Path> m_removals;
ErrorList m_errors;
- std::vector<Task *> m_tasks;
- std::queue<Task *> m_taskQueue;
-
Signal m_onFinish;
Signal m_onDestroy;
};