mirror of
https://github.com/FreeRTOS/FreeRTOS-Kernel.git
synced 2025-04-19 21:11:57 -04:00
Changes from V4.1.2
+ Tasks that block with a timeout of portMAX_DELAY are now blocked indefinitely. Previously portMAX_DELAY was just the longest block time possible.
This commit is contained in:
parent
f7f28ed01a
commit
96d4684fa7
|
@ -181,6 +181,12 @@ Changes from V4.0.5
|
|||
|
||||
+ Added utility functions and xOverflowCount variable to facilitate the
|
||||
queue.c changes.
|
||||
|
||||
Changes from V4.1.2
|
||||
|
||||
+ Tasks that block with a timeout of portMAX_DELAY are now blocked
|
||||
indefinitely. Previously portMAX_DELAY was just the longest block time
|
||||
possible.
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
|
@ -1418,15 +1424,24 @@ portTickType xTimeToWake;
|
|||
is the first to be woken by the event. */
|
||||
vListInsert( ( xList * ) pxEventList, ( xListItem * ) &( pxCurrentTCB->xEventListItem ) );
|
||||
|
||||
/* Calculate the time at which the task should be woken if the event does
|
||||
not occur. This may overflow but this doesn't matter. */
|
||||
xTimeToWake = xTickCount + xTicksToWait;
|
||||
|
||||
/* We must remove ourselves from the ready list before adding ourselves
|
||||
to the blocked list as the same list item is used for both lists. We have
|
||||
exclusive access to the ready lists as the scheduler is locked. */
|
||||
vListRemove( ( xListItem * ) &( pxCurrentTCB->xGenericListItem ) );
|
||||
|
||||
if( xTicksToWait == portMAX_DELAY )
|
||||
{
|
||||
/* Add ourselves to the suspended task list instead of a delayed task
|
||||
list to ensure we are not woken by a timing event. We will block
|
||||
indefinitely. */
|
||||
vListInsertEnd( ( xList * ) &xSuspendedTaskList, ( xListItem * ) &( pxCurrentTCB->xGenericListItem ) );
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Calculate the time at which the task should be woken if the event does
|
||||
not occur. This may overflow but this doesn't matter. */
|
||||
xTimeToWake = xTickCount + xTicksToWait;
|
||||
|
||||
listSET_LIST_ITEM_VALUE( &( pxCurrentTCB->xGenericListItem ), xTimeToWake );
|
||||
|
||||
if( xTimeToWake < xTickCount )
|
||||
|
@ -1439,6 +1454,7 @@ portTickType xTimeToWake;
|
|||
/* The wake time has not overflowed, so we can use the current block list. */
|
||||
vListInsert( ( xList * ) pxDelayedTaskList, ( xListItem * ) &( pxCurrentTCB->xGenericListItem ) );
|
||||
}
|
||||
}
|
||||
}
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
|
|
Loading…
Reference in a new issue