URI: 
       tqt update checker: do not keep main window ref so it can gc-ed - electrum - Electrum Bitcoin wallet
  HTML git clone https://git.parazyd.org/electrum
   DIR Log
   DIR Files
   DIR Refs
   DIR Submodules
       ---
   DIR commit 0f6cbfba8ec96c886582de270e106d7cae0fb322
   DIR parent 2105c6c4e6085f9c53eb58dfe8447f2b5b1abad7
  HTML Author: SomberNight <somber.night@protonmail.com>
       Date:   Fri,  1 May 2020 06:39:55 +0200
       
       qt update checker: do not keep main window ref so it can gc-ed
       
       related: #4905
       
       Diffstat:
         M electrum/gui/qt/main_window.py      |       5 +++--
         M electrum/gui/qt/update_checker.py   |      17 ++++++++---------
       
       2 files changed, 11 insertions(+), 11 deletions(-)
       ---
   DIR diff --git a/electrum/gui/qt/main_window.py b/electrum/gui/qt/main_window.py
       t@@ -299,7 +299,7 @@ class ElectrumWindow(QMainWindow, MessageBoxMixin, Logger):
                            self.update_check_button.setText(_("Update to Electrum {} is available").format(v))
                            self.update_check_button.clicked.connect(lambda: self.show_update_check(v))
                            self.update_check_button.show()
       -            self._update_check_thread = UpdateCheckThread(self)
       +            self._update_check_thread = UpdateCheckThread()
                    self._update_check_thread.checked.connect(on_version_received)
                    self._update_check_thread.start()
        
       t@@ -465,6 +465,7 @@ class ElectrumWindow(QMainWindow, MessageBoxMixin, Logger):
            def close_wallet(self):
                if self.wallet:
                    self.logger.info(f'close_wallet {self.wallet.storage.path}')
       +            self.wallet.thread = None
                run_hook('close_wallet', self.wallet)
        
            @profiler
       t@@ -758,7 +759,7 @@ class ElectrumWindow(QMainWindow, MessageBoxMixin, Logger):
                                   _("Uses icons from the Icons8 icon pack (icons8.com).")))
        
            def show_update_check(self, version=None):
       -        self.gui_object._update_check = UpdateCheck(self, version)
       +        self.gui_object._update_check = UpdateCheck(latest_version=version)
        
            def show_report_bug(self):
                msg = ' '.join([
   DIR diff --git a/electrum/gui/qt/update_checker.py b/electrum/gui/qt/update_checker.py
       t@@ -16,6 +16,7 @@ from electrum import ecc
        from electrum.i18n import _
        from electrum.util import make_aiohttp_session
        from electrum.logging import Logger
       +from electrum.network import Network
        
        
        class UpdateCheck(QDialog, Logger):
       t@@ -26,8 +27,7 @@ class UpdateCheck(QDialog, Logger):
                "13xjmVAB1EATPP8RshTE8S8sNwwSUM9p1P",
            )
        
       -    def __init__(self, main_window, latest_version=None):
       -        self.main_window = main_window
       +    def __init__(self, *, latest_version=None):
                QDialog.__init__(self)
                self.setWindowTitle('Electrum - ' + _('Update Check'))
                self.content = QVBoxLayout()
       t@@ -54,7 +54,7 @@ class UpdateCheck(QDialog, Logger):
        
                self.update_view(latest_version)
        
       -        self.update_check_thread = UpdateCheckThread(self.main_window)
       +        self.update_check_thread = UpdateCheckThread()
                self.update_check_thread.checked.connect(self.on_version_retrieved)
                self.update_check_thread.failed.connect(self.on_retrieval_failed)
                self.update_check_thread.start()
       t@@ -97,15 +97,15 @@ class UpdateCheckThread(QThread, Logger):
            checked = pyqtSignal(object)
            failed = pyqtSignal()
        
       -    def __init__(self, main_window):
       +    def __init__(self):
                QThread.__init__(self)
                Logger.__init__(self)
       -        self.main_window = main_window
       +        self.network = Network.get_instance()
        
            async def get_update_info(self):
                # note: Use long timeout here as it is not critical that we get a response fast,
                #       and it's bad not to get an update notification just because we did not wait enough.
       -        async with make_aiohttp_session(proxy=self.main_window.network.proxy, timeout=120) as session:
       +        async with make_aiohttp_session(proxy=self.network.proxy, timeout=120) as session:
                    async with session.get(UpdateCheck.url) as result:
                        signed_version_dict = await result.json(content_type=None)
                        # example signed_version_dict:
       t@@ -131,12 +131,11 @@ class UpdateCheckThread(QThread, Logger):
                        return StrictVersion(version_num.strip())
        
            def run(self):
       -        network = self.main_window.network
       -        if not network:
       +        if not self.network:
                    self.failed.emit()
                    return
                try:
       -            update_info = asyncio.run_coroutine_threadsafe(self.get_update_info(), network.asyncio_loop).result()
       +            update_info = asyncio.run_coroutine_threadsafe(self.get_update_info(), self.network.asyncio_loop).result()
                except Exception as e:
                    self.logger.info(f"got exception: '{repr(e)}'")
                    self.failed.emit()