X-Git-Url: https://git.octo.it/?p=rrdtool.git;a=blobdiff_plain;f=src%2Frrd_open.c;h=5a908daafc49a01eb285f0d205e246c4af8829ef;hp=5598546d11ae471cad5c4fa332e565829cfc53ed;hb=dc2409c0e92ace2dfdf73c0c5d7f57baf48b490b;hpb=aff0a2728543eee1ac21f3fa02f171caae8d9362 diff --git a/src/rrd_open.c b/src/rrd_open.c index 5598546..5a908da 100644 --- a/src/rrd_open.c +++ b/src/rrd_open.c @@ -9,6 +9,7 @@ #include #include #include +#include #include "rrd_tool.h" #include "unused.h" @@ -173,10 +174,6 @@ rrd_file_t *rrd_open( } 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 } if (rdwr & RRD_CREAT) { flags |= (O_CREAT | O_TRUNC); @@ -199,6 +196,21 @@ rrd_file_t *rrd_open( 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)) { @@ -360,6 +372,7 @@ rrd_file_t *rrd_open( if (data != MAP_FAILED) munmap(data, rrd_file->file_len); #endif + close(rrd_simple_file->fd); out_free: free(rrd_file->pvt);