diff options
Diffstat (limited to 'storage/innobase/dict/dict0dict.cc')
-rw-r--r-- | storage/innobase/dict/dict0dict.cc | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/storage/innobase/dict/dict0dict.cc b/storage/innobase/dict/dict0dict.cc index 8fdc64a6152..b13f68a08a7 100644 --- a/storage/innobase/dict/dict0dict.cc +++ b/storage/innobase/dict/dict0dict.cc @@ -1708,6 +1708,10 @@ dict_table_rename_in_cache( foreign = *it; + if (foreign->referenced_table) { + foreign->referenced_table->referenced_set.erase(foreign); + } + if (ut_strlen(foreign->foreign_table_name) < ut_strlen(table->name)) { /* Allocate a longer name buffer; @@ -1859,6 +1863,10 @@ dict_table_rename_in_cache( table->foreign_set.erase(it); fk_set.insert(foreign); + + if (foreign->referenced_table) { + foreign->referenced_table->referenced_set.insert(foreign); + } } ut_a(table->foreign_set.empty()); @@ -3274,6 +3282,9 @@ dict_foreign_find( { ut_ad(mutex_own(&(dict_sys->mutex))); + ut_ad(dict_foreign_set_validate(table->foreign_set)); + ut_ad(dict_foreign_set_validate(table->referenced_set)); + dict_foreign_set::iterator it = table->foreign_set.find(foreign); if (it != table->foreign_set.end()) { @@ -5630,6 +5641,11 @@ dict_find_table_by_space( ut_ad(space_id > 0); + if (dict_sys == NULL) { + /* This could happen when it's in redo processing. */ + return(NULL); + } + table = UT_LIST_GET_FIRST(dict_sys->table_LRU); num_item = UT_LIST_GET_LEN(dict_sys->table_LRU); |