Re: strange message before sending mail

Reed Underwood <[email protected]>
Newsgroups gmane.mail.mutt.devel
Message-ID <[email protected]>
On 8/19/26 15:10, Reed Underwood wrote:
> On 8/19/26 14:36, Vincent Lefevre wrote:
>> On 2026-08-19 15:51:42 +0100, Ian Collier via Mutt-dev wrote:
>>> This seems to mean that the Linux kernel has changed something about
>>> how the time is obtained when touching a file;
>> In my Debian bug report against the Linux kernel, Salvatore Bonaccorso
>> thinks that this is due to
>>
>> https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?id=4e40eff0b5737c
>>    "fs: add infrastructure for multigrain timestamps".
>>
>> and suggested to use clock_gettime(2) instead of time(2).
>>
>>> but ultimately it is the time(2) call that is to blame.
>> Yes, this is what I observed with
>>
>> #include <stdio.h>
>> #include <stdlib.h>
>> #include <time.h>
>>
>> int main(void)
>> {
>>    while (1)
>>      {
>>        struct timespec ts;
>>        time_t t;
>>
>>        clock_gettime(CLOCK_REALTIME, &ts);
>>        t = time(NULL);
>>        if (ts.tv_nsec < 0)
>>          exit(1);
>>        if (t < ts.tv_sec)
>>          printf("%ld %ld\n", (long) t, (long) ts.tv_sec);
>>      }
>> }
>>
>> On 2026-08-19 13:59:45 -0400, Reed Underwood wrote:
>>> Yes, you're correct. In glibc 2.44, time() uses a macro which is
>>> defined as CLOCK_REALTIME_COARSE.
>> However, is it guaranteed to be less or equal to the time given
>> by CLOCK_REALTIME? This is not documented. If there isn't such
>> a guarantee, this will not solve the problem for Mutt, because
>> by using clock_gettime(CLOCK_REALTIME,...) instead of time(),
>> the result could be reversed with "old" kernels, for which
>> timestamps are less accurate.
>>
>> So I would say that the fix for Mutt would be
>>
>>   void mutt_stamp_attachment(BODY *a)
>>   {
>> -  a->stamp = time(NULL);
>> +  a->stamp = time(NULL) + 1;
>>   }
>>
>> as suggested by Kevin.
>>
> I think because time(), when using CLOCK_REALTIME_COARSE, has a 
> resolution of 1ms, that means that the seconds value in the result for 
> time() doesn't roll over until at least N.00100... So I think you have 
> a smooth millisecond, minimum, during which you can have this 
> counterintuitive result.
>
> Is there a reason not to use the seconds member of the result from 
> gettimeofday? If so, then, yes, the fix above seems fine (assuming 
> there's no reason to believe the one second offset is a problem 
> otherwise).
>
> I missed a lot of the earlier discussion, so ignore me if I'm way off 
> base.


Sorry, I think you were saying the discrepancy has found its way into 
ctime/mtime. If that's so, then I think your/Kevin's fix makes sense.
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.