Code

hunting down pango allocation issues ... now the memory loss in rrd_graph seems to...
authoroetiker <oetiker@a5681a0c-68f1-0310-ab6d-d61299d08faa>
Tue, 17 Aug 2010 21:41:03 +0000 (21:41 +0000)
committeroetiker <oetiker@a5681a0c-68f1-0310-ab6d-d61299d08faa>
Tue, 17 Aug 2010 21:41:03 +0000 (21:41 +0000)
of graphs generated. fix for #208

git-svn-id: svn://svn.oetiker.ch/rrdtool/branches/1.3@2117 a5681a0c-68f1-0310-ab6d-d61299d08faa

program/src/rrd_graph.c

index a65bca64378904a84e7c24ebf7c77b9d6ae4250a..8f5f44f90b60a7c0c560dbfd8158d5d8c14a70ca 100644 (file)
@@ -325,6 +325,12 @@ int im_free(
         free(im->gdes[i].rpnp);
     }
     free(im->gdes);
+
+    for (i = 0; i < DIM(text_prop);i++){
+        pango_font_description_free(im->text_prop[i].font_desc);
+        im->text_prop[i].font_desc = NULL;
+    }
+
     if (im->font_options)
         cairo_font_options_destroy(im->font_options);
 
@@ -332,6 +338,8 @@ int im_free(
         status = cairo_status(im->cr);
         cairo_destroy(im->cr);
     }
+
+
     if (im->rendered_image) {
         free(im->rendered_image);
     }
@@ -3781,6 +3789,8 @@ rrd_set_font_desc (
     if (font){
         strncpy(im->text_prop[prop].font, font, sizeof(text_prop[prop].font) - 1);        
         im->text_prop[prop].font[sizeof(text_prop[prop].font) - 1] = '\0';   
+        /* if we already got one, drop it first */
+        pango_font_description_free(im->text_prop[prop].font_desc);
         im->text_prop[prop].font_desc = pango_font_description_from_string( font );        
     };
     if (size > 0){  
@@ -3864,6 +3874,7 @@ void rrd_graph_init(
 
     for (i = 0; i < DIM(text_prop); i++) {
         im->text_prop[i].size = -1;
+        im->text_prop[i].font_desc = NULL;
         rrd_set_font_desc(im,i, deffont ? deffont : text_prop[i].font,text_prop[i].size);
     }
 
@@ -3878,6 +3889,7 @@ void rrd_graph_init(
     pango_cairo_update_context(im->cr,context);
 
     im->layout = pango_layout_new(context);
+    g_object_unref (context);
 
 //  im->layout = pango_cairo_create_layout(im->cr);