From ec72e4f39dcf8193a5b04afa6dbe0916caf57c2d Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Mon, 3 Jan 2022 21:23:13 +0530 Subject: [PATCH] Check for deletion in worker thread before emitting signal --- src/calibre/gui2/viewer/ui.py | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/calibre/gui2/viewer/ui.py b/src/calibre/gui2/viewer/ui.py index 6783bcb6c8..4ca9eaf244 100644 --- a/src/calibre/gui2/viewer/ui.py +++ b/src/calibre/gui2/viewer/ui.py @@ -12,7 +12,7 @@ from hashlib import sha256 from qt.core import ( QApplication, QCursor, QDockWidget, QEvent, QMainWindow, QMenu, QMimeData, QModelIndex, QPixmap, Qt, QTimer, QToolBar, QUrl, QVBoxLayout, QWidget, - pyqtSignal + pyqtSignal, sip ) from threading import Thread @@ -503,13 +503,16 @@ class EbookViewer(MainWindow): try: ans = prepare_book(pathtoebook, force=reload_book, prepare_notify=self.prepare_notify) except WorkerError as e: - self.book_prepared.emit(False, {'exception': e, 'tb': e.orig_tb, 'pathtoebook': pathtoebook}) + if not sip.isdeleted(self): + self.book_prepared.emit(False, {'exception': e, 'tb': e.orig_tb, 'pathtoebook': pathtoebook}) except Exception as e: import traceback - self.book_prepared.emit(False, {'exception': e, 'tb': traceback.format_exc(), 'pathtoebook': pathtoebook}) + if not sip.isdeleted(self): + self.book_prepared.emit(False, {'exception': e, 'tb': traceback.format_exc(), 'pathtoebook': pathtoebook}) else: performance_monitor('prepared emitted') - self.book_prepared.emit(True, {'base': ans, 'pathtoebook': pathtoebook, 'open_at': open_at, 'reloaded': reload_book}) + if not sip.isdeleted(self): + self.book_prepared.emit(True, {'base': ans, 'pathtoebook': pathtoebook, 'open_at': open_at, 'reloaded': reload_book}) def prepare_notify(self): self.book_preparation_started.emit()