From: khizmax Date: Sat, 22 Jul 2017 10:00:18 +0000 (+0300) Subject: [TSan] Fixed data race in std container wrappers X-Git-Tag: v2.3.0~2 X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=73b4839f0c3002b0237f22d34f7bb21365b2ba35;p=libcds.git [TSan] Fixed data race in std container wrappers --- diff --git a/test/stress/pqueue/pqueue_type.h b/test/stress/pqueue/pqueue_type.h index 66188da8..28610643 100644 --- a/test/stress/pqueue/pqueue_type.h +++ b/test/stress/pqueue/pqueue_type.h @@ -130,11 +130,13 @@ namespace pqueue { bool empty() const { + scoped_lock l( m_Lock ); return m_PQueue.empty(); } size_t size() const { + scoped_lock l( m_Lock ); return m_PQueue.size(); } diff --git a/test/stress/queue/std_queue.h b/test/stress/queue/std_queue.h index d943169d..f585583c 100644 --- a/test/stress/queue/std_queue.h +++ b/test/stress/queue/std_queue.h @@ -39,10 +39,10 @@ namespace queue { template - class StdQueue: public std::queue + class StdQueue: private std::queue { typedef std::queue base_class; - Lock m_Locker; + mutable Lock m_Locker; public: bool enqueue( const T& data ) @@ -52,7 +52,12 @@ namespace queue { base_class::push( data ); return true; } - bool push( const T& data ) { return enqueue( data ) ; } + + bool push( const T& data ) + { + return enqueue( data ); + } + bool dequeue( T& data ) { std::unique_lock a(m_Locker); @@ -63,7 +68,23 @@ namespace queue { base_class::pop(); return true; } - bool pop( T& data ) { return dequeue( data ) ; } + + bool pop( T& data ) + { + return dequeue( data ); + } + + bool empty() const + { + std::unique_lock a( m_Locker ); + return base_class::empty(); + } + + size_t size() const + { + std::unique_lock a( m_Locker ); + return base_class::size(); + } cds::opt::none statistics() const {