From 640eb0f124b5a484f962176581eacbe3556ee045 Mon Sep 17 00:00:00 2001 From: Ilya Verbin <iverbin@tarantool.org> Date: Thu, 3 Aug 2023 13:31:25 +0300 Subject: [PATCH] box: replace malloc with xmalloc in index_def_dup And remove unused index_def_check_xc(). As index_def_dup() never returns NULL anymore, change index_create() and index_read_view_create() return type to `void` and update their callers. NO_DOC=refactoring NO_TEST=refactoring NO_CHANGELOG=refactoring (cherry picked from commit f6d6175460df74ff5c28df84dd7d8dcd010bb8b7) --- src/box/alter.cc | 2 +- src/box/index.cc | 11 ++--------- src/box/index.h | 4 ++-- src/box/index_def.c | 28 ++++------------------------ src/box/index_def.h | 19 +------------------ src/box/memtx_bitset.cc | 14 +++----------- src/box/memtx_hash.cc | 19 ++++--------------- src/box/memtx_rtree.cc | 14 +++----------- src/box/memtx_tree.cc | 18 +++--------------- src/box/sequence.c | 6 +----- src/box/session_settings.c | 14 +++----------- src/box/sysview.c | 15 +++------------ src/box/vinyl.c | 6 +----- 13 files changed, 31 insertions(+), 139 deletions(-) diff --git a/src/box/alter.cc b/src/box/alter.cc index e703b426b6..d1c365c644 100644 --- a/src/box/alter.cc +++ b/src/box/alter.cc @@ -1470,7 +1470,7 @@ class RebuildFuncIndex: public RebuildIndex static struct index_def * func_index_def_new(struct index_def *index_def, struct func *func) { - struct index_def *new_index_def = index_def_dup_xc(index_def); + struct index_def *new_index_def = index_def_dup(index_def); index_def_set_func(new_index_def, func); return new_index_def; } diff --git a/src/box/index.cc b/src/box/index.cc index 68effdfb44..d30bb36253 100644 --- a/src/box/index.cc +++ b/src/box/index.cc @@ -769,14 +769,11 @@ iterator_delete(struct iterator *it) it->free(it); } -int +void index_create(struct index *index, struct engine *engine, const struct index_vtab *vtab, struct index_def *def) { def = index_def_dup(def); - if (def == NULL) - return -1; - index->vtab = vtab; index->engine = engine; index->def = def; @@ -787,7 +784,6 @@ index_create(struct index *index, struct engine *engine, /* Unusable until set to proper value during space creation. */ index->dense_id = UINT32_MAX; rlist_create(&index->read_gaps); - return 0; } void @@ -805,17 +801,14 @@ index_delete(struct index *index) index_def_delete(def); } -int +void index_read_view_create(struct index_read_view *rv, const struct index_read_view_vtab *vtab, struct index_def *def) { rv->vtab = vtab; rv->def = index_def_dup(def); - if (rv->def == NULL) - return -1; rv->space = NULL; - return 0; } void diff --git a/src/box/index.h b/src/box/index.h index 65f73f507b..ed5b164d54 100644 --- a/src/box/index.h +++ b/src/box/index.h @@ -810,7 +810,7 @@ replace_check_dup(struct tuple *old_tuple, struct tuple *dup_tuple, * Initialize an index instance. * Note, this function copies the given index definition. */ -int +void index_create(struct index *index, struct engine *engine, const struct index_vtab *vtab, struct index_def *def); @@ -1015,7 +1015,7 @@ index_end_build(struct index *index) * Initialize an index read view instance. * Note, this function copies the given index definition. */ -int +void index_read_view_create(struct index_read_view *rv, const struct index_read_view_vtab *vtab, struct index_def *def); diff --git a/src/box/index_def.c b/src/box/index_def.c index 458ebcaecd..b0d8d86f4d 100644 --- a/src/box/index_def.c +++ b/src/box/index_def.c @@ -119,31 +119,15 @@ index_def_new(uint32_t space_id, uint32_t iid, const char *name, struct index_def * index_def_dup(const struct index_def *def) { - struct index_def *dup = (struct index_def *) malloc(sizeof(*dup)); - if (dup == NULL) { - diag_set(OutOfMemory, sizeof(*dup), "malloc", - "struct index_def"); - return NULL; - } + struct index_def *dup = xmalloc(sizeof(*dup)); *dup = *def; - dup->name = strdup(def->name); - if (dup->name == NULL) { - free(dup); - diag_set(OutOfMemory, strlen(def->name) + 1, "malloc", - "index_def name"); - return NULL; - } + dup->name = xstrdup(def->name); dup->key_def = key_def_dup(def->key_def); dup->cmp_def = key_def_dup(def->cmp_def); rlist_create(&dup->link); dup->opts = def->opts; - if (def->opts.stat != NULL) { + if (def->opts.stat != NULL) dup->opts.stat = index_stat_dup(def->opts.stat); - if (dup->opts.stat == NULL) { - index_def_delete(dup); - return NULL; - } - } return dup; } @@ -174,11 +158,7 @@ index_stat_dup(const struct index_stat *src) { size_t size = index_stat_sizeof(src->samples, src->sample_count, src->sample_field_count); - struct index_stat *dup = (struct index_stat *) malloc(size); - if (dup == NULL) { - diag_set(OutOfMemory, size, "malloc", "index stat"); - return NULL; - } + struct index_stat *dup = xmalloc(size); memcpy(dup, src, size); uint32_t array_size = src->sample_field_count * sizeof(uint32_t); uint32_t stat1_offset = sizeof(struct index_stat); diff --git a/src/box/index_def.h b/src/box/index_def.h index 0506f94990..2d6916bc44 100644 --- a/src/box/index_def.h +++ b/src/box/index_def.h @@ -286,7 +286,7 @@ index_stat_sizeof(const struct index_sample *samples, uint32_t sample_count, * To understand memory layout see index_stat_sizeof() function. * * @param src Stat to duplicate. - * @retval Copy of the @src or NULL on OOM. + * @retval Copy of the @src. */ struct index_stat * index_stat_dup(const struct index_stat *src); @@ -410,23 +410,6 @@ index_def_check(struct index_def *index_def, const char *space_name); #if defined(__cplusplus) } /* extern "C" */ - -static inline struct index_def * -index_def_dup_xc(const struct index_def *def) -{ - struct index_def *ret = index_def_dup(def); - if (ret == NULL) - diag_raise(); - return ret; -} - -static inline void -index_def_check_xc(struct index_def *index_def, const char *space_name) -{ - if (index_def_check(index_def, space_name) != 0) - diag_raise(); -} - #endif /* defined(__cplusplus) */ #endif /* TARANTOOL_BOX_INDEX_DEF_H_INCLUDED */ diff --git a/src/box/memtx_bitset.cc b/src/box/memtx_bitset.cc index c3a9369dd8..3a5cc82bac 100644 --- a/src/box/memtx_bitset.cc +++ b/src/box/memtx_bitset.cc @@ -529,17 +529,9 @@ memtx_bitset_index_new(struct memtx_engine *memtx, struct index_def *def) assert(!def->opts.is_unique); struct memtx_bitset_index *index = - (struct memtx_bitset_index *)calloc(1, sizeof(*index)); - if (index == NULL) { - diag_set(OutOfMemory, sizeof(*index), - "malloc", "struct memtx_bitset_index"); - return NULL; - } - if (index_create(&index->base, (struct engine *)memtx, - &memtx_bitset_index_vtab, def) != 0) { - free(index); - return NULL; - } + (struct memtx_bitset_index *)xcalloc(1, sizeof(*index)); + index_create(&index->base, (struct engine *)memtx, + &memtx_bitset_index_vtab, def); #ifndef OLD_GOOD_BITSET index->spare_id = SPARE_ID_END; diff --git a/src/box/memtx_hash.cc b/src/box/memtx_hash.cc index e22a17ec38..db6fb6c1f1 100644 --- a/src/box/memtx_hash.cc +++ b/src/box/memtx_hash.cc @@ -641,10 +641,7 @@ memtx_hash_index_create_read_view(struct index *base) struct memtx_hash_index *index = (struct memtx_hash_index *)base; struct hash_read_view *rv = (struct hash_read_view *)xmalloc(sizeof(*rv)); - if (index_read_view_create(&rv->base, &vtab, base->def) != 0) { - free(rv); - return NULL; - } + index_read_view_create(&rv->base, &vtab, base->def); struct space *space = space_by_id(base->def->space_id); assert(space != NULL); memtx_tx_snapshot_cleaner_create(&rv->cleaner, space); @@ -689,17 +686,9 @@ struct index * memtx_hash_index_new(struct memtx_engine *memtx, struct index_def *def) { struct memtx_hash_index *index = - (struct memtx_hash_index *)calloc(1, sizeof(*index)); - if (index == NULL) { - diag_set(OutOfMemory, sizeof(*index), - "malloc", "struct memtx_hash_index"); - return NULL; - } - if (index_create(&index->base, (struct engine *)memtx, - &memtx_hash_index_vtab, def) != 0) { - free(index); - return NULL; - } + (struct memtx_hash_index *)xcalloc(1, sizeof(*index)); + index_create(&index->base, (struct engine *)memtx, + &memtx_hash_index_vtab, def); light_index_create(&index->hash_table, MEMTX_EXTENT_SIZE, memtx_index_extent_alloc, memtx_index_extent_free, diff --git a/src/box/memtx_rtree.cc b/src/box/memtx_rtree.cc index 1d9db44b40..989c344fa6 100644 --- a/src/box/memtx_rtree.cc +++ b/src/box/memtx_rtree.cc @@ -439,17 +439,9 @@ memtx_rtree_index_new(struct memtx_engine *memtx, struct index_def *def) } struct memtx_rtree_index *index = - (struct memtx_rtree_index *)calloc(1, sizeof(*index)); - if (index == NULL) { - diag_set(OutOfMemory, sizeof(*index), - "malloc", "struct memtx_rtree_index"); - return NULL; - } - if (index_create(&index->base, (struct engine *)memtx, - &memtx_rtree_index_vtab, def) != 0) { - free(index); - return NULL; - } + (struct memtx_rtree_index *)xcalloc(1, sizeof(*index)); + index_create(&index->base, (struct engine *)memtx, + &memtx_rtree_index_vtab, def); index->dimension = def->opts.dimension; rtree_init(&index->tree, index->dimension, MEMTX_EXTENT_SIZE, diff --git a/src/box/memtx_tree.cc b/src/box/memtx_tree.cc index 24a054aff4..2bcdbc31ad 100644 --- a/src/box/memtx_tree.cc +++ b/src/box/memtx_tree.cc @@ -2004,10 +2004,7 @@ memtx_tree_index_create_read_view(struct index *base) (struct memtx_tree_index<USE_HINT> *)base; struct tree_read_view<USE_HINT> *rv = (struct tree_read_view<USE_HINT> *)xmalloc(sizeof(*rv)); - if (index_read_view_create(&rv->base, &vtab, base->def) != 0) { - free(rv); - return NULL; - } + index_read_view_create(&rv->base, &vtab, base->def); struct space *space = space_by_id(base->def->space_id); assert(space != NULL); memtx_tx_snapshot_cleaner_create(&rv->cleaner, space); @@ -2129,17 +2126,8 @@ memtx_tree_index_new_tpl(struct memtx_engine *memtx, struct index_def *def, { struct memtx_tree_index<USE_HINT> *index = (struct memtx_tree_index<USE_HINT> *) - calloc(1, sizeof(*index)); - if (index == NULL) { - diag_set(OutOfMemory, sizeof(*index), - "malloc", "struct memtx_tree_index"); - return NULL; - } - if (index_create(&index->base, (struct engine *)memtx, - vtab, def) != 0) { - free(index); - return NULL; - } + xcalloc(1, sizeof(*index)); + index_create(&index->base, (struct engine *)memtx, vtab, def); /* See comment to memtx_tree_index_update_def(). */ struct key_def *cmp_def; diff --git a/src/box/sequence.c b/src/box/sequence.c index 692446a7a7..8d96415cc2 100644 --- a/src/box/sequence.c +++ b/src/box/sequence.c @@ -404,17 +404,13 @@ sequence_data_read_view_free(struct index_read_view *base) struct index_read_view * sequence_data_read_view_create(struct index *index) { - (void)index; static const struct index_read_view_vtab vtab = { .free = sequence_data_read_view_free, .get_raw = sequence_data_read_view_get_raw, .create_iterator = sequence_data_iterator_create, }; struct sequence_data_read_view *rv = xmalloc(sizeof(*rv)); - if (index_read_view_create(&rv->base, &vtab, index->def) != 0) { - free(rv); - return NULL; - } + index_read_view_create(&rv->base, &vtab, index->def); light_sequence_view_create(&rv->view, &sequence_data_index); return (struct index_read_view *)rv; } diff --git a/src/box/session_settings.c b/src/box/session_settings.c index 053628d3de..66fa9fc830 100644 --- a/src/box/session_settings.c +++ b/src/box/session_settings.c @@ -409,17 +409,9 @@ session_settings_space_create_index(struct space *space, struct index_def *def) return NULL; } - struct session_settings_index *index = - (struct session_settings_index *)calloc(1, sizeof(*index)); - if (index == NULL) { - diag_set(OutOfMemory, sizeof(*index), "calloc", "index"); - return NULL; - } - if (index_create(&index->base, space->engine, - &session_settings_index_vtab, def) != 0) { - free(index); - return NULL; - } + struct session_settings_index *index = xcalloc(1, sizeof(*index)); + index_create(&index->base, space->engine, &session_settings_index_vtab, + def); index->format = space->format; return &index->base; diff --git a/src/box/sysview.c b/src/box/sysview.c index 9167e37a9c..6b3dfd790d 100644 --- a/src/box/sysview.c +++ b/src/box/sysview.c @@ -475,18 +475,9 @@ sysview_space_create_index(struct space *space, struct index_def *def) return NULL; } - struct sysview_index *index = - (struct sysview_index *)calloc(1, sizeof(*index)); - if (index == NULL) { - diag_set(OutOfMemory, sizeof(*index), - "malloc", "struct sysview_index"); - return NULL; - } - if (index_create(&index->base, (struct engine *)sysview, - &sysview_index_vtab, def) != 0) { - free(index); - return NULL; - } + struct sysview_index *index = xcalloc(1, sizeof(*index)); + index_create(&index->base, (struct engine *)sysview, + &sysview_index_vtab, def); index->source_space_id = source_space_id; index->source_index_id = source_index_id; diff --git a/src/box/vinyl.c b/src/box/vinyl.c index d2f1f61d9a..dc2c053be9 100644 --- a/src/box/vinyl.c +++ b/src/box/vinyl.c @@ -713,11 +713,7 @@ vinyl_space_create_index(struct space *space, struct index_def *index_def) if (lsm == NULL) return NULL; - if (index_create(&lsm->base, &env->base, - &vinyl_index_vtab, index_def) != 0) { - vy_lsm_delete(lsm); - return NULL; - } + index_create(&lsm->base, &env->base, &vinyl_index_vtab, index_def); return &lsm->base; } -- GitLab