[Terminal] Add patch to fix cpu and memory issues.

Kevin Fenzi kevin at fedoraproject.org
Sun Jan 30 20:31:40 UTC 2011


commit 3fae29e4e927536df7d89e9a53bea34e8970a51d
Author: Kevin Fenzi <kevin at tummy.com>
Date:   Sun Jan 30 13:31:13 2011 -0700

    Add patch to fix cpu and memory issues.

 Terminal-0.4.5-background.patch |   99 +++++++++++++++++++++++++++++++++++++++
 Terminal.spec                   |    5 ++
 2 files changed, 104 insertions(+), 0 deletions(-)
---
diff --git a/Terminal-0.4.5-background.patch b/Terminal-0.4.5-background.patch
new file mode 100644
index 0000000..2e800e8
--- /dev/null
+++ b/Terminal-0.4.5-background.patch
@@ -0,0 +1,99 @@
+commit ec22089c8a5eed30e6991e18c5049ab5e2da8ce9
+Author: Nick Schermer <nick at xfce.org>
+Date:   Sun Jan 30 19:17:01 2011 +0100
+
+    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.
+
+ terminal/terminal-screen.c |   36 +++++++++++++++++++++++++++++++++---
+ 1 files changed, 33 insertions(+), 3 deletions(-)
+
+diff --git a/terminal/terminal-screen.c b/terminal/terminal-screen.c
+index 42801c4..1cd69ed 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))
diff --git a/Terminal.spec b/Terminal.spec
index 7455702..3ebf2f8 100644
--- a/Terminal.spec
+++ b/Terminal.spec
@@ -11,6 +11,7 @@ URL:            http://www.xfce.org/projects/terminal/
 Source0:        http://archive.xfce.org/src/apps/terminal/%{minorversion}/%{name}-%{version}.tar.bz2
 # http://bugzilla.xfce.org/show_bug.cgi?id=6686
 Patch0:         Terminal-0.4.5-fix_build_with_sealed_vte.patch
+Patch1:		Terminal-0.4.5-background.patch
 Buildroot:      %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
 
 BuildRequires:  vte-devel >= 0.17.1
@@ -31,6 +32,7 @@ it unique among X terminal emulators.
 %prep
 %setup -q
 %patch0 -p1 -b .sealed
+%patch1 -p1 -b .memleak
 
 %build
 %configure
@@ -86,6 +88,9 @@ gtk-update-icon-cache %{_datadir}/icons/hicolor &>/dev/null || :
 %{_mandir}/*/man1/Terminal.1.*
 
 %changelog
+* Sun Jan 30 2011 Kevin Fenzi <kevin at tummy.com> - 0.4.6-2
+- Add patch to fix cpu and memory issues. 
+
 * Sun Jan 30 2011 Kevin Fenzi <kevin at tummy.com> - 0.4.6-1
 - Update to 0.4.6
 


More information about the scm-commits mailing list