X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=src%2Frrd_update.c;h=e96bc8fc34be0886a39874895f3fab6f8a818c6e;hb=e94b28ccf45c7bc52508ebdcc27beb515f136ac3;hp=fa60c0b47d21c26904a1dc1b3e3ce59e04a992f4;hpb=7d0d6b07c9f5bd5dfd99aa7fe9826eebf2181f1f;p=rrdtool.git diff --git a/src/rrd_update.c b/src/rrd_update.c index fa60c0b..e96bc8f 100644 --- a/src/rrd_update.c +++ b/src/rrd_update.c @@ -14,6 +14,8 @@ #include #endif +#include + #include "rrd_hw.h" #include "rrd_rpncalc.h" @@ -500,8 +502,10 @@ int _rrd_update( current_time_usec = tmp_time.tv_usec; } else { double tmp; - + char *old_locale; + old_locale = setlocale(LC_NUMERIC,"C"); tmp = strtod(updvals[0], 0); + setlocale(LC_NUMERIC,old_locale); current_time = floor(tmp); current_time_usec = (long) ((tmp - (double) current_time) * 1000000.0); @@ -593,6 +597,7 @@ int _rrd_update( (dst_idx != DST_CDEF) && rrd.ds_def[i].par[DS_mrhb_cnt].u_cnt >= interval) { double rate = DNAN; + char *old_locale; /* the data source type defines how to process the data */ /* pdp_new contains rate * time ... eg the bytes @@ -636,8 +641,10 @@ int _rrd_update( } break; case DST_ABSOLUTE: + old_locale = setlocale(LC_NUMERIC,"C"); errno = 0; pdp_new[i] = strtod(updvals[i + 1], &endptr); + setlocale(LC_NUMERIC,old_locale); if (errno > 0) { rrd_set_error("converting '%s' to float: %s", updvals[i + 1], rrd_strerror(errno)); @@ -653,7 +660,9 @@ int _rrd_update( break; case DST_GAUGE: errno = 0; + old_locale = setlocale(LC_NUMERIC,"C"); pdp_new[i] = strtod(updvals[i + 1], &endptr) * interval; + setlocale(LC_NUMERIC,old_locale); if (errno > 0) { rrd_set_error("converting '%s' to float: %s", updvals[i + 1], rrd_strerror(errno)); @@ -1443,19 +1452,7 @@ int _rrd_update( goto err_free_pdp_new; } #endif -#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(rrd_file->fd, rra_begin, 0, POSIX_FADV_DONTNEED)) { - rrd_set_error("setting POSIX_FADV_DONTNEED on '%s': %s", filename, - rrd_strerror(errno)); - goto err_free_pdp_new; - } -#endif /* rrd_flush(rrd_file); */ /* calling the smoothing code here guarantees at most @@ -1479,17 +1476,9 @@ int _rrd_update( 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(rrd_file->fd, rra_begin, 0, POSIX_FADV_DONTNEED)) { - rrd_set_error("setting POSIX_FADV_DONTNEED on '%s': %s", filename, - rrd_strerror(errno)); - goto err_free_pdp_new; - } -#endif } +/* rrd_dontneed(rrd_file,&rrd); */ rrd_free(&rrd); rrd_close(rrd_file);