From bf804f18d4e0cccc109c19f2156ee32a861b987e Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Philipp=20H=C3=B6rist?= <philipp@hoerist.com>
Date: Mon, 8 Apr 2019 22:43:09 +0200
Subject: [PATCH] Fix memory leak with spell checker

- Dont shadow widgets destroy()
- Dont bind spell checker to class attribute, this prevents its finalize

Fixes #8822
---
 gajim/chat_control_base.py | 7 +++----
 gajim/message_textview.py  | 5 -----
 2 files changed, 3 insertions(+), 9 deletions(-)

diff --git a/gajim/chat_control_base.py b/gajim/chat_control_base.py
index 7ad093c469..2fa6cf2105 100644
--- a/gajim/chat_control_base.py
+++ b/gajim/chat_control_base.py
@@ -323,7 +323,6 @@ class ChatControlBase(MessageControl, ChatCommandProcessor, CommandTools):
         self.set_emoticon_popover()
 
         # Attach speller
-        self.spell_checker = None
         self.set_speller()
         self.conv_textview.tv.show()
 
@@ -474,15 +473,15 @@ class ChatControlBase(MessageControl, ChatCommandProcessor, CommandTools):
         if gspell_lang is None:
             return
 
-        self.spell_checker = Gspell.Checker.new(gspell_lang)
+        spell_checker = Gspell.Checker.new(gspell_lang)
         spell_buffer = Gspell.TextBuffer.get_from_gtk_text_buffer(
             self.msg_textview.get_buffer())
-        spell_buffer.set_spell_checker(self.spell_checker)
+        spell_buffer.set_spell_checker(spell_checker)
         spell_view = Gspell.TextView.get_from_gtk_text_view(self.msg_textview)
         spell_view.set_inline_spell_checking(False)
         spell_view.set_enable_language_menu(True)
 
-        self.spell_checker.connect('notify::language', self.on_language_changed)
+        spell_checker.connect('notify::language', self.on_language_changed)
 
     def get_speller_language(self):
         per_type = 'contacts'
diff --git a/gajim/message_textview.py b/gajim/message_textview.py
index 3433f5f8e1..1f5e3b54fc 100644
--- a/gajim/message_textview.py
+++ b/gajim/message_textview.py
@@ -17,8 +17,6 @@
 # You should have received a copy of the GNU General Public License
 # along with Gajim. If not, see <http://www.gnu.org/licenses/>.
 
-import gc
-
 from gi.repository import Gtk
 from gi.repository import GLib
 from gi.repository import GObject
@@ -408,9 +406,6 @@ class MessageTextView(Gtk.TextView):
             self.add_child_at_anchor(image, anchor)
         buffer_.insert_at_cursor(' ')
 
-    def destroy(self):
-        GLib.idle_add(gc.collect)
-
     def clear(self, widget=None):
         """
         Clear text in the textview
-- 
GitLab