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