Ignore:
Timestamp:
08/01/22 07:03:11 (10 months ago)
Author:
Sebastian Huber <sebastian.huber@…>
Branches:
master
Children:
52b7a58
Parents:
071640d
git-author:
Sebastian Huber <sebastian.huber@…> (08/01/22 07:03:11)
git-committer:
Sebastian Huber <sebastian.huber@…> (08/04/22 05:55:30)
Message:

posix: Fix relative CLOCK_REALTIME sleep

A relative CLOCK_REALTIME time out shall not be affected by CLOCK_REALTIME
changes through clock_settime(). Since our CLOCK_REALTIME is basically just
CLOCK_MONOTONIC plus an offset, we can simply use the CLOCK_MONOTONIC watchdog
for relative CLOCK_REALTIME time outs.

Update #4690.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • testsuites/validation/tc-clock-nanosleep.c

    r071640d rc64c638  
    660660      /*
    661661       * The timer of the calling task shall expire at the time point specified
    662        * by the sum of the current time of the clock specified by the
    663        * ``clock_id`` parameter and the interval specified by the ``rqtp``
    664        * parameter.
    665        */
    666       if ( ctx->clock_id == CLOCK_REALTIME ) {
    667         expire = ctx->now_realtime;
    668       } else {
    669         expire = ctx->now_monotonic;
    670       }
    671 
     662       * by the sum of the current time of the clock specified by
     663       * CLOCK_MONOTONIC and the interval specified by the ``rqtp`` parameter.
     664       */
     665      expire = ctx->now_monotonic;
    672666      expire.tv_sec += ctx->rqtp_obj.tv_sec;
    673667      expire.tv_nsec += ctx->rqtp_obj.tv_nsec;
     
    856850    CReqClockNanosleep_Post_Scheduler_Block, CReqClockNanosleep_Post_RMTp_Nop },
    857851  { 0, 0, 0, 0, 0, 0, 0, CReqClockNanosleep_Post_Status_Zero,
    858     CReqClockNanosleep_Post_Timer_Realtime,
    859     CReqClockNanosleep_Post_Expire_Last,
    860     CReqClockNanosleep_Post_Scheduler_Block, CReqClockNanosleep_Post_RMTp_Nop },
    861   { 0, 0, 0, 0, 0, 0, 0, CReqClockNanosleep_Post_Status_Zero,
    862852    CReqClockNanosleep_Post_Timer_Monotonic,
    863     CReqClockNanosleep_Post_Expire_Absolute,
    864     CReqClockNanosleep_Post_Scheduler_Block, CReqClockNanosleep_Post_RMTp_Nop },
    865   { 0, 0, 0, 0, 0, 0, 0, CReqClockNanosleep_Post_Status_Zero,
    866     CReqClockNanosleep_Post_Timer_Inactive, CReqClockNanosleep_Post_Expire_NA,
    867     CReqClockNanosleep_Post_Scheduler_BlockUnblock,
    868     CReqClockNanosleep_Post_RMTp_Zero },
    869   { 0, 0, 0, 0, 0, 0, 0, CReqClockNanosleep_Post_Status_Zero,
    870     CReqClockNanosleep_Post_Timer_Realtime,
    871853    CReqClockNanosleep_Post_Expire_Absolute,
    872854    CReqClockNanosleep_Post_Scheduler_Block, CReqClockNanosleep_Post_RMTp_Nop },
     
    884866    CReqClockNanosleep_Post_Scheduler_Block, CReqClockNanosleep_Post_RMTp_Nop },
    885867  { 0, 0, 0, 0, 0, 0, 0, CReqClockNanosleep_Post_Status_Zero,
     868    CReqClockNanosleep_Post_Timer_Inactive, CReqClockNanosleep_Post_Expire_NA,
     869    CReqClockNanosleep_Post_Scheduler_BlockUnblock,
     870    CReqClockNanosleep_Post_RMTp_Zero },
     871  { 0, 0, 0, 0, 0, 0, 0, CReqClockNanosleep_Post_Status_Zero,
    886872    CReqClockNanosleep_Post_Timer_Realtime,
    887873    CReqClockNanosleep_Post_Expire_Last,
    888     CReqClockNanosleep_Post_Scheduler_Block, CReqClockNanosleep_Post_RMTp_Zero },
     874    CReqClockNanosleep_Post_Scheduler_Block, CReqClockNanosleep_Post_RMTp_Nop },
    889875  { 0, 0, 0, 0, 0, 0, 0, CReqClockNanosleep_Post_Status_Zero,
    890876    CReqClockNanosleep_Post_Timer_Realtime,
    891     CReqClockNanosleep_Post_Expire_Relative,
    892     CReqClockNanosleep_Post_Scheduler_Block, CReqClockNanosleep_Post_RMTp_Zero },
    893   { 0, 0, 0, 0, 0, 0, 0, CReqClockNanosleep_Post_Status_Zero,
    894     CReqClockNanosleep_Post_Timer_Realtime,
    895     CReqClockNanosleep_Post_Expire_Relative,
     877    CReqClockNanosleep_Post_Expire_Absolute,
    896878    CReqClockNanosleep_Post_Scheduler_Block, CReqClockNanosleep_Post_RMTp_Nop }
    897879};
     
    899881static const uint8_t
    900882CReqClockNanosleep_Map[] = {
    901   6, 6, 8, 8, 10, 10, 6, 6, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    902   0, 0, 0, 0, 0, 0, 0, 7, 2, 13, 8, 14, 15, 11, 6, 7, 2, 7, 2, 7, 2, 7, 2, 3,
    903   0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 6, 6, 9, 9, 12, 12, 6, 6, 2, 2,
    904   2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 2, 16,
    905   9, 17, 18, 11, 6, 7, 2, 7, 2, 7, 2, 7, 2, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0,
     883  6, 6, 8, 8, 9, 9, 6, 6, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     884  0, 0, 0, 0, 0, 0, 7, 2, 10, 8, 11, 12, 13, 6, 7, 2, 7, 2, 7, 2, 7, 2, 3, 0,
     885  3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 6, 6, 14, 14, 15, 15, 6, 6, 2, 2,
     886  2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 2, 10,
     887  8, 11, 12, 13, 6, 7, 2, 7, 2, 7, 2, 7, 2, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0,
    906888  3, 0, 3, 0, 4, 4, 4, 4, 5, 5, 5, 5, 4, 4, 4, 4, 5, 5, 5, 5, 1, 1, 1, 1, 1, 1,
    907889  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 4, 4, 5, 5, 5, 5, 4, 4, 4, 4, 5, 5, 5, 5,
Note: See TracChangeset for help on using the changeset viewer.