index 5f27c2f966a66784e50bf5d1a7193f9177d3095e..147e833db09d1b5d05eeb792b1adad4d937dfc28 100644 (file)
--- a/program/src/rrd_update.c
+++ b/program/src/rrd_update.c
/*****************************************************************************
- * RRDtool 1.2.23 Copyright by Tobi Oetiker, 1997-2007
+ * RRDtool 1.2.27 Copyright by Tobi Oetiker, 1997-2008
*****************************************************************************
* rrd_update.c RRD Update Function
*****************************************************************************
#include "rrd_tool.h"
#include <sys/types.h>
#include <fcntl.h>
-#ifdef HAVE_MMAP
- #include <sys/mman.h>
-#endif
#if defined(_WIN32) && !defined(__CYGWIN__) && !defined(__CYGWIN32__)
#include <sys/locking.h>
*/
#include <sys/timeb.h>
-#ifndef __MINGW32__
+#if (defined(__MINGW32__) && \
+ ((__MINGW32_MAJOR_VERSION == 3 && __MINGW32_MINOR_VERSION >= 12) || __MINGW32_MAJOR_VERSION > 3))
+#include <sys/time.h>
+#else
+
struct timeval {
time_t tv_sec; /* seconds */
long tv_usec; /* microseconds */
};
-#endif
struct __timezone {
int tz_minuteswest; /* minutes W of Greenwich */
return 0;
}
+#endif /* mingw32 3.4.5 */
#endif
+
/*
* normilize time as returned by gettimeofday. usec part must
* be always >= 0
@@ -427,6 +429,11 @@ _rrd_update(const char *filename, const char *tmplt, int argc, const char **argv
fclose(rrd_file);
return(-1);
}
+#ifdef USE_MADVISE
+ /* when we use mmaping we tell the kernel the mmap equivalent
+ of POSIX_FADV_RANDOM */
+ madvise(rrd_mmaped_file,rrd_filesize,MADV_RANDOM);
+#endif
#endif
/* loop through the arguments. */
for(arg_i=0; arg_i<argc;arg_i++) {
@@ -615,16 +622,16 @@ _rrd_update(const char *filename, const char *tmplt, int argc, const char **argv
switch(dst_idx){
case DST_COUNTER:
case DST_DERIVE:
+ for(ii=0;updvals[i+1][ii] != '\0';ii++){
+ if((updvals[i+1][ii] < '0' || updvals[i+1][ii] > '9') && (ii != 0 && updvals[i+1][ii] != '-')){
+ rrd_set_error("not a simple integer: '%s'",updvals[i+1]);
+ break;
+ }
+ }
+ if (rrd_test_error()){
+ break;
+ }
if(rrd.pdp_prep[i].last_ds[0] != 'U'){
- for(ii=0;updvals[i+1][ii] != '\0';ii++){
- if((updvals[i+1][ii] < '0' || updvals[i+1][ii] > '9') && (ii != 0 && updvals[i+1][ii] != '-')){
- rrd_set_error("not a simple integer: '%s'",updvals[i+1]);
- break;
- }
- }
- if (rrd_test_error()){
- break;
- }
pdp_new[i]= rrd_diff(updvals[i+1],rrd.pdp_prep[i].last_ds);
if(dst_idx == DST_COUNTER) {
/* simple overflow catcher suggested by Andres Kroonmaa */
@@ -772,7 +779,7 @@ _rrd_update(const char *filename, const char *tmplt, int argc, const char **argv
> rrd.ds_def[i].par[DS_mrhb_cnt].u_cnt) || */
/* if the interval is larger thatn mrhb we get NAN */
(interval > rrd.ds_def[i].par[DS_mrhb_cnt].u_cnt) ||
- (occu_pdp_st-proc_pdp_st <=
+ (rrd.stat_head -> pdp_step / 2.0 <
rrd.pdp_prep[i].scratch[PDP_unkn_sec_cnt].u_cnt)) {
pdp_temp[i] = DNAN;
} else {
@@ -1399,20 +1406,6 @@ _rrd_update(const char *filename, const char *tmplt, int argc, const char **argv
return(-1);
}
-#ifdef HAVE_POSIX_FADVISExxx
-
- /* with update we have write ops, so they will probably not be done by now, this means
- the buffers will not get freed. But calling this for the whole file - header
- will let the data off the hook as soon as it is written when if it is from a previous
- update cycle. Calling fdsync to force things is much too hard here. */
-
- if (0 != posix_fadvise(fileno(rrd_file), rra_begin, 0, POSIX_FADV_DONTNEED)) {
- rrd_set_error("setting POSIX_FADV_DONTNEED on '%s': %s",filename, rrd_strerror(errno));
- fclose(rrd_file);
- return(-1);
- }
-#endif
-
/* OK now close the files and free the memory */
if(fclose(rrd_file) != 0){
rrd_set_error("closing rrd");
@@ -1450,14 +1443,6 @@ _rrd_update(const char *filename, const char *tmplt, int argc, const char **argv
rra_start += rrd.rra_def[i].row_cnt
*rrd.stat_head->ds_cnt*sizeof(rrd_value_t);
}
-#ifdef HAVE_POSIX_FADVISExxx
- /* same procedure as above ... */
- if (0 != posix_fadvise(fileno(rrd_file), rra_begin, 0, POSIX_FADV_DONTNEED)) {
- rrd_set_error("setting POSIX_FADV_DONTNEED on '%s': %s",filename, rrd_strerror(errno));
- fclose(rrd_file);
- return(-1);
- }
-#endif
fclose(rrd_file);
}
rrd_free(&rrd);