diff options
Diffstat (limited to 'innobase/row/row0umod.c')
-rw-r--r-- | innobase/row/row0umod.c | 19 |
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); |