diff --git a/src/qtlibtorrent/alertdispatcher.cpp b/src/qtlibtorrent/alertdispatcher.cpp index b9d3a7a53..1bcfed64e 100644 --- a/src/qtlibtorrent/alertdispatcher.cpp +++ b/src/qtlibtorrent/alertdispatcher.cpp @@ -33,12 +33,15 @@ #include #include +const size_t DEFAULT_ALERTS_CAPACITY = 32; + QAlertDispatcher::QAlertDispatcher(libtorrent::session *session, QObject* parent) : QObject(parent) , m_session(session) , current_tag(new QAtomicPointer(this)) , event_posted(false) { + alerts.reserve(DEFAULT_ALERTS_CAPACITY); m_session->set_alert_dispatch(boost::bind(&QAlertDispatcher::dispatch, current_tag, _1)); } @@ -60,16 +63,18 @@ QAlertDispatcher::~QAlertDispatcher() { m_session->set_alert_dispatch(dispatch_function_t()); } -void QAlertDispatcher::getPendingAlertsNoWait(std::deque& out) { +void QAlertDispatcher::getPendingAlertsNoWait(std::vector& out) { Q_ASSERT(out.empty()); + out.reserve(DEFAULT_ALERTS_CAPACITY); QMutexLocker lock(&alerts_mutex); alerts.swap(out); event_posted = false; } -void QAlertDispatcher::getPendingAlerts(std::deque& out, unsigned long time) { +void QAlertDispatcher::getPendingAlerts(std::vector& out, unsigned long time) { Q_ASSERT(out.empty()); + out.reserve(DEFAULT_ALERTS_CAPACITY); QMutexLocker lock(&alerts_mutex); diff --git a/src/qtlibtorrent/alertdispatcher.h b/src/qtlibtorrent/alertdispatcher.h index a107bf4e1..b9d097f24 100644 --- a/src/qtlibtorrent/alertdispatcher.h +++ b/src/qtlibtorrent/alertdispatcher.h @@ -46,8 +46,8 @@ public: QAlertDispatcher(libtorrent::session *session, QObject* parent); ~QAlertDispatcher(); - void getPendingAlertsNoWait(std::deque&); - void getPendingAlerts(std::deque&, unsigned long time = ULONG_MAX); + void getPendingAlertsNoWait(std::vector&); + void getPendingAlerts(std::vector&, unsigned long time = ULONG_MAX); signals: void alertsReceived(); @@ -64,7 +64,7 @@ private: libtorrent::session *m_session; QMutex alerts_mutex; QWaitCondition alerts_condvar; - std::deque alerts; + std::vector alerts; QSharedPointer > current_tag; bool event_posted; }; diff --git a/src/qtlibtorrent/qbtsession.cpp b/src/qtlibtorrent/qbtsession.cpp index 818cff613..f8378fc5a 100755 --- a/src/qtlibtorrent/qbtsession.cpp +++ b/src/qtlibtorrent/qbtsession.cpp @@ -1649,7 +1649,7 @@ void QBtSession::saveFastResumeData() { } catch(libtorrent::invalid_handle&) {} } while (num_resume_data > 0) { - std::deque alerts; + std::vector alerts; m_alertDispatcher->getPendingAlerts(alerts, 30*1000); if (alerts.empty()) { std::cerr << " aborting with " << num_resume_data << " outstanding " @@ -1657,7 +1657,7 @@ void QBtSession::saveFastResumeData() { break; } - for (std::deque::const_iterator i = alerts.begin(), end = alerts.end(); i != end; ++i) + for (std::vector::const_iterator i = alerts.begin(), end = alerts.end(); i != end; ++i) { alert const* a = *i; // Saving fastresume data can fail @@ -2147,7 +2147,7 @@ void QBtSession::sendNotificationEmail(const QTorrentHandle &h) { // Read alerts sent by the Bittorrent session void QBtSession::readAlerts() { - typedef std::deque alerts_t; + typedef std::vector alerts_t; alerts_t alerts; m_alertDispatcher->getPendingAlertsNoWait(alerts);