summaryrefslogtreecommitdiff
path: root/sql/sql_class.cc
diff options
context:
space:
mode:
Diffstat (limited to 'sql/sql_class.cc')
-rw-r--r--sql/sql_class.cc38
1 files changed, 37 insertions, 1 deletions
diff --git a/sql/sql_class.cc b/sql/sql_class.cc
index 0b142a22f59..17d27621334 100644
--- a/sql/sql_class.cc
+++ b/sql/sql_class.cc
@@ -676,7 +676,8 @@ THD::THD(my_thread_id id, bool is_wsrep_applier)
m_stmt_da(&main_da),
tdc_hash_pins(0),
xid_hash_pins(0),
- m_tmp_tables_locked(false)
+ m_tmp_tables_locked(false),
+ async_state()
#ifdef HAVE_REPLICATION
,
current_linfo(0),
@@ -4904,6 +4905,41 @@ void reset_thd(MYSQL_THD thd)
free_root(thd->mem_root, MYF(MY_KEEP_PREALLOC));
}
+extern "C" MYSQL_THD thd_increment_pending_ops(void)
+{
+ THD *thd = current_thd;
+ if (!thd)
+ return NULL;
+ thd->async_state.inc_pending_ops();
+ return thd;
+}
+
+extern "C" int
+thd_pending_ops(MYSQL_THD thd)
+{
+ return thd->async_state.pending_ops();
+}
+
+extern "C" void thd_decrement_pending_ops(MYSQL_THD thd)
+{
+ DBUG_ASSERT(thd);
+ if (thd->async_state.dec_pending_ops() == 0)
+ {
+ switch(thd->async_state.m_state)
+ {
+ case thd_async_state::enum_async_state::SUSPEND:
+ DBUG_ASSERT(thd->scheduler->thd_resume);
+ thd->scheduler->thd_resume(thd);
+ break;
+ case thd_async_state::enum_async_state::NONE:
+ break;
+ default:
+ DBUG_ASSERT(0);
+ }
+ }
+}
+
+
unsigned long long thd_get_query_id(const MYSQL_THD thd)
{
return((unsigned long long)thd->query_id);