aboutsummaryrefslogtreecommitdiff
path: root/tests/CMakeLists.txt
diff options
context:
space:
mode:
authorKenny Daniel <platypii@gmail.com>2026-04-13 00:17:32 -0700
committerKenny Daniel <platypii@gmail.com>2026-04-13 00:21:02 -0700
commit8880ce63d6c1c02c08f1ae4e8023ac99a7533810 (patch)
treef775961832906a4717b01754b733222ea856f164 /tests/CMakeLists.txt
parent08c5540e36fbd92d48ea3cc5b4ea4e8731c05a96 (diff)
downloadlibayatana-indicator-8880ce63d6c1c02c08f1ae4e8023ac99a7533810.tar.gz
libayatana-indicator-8880ce63d6c1c02c08f1ae4e8023ac99a7533810.tar.bz2
libayatana-indicator-8880ce63d6c1c02c08f1ae4e8023ac99a7533810.zip
src/indicator-ng.c: Fix GtkCssProvider memory leak in indicator_ng_set_label
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
Diffstat (limited to 'tests/CMakeLists.txt')
-rw-r--r--tests/CMakeLists.txt21
1 files changed, 21 insertions, 0 deletions
diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt
index a461dab..3f0ef94 100644
--- a/tests/CMakeLists.txt
+++ b/tests/CMakeLists.txt
@@ -195,6 +195,26 @@ add_custom_command(
)
add_test("test-desktop-shortcuts-tester" "test-desktop-shortcuts-tester")
+# test-css-provider-leak
+add_test_executable_by_name(test-css-provider-leak)
+
+# test-css-provider-leak-tester
+add_custom_command(
+ OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/test-css-provider-leak-tester"
+ DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/test-css-provider-leak"
+ WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+ VERBATIM
+ COMMAND
+ echo "#!/bin/sh" > "${CMAKE_CURRENT_BINARY_DIR}/test-css-provider-leak-tester"
+ COMMAND
+ echo ". ${CMAKE_CURRENT_SOURCE_DIR}/run-xvfb.sh" >> "${CMAKE_CURRENT_BINARY_DIR}/test-css-provider-leak-tester"
+ COMMAND
+ echo "gtester -k --verbose -o=${CMAKE_CURRENT_BINARY_DIR}/loader-check-results.xml ${CMAKE_CURRENT_BINARY_DIR}/test-css-provider-leak" >> "${CMAKE_CURRENT_BINARY_DIR}/test-css-provider-leak-tester"
+ COMMAND
+ chmod +x "${CMAKE_CURRENT_BINARY_DIR}/test-css-provider-leak-tester"
+)
+add_test("test-css-provider-leak-tester" "test-css-provider-leak-tester")
+
if (FLAVOUR_GTK3 AND ENABLE_IDO)
# test-indicator-ng
add_test_executable_by_name(test-indicator-ng)
@@ -267,6 +287,7 @@ set (ALL_TESTERS
"service-version-tester"
"service-version-multiwatch-tester"
"test-desktop-shortcuts-tester"
+ "test-css-provider-leak-tester"
"loader-tester"
)