File tree Expand file tree Collapse file tree 1 file changed +68
-0
lines changed
TESTS/mbedmicro-rtos-mbed/malloc Expand file tree Collapse file tree 1 file changed +68
-0
lines changed Original file line number Diff line number Diff line change
1
+ #include " mbed.h"
2
+ #include " test_env.h"
3
+ #include " rtos.h"
4
+
5
+ #if defined(MBED_RTOS_SINGLE_THREAD)
6
+ #error [NOT_SUPPORTED] test not supported
7
+ #endif
8
+
9
+ #define NUM_THREADS 5
10
+ #define THREAD_STACK_SIZE 256
11
+
12
+ DigitalOut led1 (LED1);
13
+ volatile bool should_exit = false ;
14
+ volatile bool allocation_failure = false ;
15
+
16
+ void task_using_malloc (void )
17
+ {
18
+ void * data;
19
+ while (1 ) {
20
+ // Repeatedly allocate and free memory
21
+ data = malloc (100 );
22
+ if (data != NULL ) {
23
+ memset (data, 0 , 100 );
24
+ } else {
25
+ allocation_failure = true ;
26
+ }
27
+ free (data);
28
+
29
+ if (should_exit) {
30
+ return ;
31
+ }
32
+ }
33
+ }
34
+
35
+ int main ()
36
+ {
37
+ Thread *thread_list[NUM_THREADS];
38
+ int test_time = 15 ;
39
+ GREENTEA_SETUP (20 , " default_auto" );
40
+
41
+ // Allocate threads for the test
42
+ for (int i = 0 ; i < NUM_THREADS; i++) {
43
+ thread_list[i] = new Thread (osPriorityNormal, THREAD_STACK_SIZE);
44
+ if (NULL == thread_list[i]) {
45
+ allocation_failure = true ;
46
+ }
47
+ thread_list[i]->start (task_using_malloc);
48
+ }
49
+
50
+ // Give the test time to run
51
+ while (test_time) {
52
+ led1 = !led1;
53
+ Thread::wait (1000 );
54
+ test_time--;
55
+ }
56
+
57
+ // Join and delete all threads
58
+ should_exit = 1 ;
59
+ for (int i = 0 ; i < NUM_THREADS; i++) {
60
+ if (NULL == thread_list[i]) {
61
+ continue ;
62
+ }
63
+ thread_list[i]->join ();
64
+ delete thread_list[i];
65
+ }
66
+
67
+ GREENTEA_TESTSUITE_RESULT (!allocation_failure);
68
+ }
You can’t perform that action at this time.
0 commit comments