From: Richard M. Stallman Date: Mon, 10 Jan 1994 22:24:26 +0000 (+0000) Subject: (Fdo_auto_save): If auto save times out, don't try again for 20 minutes. X-Git-Tag: emacs-19.34~10298 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=b60247d9eeca5333ea621809da737192f2540455;p=emacs.git (Fdo_auto_save): If auto save times out, don't try again for 20 minutes. (Fclear_buffer_auto_save_failure): New function. (Fset_buffer_auto_saved): Clear auto_save_failure_time. --- diff --git a/src/fileio.c b/src/fileio.c index c462c27b97d..702d09f41b8 100644 --- a/src/fileio.c +++ b/src/fileio.c @@ -3367,6 +3367,15 @@ Non-nil second argument means save only current buffer.") && (do_handled_files || NILP (Ffind_file_name_handler (b->auto_save_file_name)))) { + EMACS_TIME before_time, after_time; + + EMACS_GET_TIME (before_time); + + /* If we had a failure, don't try again for 20 minutes. */ + if (b->auto_save_failure_time >= 0 + && EMACS_SECS (before_time) - b->auto_save_failure_time < 1200) + continue; + if ((XFASTINT (b->save_length) * 10 > (BUF_Z (b) - BUF_BEG (b)) * 13) /* A short file is likely to change a large fraction; @@ -3394,6 +3403,13 @@ Non-nil second argument means save only current buffer.") b->auto_save_modified = BUF_MODIFF (b); XFASTINT (current_buffer->save_length) = Z - BEG; set_buffer_internal (old); + + EMACS_GET_TIME (after_time); + + /* If auto-save took more than 60 seconds, + assume it was an NFS failure that got a timeout. */ + if (EMACS_SECS (after_time) - EMACS_SECS (before_time) > 60) + b->auto_save_failure_time = EMACS_SECS (after_time); } } @@ -3417,6 +3433,16 @@ No auto-save file will be written until the buffer changes again.") { current_buffer->auto_save_modified = MODIFF; XFASTINT (current_buffer->save_length) = Z - BEG; + current_buffer->auto_save_failure_time = -1; + return Qnil; +} + +DEFUN ("clear-buffer-auto-save-failure", Fclear_buffer_auto_save_failure, + Sclear_buffer_auto_save_failure, 0, 0, 0, + "Clear any record of a recent auto-save failure in the current buffer.") + () +{ + current_buffer->auto_save_failure_time = -1; return Qnil; } @@ -3849,6 +3875,7 @@ lists are merged destructively."); defsubr (&Sset_visited_file_modtime); defsubr (&Sdo_auto_save); defsubr (&Sset_buffer_auto_saved); + defsubr (&Sclear_buffer_auto_save_failure); defsubr (&Srecent_auto_save_p); defsubr (&Sread_file_name_internal);