diff --git a/include/neuron/type.h b/include/neuron/type.h index 261eefbf..6c25ab97 100644 --- a/include/neuron/type.h +++ b/include/neuron/type.h @@ -343,6 +343,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 void neu_free_dvalue(neu_dvalue_t *dvalue) { if (dvalue->type > NEU_TYPE_ARRAY_CHAR && diff --git a/src/adapter/driver/cache.c b/src/adapter/driver/cache.c index bcca0c35..df73afe0 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;