[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