Hi Mathias,

Thank you for finding and reporting this issue. I'm CC Chengdong here.

Chengdong, could you please take a look at this issue?

BR,

Alan

On Thu, Feb 5, 2026 at 12:32 PM <[email protected]> wrote:

>
> Hello,
>
> I have problems with the following commit, which is part of PR #17199
>
>    commit c7b6442974545b92476615ef048633609d828e5b
>    Author: wangchengdong <[email protected]>
>    Date: Mon Oct 13 20:57:43 2025 +0800
>    sched/clock: Improve CLOCK_MONOTONIC nxclock_gettime()
>
>    Improve nxclock_gettime(), to get the system time excluding
>    the time that the system is suspended, when the clockid is
>    CLOCK_MONOTONIC
>
>    Signed-off-by: Chengdong Wang [email protected]
>
>
>
> This commit changes the behaviour of CLOCK_MONOTONIC. It is running slower
> than CLOCK_BOOTTIME now.
>
> I called sem_clockwait() with CLOCK_MONOTONIC, but the "if" in line 143 in
> nuttx/sched/semaphore/sem_clockwait.c handles on two cases. I used
> CLOCK_MONOTONIC to calculate the value "abstime", but wd_start_abstime()
> uses CLOCK_BOOTTIME now. When the system in running for some time this
> leads to an immediate timeout, because two different clocks are compared.
>
>
> int nxsem_clockwait(FAR sem_t *sem, clockid_t clockid,
>                     FAR const struct timespec *abstime)
> {
> ...
>     if (clockid == CLOCK_REALTIME)
>       {
>         wd_start_realtime(&rtcb->waitdog, abstime,
>                           nxsem_timeout, (uintptr_t)rtcb);
>       }
>     else
>       {
>         wd_start_abstime(&rtcb->waitdog, abstime,
>                          nxsem_timeout, (uintptr_t)rtcb);
>       }
> ...
>
>
>
> For my understanding the change of CLOCK_MONOTONIC is not correct.
> According to the POSIX definition
> https://pubs.opengroup.org/onlinepubs/9799919799/ it must be a
> "system-wide monotonic clock", CLOCK_BOOTTIME is not defined here.
>
>
> On the other hand, if such a low level change is made, all usages should
> be reviewed. There a lot of places where CLOCK_MONOTONIC is used in the
> nuttx source code. And there are places like in nxsem_clockwait() where the
> change leads to an error even though CLOCK_MONOTONIC is not used in the
> code.
>
>
> What do you think?
>
> BR,
> Mathias
>

Reply via email to