Skip to content

Commit e059d6c

Browse files
committed
Revert "alias_resolve: switch from explicit map locks to std::atomic"
This reverts commit 316f1e4. RHEL9: only g++ 11 (need 12) OpenBSD: libc++ not supporting atomic<shared_ptr> at all
1 parent abc8bf4 commit e059d6c

File tree

1 file changed

+13
-6
lines changed

1 file changed

+13
-6
lines changed

mda/alias_resolve.cpp

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -52,8 +52,9 @@ static std::atomic<bool> xa_notify_stop{false};
5252
static std::condition_variable xa_thread_wake;
5353
static alias_map xa_empty_alias_map;
5454
static domain_set xa_empty_domain_set;
55-
static std::atomic<std::shared_ptr<alias_map>> xa_alias_map;
56-
static std::atomic<std::shared_ptr<domain_set>> xa_domain_set;
55+
static std::shared_ptr<alias_map> xa_alias_map;
56+
static std::shared_ptr<domain_set> xa_domain_set;
57+
static std::mutex xa_alias_lock;
5758
static std::thread xa_thread;
5859
static mysql_adaptor_init_param g_parm;
5960
static std::chrono::seconds g_cache_lifetime;
@@ -155,10 +156,11 @@ static void xa_refresh_once()
155156
auto conn = sql_make_conn();
156157
auto newmap = xa_refresh_aliases(conn);
157158
auto newdom = xa_refresh_domains(conn);
159+
std::unique_lock lk(xa_alias_lock);
158160
if (newmap != nullptr)
159-
xa_alias_map.exchange(std::move(newmap));
161+
xa_alias_map = std::move(newmap);
160162
if (newdom != nullptr)
161-
xa_domain_set.exchange(std::move(newdom));
163+
xa_domain_set = std::move(newdom);
162164
}
163165

164166
static void xa_refresh_thread()
@@ -175,8 +177,13 @@ static void xa_refresh_thread()
175177

176178
static hook_result xa_alias_subst(MESSAGE_CONTEXT *ctx) try
177179
{
178-
auto alias_map_ptr = xa_alias_map.load();
179-
auto domset_ptr = xa_domain_set.load();
180+
decltype(xa_alias_map) alias_map_ptr;
181+
decltype(xa_domain_set) domset_ptr;
182+
{
183+
std::unique_lock lk(xa_alias_lock);
184+
alias_map_ptr = xa_alias_map;
185+
domset_ptr = xa_domain_set;
186+
}
180187
auto &alias_map = alias_map_ptr != nullptr ? *alias_map_ptr : xa_empty_alias_map;
181188
auto &domset = domset_ptr != nullptr ? *domset_ptr : xa_empty_domain_set;
182189

0 commit comments

Comments
 (0)