@@ -119,14 +119,20 @@ static void prvResumeThread( Thread_t * xThreadId );
119
119
static void vPortSystemTickHandler ( int sig );
120
120
static void vPortStartFirstTask ( void );
121
121
static void prvPortYieldFromISR ( void );
122
+ static void prvThreadKeyDestructor ( void * pvData );
123
+ static void prvInitThreadKey ( void );
124
+ static void prvMarkAsFreeRTOSThread ( void );
125
+ static BaseType_t prvIsFreeRTOSThread ( void );
126
+ static void prvDestroyThreadKey ( void );
122
127
/*-----------------------------------------------------------*/
123
128
124
- void prvThreadKeyDestructor ( void * data )
129
+ static void prvThreadKeyDestructor ( void * pvData )
125
130
{
126
- free ( data );
131
+ free ( pvData );
127
132
}
133
+ /*-----------------------------------------------------------*/
128
134
129
- static void prvInitThreadKey ()
135
+ static void prvInitThreadKey ( void )
130
136
{
131
137
pthread_mutex_lock ( & xThreadMutex );
132
138
@@ -137,24 +143,39 @@ static void prvInitThreadKey()
137
143
138
144
pthread_mutex_unlock ( & xThreadMutex );
139
145
}
146
+ /*-----------------------------------------------------------*/
140
147
141
- static void prvMarkAsFreeRTOSThread ( pthread_t thread )
148
+ static void prvMarkAsFreeRTOSThread ( void )
142
149
{
150
+ uint8_t * pucThreadData = NULL ;
151
+
143
152
prvInitThreadKey ();
144
- uint8_t * thread_data = malloc ( 1 );
145
- configASSERT ( thread_data != NULL );
146
- * thread_data = 1 ;
147
- pthread_setspecific ( xThreadKey , thread_data );
153
+
154
+ pucThreadData = malloc ( 1 );
155
+ configASSERT ( pucThreadData != NULL );
156
+
157
+ * pucThreadData = 1 ;
158
+
159
+ pthread_setspecific ( xThreadKey , pucThreadData );
148
160
}
161
+ /*-----------------------------------------------------------*/
149
162
150
- static BaseType_t prvIsFreeRTOSThread ( pthread_t thread )
163
+ static BaseType_t prvIsFreeRTOSThread ( void )
151
164
{
152
- uint8_t * thread_data = ( uint8_t * ) pthread_getspecific ( xThreadKey );
165
+ uint8_t * pucThreadData = NULL ;
166
+ BaseType_t xRet = pdFALSE ;
153
167
154
- return thread_data != NULL && * thread_data == 1 ;
168
+ pucThreadData = ( uint8_t * ) pthread_getspecific ( xThreadKey );
169
+ if ( ( pucThreadData != NULL ) && ( * pucThreadData == 1 ) )
170
+ {
171
+ xRet = pdTRUE ;
172
+ }
173
+
174
+ return xRet ;
155
175
}
176
+ /*-----------------------------------------------------------*/
156
177
157
- static void prvDestroyThreadKey ()
178
+ static void prvDestroyThreadKey ( void )
158
179
{
159
180
pthread_key_delete ( xThreadKey );
160
181
}
@@ -309,7 +330,7 @@ void vPortEndScheduler( void )
309
330
( void ) pthread_kill ( hMainThread , SIG_RESUME );
310
331
311
332
/* Waiting to be deleted here. */
312
- if ( prvIsFreeRTOSThread ( pthread_self () ) == pdTRUE )
333
+ if ( prvIsFreeRTOSThread () == pdTRUE )
313
334
{
314
335
pxCurrentThread = prvGetThreadFromTask ( xTaskGetCurrentTaskHandle () );
315
336
event_wait ( pxCurrentThread -> ev );
@@ -369,7 +390,7 @@ void vPortYield( void )
369
390
370
391
void vPortDisableInterrupts ( void )
371
392
{
372
- if ( prvIsFreeRTOSThread ( pthread_self () ) == pdTRUE )
393
+ if ( prvIsFreeRTOSThread () == pdTRUE )
373
394
{
374
395
pthread_sigmask (SIG_BLOCK , & xAllSignals , NULL );
375
396
}
@@ -378,9 +399,9 @@ void vPortDisableInterrupts( void )
378
399
379
400
void vPortEnableInterrupts ( void )
380
401
{
381
- if ( prvIsFreeRTOSThread ( pthread_self () ) == pdTRUE )
402
+ if ( prvIsFreeRTOSThread () == pdTRUE )
382
403
{
383
- pthread_sigmask (SIG_UNBLOCK , & xAllSignals , NULL );
404
+ pthread_sigmask ( SIG_UNBLOCK , & xAllSignals , NULL );
384
405
}
385
406
}
386
407
/*-----------------------------------------------------------*/
@@ -417,9 +438,9 @@ static void * prvTimerTickHandler( void * arg )
417
438
{
418
439
( void ) arg ;
419
440
420
- prvMarkAsFreeRTOSThread ( pthread_self () );
441
+ prvMarkAsFreeRTOSThread ();
421
442
422
- prvPortSetCurrentThreadName ("Scheduler timer" );
443
+ prvPortSetCurrentThreadName ( "Scheduler timer" );
423
444
424
445
while ( xTimerTickThreadShouldRun )
425
446
{
@@ -451,7 +472,7 @@ void prvSetupTimerInterrupt( void )
451
472
452
473
static void vPortSystemTickHandler ( int sig )
453
474
{
454
- if ( prvIsFreeRTOSThread ( pthread_self () ) == pdTRUE )
475
+ if ( prvIsFreeRTOSThread () == pdTRUE )
455
476
{
456
477
Thread_t * pxThreadToSuspend ;
457
478
Thread_t * pxThreadToResume ;
@@ -473,7 +494,9 @@ static void vPortSystemTickHandler( int sig )
473
494
}
474
495
475
496
uxCriticalNesting -- ;
476
- } else {
497
+ }
498
+ else
499
+ {
477
500
fprintf ( stderr , "vPortSystemTickHandler called from non-FreeRTOS thread\n" );
478
501
}
479
502
}
@@ -508,7 +531,7 @@ static void * prvWaitForStart( void * pvParams )
508
531
{
509
532
Thread_t * pxThread = pvParams ;
510
533
511
- prvMarkAsFreeRTOSThread ( pthread_self () );
534
+ prvMarkAsFreeRTOSThread ();
512
535
513
536
prvSuspendSelf ( pxThread );
514
537
0 commit comments