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