summaryrefslogtreecommitdiff
path: root/storage/innobase/dict/dict0dict.c
diff options
context:
space:
mode:
Diffstat (limited to 'storage/innobase/dict/dict0dict.c')
-rw-r--r--storage/innobase/dict/dict0dict.c17
1 files changed, 15 insertions, 2 deletions
diff --git a/storage/innobase/dict/dict0dict.c b/storage/innobase/dict/dict0dict.c
index 63571bb26c8..c298f867ae3 100644
--- a/storage/innobase/dict/dict0dict.c
+++ b/storage/innobase/dict/dict0dict.c
@@ -2529,8 +2529,15 @@ dict_foreign_remove_from_cache(
foreign);
rbt = foreign->referenced_table->referenced_rbt;
+
if (rbt != NULL) {
- rbt_delete(rbt, foreign->id);
+ const ib_rbt_node_t* node
+ = rbt_lookup(rbt, foreign->id);
+ dict_foreign_t* val = *(dict_foreign_t**) node->value;
+
+ if (val == foreign) {
+ rbt_delete(rbt, foreign->id);
+ }
}
}
@@ -2543,7 +2550,13 @@ dict_foreign_remove_from_cache(
rbt = foreign->foreign_table->foreign_rbt;
if (rbt != NULL) {
- rbt_delete(rbt, foreign->id);
+ const ib_rbt_node_t* node
+ = rbt_lookup(rbt, foreign->id);
+ dict_foreign_t* val = *(dict_foreign_t**) node->value;
+
+ if (val == foreign) {
+ rbt_delete(rbt, foreign->id);
+ }
}
}