<feed xmlns='http://www.w3.org/2005/Atom'>
<title>libayatana-indicator/tests/test-css-provider-leak.c, branch main</title>
<subtitle>Ayatana Indicators Shared Library
</subtitle>
<id>https://openid.arctica-project.org/libayatana-indicator/atom?h=main</id>
<link rel='self' href='https://openid.arctica-project.org/libayatana-indicator/atom?h=main'/>
<link rel='alternate' type='text/html' href='https://openid.arctica-project.org/libayatana-indicator/'/>
<updated>2026-04-13T07:21:02+00:00</updated>
<entry>
<title>src/indicator-ng.c: Fix GtkCssProvider memory leak in indicator_ng_set_label</title>
<updated>2026-04-13T07:21:02+00:00</updated>
<author>
<name>Kenny Daniel</name>
<email>platypii@gmail.com</email>
</author>
<published>2026-04-13T07:17:32+00:00</published>
<link rel='alternate' type='text/html' href='https://openid.arctica-project.org/libayatana-indicator/commit/?id=8880ce63d6c1c02c08f1ae4e8023ac99a7533810'/>
<id>urn:sha1:8880ce63d6c1c02c08f1ae4e8023ac99a7533810</id>
<content type='text'>
indicator_ng_set_label() created a new GtkCssProvider and added it to
the label's GtkStyleContext on every call, without removing old ones.
gtk_style_context_add_provider() accumulates providers, so each call
leaked a provider (~1 KB).

Since ayatana-indicator-datetime sends action-state-changed once per
second to update the clock label, this leaked ~86,400 providers/day,
causing mate-indicator-applet-complete to accumulate ~1.4 GB RSS over
7 days.

Fix by storing a single GtkCssProvider in the IndicatorNg struct and
reusing it. The provider is created on first use and cleaned up in
dispose.

Test results (100,000 iterations of set_label):
  Before fix: +99,692 KB RSS growth
  After fix:  +0 KB RSS growth
</content>
</entry>
</feed>
