summaryrefslogtreecommitdiff
path: root/innobase/row/row0umod.c
diff options
context:
space:
mode:
Diffstat (limited to 'innobase/row/row0umod.c')
-rw-r--r--innobase/row/row0umod.c19
1 files changed, 16 insertions, 3 deletions
diff --git a/innobase/row/row0umod.c b/innobase/row/row0umod.c
index 2aa223a6186..70cf0fe5a32 100644
--- a/innobase/row/row0umod.c
+++ b/innobase/row/row0umod.c
@@ -534,9 +534,16 @@ row_undo_mod_parse_undo_rec(
&undo_no, &table_id);
node->rec_type = type;
- /* NOTE that the table has to be explicitly released later */
node->table = dict_table_get_on_id(table_id, thr_get_trx(thr));
+ /* TODO: other fixes associated with DROP TABLE + rollback in the
+ same table by another user */
+
+ if (node->table == NULL) {
+ /* Table was dropped */
+ return;
+ }
+
clust_index = dict_table_get_first_index(node->table);
ptr = trx_undo_update_rec_get_sys_cols(ptr, &trx_id, &roll_ptr,
@@ -571,12 +578,18 @@ row_undo_mod(
row_undo_mod_parse_undo_rec(node, thr);
- found = row_undo_search_clust_to_pcur(node, thr);
+ if (node->table == NULL) {
+ found = FALSE;
+ } else {
+
+ found = row_undo_search_clust_to_pcur(node, thr);
+ }
if (!found) {
/* It is already undone, or will be undone by another query
- thread */
+ thread, or table was dropped */
+ trx_undo_rec_release(node->trx, node->undo_no);
node->state = UNDO_NODE_FETCH_NEXT;
return(DB_SUCCESS);