On 12/30/2009 04:03 AM, hermann wrote:
> Hi
> gtk_widget_get_pango_context(widget) didn't need to unref, it's owned by
> the widget you get it from. Unlike the context returned by
> gtk_widget_create_pango_context()
>
>   I'm use mostly  style->font_desc instead.
>
>        PangoLayout *pl;
>        PangoRectangle rect;
>
>        GtkStyle *style = gtk_widget_get_style(widget);
>
>        pango_font_description_set_family(style->font_desc, "sans");
>        pango_font_description_set_size(style->font_desc, 8 *
> PANGO_SCALE);
>
>        gtk_widget_modify_font(widget, style->font_desc);
>        pl = pango_layout_new(style->font_desc);
>        pango_layout_set_text(pl, "99", -1);
>        pango_layout_get_pixel_extents(pl,&rect, NULL);
>
>
>        g_object_unref(pl);
>
> regards  hermann
>    


Thanks. That's a nicer way of doing things but this call segfaults

pango_layout_new(style->font_desc)

gcc tells me this:

note: expected ‘struct PangoContext *’ but argument is of type ‘struct 
PangoFontDescription *’

I have replaced it with this:

pl = pango_layout_new(gtk_widget_get_pango_context(widget));


But still get a memory leak. This makes it happen faster than the 
previous method I was using. Back down to a couple of minutes before I 
see the leak from 10 previously.




Patrick Shirkey
Boost Hardware Ltd



>
> Am Mittwoch, den 30.12.2009, 01:18 +1100 schrieb Patrick Shirkey:
>    
>> Hi,
>>
>> I have some code in gtk2 that is leaking and I can't fix it. Over the
>> past two nights I have managed to get the leak down from 200MB/minute to
>> 200MB/10 minutes but I can't get rid of it completely. It's annoying
>> because it increments in 200MB blocks so I have to wait for up to 10
>> mins to see if it is fixed or not. I have tried valgrind but it doesn't
>> really like jack and did not give me any useful output. I have traced
>> the leak through normal debugging and have verified that it does not
>> happen if I disable this offending code.
>>
>> This code is run in the widgets realize event and the event is triggered
>> every 500ms.
>>
>>
>>     PangoContext *pc = gtk_widget_get_pango_context(widget);
>>     PangoLayout *pl;
>>     PangoFontDescription *pfd;
>>     PangoRectangle rect;
>>
>>     pfd = pango_font_description_new();
>>     pango_font_description_set_family(pfd, "sans");
>>     pango_font_description_set_size(pfd, 8 * PANGO_SCALE);
>>     pango_context_set_font_description(pc, pfd);
>>     pl = pango_layout_new(pc);
>>     pango_layout_set_text(pl, "99", -1);
>>     pango_layout_get_pixel_extents(pl,&rect, NULL);
>>
>>     pango_font_description_free(pfd);
>>     g_object_unref(pc);
>>
>>
>> If I add another
>>
>>        g_object_unref(pl) ;
>>
>>
>> The app code will compile but when I run it I get this segfault:
>>
>> *** glibc detected *** ./src/jackeq: free(): invalid pointer:
>> 0x0000000001b87a60 ***
>>
>>
>> I can have one g_object_unref for either pl or pc without segfaulting
>> but not both.
>>
>>
>> I'm pretty sure this is the last leak I have to catch for the merged
>> gtkmeter.c/gtkmeterscale.c and I can't release jackeq until it is fixed.
>> Any assistance with this one is appreciated.
>>
>>
>> Cheers.
>>
>>      
>    
_______________________________________________
Linux-audio-dev mailing list
Linux-audio-dev@lists.linuxaudio.org
http://lists.linuxaudio.org/listinfo/linux-audio-dev

Reply via email to