20 #include "../Shared/mapd_shared_mutex.h"
22 namespace Catalog_Namespace {
39 mapd_shared_lock<mapd_shared_mutex>
lock;
42 template <
typename inner_type>
44 std::thread::id tid = std::this_thread::get_id();
46 if (cat->thread_holding_write_lock != tid && !inner_type::thread_holds_read_lock) {
47 lock = mapd_shared_lock<mapd_shared_mutex>(cat->sharedMutex_);
48 inner_type::thread_holds_read_lock =
true;
60 T::thread_holds_read_lock =
false;
73 std::unique_lock<std::mutex>
lock;
76 template <
typename inner_type>
78 std::thread::id tid = std::this_thread::get_id();
80 if (cat->thread_holding_sqlite_lock != tid) {
81 lock = std::unique_lock<std::mutex>(cat->sqliteMutex_);
82 cat->thread_holding_sqlite_lock = tid;
96 std::thread::id no_thread;
97 catalog->thread_holding_sqlite_lock = no_thread;
105 template <
typename T>
108 mapd_unique_lock<mapd_shared_mutex>
lock;
111 template <
typename inner_type>
113 std::thread::id tid = std::this_thread::get_id();
115 if (cat->thread_holding_write_lock != tid) {
116 lock = mapd_unique_lock<mapd_shared_mutex>(cat->sharedMutex_);
117 cat->thread_holding_write_lock = tid;
129 std::thread::id no_thread;
130 catalog->thread_holding_write_lock = no_thread;
void lock_catalog(const inner_type *cat)
mapd_unique_lock< mapd_shared_mutex > lock
sqlite_lock(const T *cat)
mapd_shared_lock< mapd_shared_mutex > lock
std::unique_lock< std::mutex > lock
read_lock< T > cat_read_lock
void lock_catalog(const inner_type *cat)
bool g_enable_watchdog false
void lock_catalog(const inner_type *cat)