Skip to content
Permalink
Browse files
MDEV-17441 - InnoDB transition to C++11 atomics
Trivial srv_running transition.
  • Loading branch information
Sergey Vojtovich committed Dec 27, 2018
1 parent 67dbfe6 commit 5c657e9
Show file tree
Hide file tree
Showing 4 changed files with 11 additions and 25 deletions.
@@ -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);
}

@@ -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;

@@ -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]));
}
@@ -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) {

0 comments on commit 5c657e9

Please sign in to comment.