@@ -421,40 +421,35 @@ void test_multi_threads()
421
421
422
422
osStatus threadStatus;
423
423
int i_ind, j_ind;
424
- char *dummy;
425
424
426
- rtos::Thread **bd_thread = new (std::nothrow) rtos::Thread*[TEST_NUM_OF_THREADS];
427
- TEST_SKIP_UNLESS_MESSAGE ((*bd_thread) != NULL , " not enough heap to run test." );
428
- memset (bd_thread, 0 , TEST_NUM_OF_THREADS * sizeof (rtos::Thread *));
425
+ rtos::Thread *bd_thread[TEST_NUM_OF_THREADS] {};
429
426
430
427
for (i_ind = 0 ; i_ind < TEST_NUM_OF_THREADS; i_ind++) {
431
428
432
429
bd_thread[i_ind] = new (std::nothrow) rtos::Thread ((osPriority_t)((int )osPriorityNormal), TEST_THREAD_STACK_SIZE);
433
- dummy = new (std::nothrow) char [TEST_THREAD_STACK_SIZE];
434
430
435
- if (!bd_thread[i_ind] || !dummy ) {
436
- utest_printf (" Not enough heap to run Thread %d ! \n " , i_ind + 1 );
431
+ if (!bd_thread[i_ind]) {
432
+ utest_printf (" Not enough heap to create Thread %d \n " , i_ind + 1 );
437
433
break ;
438
434
}
439
- delete[] dummy;
440
435
441
436
threadStatus = bd_thread[i_ind]->start (callback (test_thread_job));
442
- if (threadStatus != 0 ) {
443
- utest_printf (" Thread %d Start Failed!\n " , i_ind + 1 );
437
+ if (threadStatus == osErrorNoMemory) {
438
+ utest_printf (" Not enough heap to start Thread %d\n " , i_ind + 1 );
439
+ } else if (threadStatus != osOK) {
440
+ utest_printf (" Thread %d failed to start: %d\n " , i_ind + 1 , threadStatus);
444
441
break ;
445
442
}
446
443
}
447
444
445
+ // Join threads that successfully started
448
446
for (j_ind = 0 ; j_ind < i_ind; j_ind++) {
449
447
bd_thread[j_ind]->join ();
450
448
}
451
449
452
- if (bd_thread) {
453
- for (j_ind = 0 ; j_ind < i_ind; j_ind++) {
454
- delete bd_thread[j_ind];
455
- }
456
-
457
- delete[] bd_thread;
450
+ // Delete all threads, even those that failed to start
451
+ for (j_ind = 0 ; j_ind < TEST_NUM_OF_THREADS; j_ind++) {
452
+ delete bd_thread[j_ind];
458
453
}
459
454
}
460
455
#endif
0 commit comments