Skip to content

Commit

Permalink
Merge pull request #2322 from c1728p9/malloc_test
Browse files Browse the repository at this point in the history
Add a test for thread-safe malloc
  • Loading branch information
0xc0170 authored Aug 12, 2016
2 parents 215f425 + 13c0685 commit b03411c
Showing 1 changed file with 68 additions and 0 deletions.
68 changes: 68 additions & 0 deletions TESTS/mbedmicro-rtos-mbed/malloc/main.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
#include "mbed.h"
#include "test_env.h"
#include "rtos.h"

#if defined(MBED_RTOS_SINGLE_THREAD)
#error [NOT_SUPPORTED] test not supported
#endif

#define NUM_THREADS 5
#define THREAD_STACK_SIZE 256

DigitalOut led1(LED1);
volatile bool should_exit = false;
volatile bool allocation_failure = false;

void task_using_malloc(void)
{
void* data;
while (1) {
// Repeatedly allocate and free memory
data = malloc(100);
if (data != NULL) {
memset(data, 0, 100);
} else {
allocation_failure = true;
}
free(data);

if (should_exit) {
return;
}
}
}

int main()
{
Thread *thread_list[NUM_THREADS];
int test_time = 15;
GREENTEA_SETUP(20, "default_auto");

// Allocate threads for the test
for (int i = 0; i < NUM_THREADS; i++) {
thread_list[i] = new Thread(osPriorityNormal, THREAD_STACK_SIZE);
if (NULL == thread_list[i]) {
allocation_failure = true;
}
thread_list[i]->start(task_using_malloc);
}

// Give the test time to run
while (test_time) {
led1 = !led1;
Thread::wait(1000);
test_time--;
}

// Join and delete all threads
should_exit = 1;
for (int i = 0; i < NUM_THREADS; i++) {
if (NULL == thread_list[i]) {
continue;
}
thread_list[i]->join();
delete thread_list[i];
}

GREENTEA_TESTSUITE_RESULT(!allocation_failure);
}

0 comments on commit b03411c

Please sign in to comment.