Hello all,

I found that the functions pango_font_description_set_family and 
pango_font_description_set_size are leaking memory. I am using pango version 
1.4.0.

fontdesc =  pango_font_description_new();
pango_font_description_set_family(fontdesc,"courier");
pango_font_description_set_size(fontdesc,size*PANGO_SCALE);
pango_font_description_free (fontdesc);

When i ran the program (pasted below) and saw the memory usage profile from top 
command, i see that a the program allocates a lot of memory continuously. When 
i commented out the statements that i suspect are leaky, i dont see any 
contiuous memory allocation. Is this behaviour typical of pango or am i missing 
something. Please clarify my doubt.

Thanks in advance,
nerdy


#include <gtk/gtk.h>
int size=15;
 void g_exit_callback(GtkWidget *w)  { gtk_main_quit(); }
                                                                                
                                             
gboolean play_font(gpointer data)
{
GdkRectangle updateRect;
updateRect.x=0; updateRect.y=0;
updateRect.width=240; updateRect.height=320;
gtk_widget_draw(GTK_WIDGET(data),&updateRect);
}
                                                                                
                                             
void drawing_callback(GtkWidget *lWidget)
{
printf("drawing_callback\n");
PangoContext            *context=NULL;
PangoLayout             *layout=NULL;
PangoFontDescription    *fontdesc=NULL;
                                                                                
                                             
context = gtk_widget_get_pango_context(lWidget);
layout = pango_layout_new(context);
fontdesc =  pango_font_description_new();
                                                                               
// function that i suspect of leaks - one                                       
       
pango_font_description_set_family(fontdesc,"courier");
// function that i suspect of leaks - two
pango_font_description_set_size(fontdesc,size*PANGO_SCALE);
                                                                                
                                             
pango_layout_set_font_description (layout, fontdesc);
pango_layout_set_text(layout, "middle", 6);     
pango_layout_set_font_description (layout, fontdesc); 
pango_layout_set_text(layout, "middle", 6);
                                                                                
                                             
gdk_draw_layout(lWidget->window, lWidget->style->fg_gc[GTK_STATE_NORMAL] , 5 , 
10 , layout);
                                                                                
                                             
pango_font_description_free (fontdesc);
g_object_unref (layout);
size++;
}
                                                                                
                                             
                                                                                
                                             
int main(int argc, char **argv)
{
gtk_init(NULL,NULL);
                                                                                
                                             
GtkWidget *pwWindow;
GtkWidget *pWidget;
                                                                                
                                             
pwWindow = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_window_set_title (GTK_WINDOW (pwWindow), "TEST Widget");
gtk_window_set_position (GTK_WINDOW (pwWindow), GTK_WIN_POS_CENTER_ALWAYS);
g_signal_connect (G_OBJECT (pwWindow), "destroy",G_CALLBACK (g_exit_callback), 
NULL);
                                                                                
                                             
pWidget = gtk_drawing_area_new();
gtk_container_add(GTK_CONTAINER(pwWindow), pWidget);
g_signal_connect (G_OBJECT (pWidget),"expose_event", G_CALLBACK 
(drawing_callback), NULL);
g_timeout_add(100,(GSourceFunc)play_font,pWidget);
                                                                                
                                             
gtk_widget_show (pWidget);
gtk_widget_show (pwWindow);
gtk_main ();
return 0;
}

                
---------------------------------
Get amazing travel prices for air and hotel in one click on Yahoo! FareChase 
_______________________________________________
gtk-app-devel-list mailing list
gtk-app-devel-list@gnome.org
http://mail.gnome.org/mailman/listinfo/gtk-app-devel-list

Reply via email to