Fix for log grid memory leak (#201241)
This commit is contained in:
parent
9d8d6a2fa9
commit
be327538df
135
rrdtool-1.2.15-log_grid_leak.patch
Normal file
135
rrdtool-1.2.15-log_grid_leak.patch
Normal file
@ -0,0 +1,135 @@
|
||||
diff -urp rrdtool-1.2.15.orig/src/rrd_graph.c rrdtool-1.2.15/src/rrd_graph.c
|
||||
--- rrdtool-1.2.15.orig/src/rrd_graph.c 2006-07-14 08:11:26.000000000 -0400
|
||||
+++ rrdtool-1.2.15/src/rrd_graph.c 2006-12-14 15:37:05.000000000 -0500
|
||||
@@ -1060,8 +1060,9 @@ data_proc( image_desc_t *im ){
|
||||
** relevant for min and max
|
||||
*/
|
||||
if (finite(paintval) && im->gdes[ii].gf != GF_TICK ) {
|
||||
- if (isnan(minval) || paintval < minval)
|
||||
- minval = paintval;
|
||||
+ if ((isnan(minval) || paintval < minval ) &&
|
||||
+ ! (im->logarithmic && paintval <= 0.0))
|
||||
+ minval = paintval;
|
||||
if (isnan(maxval) || paintval > maxval)
|
||||
maxval = paintval;
|
||||
}
|
||||
@@ -1710,6 +1711,35 @@ double frexp10(double x, double *e) {
|
||||
return mnt;
|
||||
}
|
||||
|
||||
+static int AlmostEqual2sComplement (float A, float B, int maxUlps)
|
||||
+{
|
||||
+
|
||||
+ int aInt = *(int*)&A;
|
||||
+ int bInt = *(int*)&B;
|
||||
+ int intDiff;
|
||||
+ /* Make sure maxUlps is non-negative and small enough that the
|
||||
+ default NAN won't compare as equal to anything. */
|
||||
+
|
||||
+ /* assert(maxUlps > 0 && maxUlps < 4 * 1024 * 1024); */
|
||||
+
|
||||
+ /* Make aInt lexicographically ordered as a twos-complement int */
|
||||
+
|
||||
+ if (aInt < 0)
|
||||
+ aInt = 0x80000000l - aInt;
|
||||
+
|
||||
+ /* Make bInt lexicographically ordered as a twos-complement int */
|
||||
+
|
||||
+ if (bInt < 0)
|
||||
+ bInt = 0x80000000l - bInt;
|
||||
+
|
||||
+ intDiff = abs(aInt - bInt);
|
||||
+
|
||||
+ if (intDiff <= maxUlps)
|
||||
+ return 1;
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
/* logaritmic horizontal grid */
|
||||
int
|
||||
horizontal_log_grid(image_desc_t *im)
|
||||
@@ -1719,7 +1749,8 @@ horizontal_log_grid(image_desc_t *im)
|
||||
{1.0, 5.0, 10., 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0},
|
||||
{1.0, 2.0, 5.0, 7.0, 10., 0.0, 0.0, 0.0, 0.0, 0.0},
|
||||
{1.0, 2.0, 4.0, 6.0, 8.0, 10., 0.0, 0.0, 0.0, 0.0},
|
||||
- {1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.}};
|
||||
+ {1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.},
|
||||
+ {0,0,0,0,0, 0,0,0,0,0} /* last line */ };
|
||||
|
||||
int i, j, val_exp, min_exp;
|
||||
double nex; /* number of decades in data */
|
||||
@@ -1728,7 +1759,7 @@ horizontal_log_grid(image_desc_t *im)
|
||||
int mid = -1; /* row in yloglab for major grid */
|
||||
double mspac; /* smallest major grid spacing (pixels) */
|
||||
int flab; /* first value in yloglab to use */
|
||||
- double value, tmp;
|
||||
+ double value, tmp, pre_value;
|
||||
double X0,X1,Y0;
|
||||
char graph_label[100];
|
||||
|
||||
@@ -1747,11 +1778,11 @@ horizontal_log_grid(image_desc_t *im)
|
||||
mid++;
|
||||
for(i = 0; yloglab[mid][i + 1] < 10.0; i++);
|
||||
mspac = logscale * log10(10.0 / yloglab[mid][i]);
|
||||
- } while(mspac > 2 * im->text_prop[TEXT_PROP_LEGEND].size && mid < 5);
|
||||
+ } while(mspac > 2 * im->text_prop[TEXT_PROP_LEGEND].size && yloglab[mid][0] > 0);
|
||||
if(mid) mid--;
|
||||
|
||||
/* find first value in yloglab */
|
||||
- for(flab = 0; frexp10(im->minval, &tmp) > yloglab[mid][flab]; flab++);
|
||||
+ for(flab = 0; yloglab[mid][flab] < 10 && frexp10(im->minval, &tmp) > yloglab[mid][flab] ; flab++);
|
||||
if(yloglab[mid][flab] == 10.0) {
|
||||
tmp += 1.0;
|
||||
flab = 0;
|
||||
@@ -1763,8 +1794,13 @@ horizontal_log_grid(image_desc_t *im)
|
||||
X1=im->xorigin+im->xsize;
|
||||
|
||||
/* draw grid */
|
||||
- while(1) {
|
||||
+ pre_value = DNAN;
|
||||
+ while(1) {
|
||||
+
|
||||
value = yloglab[mid][flab] * pow(10.0, val_exp);
|
||||
+ if ( AlmostEqual2sComplement(value,pre_value,4) ) break; /* it seems we are not converging */
|
||||
+
|
||||
+ pre_value = value;
|
||||
|
||||
Y0 = ytr(im, value);
|
||||
if(Y0 <= im->yorigin - im->ysize) break;
|
||||
@@ -2484,34 +2520,6 @@ graph_size_location(image_desc_t *im, in
|
||||
/* yes we are loosing precision by doing tos with floats instead of doubles
|
||||
but it seems more stable this way. */
|
||||
|
||||
-static int AlmostEqual2sComplement (float A, float B, int maxUlps)
|
||||
-{
|
||||
-
|
||||
- int aInt = *(int*)&A;
|
||||
- int bInt = *(int*)&B;
|
||||
- int intDiff;
|
||||
- /* Make sure maxUlps is non-negative and small enough that the
|
||||
- default NAN won't compare as equal to anything. */
|
||||
-
|
||||
- /* assert(maxUlps > 0 && maxUlps < 4 * 1024 * 1024); */
|
||||
-
|
||||
- /* Make aInt lexicographically ordered as a twos-complement int */
|
||||
-
|
||||
- if (aInt < 0)
|
||||
- aInt = 0x80000000l - aInt;
|
||||
-
|
||||
- /* Make bInt lexicographically ordered as a twos-complement int */
|
||||
-
|
||||
- if (bInt < 0)
|
||||
- bInt = 0x80000000l - bInt;
|
||||
-
|
||||
- intDiff = abs(aInt - bInt);
|
||||
-
|
||||
- if (intDiff <= maxUlps)
|
||||
- return 1;
|
||||
-
|
||||
- return 0;
|
||||
-}
|
||||
|
||||
/* draw that picture thing ... */
|
||||
int
|
||||
Only in rrdtool-1.2.15/src: rrd_graph.c.orig
|
@ -7,7 +7,7 @@
|
||||
Summary: Round Robin Database Tool to store and display time-series data
|
||||
Name: rrdtool
|
||||
Version: 1.2.15
|
||||
Release: 7%{?dist}
|
||||
Release: 8%{?dist}
|
||||
License: GPL
|
||||
Group: Applications/Databases
|
||||
URL: http://people.ee.ethz.ch/~oetiker/webtools/%{name}/
|
||||
@ -15,6 +15,7 @@ Source0: http://people.ee.ethz.ch/~oetiker/webtools/%{name}/pub/%{name}-%{versio
|
||||
Source1: php4-svn%{php_rrd_svn}.tar.gz
|
||||
Patch0: rrdtool-1.2.13-php.patch
|
||||
Patch1: rrdtool-1.2.15-initrrdtool.patch
|
||||
Patch2: rrdtool-1.2.15-log_grid_leak.patch
|
||||
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
|
||||
BuildRequires: gcc-c++, openssl-devel, freetype-devel
|
||||
BuildRequires: libpng-devel, zlib-devel, libart_lgpl-devel >= 2.0
|
||||
@ -112,6 +113,7 @@ The %{name}-tcl package includes RRDtool bindings for Tcl.
|
||||
%patch0 -p0 -b .php
|
||||
%endif
|
||||
%patch1 -p1 -b .initrrdtool
|
||||
%patch2 -p1 -b .leak
|
||||
|
||||
# Fix to find correct python dir on lib64
|
||||
%{__perl} -pi -e 's|get_python_lib\(0,0,prefix|get_python_lib\(1,0,prefix|g' \
|
||||
@ -270,6 +272,9 @@ find examples/ -type f -exec chmod 0644 {} \;
|
||||
%endif
|
||||
|
||||
%changelog
|
||||
* Thu Dec 14 2006 Jarod Wilson <jwilson@redhat.com> 1.2.15-8
|
||||
- Fix for log grid memory leak (#201241)
|
||||
|
||||
* Tue Dec 12 2006 Jarod Wilson <jwilson@redhat.com> 1.2.15-7
|
||||
- Rebuild for python 2.5
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user