rpms/rrdtool/FC-5 rrdtool-1.2.15-log_grid_leak.patch, NONE, 1.1 rrdtool-1.2.15-long_error_string.patch, NONE, 1.1 rrdtool.spec, 1.25, 1.26

Jarod Wilson (jwilson) fedora-extras-commits at redhat.com
Tue Jan 2 18:07:25 UTC 2007


Author: jwilson

Update of /cvs/extras/rpms/rrdtool/FC-5
In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv32621

Modified Files:
	rrdtool.spec 
Added Files:
	rrdtool-1.2.15-log_grid_leak.patch 
	rrdtool-1.2.15-long_error_string.patch 
Log Message:
Resync with devel branch to pick up upstream fixes

rrdtool-1.2.15-log_grid_leak.patch:

--- NEW FILE rrdtool-1.2.15-log_grid_leak.patch ---
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

rrdtool-1.2.15-long_error_string.patch:

--- NEW FILE rrdtool-1.2.15-long_error_string.patch ---
Index: rrdtool/src/rrd_not_thread_safe.c
===================================================================
--- rrdtool/src/rrd_not_thread_safe.c (revision 860)
+++ rrdtool/src/rrd_not_thread_safe.c (revision 935)
@@ -15,18 +15,24 @@
 #define ERRBUFLEN 256
 
-static char rrd_error[MAXLEN] = "\0";
-static char rrd_liberror[ERRBUFLEN] = "\0";
+static char rrd_error[MAXLEN+10];
+static char rrd_liberror[ERRBUFLEN+10];
+static int  rrd_context_init = 0;
 /* The global context is very useful in the transition period to even
    more thread-safe stuff, it can be used whereever we need a context
    and do not need to worry about concurrency. */
 static struct rrd_context global_ctx = {
-    sizeof(rrd_error),
-    sizeof(rrd_liberror),
+    MAXLEN,
+    ERRBUFLEN,
     rrd_error, 
     rrd_liberror
 };
-#include <stdarg.h>
+/* #include <stdarg.h> */
 
-struct rrd_context *rrd_get_context() {
+struct rrd_context *rrd_get_context(void) {
+    if (! rrd_context_init ){
+	rrd_context_init = 1;
+        global_ctx.rrd_error[0]='\0';
+        global_ctx.lib_errstr[0]='\0';
+    }
     return &global_ctx;
 }


Index: rrdtool.spec
===================================================================
RCS file: /cvs/extras/rpms/rrdtool/FC-5/rrdtool.spec,v
retrieving revision 1.25
retrieving revision 1.26
diff -u -r1.25 -r1.26
--- rrdtool.spec	14 Nov 2006 19:13:43 -0000	1.25
+++ rrdtool.spec	2 Jan 2007 18:06:54 -0000	1.26
@@ -7,7 +7,7 @@
 Summary: Round Robin Database Tool to store and display time-series data
 Name: rrdtool
 Version: 1.2.15
-Release: 6%{?dist}
+Release: 9%{?dist}
 License: GPL
 Group: Applications/Databases
 URL: http://people.ee.ethz.ch/~oetiker/webtools/%{name}/
@@ -15,6 +15,8 @@
 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
+Patch3: rrdtool-1.2.15-long_error_string.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 +114,8 @@
 %patch0 -p0 -b .php
 %endif
 %patch1 -p1 -b .initrrdtool
+%patch2 -p1 -b .leak
+%patch3 -p1 -b .longstring
 
 # 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 +274,16 @@
 %endif
 
 %changelog
+* Tue Jan 02 2007 Jarod Wilson <jwilson at redhat.com> 1.2.15-9
+- Fix crash with long error strings (upstream
+  changesets 929 and 935)
+
+* Thu Dec 14 2006 Jarod Wilson <jwilson at redhat.com> 1.2.15-8
+- Fix for log grid memory leak (#201241)
+
+* Tue Dec 12 2006 Jarod Wilson <jwilson at redhat.com> 1.2.15-7
+- Rebuild for python 2.5
+
 * Tue Nov 14 2006 Jarod Wilson <jwilson at redhat.com> 1.2.15-6
 - Conditionalize python, php and tcl bits (Resolves #203275)
 




More information about the fedora-extras-commits mailing list