summaryrefslogtreecommitdiff
path: root/innobase/row/row0undo.c
diff options
context:
space:
mode:
Diffstat (limited to 'innobase/row/row0undo.c')
-rw-r--r--innobase/row/row0undo.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/innobase/row/row0undo.c b/innobase/row/row0undo.c
index 5119254f405..b40d36533a4 100644
--- a/innobase/row/row0undo.c
+++ b/innobase/row/row0undo.c
@@ -211,7 +211,6 @@ row_undo(
if (node->state == UNDO_NODE_FETCH_NEXT) {
- /* The call below also starts &mtr */
node->undo_rec = trx_roll_pop_top_rec_of_trx(trx,
trx->roll_limit,
&roll_ptr,
@@ -254,6 +253,10 @@ row_undo(
}
}
+ /* Prevent DROP TABLE etc. while we are rolling back this row */
+
+ rw_lock_s_lock(&dict_operation_lock);
+
if (node->state == UNDO_NODE_INSERT) {
err = row_undo_ins(node, thr);
@@ -264,6 +267,8 @@ row_undo(
err = row_undo_mod(node, thr);
}
+ rw_lock_s_unlock(&dict_operation_lock);
+
/* Do some cleanup */
btr_pcur_close(&(node->pcur));