diff --git a/src/pipewire/array.h b/src/pipewire/array.h index 4a7cbd4d2..4e2dd72eb 100644 --- a/src/pipewire/array.h +++ b/src/pipewire/array.h @@ -98,6 +98,7 @@ static inline void pw_array_init(struct pw_array *arr, size_t extend) static inline void pw_array_clear(struct pw_array *arr) { free(arr->data); + pw_array_init(arr, arr->extend); } /** Reset the array */ diff --git a/test/test-array.c b/test/test-array.c index 4b976e521..1d9ea2442 100644 --- a/test/test-array.c +++ b/test/test-array.c @@ -108,10 +108,39 @@ PWTEST(array_test) return PWTEST_PASS; } +PWTEST(array_clear) +{ + struct pw_array arr; + uint32_t *ptr; + uint32_t vals[] = { 0, 100, 0x8a, 0 }; + size_t i; + + pw_array_init(&arr, 64); + + for (i = 0; i < 4; i++) { + ptr = (uint32_t*)pw_array_add(&arr, sizeof(uint32_t)); + *ptr = vals[i]; + } + pwtest_int_eq(pw_array_get_len(&arr, uint32_t), 4U); + pw_array_clear(&arr); + pwtest_int_eq(pw_array_get_len(&arr, uint32_t), 0U); + + for (i = 0; i < 4; i++) { + ptr = (uint32_t*)pw_array_add(&arr, sizeof(uint32_t)); + *ptr = vals[i]; + } + pwtest_int_eq(pw_array_get_len(&arr, uint32_t), 4U); + pw_array_clear(&arr); + pwtest_int_eq(pw_array_get_len(&arr, uint32_t), 0U); + + return PWTEST_PASS; +} + PWTEST_SUITE(pw_array) { pwtest_add(array_test_abi, PWTEST_NOARG); pwtest_add(array_test, PWTEST_NOARG); + pwtest_add(array_clear, PWTEST_NOARG); return PWTEST_PASS; }