X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=src%2Frrd_open.c;h=d2ec549754d62d1a2d4e5b6597884212fb350599;hb=4493487acbf098efd1aa166fc8ab05fce968dbe0;hp=5598546d11ae471cad5c4fa332e565829cfc53ed;hpb=aff0a2728543eee1ac21f3fa02f171caae8d9362;p=rrdtool.git diff --git a/src/rrd_open.c b/src/rrd_open.c index 5598546..d2ec549 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,10 @@ 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 +#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 +200,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 +376,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);