Crash in uxListRemove

bupthebroker wrote on Wednesday, March 09, 2016:

Hi,
i have a problem with my FreeRtos 8.2 in the uxListRemove function:

List_t * const pxList = ( List_t * ) pxItemToRemove->pvContainer;

the pxList is NULL which causes a crash.

I noticed that inside xQueueGenericReceive a task can add itself to a wait list TWO times. The pvContainer pointer is set to NULL upon the first removal of the same task. The second removel will then crash.

if( xTaskCheckForTimeOut( &xTimeOut, &xTicksToWait ) == pdFALSE )
{

vTaskPlaceOnEventList( &( pxQueue->xTasksWaitingToReceive ), xTicksToWait );

}

What could cause this?

Edit, i noticed that xQueueReset was called. This does not seem to clear the pxQueue->xTasksWaitingToReceive, is that correct? After the xQueueReset pxQueue->xTasksWaitingToReceive.uxNumberOfItems is 1, and the same task will add itselt the second time, bringing the pxQueue->xTasksWaitingToReceive.uxNumberOfItems value to 2.

Regards

rtel wrote on Wednesday, March 09, 2016:

The most common cause of this type of data corruption is an invliad interrupt priority setting.

Which port are you using? Do you have configASSERT() defined? Have you read through the “my application does not run, what could be wrong?” FAQ item?

bupthebroker wrote on Wednesday, March 09, 2016:

I am using pic32, i haven’t used the configASSERT, i will see what it says…

Hmm, now it won’t start at all: xTaskPriorityDisinherit: configASSERT( pxTCB->uxMutexesHeld );

rtel wrote on Wednesday, March 09, 2016:

Are you trying to give a mutex from a task that does not hold the mutex?