mirror of
https://git.savannah.gnu.org/git/emacs.git
synced 2024-11-30 08:09:04 +00:00
Fix a race with verify-visited-file-modtime.
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
This commit is contained in:
parent
231d8498eb
commit
b95a9c0cba
@ -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
|
||||
|
10
src/fileio.c
10
src/fileio.c
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user