mirror of
https://github.com/espressif/esp-idf.git
synced 2025-08-04 13:14:32 +02:00
freertos: test: Add stress test for thread local storage
(Fails without the fix applied in parent commit.)
This commit is contained in:
@@ -4,6 +4,7 @@
|
|||||||
#include "freertos/FreeRTOS.h"
|
#include "freertos/FreeRTOS.h"
|
||||||
#include "freertos/task.h"
|
#include "freertos/task.h"
|
||||||
#include "test_utils.h"
|
#include "test_utils.h"
|
||||||
|
#include "esp_system.h"
|
||||||
|
|
||||||
TEST_CASE("pthread local storage basics", "[pthread]")
|
TEST_CASE("pthread local storage basics", "[pthread]")
|
||||||
{
|
{
|
||||||
@@ -128,3 +129,36 @@ static void task_test_pthread_destructor(void *v_key)
|
|||||||
thread_test_pthread_destructor(v_key);
|
thread_test_pthread_destructor(v_key);
|
||||||
vTaskDelete(NULL);
|
vTaskDelete(NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define STRESS_NUMITER 2000000
|
||||||
|
#define STRESS_NUMTASKS 16
|
||||||
|
|
||||||
|
static void *thread_stress_test(void *v_key)
|
||||||
|
{
|
||||||
|
pthread_key_t key = (pthread_key_t) v_key;
|
||||||
|
void *tls_value = (void *)esp_random();
|
||||||
|
|
||||||
|
pthread_setspecific(key, tls_value);
|
||||||
|
|
||||||
|
for(int i = 0; i < STRESS_NUMITER; i++) {
|
||||||
|
TEST_ASSERT_EQUAL_HEX32(pthread_getspecific(key), tls_value);
|
||||||
|
}
|
||||||
|
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// This test case added to reproduce issues with unpinned tasks and TLS
|
||||||
|
TEST_CASE("pthread local storage stress test", "[pthread]")
|
||||||
|
{
|
||||||
|
pthread_key_t key = -1;
|
||||||
|
pthread_t threads[STRESS_NUMTASKS] = { 0 };
|
||||||
|
TEST_ASSERT_EQUAL(0, pthread_key_create(&key, test_pthread_destructor));
|
||||||
|
|
||||||
|
for (int i = 0; i < STRESS_NUMTASKS; i++) {
|
||||||
|
TEST_ASSERT_EQUAL(0, pthread_create(&threads[i], NULL, thread_stress_test, (void *)key));
|
||||||
|
}
|
||||||
|
for (int i = 0; i < STRESS_NUMTASKS; i++) {
|
||||||
|
TEST_ASSERT_EQUAL(0, pthread_join(threads[i], NULL));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Reference in New Issue
Block a user