X-Git-Url: https://git.octo.it/?a=blobdiff_plain;ds=sidebyside;f=src%2Frrd_open.c;h=f74c6d8a677ea8c0e3068f271b8d970f61441f81;hb=bec44cf332e54de7860ea693a2b5b441cf4da7d2;hp=5598546d11ae471cad5c4fa332e565829cfc53ed;hpb=aff0a2728543eee1ac21f3fa02f171caae8d9362;p=rrdtool.git diff --git a/src/rrd_open.c b/src/rrd_open.c index 5598546..f74c6d8 100644 --- a/src/rrd_open.c +++ b/src/rrd_open.c @@ -9,16 +9,13 @@ #include #include #include +#include #include "rrd_tool.h" #include "unused.h" #define MEMBLK 8192 #ifdef WIN32 -# define random() rand() -# define srandom(x) srand(x) -# define getpid() 0 - #define _LK_UNLCK 0 /* Unlock */ #define _LK_LOCK 1 /* Lock */ #define _LK_NBLCK 2 /* Non-blocking lock */ @@ -77,10 +74,6 @@ #endif #endif -long int rra_random_row( - rra_def_t *); - - /* Open a database file, return its header and an open filehandle, * positioned to the first cdp in the first rra. * In the error path of rrd_open, only rrd_free(&rrd) has to be called @@ -173,10 +166,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 +192,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 +368,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); @@ -525,7 +534,7 @@ void rrd_dontneed( #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 */ } @@ -668,22 +677,6 @@ ssize_t rrd_write( } -/* 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( @@ -762,19 +755,5 @@ unsigned long rrd_select_initial_row( rra_def_t *rra ) { - return rra_random_row(rra); + return rrd_random() % rra->row_cnt; } - -static int rand_init = 0; - -long int rra_random_row( - rra_def_t *rra) -{ - if (!rand_init) { - srandom((unsigned int) time(NULL) + (unsigned int) getpid()); - rand_init++; - } - - return random() % rra->row_cnt; -} -