Adding experimental mutex in Fetcher
diff --git a/src/fetcher.cc b/src/fetcher.cc
index 13a52b3..98b8ceb 100644
--- a/src/fetcher.cc
+++ b/src/fetcher.cc
@@ -95,6 +95,8 @@
{
for (; m_minSendSeqNo < m_maxSeqNo && m_activePipeline < m_pipeline; m_minSendSeqNo++)
{
+ unique_lock<mutex> lock (m_seqNoMutex);
+
if (m_outOfOrderRecvSeqNo.find (m_minSendSeqNo+1) != m_outOfOrderRecvSeqNo.end ())
continue;
@@ -157,6 +159,8 @@
m_lastPositiveActivity = date_time::second_clock<boost::posix_time::ptime>::universal_time();
////////////////////////////////////////////////////////////////////////////
+ unique_lock<mutex> lock (m_seqNoMutex);
+
m_outOfOrderRecvSeqNo.insert (seqno);
m_inActivePipeline.erase (seqno);
_LOG_DEBUG ("Total segments received: " << m_outOfOrderRecvSeqNo.size ());
@@ -222,12 +226,25 @@
if (m_lastPositiveActivity <
(date_time::second_clock<boost::posix_time::ptime>::universal_time() - m_maximumNoActivityPeriod))
{
- m_inActivePipeline.erase (seqno);
- m_activePipeline --;
- if (m_activePipeline == 0)
+ bool done = false;
+ {
+ unique_lock<mutex> lock (m_seqNoMutex);
+ m_inActivePipeline.erase (seqno);
+ m_activePipeline --;
+
+ if (m_activePipeline == 0)
+ {
+ done = true;
+ }
+ }
+
+ if (done)
{
- _LOG_DEBUG ("Telling that fetch failed");
- _LOG_DEBUG ("Active pipeline size should be zero: " << m_inActivePipeline.size ());
+ {
+ unique_lock<mutex> lock (m_seqNoMutex);
+ _LOG_DEBUG ("Telling that fetch failed");
+ _LOG_DEBUG ("Active pipeline size should be zero: " << m_inActivePipeline.size ());
+ }
m_active = false;
m_onFetchFailed (ref (*this));