diff --git a/src/box/index.cc b/src/box/index.cc index 8b2eefcd130787cd68119045556e4728eeac6103..aa43407178f4123ac23e70370c81a64ce993c6a4 100644 --- a/src/box/index.cc +++ b/src/box/index.cc @@ -1049,4 +1049,10 @@ generic_index_read_view_iterator_position(struct index_read_view_iterator *it, return -1; } +void +generic_index_read_view_iterator_destroy(struct index_read_view_iterator *it) +{ + TRASH(it); +} + /* }}} */ diff --git a/src/box/index.h b/src/box/index.h index 59589a2832ee396c291016317caafbf6a838a99a..b646876fa7285bfc8e3999b76dc0e77374563a56 100644 --- a/src/box/index.h +++ b/src/box/index.h @@ -718,6 +718,9 @@ struct index_read_view { struct index_read_view_iterator_base { /** Pointer to the index read view. */ struct index_read_view *index; + /** Destroy a read view iterator. */ + void + (*destroy)(struct index_read_view_iterator *iterator); /** * Iterate to the next tuple in the read view. * @@ -747,7 +750,7 @@ struct index_read_view_iterator_base { }; /** Size of the index_read_view_iterator struct. */ -#define INDEX_READ_VIEW_ITERATOR_SIZE 64 +#define INDEX_READ_VIEW_ITERATOR_SIZE 72 static_assert(sizeof(struct index_read_view_iterator_base) <= INDEX_READ_VIEW_ITERATOR_SIZE, @@ -1049,7 +1052,7 @@ index_read_view_create_iterator(struct index_read_view *rv, static inline void index_read_view_iterator_destroy(struct index_read_view_iterator *iterator) { - TRASH(iterator); + iterator->base.destroy(iterator); } static inline int @@ -1123,6 +1126,8 @@ generic_iterator_position(struct iterator *it, const char **pos, int generic_index_read_view_iterator_position(struct index_read_view_iterator *it, const char **pos, uint32_t *size); +void +generic_index_read_view_iterator_destroy(struct index_read_view_iterator *it); #if defined(__cplusplus) } /* extern "C" */ diff --git a/src/box/memtx_hash.cc b/src/box/memtx_hash.cc index 19789de928bc53f863545f86b89b38511fa99636..a5c80580fbeb4a9870232140a9312978b65a33a7 100644 --- a/src/box/memtx_hash.cc +++ b/src/box/memtx_hash.cc @@ -628,6 +628,7 @@ hash_read_view_create_iterator(struct index_read_view *base, struct hash_read_view_iterator *it = (struct hash_read_view_iterator *)iterator; it->base.index = base; + it->base.destroy = generic_index_read_view_iterator_destroy; it->base.next_raw = exhausted_index_read_view_iterator_next_raw; it->base.position = generic_index_read_view_iterator_position; light_index_view_iterator_begin(&rv->view, &it->iterator); diff --git a/src/box/memtx_tree.cc b/src/box/memtx_tree.cc index 36316396ddad881006c6a0912b5fe967a778f6e9..92f496c8dafd0001de33db85330a169e0a367e02 100644 --- a/src/box/memtx_tree.cc +++ b/src/box/memtx_tree.cc @@ -2047,6 +2047,7 @@ tree_read_view_create_iterator(struct index_read_view *base, struct tree_read_view_iterator<USE_HINT> *it = (struct tree_read_view_iterator<USE_HINT> *)iterator; it->base.index = base; + it->base.destroy = generic_index_read_view_iterator_destroy; it->base.next_raw = exhausted_index_read_view_iterator_next_raw; if (it->base.index->def->key_def->for_func_index) it->base.position = diff --git a/src/box/sequence.c b/src/box/sequence.c index 00c691f6f8c043cb48a60d4d3c9fbbe7b32101d9..f504c21ece9d922b9b0757ca2fbdf211de2eea80 100644 --- a/src/box/sequence.c +++ b/src/box/sequence.c @@ -388,7 +388,9 @@ sequence_data_iterator_create(struct index_read_view *base, struct sequence_data_iterator *iter = (struct sequence_data_iterator *)iterator; iter->base.index = base; + iter->base.destroy = generic_index_read_view_iterator_destroy; iter->base.next_raw = sequence_data_iterator_next_raw; + iter->base.position = generic_index_read_view_iterator_position; light_sequence_view_iterator_begin(&rv->view, &iter->iter); return 0; }