]> git.eshelyaron.com Git - emacs.git/commitdiff
Fix a race with verify-visited-file-modtime.
authorPaul Eggert <eggert@cs.ucla.edu>
Tue, 13 Nov 2012 01:35:14 +0000 (17:35 -0800)
committerPaul Eggert <eggert@cs.ucla.edu>
Tue, 13 Nov 2012 01:35:14 +0000 (17:35 -0800)
Since at least 1991 Emacs has ignored an mtime difference of no
more than one second, but my guess is that this was to work around
file system bugs that were fixed long ago.  Since the race is
causing problems now, let's remove that code.
* fileio.c (Fverify_visited_file_modtime): Do not accept a file
whose time stamp is off by no more than a second.  Insist that the
file time stamps match exactly.

Fixes: debbugs:12863
src/ChangeLog
src/fileio.c

index e8ac547ff2aabbbcd8af1951a3cd881e4de2ae2f..5905c667852c1b4d0221a793823e71ac26189176 100644 (file)
@@ -1,3 +1,14 @@
+2012-11-13  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Fix a race with verify-visited-file-modtime (Bug#12863).
+       Since at least 1991 Emacs has ignored an mtime difference of no
+       more than one second, but my guess is that this was to work around
+       file system bugs that were fixed long ago.  Since the race is
+       causing problems now, let's remove that code.
+       * fileio.c (Fverify_visited_file_modtime): Do not accept a file
+       whose time stamp is off by no more than a second.  Insist that the
+       file time stamps match exactly.
+
 2012-11-12  Dmitry Antipov  <dmantipov@yandex.ru>
 
        * frame.h (struct frame): Convert external_tool_bar member to
index d47d7dd9e0bc20fc7dc570d85f8b5a5577d16880..b9541e7883827ae57ff2bc477a71919969bda217 100644 (file)
@@ -5076,7 +5076,7 @@ See Info node `(elisp)Modification Time' for more details.  */)
   struct stat st;
   Lisp_Object handler;
   Lisp_Object filename;
-  EMACS_TIME mtime, diff;
+  EMACS_TIME mtime;
 
   if (NILP (buf))
     b = current_buffer;
@@ -5101,13 +5101,7 @@ See Info node `(elisp)Modification Time' for more details.  */)
   mtime = (stat (SSDATA (filename), &st) == 0
           ? get_stat_mtime (&st)
           : time_error_value (errno));
-  if ((EMACS_TIME_EQ (mtime, b->modtime)
-       /* If both exist, accept them if they are off by one second.  */
-       || (EMACS_TIME_VALID_P (mtime) && EMACS_TIME_VALID_P (b->modtime)
-          && ((diff = (EMACS_TIME_LT (mtime, b->modtime)
-                       ? sub_emacs_time (b->modtime, mtime)
-                       : sub_emacs_time (mtime, b->modtime))),
-              EMACS_TIME_LE (diff, make_emacs_time (1, 0)))))
+  if (EMACS_TIME_EQ (mtime, b->modtime)
       && (st.st_size == b->modtime_size
           || b->modtime_size < 0))
     return Qt;