From 8cf6ace0e7331c75f1da2fe694faf756ba79421d Mon Sep 17 00:00:00 2001 From: Florian Bruhin Date: Sat, 28 Nov 2015 20:30:41 +0100 Subject: [PATCH] Ignore deleted windows when saving session. This hopefully helps with a crash on Windows which happens from time to time during some multi-window tabs.feature tests: Traceback (most recent call last): File "...\mainwindow\mainwindow.py", line 446, in closeEvent self._do_close() File "...\mainwindow\mainwindow.py", line 405, in _do_close objreg.get('session-manager').save_last_window_session() File "...\misc\sessions.py", line 247, in save_last_window_session self._last_window_session = self._save_all() File "...\misc\sessions.py", line 183, in _save_all win_data['geometry'] = bytes(main_window.saveGeometry()) RuntimeError: wrapped C/C++ object of type MainWindow has been deleted --- qutebrowser/misc/sessions.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/qutebrowser/misc/sessions.py b/qutebrowser/misc/sessions.py index 2dc5f8c09..1b268dfed 100644 --- a/qutebrowser/misc/sessions.py +++ b/qutebrowser/misc/sessions.py @@ -20,6 +20,7 @@ """Management of sessions - saved tabs/windows.""" import os +import sip import os.path from PyQt5.QtCore import pyqtSignal, QUrl, QObject, QPoint, QTimer @@ -176,6 +177,11 @@ class SessionManager(QObject): window=win_id) main_window = objreg.get('main-window', scope='window', window=win_id) + + # We could be in the middle of destroying a window here + if sip.isdeleted(main_window): + continue + win_data = {} active_window = QApplication.instance().activeWindow() if getattr(active_window, 'win_id', None) == win_id: