[En-Nut-Discussion] Thread-safe version of asctime

Ole Reinhardt ole.reinhardt at embedded-it.de
Wed May 7 15:46:06 CEST 2014

Hi Harald,

Am 07.05.2014 12:50, schrieb Harald Kipp:
> the recently added asctime.c contains a few comments
> /*
>   Note: This function is *not* thread safe, because it uses a static
> variable
>   to store the calculated values. To be safe, you must surround the call
> to asctime
>   _and_ the usage of the returned pointer with NutEnterCritical() and
> NutExitCritical()!
>   Provided for compatibility to std c lib.
> */
> which I think are misleading. I cannot see, at which place we have to
> expect a context switch.

The problem is not asctime() itself, but the fact that it returns a
static pointer to the converted time value. So it could change
unexpected if there is a thread switch after valling asctime() and a
second thread is calling asctime as well.

> The problem with static buffers is still there, e.g.
>   printf("%s %s", asctime(t1), asctime(t2));
> will print out t2 twice and discard t1. IMHO, NutEnterCritical()
> wouldn't solve this.


So, yes, perhaps the hint is missleading. It was taken over from the
asctime man-page and does not reflect the cooperative thread switching
of Nut/OS correctly.

Shall I change the comment?

> Furthermore I'm not sure about
> static const char wday_name[][3] = {
>     "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"
> };
> AFAIK, sizeof("Sun") is 4, not 3.

Totally true! Thanks! Shall I change it? Or have you just checked in a fix?

Btw: Have you seen my question about the code in nut/mod?

Best regards,


kernel concepts GmbH            Tel: +49-271-771091-14
Sieghuetter Hauptweg 48         Mob: +49-177-7420433
D-57072 Siegen

More information about the En-Nut-Discussion mailing list