mirror of
https://github.com/MariaDB/server.git
synced 2025-01-22 14:54:20 +01:00
branches/zip: srv_suspend_mysql_thread(): Allow the transaction to
hold an X-latch to the data dictionary, to avoid an assertion failure when a lock wait occurs in row_merge_lock_table().
This commit is contained in:
parent
99f97f8c1d
commit
e6f452c7cd
1 changed files with 16 additions and 7 deletions
|
@ -1387,7 +1387,7 @@ srv_suspend_mysql_thread(
|
||||||
os_event_t event;
|
os_event_t event;
|
||||||
double wait_time;
|
double wait_time;
|
||||||
trx_t* trx;
|
trx_t* trx;
|
||||||
ibool had_dict_lock = FALSE;
|
ulint had_dict_lock;
|
||||||
ibool was_declared_inside_innodb = FALSE;
|
ibool was_declared_inside_innodb = FALSE;
|
||||||
ib_longlong start_time = 0;
|
ib_longlong start_time = 0;
|
||||||
ib_longlong finish_time;
|
ib_longlong finish_time;
|
||||||
|
@ -1459,12 +1459,17 @@ srv_suspend_mysql_thread(
|
||||||
srv_conc_force_exit_innodb(trx);
|
srv_conc_force_exit_innodb(trx);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Release possible foreign key check latch */
|
had_dict_lock = trx->dict_operation_lock_mode;
|
||||||
if (trx->dict_operation_lock_mode == RW_S_LATCH) {
|
|
||||||
|
|
||||||
had_dict_lock = TRUE;
|
|
||||||
|
|
||||||
|
switch (had_dict_lock) {
|
||||||
|
case RW_S_LATCH:
|
||||||
|
/* Release foreign key check latch */
|
||||||
row_mysql_unfreeze_data_dictionary(trx);
|
row_mysql_unfreeze_data_dictionary(trx);
|
||||||
|
break;
|
||||||
|
case RW_X_LATCH:
|
||||||
|
/* Release fast index creation latch */
|
||||||
|
row_mysql_unlock_data_dictionary(trx);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
ut_a(trx->dict_operation_lock_mode == 0);
|
ut_a(trx->dict_operation_lock_mode == 0);
|
||||||
|
@ -1473,9 +1478,13 @@ srv_suspend_mysql_thread(
|
||||||
|
|
||||||
os_event_wait(event);
|
os_event_wait(event);
|
||||||
|
|
||||||
if (had_dict_lock) {
|
switch (had_dict_lock) {
|
||||||
|
case RW_S_LATCH:
|
||||||
row_mysql_freeze_data_dictionary(trx);
|
row_mysql_freeze_data_dictionary(trx);
|
||||||
|
break;
|
||||||
|
case RW_X_LATCH:
|
||||||
|
row_mysql_lock_data_dictionary(trx);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (was_declared_inside_innodb) {
|
if (was_declared_inside_innodb) {
|
||||||
|
|
Loading…
Add table
Reference in a new issue