diff --git a/src/box/index.cc b/src/box/index.cc index dbcaadb014bd5e278169cb2ed6ad36491caac2a0..32e276eb665b4c11b9485953e8ba2704bc414286 100644 --- a/src/box/index.cc +++ b/src/box/index.cc @@ -612,6 +612,7 @@ index_read_view_create(struct index_read_view *rv, rv->def = index_def_dup(def); if (rv->def == NULL) return -1; + rv->space = NULL; return 0; } diff --git a/src/box/index.h b/src/box/index.h index e7d4f26c52c197503591a51e0987ba90bc1f4205..757e5cf16a68238f9307d36b2ab72066bd22b294 100644 --- a/src/box/index.h +++ b/src/box/index.h @@ -44,6 +44,7 @@ extern "C" { struct tuple; struct engine; struct space; +struct space_read_view; struct index; struct index_read_view; struct index_read_view_iterator; @@ -586,6 +587,8 @@ struct index_read_view { const struct index_read_view_vtab *vtab; /** Copy of the index definition. */ struct index_def *def; + /** Pointer to the space read view that owns this index. */ + struct space_read_view *space; }; /** Iterator over an index read view. */ diff --git a/src/box/read_view.c b/src/box/read_view.c index 56358fba9071cbe759a25bb610d1e1a0f50fb229..c99a1ea34e00b1b4531a63559fccd95b77672138 100644 --- a/src/box/read_view.c +++ b/src/box/read_view.c @@ -49,8 +49,10 @@ space_read_view_delete(struct space_read_view *space_rv) { for (uint32_t i = 0; i <= space_rv->index_id_max; i++) { struct index_read_view *index_rv = space_rv->index_map[i]; - if (index_rv != NULL) + if (index_rv != NULL) { + assert(index_rv->space == space_rv); index_read_view_delete(index_rv); + } } TRASH(space_rv); free(space_rv); @@ -84,6 +86,7 @@ space_read_view_new(struct space *space, const struct read_view_opts *opts) space_rv->index_map[i] = index_create_read_view(index); if (space_rv->index_map[i] == NULL) goto fail; + space_rv->index_map[i]->space = space_rv; } return space_rv; fail: