Re: strange message before sending mail

Steffen Nurpmeso <[email protected]>
Newsgroups gmane.mail.mutt.devel
Message-ID <20260819170159.H_tD9vol@steffen%sdaoden.eu>
Reed Underwood wrote in
 <[email protected]>:
 |On 8/19/26 10:51, Ian Collier via Mutt-dev wrote:
 |> On Wed, Aug 19, 2026 at 01:43:57PM +0200, Vincent Lefevre wrote:
 |>> This is fine. However, I can reproduce the issue many times
 |>> every second with
 |> [redacted]
 |>
 |> That's bizarre.  So it seems the output of time(2) is delayed by
 |> at least one jiffy with respect to the real time.  Vide:
 |>
 |>
 |> #include <stdio.h>
 |> #include <time.h>
 |> #include <sys/time.h>
 |>
 |> int main(void) {
 |>    struct timeval tv;
 |>    time_t t;
 |>    while (1) {
 |>      gettimeofday(&tv, NULL);
 |>      t = time(NULL);
 |>      if (t < tv.tv_sec)
 |>        printf("%ld < %ld.%06d\n", (long)t, (long)tv.tv_sec, (int)tv.tv_us\
 |>        ec);
 |>}
 |>}
 |>
 |>
 |> This produces output on every system I've tested so far, from Centos7
 |> (3.10.0) upwards.  But the generic 6.8.0 kernel on Ubuntu 24.04 (and
 |> all earlier systems) does not produce output for the test that touches a
 |> file.  Whereas Ubuntu 24.04 systems running an OEM kernel (6.17.0) and
 |> all Fedora systems do produce output from both tests.
 |>
 |> This seems to mean that the Linux kernel has changed something about
 |> how the time is obtained when touching a file; but ultimately it is
 |> the time(2) call that is to blame.
 |>
 |> Ian Collier.
 |I can confirm the behavior you describe in Ubuntu 24.04 (6.8.0 kernel).
 |
 |For what it's worth, the behavior is not reproducible in FreeBSD.

Maybe it is because of some strange vdso(7) effect.
And i cannot reproduce it on the Musl C library based AlpineLinux.

  #include <stdio.h>
  #include <time.h>
  #include <sys/time.h>
  int main(void){
    struct timeval tv;
    time_t t;
    unsigned y, n;
    for(y = n = 0; y < 10;){
      gettimeofday(&tv, NULL);
      t = time(NULL);
      if(t < tv.tv_sec)
        ++y;
      else
        ++n;
    }
    printf("%u EQ, %u non-EQ\n", n, y);
    return 0;
  }

results in

  #?1300.00 1/120|sdaoden:tmp$ timeout 10 ./zt
  Terminated
  #?1430.00 1/120|sdaoden:tmp$ timeout 10 ./zt
  Terminated                 timeout 10 ./zt

whereas on GNU based C library (both kernel 6.18), trimmed

  #?0|lecce:tmp$ time ./zt
  52512820 EQ, 10 non-EQ
  real    0m0.915s
  #?0|lecce:tmp$ time ./zt
  6650069 EQ, 10 non-EQ
  real    0m0.124s
  #?0|lecce:tmp$ time ./zt
  6192365 EQ, 10 non-EQ
  real    0m0.118s
  #?0|lecce:tmp$ time ./zt
  14050552 EQ, 10 non-EQ
  real    0m0.345s
  #?0|lecce:tmp$ time ./zt
  15367605 EQ, 10 non-EQ
  real    0m0.377s

Musl impl is

  #?0|lecce:musl.git$ git show master:src/time/time.c
  #include <time.h>
  #include "syscall.h"

  time_t time(time_t *t)
  {
          struct timespec ts;
          __clock_gettime(CLOCK_REALTIME, &ts);
          if (t) *t = ts.tv_sec;
          return ts.tv_sec;
  }

I have not really looked into GNU C library since ~Y2K, and will
not visit that jungle.

--steffen
|
|Der Kragenbaer,                The moon bear,
|der holt sich munter           he cheerfully and one by one
|einen nach dem anderen runter  wa.ks himself off
|(By Robert Gernhardt)
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.