Philipp Hörist pushed to branch mainwindow at gajim / gajim


Commits:
f5deffef by lovetox at 2021-02-27T17:57:44+01:00
Move finalize check to app module

- - - - -


4 changed files:

- gajim/common/app.py
- gajim/gtk/groupchat_roster.py
- gajim/gtk/main.py
- gajim/gtk/util.py


Changes:

=====================================
gajim/common/app.py
=====================================
@@ -30,15 +30,18 @@
 from typing import Optional  # pylint: disable=unused-import
 from typing import cast
 
+import gc
 import os
 import sys
 import logging
 import uuid
+import weakref
 from collections import namedtuple
 from collections import defaultdict
 
 import nbxmpp
 from gi.repository import Gdk
+from gi.repository import GLib
 
 import gajim
 from gajim.common import config as c_config
@@ -683,3 +686,32 @@ def cancel_tasks(obj):
     task_list = _tasks[id_]
     for task in task_list:
         task.cancel()
+
+
+def check_finalize(obj):
+    if 'GAJIM_LEAK' not in os.environ:
+        return
+    name = obj.__class__.__name__
+    logger = logging.getLogger('gajim.leak')
+    finalizer = weakref.finalize(obj, logger.info, f'{name} has been 
finalized')
+
+    def is_finalizer_ref(ref):
+        try:
+            return isinstance(ref[2][0], str)
+        except Exception:
+            return False
+
+    def check_finalized():
+        tup = finalizer.peek()
+        if tup is None:
+            return
+
+        gc.collect()
+        logger.warning('%s not finalized', name)
+        logger.warning('References:')
+        for ref in gc.get_referrers(tup[0]):
+            if is_finalizer_ref(ref):
+                continue
+            logger.warning(ref)
+
+    GLib.timeout_add_seconds(2, check_finalized)


=====================================
gajim/gtk/groupchat_roster.py
=====================================
@@ -20,7 +20,6 @@
 from gi.repository import Gtk
 from gi.repository import GLib
 from gi.repository import GObject
-from nbxmpp.const import Role
 from nbxmpp.const import Affiliation
 
 from gajim.common import app
@@ -28,7 +27,6 @@
 from gajim.common.helpers import get_uf_role
 from gajim.common.helpers import get_uf_affiliation
 from gajim.common.helpers import jid_is_blocked
-from gajim.common.helpers import event_filter
 from gajim.common.const import AvatarSize
 from gajim.common.const import StyleAttr
 
@@ -485,3 +483,4 @@ def _on_destroy(self, _roster):
         self._store = None
         self._tooltip.destroy()
         self._tooltip = None
+        app.check_finalize(self)


=====================================
gajim/gtk/main.py
=====================================
@@ -404,7 +404,6 @@ def add_chat_for_workspace(self,
                                type_,
                                pinned=False,
                                select=False):
-
         if self.chat_exists(account, jid):
             if select:
                 self._chat_list_stack.select_chat(account, jid)


=====================================
gajim/gtk/util.py
=====================================
@@ -20,9 +20,7 @@
 from typing import Tuple
 from typing import Optional
 
-import gc
 import sys
-import weakref
 import logging
 import math
 import textwrap
@@ -855,31 +853,6 @@ def _destroy(*args):
     widget.connect('destroy', _destroy)
 
 
-def check_finalize(obj, name):
-    finalizer = weakref.finalize(obj, log.info, f'{name} has been finalized')
-
-    def is_finalizer_ref(ref):
-        try:
-            return isinstance(ref[2][0], str)
-        except Exception:
-            return False
-
-    def check_finalized():
-        tup = finalizer.peek()
-        if tup is None:
-            return
-
-        gc.collect()
-        log.warning('%s not finalized', name)
-        log.warning('References:')
-        for ref in gc.get_referrers(tup[0]):
-            if is_finalizer_ref(ref):
-                continue
-            log.warning(ref)
-
-    GLib.timeout_add_seconds(2, check_finalized)
-
-
 def _connect_destroy(sender, func, detailed_signal, handler, *args, **kwargs):
     """Connect a bound method to a foreign object signal and disconnect
     if the object the method is bound to emits destroy (Gtk.Widget subclass).



View it on GitLab: 
https://dev.gajim.org/gajim/gajim/-/commit/f5deffef340f9a6f7ad2344864278412cef4132b

-- 
View it on GitLab: 
https://dev.gajim.org/gajim/gajim/-/commit/f5deffef340f9a6f7ad2344864278412cef4132b
You're receiving this email because of your account on dev.gajim.org.


_______________________________________________
Commits mailing list
Commits@gajim.org
https://lists.gajim.org/cgi-bin/listinfo/commits

Reply via email to