Suppressed TSan false positive warnings
[libcds.git] / tests / unit / queue / intrusive_queue_reader_writer.cpp
index c6fa491718180860d36e6e73c4102ea36dfeb85c..f927113f75b04a30a3da859b4c43b2a551610821 100644 (file)
@@ -85,6 +85,7 @@ namespace queue {
                 for ( typename Queue::value_type * p = m_pStart; p < m_pEnd; ) {
                     p->nNo = i;
                     p->nWriterNo = m_nThreadNo;
+                    CDS_TSAN_ANNOTATE_HAPPENS_BEFORE( &p->nWriterNo );
                     if ( m_Queue.push( *p )) {
                         ++p;
                         ++i;
@@ -170,6 +171,7 @@ namespace queue {
                     if ( p ) {
                         p->nConsumer = m_nThreadNo;
                         ++m_nPopped;
+                        CDS_TSAN_ANNOTATE_HAPPENS_AFTER( &p->nWriterNo );
                         if ( p->nWriterNo < nTotalWriters )
                             m_WriterData[ p->nWriterNo ].push_back( p->nNo );
                         else
@@ -211,7 +213,7 @@ namespace queue {
 
     protected:
         template <class Queue>
-        void analyze( CppUnitMini::ThreadPool& pool, Queue& testQueue, size_t nLeftOffset, size_t nRightOffset )
+        void analyze( CppUnitMini::ThreadPool& pool, Queue& testQueue, size_t /*nLeftOffset*/, size_t nRightOffset )
         {
             typedef Consumer<Queue> Reader;
             typedef Producer<Queue> Writer;
@@ -361,10 +363,12 @@ namespace queue {
         {
             value_array<typename Queue::value_type> arrValue( s_nQueueSize );
             {
-                Queue q;
-                test_with(q, arrValue, 0, 0);
+                {
+                    Queue q;
+                    test_with( q, arrValue, 0, 0 );
+                }
+                Queue::gc::force_dispose();
             }
-            Queue::gc::force_dispose();
         }
 
         template <typename Queue>