diff --git a/include/neuron/type.h b/include/neuron/type.h index 58f77589..c021b16f 100644 --- a/include/neuron/type.h +++ b/include/neuron/type.h @@ -345,6 +345,11 @@ typedef struct { uint8_t precision; } neu_dvalue_t; +static inline bool neu_dvalue_is_array(const neu_dvalue_t *dvalue) +{ + return dvalue->type >= NEU_TYPE_ARRAY_CHAR; +} + static inline bool neu_equal_dvalue(const neu_dvalue_t *one, neu_dvalue_t *two) { if (one == NULL || two == NULL) { diff --git a/src/adapter/driver/cache.c b/src/adapter/driver/cache.c index a4e8a84a..d76941bf 100644 --- a/src/adapter/driver/cache.c +++ b/src/adapter/driver/cache.c @@ -849,7 +849,12 @@ bool neu_driver_cache_update_change(neu_driver_cache_t *cache, } elem->metas = calloc(n_meta, sizeof(neu_tag_meta_t)); for (int i = 0; i < n_meta; i++) { - memcpy(&elem->metas[i], &metas[i], sizeof(neu_tag_meta_t)); + if (!neu_dvalue_is_array(&metas[i].value)) { + memcpy(&elem->metas[i], &metas[i], sizeof(neu_tag_meta_t)); + } else { + neu_free_dvalue(&metas[i].value); + elem->metas[i].value.type = NEU_TYPE_INT8; + } } elem->n_meta = n_meta;