/// Metafunction converting option list to traits
/**
\p Options are:
- - \p opt::lock_type - mutex type, default is \p cds::lock::Spin
+ - \p opt::lock_type - mutex type, default is \p cds::sync::spin
- \p opt::back_off - back-off strategy, defalt is \p cds::backoff::Default
- \p opt::disposer - the functor used for dispose removed items. Default is \p opt::intrusive::v::empty_disposer.
This option is used only in \p FCQueue::clear() function.
{
assert( pRec );
+ // this function is called under FC mutex, so switch TSan off
+ // All TSan warnings are false positive
+ CDS_TSAN_ANNOTATE_IGNORE_RW_BEGIN;
+
switch ( pRec->op() ) {
case op_enq:
assert( pRec->pVal );
assert(false);
break;
}
+ CDS_TSAN_ANNOTATE_IGNORE_RW_END;
}
/// Batch-processing flat combining
void fc_process( typename fc_kernel::iterator itBegin, typename fc_kernel::iterator itEnd )
{
+ // this function is called under FC mutex, so switch TSan off
+ // All TSan warnings are false positive
+ CDS_TSAN_ANNOTATE_IGNORE_RW_BEGIN;
+
typedef typename fc_kernel::iterator fc_iterator;
for ( fc_iterator it = itBegin, itPrev = itEnd; it != itEnd; ++it ) {
switch ( it->op() ) {
break;
}
}
+ CDS_TSAN_ANNOTATE_IGNORE_RW_END;
}
//@endcond