#include <stdlib.h>
#include <fcntl.h>
#include <sys/stat.h>
+#include <utime.h>
#include "rrd_tool.h"
#include "unused.h"
} else {
if (rdwr & RRD_READWRITE) {
flags |= O_RDWR;
-#ifdef HAVE_MMAP
- rrd_simple_file->mm_flags = MAP_SHARED;
- rrd_simple_file->mm_prot |= PROT_WRITE;
-#endif
+#ifdef HAVE_MMAP
+ rrd_simple_file->mm_flags = MAP_SHARED;
+ rrd_simple_file->mm_prot |= PROT_WRITE;
+#endif
}
if (rdwr & RRD_CREAT) {
flags |= (O_CREAT | O_TRUNC);
goto out_free;
}
+#ifdef HAVE_MMAP
+#ifdef HAVE_BROKEN_MS_ASYNC
+ if (rdwr & RRD_READWRITE) {
+ /* some unices, the files mtime does not get update
+ on msync MS_ASYNC, in order to help them,
+ we update the the timestamp at this point.
+ The thing happens pretty 'close' to the open
+ call so the chances of a race should be minimal.
+
+ Maybe ask your vendor to fix your OS ... */
+ utime(file_name,NULL);
+ }
+#endif
+#endif
+
/* Better try to avoid seeks as much as possible. stat may be heavy but
* many concurrent seeks are even worse. */
if (newfile_size == 0 && ((fstat(rrd_simple_file->fd, &statb)) < 0)) {
if (data != MAP_FAILED)
munmap(data, rrd_file->file_len);
#endif
+
close(rrd_simple_file->fd);
out_free:
free(rrd_file->pvt);
#if defined DEBUG && DEBUG > 1
mincore_print(rrd_file, "after");
#endif
-#endif /* without madvise and posix_fadvise ist does not make much sense todo anything */
+#endif /* without madvise and posix_fadvise it does not make much sense todo anything */
}
}
-/* flush all data pending to be written to FD. */
-
-void rrd_flush(
- rrd_file_t *rrd_file)
-{
-#ifndef WIN32
- rrd_simple_file_t *rrd_simple_file;
- rrd_simple_file = (rrd_simple_file_t *)rrd_file->pvt;
- if (fdatasync(rrd_simple_file->fd) != 0) {
- rrd_set_error("flushing fd %d: %s", rrd_simple_file->fd,
- rrd_strerror(errno));
- }
-#endif
-}
-
-
/* Initialize RRD header. */
void rrd_init(