mirror of
https://github.com/MariaDB/server.git
synced 2025-08-01 03:47:19 +03:00
Move common code to a separate function
This commit is contained in:
@ -152,6 +152,31 @@ static void tc_remove_table(TABLE *table)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static void tc_remove_all_unused_tables(TDC_element *element,
|
||||||
|
TABLE_list *purge_tables,
|
||||||
|
bool mark_flushed)
|
||||||
|
{
|
||||||
|
TABLE *table;
|
||||||
|
|
||||||
|
element->wait_for_mdl_deadlock_detector();
|
||||||
|
/*
|
||||||
|
Mark share flushed in order to ensure that it gets
|
||||||
|
automatically deleted once it is no longer referenced.
|
||||||
|
|
||||||
|
Note that code in TABLE_SHARE::wait_for_old_version() assumes that
|
||||||
|
marking share flushed is followed by purge of unused table
|
||||||
|
shares.
|
||||||
|
*/
|
||||||
|
if (mark_flushed)
|
||||||
|
element->flushed= true;
|
||||||
|
while ((table= element->free_tables.pop_front()))
|
||||||
|
{
|
||||||
|
tc_remove_table(table);
|
||||||
|
purge_tables->push_front(table);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Free all unused TABLE objects.
|
Free all unused TABLE objects.
|
||||||
|
|
||||||
@ -176,17 +201,8 @@ struct tc_purge_arg
|
|||||||
|
|
||||||
static my_bool tc_purge_callback(TDC_element *element, tc_purge_arg *arg)
|
static my_bool tc_purge_callback(TDC_element *element, tc_purge_arg *arg)
|
||||||
{
|
{
|
||||||
TABLE *table;
|
|
||||||
|
|
||||||
mysql_mutex_lock(&element->LOCK_table_share);
|
mysql_mutex_lock(&element->LOCK_table_share);
|
||||||
element->wait_for_mdl_deadlock_detector();
|
tc_remove_all_unused_tables(element, &arg->purge_tables, arg->mark_flushed);
|
||||||
if (arg->mark_flushed)
|
|
||||||
element->flushed= true;
|
|
||||||
while ((table= element->free_tables.pop_front()))
|
|
||||||
{
|
|
||||||
tc_remove_table(table);
|
|
||||||
arg->purge_tables.push_front(table);
|
|
||||||
}
|
|
||||||
mysql_mutex_unlock(&element->LOCK_table_share);
|
mysql_mutex_unlock(&element->LOCK_table_share);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
@ -880,23 +896,9 @@ bool tdc_remove_table(THD *thd, enum_tdc_remove_table_type remove_type,
|
|||||||
|
|
||||||
element->ref_count++;
|
element->ref_count++;
|
||||||
|
|
||||||
element->wait_for_mdl_deadlock_detector();
|
tc_remove_all_unused_tables(element, &purge_tables,
|
||||||
/*
|
remove_type != TDC_RT_REMOVE_NOT_OWN_KEEP_SHARE);
|
||||||
Mark share flushed in order to ensure that it gets
|
|
||||||
automatically deleted once it is no longer referenced.
|
|
||||||
|
|
||||||
Note that code in TABLE_SHARE::wait_for_old_version() assumes that
|
|
||||||
marking share flushed is followed by purge of unused table
|
|
||||||
shares.
|
|
||||||
*/
|
|
||||||
if (remove_type != TDC_RT_REMOVE_NOT_OWN_KEEP_SHARE)
|
|
||||||
element->flushed= true;
|
|
||||||
|
|
||||||
while ((table= element->free_tables.pop_front()))
|
|
||||||
{
|
|
||||||
tc_remove_table(table);
|
|
||||||
purge_tables.push_front(table);
|
|
||||||
}
|
|
||||||
if (kill_delayed_threads)
|
if (kill_delayed_threads)
|
||||||
kill_delayed_threads_for_table(element);
|
kill_delayed_threads_for_table(element);
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user