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
[email protected]
https://lists.gajim.org/cgi-bin/listinfo/commits