changeset 65513:81577dcc6e9b

(write_region_inhibit_fsync): New variable. (Fwrite_region): Use it to skip call to fsync. (syms_of_fileio): Initialize it.
author Romain Francoise <romain@orebokech.com>
date Wed, 14 Sep 2005 20:19:39 +0000
parents 57e2d117929e
children 845541eefcf1
files src/ChangeLog src/fileio.c
diffstat 2 files changed, 19 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/src/ChangeLog	Wed Sep 14 16:19:18 2005 +0000
+++ b/src/ChangeLog	Wed Sep 14 20:19:39 2005 +0000
@@ -1,3 +1,9 @@
+2005-09-14  Romain Francoise  <romain@orebokech.com>
+
+	* fileio.c (write_region_inhibit_fsync): New variable.
+	(Fwrite_region): Use it to skip call to fsync.
+	(syms_of_fileio): Initialize it.
+
 2005-09-14  Kenichi Handa  <handa@m17n.org>
 
 	* coding.c (code_convert_region_unwind): Argument format changed.
--- a/src/fileio.c	Wed Sep 14 16:19:18 2005 +0000
+++ b/src/fileio.c	Wed Sep 14 20:19:39 2005 +0000
@@ -225,6 +225,11 @@
    expanding file names.  This can be bound to / or \. */
 Lisp_Object Vdirectory_sep_char;
 
+#ifdef HAVE_FSYNC
+/* Nonzero means skip the call to fsync in Fwrite-region.  */
+int write_region_inhibit_fsync;
+#endif
+
 extern Lisp_Object Vuser_login_name;
 
 #ifdef WINDOWSNT
@@ -5296,7 +5301,7 @@
      Disk full in NFS may be reported here.  */
   /* mib says that closing the file will try to write as fast as NFS can do
      it, and that means the fsync here is not crucial for autosave files.  */
-  if (!auto_saving && fsync (desc) < 0)
+  if (!auto_saving && !write_region_inhibit_fsync && fsync (desc) < 0)
     {
       /* If fsync fails with EINTR, don't treat that as serious.  */
       if (errno != EINTR)
@@ -6742,6 +6747,13 @@
 a non-nil value.  */);
   Vauto_save_list_file_name = Qnil;
 
+#ifdef HAVE_FSYNC
+  DEFVAR_BOOL ("write-region-inhibit-fsync", &write_region_inhibit_fsync,
+	       doc: /* *Non-nil means don't call fsync after saving files.
+Enabling this variable may result in data loss!  */);
+  write_region_inhibit_fsync = 0;
+#endif
+
   defsubr (&Sfind_file_name_handler);
   defsubr (&Sfile_name_directory);
   defsubr (&Sfile_name_nondirectory);