posix: add pthread specific data deallocation test

This commit adds test to assert that thread specific data is deallocated
on thread termination.

Signed-off-by: Jakub Michalski <jmichalski@antmicro.com>
This commit is contained in:
Jakub Michalski 2024-11-19 15:28:56 +01:00 committed by Benjamin Cabé
commit 43f917111b
3 changed files with 42 additions and 0 deletions

View file

@ -9,6 +9,8 @@ CONFIG_THREAD_NAME=y
CONFIG_DYNAMIC_THREAD=y
CONFIG_THREAD_STACK_INFO=y
CONFIG_DYNAMIC_THREAD_POOL_SIZE=6
CONFIG_POSIX_THREAD_KEYS_MAX=512
CONFIG_TEST_EXTRA_STACK_SIZE=4096
# for fnmatch()
CONFIG_POSIX_C_LIB_EXT=y

View file

@ -144,6 +144,44 @@ ZTEST(key, test_correct_key_is_deleted)
}
}
static void *setspecific_thread(void *count)
{
int value = 42;
int *alloc_count = count;
while (1) {
pthread_key_t key;
zassert_ok(pthread_key_create(&key, NULL), "failed to create key");
if (pthread_setspecific(key, &value) == ENOMEM) {
break;
};
*alloc_count += 1;
}
return NULL;
}
ZTEST(key, test_thread_specific_data_deallocation)
{
pthread_t thread;
static int alloc_count_t0;
static int alloc_count_t1;
zassert_ok(pthread_create(&thread, NULL, setspecific_thread, &alloc_count_t0),
"attempt to create thread failed");
zassert_ok(pthread_join(thread, NULL), "failed to join thread");
printk("first thread allocated %d keys", alloc_count_t0);
zassert_ok(pthread_create(&thread, NULL, setspecific_thread, &alloc_count_t1),
"attempt to create thread failed");
zassert_ok(pthread_join(thread, NULL), "failed to join thread");
printk("second thread allocated %d keys", alloc_count_t1);
zassert_equal(alloc_count_t0, alloc_count_t1,
"failed to deallocate thread specific data");
}
static void before(void *arg)
{
ARG_UNUSED(arg);

View file

@ -67,6 +67,8 @@ tests:
- CONFIG_DYNAMIC_THREAD=y
- CONFIG_THREAD_STACK_INFO=y
- CONFIG_HEAP_MEM_POOL_SIZE=16384
- CONFIG_POSIX_THREAD_KEYS_MAX=2048
- CONFIG_TEST_EXTRA_STACK_SIZE=16384
portability.posix.common.static_stack:
extra_configs:
- CONFIG_DYNAMIC_THREAD=n