Просмотр исходного кода

Don't fsync() read-only filehandles (thanks, Andreas!).

This sounds harmless, but it actually forces a write of the inode's atime,
 which means a lot of painful and unnecessary disk i/o on some filesystems.

Should be a good speedup on games that read a lot of small files on Unix.
Ryan C. Gordon 12 лет назад
Родитель
Сommit
09baf99aa4
2 измененных файлов с 5 добавлено и 1 удалено
  1. 3 0
      docs/CREDITS.txt
  2. 2 1
      src/platform_posix.c

+ 3 - 0
docs/CREDITS.txt

@@ -136,6 +136,9 @@ SLB archiver:
 Bug fixes:
 Bug fixes:
     Dmitry Marakasov
     Dmitry Marakasov
 
 
+Bug fixes:
+    Andreas Karlsson
+
 Other stuff:
 Other stuff:
     Your name here! Patches go to icculus@icculus.org ...
     Your name here! Patches go to icculus@icculus.org ...
 
 

+ 2 - 1
src/platform_posix.c

@@ -279,7 +279,8 @@ PHYSFS_sint64 __PHYSFS_platformFileLength(void *opaque)
 int __PHYSFS_platformFlush(void *opaque)
 int __PHYSFS_platformFlush(void *opaque)
 {
 {
     const int fd = *((int *) opaque);
     const int fd = *((int *) opaque);
-    BAIL_IF_MACRO(fsync(fd) == -1, errcodeFromErrno(), 0);
+    if ((fcntl(fd, F_GETFL) & O_ACCMODE) != O_RDONLY)
+        BAIL_IF_MACRO(fsync(fd) == -1, errcodeFromErrno(), 0);
     return 1;
     return 1;
 } /* __PHYSFS_platformFlush */
 } /* __PHYSFS_platformFlush */