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.
This commit is contained in:
Ryan C. Gordon 2013-08-21 23:30:33 -04:00
parent 26f5eb481e
commit 09baf99aa4
2 changed files with 5 additions and 1 deletions

View File

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

View File

@ -279,7 +279,8 @@ PHYSFS_sint64 __PHYSFS_platformFileLength(void *opaque)
int __PHYSFS_platformFlush(void *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;
} /* __PHYSFS_platformFlush */