]>
git.ipfire.org Git - thirdparty/pdns.git/blob - pdns/test-lock_hh.cc
1 #ifndef BOOST_TEST_DYN_LINK
2 #define BOOST_TEST_DYN_LINK
5 #define BOOST_TEST_NO_MAIN
9 #include <boost/test/unit_test.hpp>
13 #include "pdnsexception.hh"
15 using namespace boost
;
17 BOOST_AUTO_TEST_SUITE(test_lock_hh
)
19 static std::vector
<ReadWriteLock
> g_locks(1000);
23 std::vector
<ReadLock
> rlocks
;
24 for(auto& pp
: g_locks
) {
25 rlocks
.emplace_back(pp
);
29 BOOST_AUTO_TEST_CASE(test_pdns_lock
)
31 std::vector
<ReadLock
> rlocks
;
32 for(auto& pp
: g_locks
)
33 rlocks
.emplace_back(pp
);
35 std::thread
thr(lthread
);
39 std::vector
<WriteLock
> wlocks
;
40 for(auto& pp
: g_locks
)
41 wlocks
.emplace_back(pp
);
43 // on macOS, this TryReadLock throws (EDEADLK) instead of simply failing
44 // so we catch the exception and consider that success for this test
47 TryReadLock
trl(g_locks
.at(0));
50 catch(const PDNSException
&e
) {
58 TryReadLock
trl2(g_locks
.at(0));
59 BOOST_CHECK(trl2
.gotIt());
65 BOOST_AUTO_TEST_SUITE_END()