Re: Memory problem
- From: James Henstridge <james daa com au>
- To: Antony Stace <antony claire co jp>
- Cc: gnome-devel-list gnome org, gtk-app-devel-list gnome org, gtk-list gnome org
- Subject: Re: Memory problem
- Date: Thu, 14 Sep 2000 16:19:22 +0800 (WST)
On Thu, 14 Sep 2000, Antony Stace wrote:
>
> Hi Folks
>
> I have a function which is eating up lots of memory. The function is
> listed below and is called every 1 second with the same
>
> GtkWidget *widget
>
> being passed to it each time.
> What do I need to do to stop it eating up memory. All I want the
> function to do is set the colours of itself and its parent(if it has
> one).
> Any help greatly appreciated.
>
> Cheers
> Tony
>
>
>
>
> int SetWidgetColour(GtkWidget *widget, int bordersize, int red,
> int green, int blue)
> {
> GtkStyle *new_style;
> GdkColor color;
>
> color.red = red;
> color.green = green;
> color.blue = blue;
>
> gdk_color_alloc(gdk_colormap_get_system(), &color);
> new_style = gtk_style_copy(gtk_widget_get_default_style());
> new_style->bg[GTK_STATE_NORMAL] = color;
> new_style->bg[GTK_STATE_PRELIGHT] = color;
> new_style->bg[GTK_STATE_ACTIVE] = color;
> gtk_style_detach (widget->style);
this line shouldn't be necessary.
> gtk_widget_set_style(GTK_WIDGET(widget), new_style);
You are leaking new_style with each call to this function. When you
create new_style, it has a reference count of 1. When you call
..._set_style(), its reference count is incremented to 2. When you set a
new style on widget, the reference count goes back to 1, so is never
destroyed.
To fix the problem, add the following statement after set_style():
gtk_style_unref(new_style);
>
> return TRUE;
> }
>
James.
--
Email: james daa com au
WWW: http://www.daa.com.au/~james/
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]