Move libcds 1.6.0 from SVN
[libcds.git] / cds / urcu / details / check_deadlock.h
1 //$$CDS-header$$
2
3 #ifndef _CDS_URCU_DETAILS_CHECK_DEADLOCK_H
4 #define _CDS_URCU_DETAILS_CHECK_DEADLOCK_H
5
6 #include <cds/urcu/options.h>
7
8 //@cond
9 namespace cds { namespace urcu { namespace details {
10
11     template <class RCU, typename PolicyType>
12     struct check_deadlock_policy
13     {
14         static void check()
15         {
16             assert( !RCU::is_locked() );
17             if ( RCU::is_locked() )
18                 throw cds::urcu::rcu_deadlock();
19         }
20     };
21
22     template <class RCU>
23     struct check_deadlock_policy< RCU, cds::opt::v::rcu_no_check_deadlock>
24     {
25         static void check()
26         {}
27     };
28
29     template <class RCU>
30     struct check_deadlock_policy< RCU, cds::opt::v::rcu_assert_deadlock>
31     {
32         static void check()
33         {
34             assert( !RCU::is_locked() );
35         }
36     };
37
38 }}} // namespace cds::urcu::details
39 //@endcond
40
41 #endif // #ifndef _CDS_URCU_DETAILS_CHECK_DEADLOCK_H