MDEV-17441 - InnoDB transition to C++11 atomics

Trivial srv_running transition.
This commit is contained in:
Sergey Vojtovich 2018-10-13 21:31:12 +04:00
parent 67dbfe6e9c
commit 5c657e9fa5
4 changed files with 11 additions and 25 deletions
storage/innobase

View file

@ -270,7 +270,7 @@ is_partition(
/** Signal to shut down InnoDB (NULL if shutdown was signaled, or if
running in innodb_read_only mode, srv_read_only_mode) */
st_my_thread_var *srv_running;
std::atomic <st_my_thread_var *> srv_running;
/** Service thread that waits for the server shutdown and stops purge threads.
Purge workers have THDs that are needed to calculate virtual columns.
This THDs must be destroyed rather early in the server shutdown sequence.
@ -297,16 +297,12 @@ thd_destructor_proxy(void *)
myvar->current_cond = &thd_destructor_cond;
mysql_mutex_lock(&thd_destructor_mutex);
my_atomic_storeptr_explicit(reinterpret_cast<void**>(&srv_running),
myvar,
MY_MEMORY_ORDER_RELAXED);
srv_running.store(myvar, std::memory_order_relaxed);
/* wait until the server wakes the THD to abort and die */
while (!srv_running->abort)
while (!myvar->abort)
mysql_cond_wait(&thd_destructor_cond, &thd_destructor_mutex);
mysql_mutex_unlock(&thd_destructor_mutex);
my_atomic_storeptr_explicit(reinterpret_cast<void**>(&srv_running),
NULL,
MY_MEMORY_ORDER_RELAXED);
srv_running.store(NULL, std::memory_order_relaxed);
while (srv_fast_shutdown == 0 &&
(trx_sys.any_active_transactions() ||
@ -4262,9 +4258,7 @@ static int innodb_init(void* p)
mysql_thread_create(thd_destructor_thread_key,
&thd_destructor_thread,
NULL, thd_destructor_proxy, NULL);
while (!my_atomic_loadptr_explicit(reinterpret_cast<void**>
(&srv_running),
MY_MEMORY_ORDER_RELAXED))
while (!srv_running.load(std::memory_order_relaxed))
os_thread_sleep(20);
}
@ -4344,10 +4338,8 @@ innobase_end(handlerton*, ha_panic_function)
}
}
st_my_thread_var* running = reinterpret_cast<st_my_thread_var*>(
my_atomic_loadptr_explicit(
reinterpret_cast<void**>(&srv_running),
MY_MEMORY_ORDER_RELAXED));
st_my_thread_var* running =
srv_running.load(std::memory_order_relaxed);
if (!abort_loop && running) {
// may be UNINSTALL PLUGIN statement
running->abort = 1;
@ -17176,9 +17168,7 @@ fast_shutdown_validate(
uint new_val = *reinterpret_cast<uint*>(save);
if (srv_fast_shutdown && !new_val
&& !my_atomic_loadptr_explicit(reinterpret_cast<void**>
(&srv_running),
MY_MEMORY_ORDER_RELAXED)) {
&& !srv_running.load(std::memory_order_relaxed)) {
return(1);
}

View file

@ -447,7 +447,7 @@ extern uint srv_fast_shutdown; /*!< If this is 1, do not do a
/** Signal to shut down InnoDB (NULL if shutdown was signaled, or if
running in innodb_read_only mode, srv_read_only_mode) */
extern st_my_thread_var *srv_running;
extern std::atomic<st_my_thread_var *> srv_running;
extern ibool srv_innodb_status;

View file

@ -2812,9 +2812,7 @@ srv_purge_wakeup()
srv_release_threads(SRV_WORKER, n_workers);
}
} while (!my_atomic_loadptr_explicit(reinterpret_cast<void**>
(&srv_running),
MY_MEMORY_ORDER_RELAXED)
} while (!srv_running.load(std::memory_order_relaxed)
&& (srv_sys.n_threads_active[SRV_WORKER]
|| srv_sys.n_threads_active[SRV_PURGE]));
}

View file

@ -2416,9 +2416,7 @@ void srv_shutdown_bg_undo_sources()
/** Shut down InnoDB. */
void innodb_shutdown()
{
ut_ad(!my_atomic_loadptr_explicit(reinterpret_cast<void**>
(&srv_running),
MY_MEMORY_ORDER_RELAXED));
ut_ad(!srv_running.load(std::memory_order_relaxed));
ut_ad(!srv_undo_sources);
switch (srv_operation) {