YACReader: Fix crash when exiting while processing a comic

When quitting YACReader while processing a comic, the comic thread needs
to be properly terminated to avoid segfaults and other possible problems.
This commit is contained in:
Felix Kauselmann 2022-11-12 23:09:27 +01:00 committed by Luis Ángel San Martín
parent 21b8b70657
commit 0414104067
3 changed files with 17 additions and 10 deletions

View File

@ -4,6 +4,8 @@ Version counting is based on semantic versioning (Major.Feature.Patch)
## WIP
### YACReader
*Fix segfault (or worse) when exiting YACReader while processing a comic
### YACReaderLibrary
* Fixed drag&drop in the comics grid view.
* Detect back/forward mouse buttons to move back and forward through the browsing history.

View File

@ -382,20 +382,23 @@ Render::Render()
Render::~Render()
{
if (comic != nullptr) {
comic->moveToThread(QApplication::instance()->thread());
comic->deleteLater();
for (auto *pr : pageRenders) {
if (pr != nullptr && pr->wait()) {
delete pr;
}
}
foreach (PageRender *pr, pageRenders)
if (pr != nullptr) {
if (pr->wait())
delete pr;
}
// TODO move to share_ptr
foreach (ImageFilter *filter, filters)
for (auto *filter : filters) {
delete filter;
}
if (comic != nullptr) {
comic->invalidate();
comic->deleteLater();
comic->thread()->quit();
comic->thread()->wait();
}
}
// Este método se encarga de forzar el renderizado de las páginas.
// Actualiza el buffer según es necesario.

View File

@ -890,8 +890,10 @@ void PDFComic::renderPage(int page)
#endif
QByteArray ba;
QBuffer buf(&ba);
buf.open(QIODevice::WriteOnly);
img.save(&buf, "jpg", 96);
_pages[page] = ba;
buf.close();
emit imageLoaded(page);
emit imageLoaded(page, _pages[page]);
}