[Pkg-xfce-commits] r4870 - in desktop/branches/experimental/xfce4-terminal/debian: . patches
Lionel Le Folgoc
mrpouit-guest at alioth.debian.org
Sun Jan 30 09:46:31 UTC 2011
Author: mrpouit-guest
Date: 2011-01-30 21:46:30 +0000 (Sun, 30 Jan 2011)
New Revision: 4870
Added:
desktop/branches/experimental/xfce4-terminal/debian/patches/01_fix-memleak-high-cpu-usage-vte-0.27.patch
desktop/branches/experimental/xfce4-terminal/debian/patches/series
Modified:
desktop/branches/experimental/xfce4-terminal/debian/changelog
Log:
* debian/patches:
- 01_fix-memleak-high-cpu-usage-vte-0.27.patch: fix a race between vte and
xfce4-terminal when setting the terminal background (Xfce #6921).
- series: added.
Modified: desktop/branches/experimental/xfce4-terminal/debian/changelog
===================================================================
--- desktop/branches/experimental/xfce4-terminal/debian/changelog 2011-01-30 19:02:08 UTC (rev 4869)
+++ desktop/branches/experimental/xfce4-terminal/debian/changelog 2011-01-30 21:46:30 UTC (rev 4870)
@@ -15,6 +15,10 @@
- update paths.
- add a -dbg package.
* debian/xfce4-terminal.install: added.
+ * debian/patches:
+ - 01_fix-memleak-high-cpu-usage-vte-0.27.patch: fix a race between vte and
+ xfce4-terminal when setting the terminal background (Xfce #6921).
+ - series: added.
-- Lionel Le Folgoc <mrpouit at gmail.com> Sun, 30 Jan 2011 17:30:26 +0100
Added: desktop/branches/experimental/xfce4-terminal/debian/patches/01_fix-memleak-high-cpu-usage-vte-0.27.patch
===================================================================
--- desktop/branches/experimental/xfce4-terminal/debian/patches/01_fix-memleak-high-cpu-usage-vte-0.27.patch (rev 0)
+++ desktop/branches/experimental/xfce4-terminal/debian/patches/01_fix-memleak-high-cpu-usage-vte-0.27.patch 2011-01-30 21:46:30 UTC (rev 4870)
@@ -0,0 +1,97 @@
+Description: Avoid racing on the size-changed signal (bug #6921)
+ Some internals in vte changed, which causes size-allocate signals on background
+ changes, resulting in the terminal allocating and leaking (because there is still
+ a leak in vte) backgrounds.
+ Fix this my doing the background update in an idle, which seems to resolve the
+ problem and to be sure, don't watch size changes when a transparent or plain
+ background is used.
+Origin: backport, http://bugzilla.xfce.org/attachment.cgi?id=3448
+Bug: http://bugzilla.xfce.org/show_bug.cgi?id=6921
+
+diff --git a/terminal/terminal-screen.c b/terminal/terminal-screen.c
+index 42801c4..fb447bb 100644
+--- a/terminal/terminal-screen.c
++++ b/terminal/terminal-screen.c
+@@ -90,6 +90,7 @@ static gchar *terminal_screen_parse_title (TerminalScreen
+ const gchar *title);
+ static gchar **terminal_screen_get_child_environment (TerminalScreen *screen);
+ static void terminal_screen_update_background (TerminalScreen *screen);
++static void terminal_screen_update_background_fast (TerminalScreen *screen);
+ static void terminal_screen_update_binding_backspace (TerminalScreen *screen);
+ static void terminal_screen_update_binding_delete (TerminalScreen *screen);
+ static void terminal_screen_update_colors (TerminalScreen *screen);
+@@ -141,6 +142,8 @@ struct _TerminalScreen
+
+ guint session_id;
+
++ gulong background_signal_id;
++
+ GPid pid;
+ gchar *working_directory;
+
+@@ -243,7 +246,6 @@ terminal_screen_init (TerminalScreen *screen)
+ "signal::selection-changed", G_CALLBACK (terminal_screen_vte_selection_changed), screen,
+ "signal::window-title-changed", G_CALLBACK (terminal_screen_vte_window_title_changed), screen,
+ "signal::resize-window", G_CALLBACK (terminal_screen_vte_resize_window), screen,
+- "swapped-signal::size-allocate", G_CALLBACK (terminal_screen_timer_background), screen,
+ "swapped-signal::style-set", G_CALLBACK (terminal_screen_update_colors), screen,
+ NULL);
+ gtk_box_pack_start (GTK_BOX (screen), screen->terminal, TRUE, TRUE, 0);
+@@ -712,6 +714,18 @@ terminal_screen_get_child_environment (TerminalScreen *screen)
+
+
+ static void
++terminal_screen_update_background_fast (TerminalScreen *screen)
++{
++ if (G_UNLIKELY (screen->background_timer_id == 0))
++ {
++ screen->background_timer_id = g_idle_add_full (G_PRIORITY_LOW, terminal_screen_timer_background,
++ screen, terminal_screen_timer_background_destroy);
++ }
++}
++
++
++
++static void
+ terminal_screen_update_background (TerminalScreen *screen)
+ {
+ if (G_UNLIKELY (screen->background_timer_id != 0))
+@@ -1222,9 +1236,25 @@ terminal_screen_timer_background (gpointer user_data)
+ if (G_LIKELY (image != NULL))
+ g_object_unref (G_OBJECT (image));
+ g_object_unref (G_OBJECT (loader));
++
++ /* refresh background on size changes */
++ if (screen->background_signal_id == 0)
++ {
++ screen->background_signal_id =
++ g_signal_connect_swapped (G_OBJECT (screen->terminal), "size-allocate",
++ G_CALLBACK (terminal_screen_update_background_fast), screen);
++ }
+ }
+ else
+ {
++ /* stop updating on size changes */
++ if (screen->background_signal_id != 0)
++ {
++ g_signal_handler_disconnect (G_OBJECT (screen->terminal), screen->background_signal_id);
++ screen->background_signal_id = 0;
++ }
++
++ /* WARNING: the causes a resize too! */
+ vte_terminal_set_background_image (VTE_TERMINAL (screen->terminal), NULL);
+ }
+
+@@ -1365,7 +1395,7 @@ terminal_screen_launch_child (TerminalScreen *screen)
+
+ if (!vte_terminal_fork_command_full (VTE_TERMINAL (screen->terminal),
+ update ? VTE_PTY_DEFAULT : VTE_PTY_NO_LASTLOG | VTE_PTY_NO_UTMP | VTE_PTY_NO_WTMP,
+- screen->working_directory, argv2, env,
++ screen->working_directory, argv2, env,
+ spawn_flags,
+ NULL, NULL,
+ &screen->pid, &error))
+--- /dev/null
++++ xfce4-terminal-0.4.6/po/POTFILES.skip
+@@ -0,0 +1 @@
++.pc/01_fix-memleak-high-cpu-usage-vte-0.27.patch/terminal/terminal-screen.c
Added: desktop/branches/experimental/xfce4-terminal/debian/patches/series
===================================================================
--- desktop/branches/experimental/xfce4-terminal/debian/patches/series (rev 0)
+++ desktop/branches/experimental/xfce4-terminal/debian/patches/series 2011-01-30 21:46:30 UTC (rev 4870)
@@ -0,0 +1 @@
+01_fix-memleak-high-cpu-usage-vte-0.27.patch
More information about the Pkg-xfce-commits
mailing list