mirror of
https://github.com/YACReader/yacreader
synced 2025-05-28 03:10:27 -04:00
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:
parent
21b8b70657
commit
0414104067
@ -4,6 +4,8 @@ Version counting is based on semantic versioning (Major.Feature.Patch)
|
|||||||
|
|
||||||
## WIP
|
## WIP
|
||||||
|
|
||||||
|
### YACReader
|
||||||
|
*Fix segfault (or worse) when exiting YACReader while processing a comic
|
||||||
### YACReaderLibrary
|
### YACReaderLibrary
|
||||||
* Fixed drag&drop in the comics grid view.
|
* Fixed drag&drop in the comics grid view.
|
||||||
* Detect back/forward mouse buttons to move back and forward through the browsing history.
|
* Detect back/forward mouse buttons to move back and forward through the browsing history.
|
||||||
|
@ -382,20 +382,23 @@ Render::Render()
|
|||||||
|
|
||||||
Render::~Render()
|
Render::~Render()
|
||||||
{
|
{
|
||||||
if (comic != nullptr) {
|
for (auto *pr : pageRenders) {
|
||||||
comic->moveToThread(QApplication::instance()->thread());
|
if (pr != nullptr && pr->wait()) {
|
||||||
comic->deleteLater();
|
delete pr;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach (PageRender *pr, pageRenders)
|
|
||||||
if (pr != nullptr) {
|
|
||||||
if (pr->wait())
|
|
||||||
delete pr;
|
|
||||||
}
|
|
||||||
|
|
||||||
// TODO move to share_ptr
|
// TODO move to share_ptr
|
||||||
foreach (ImageFilter *filter, filters)
|
for (auto *filter : filters) {
|
||||||
delete filter;
|
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.
|
// Este método se encarga de forzar el renderizado de las páginas.
|
||||||
// Actualiza el buffer según es necesario.
|
// Actualiza el buffer según es necesario.
|
||||||
|
@ -890,8 +890,10 @@ void PDFComic::renderPage(int page)
|
|||||||
#endif
|
#endif
|
||||||
QByteArray ba;
|
QByteArray ba;
|
||||||
QBuffer buf(&ba);
|
QBuffer buf(&ba);
|
||||||
|
buf.open(QIODevice::WriteOnly);
|
||||||
img.save(&buf, "jpg", 96);
|
img.save(&buf, "jpg", 96);
|
||||||
_pages[page] = ba;
|
_pages[page] = ba;
|
||||||
|
buf.close();
|
||||||
emit imageLoaded(page);
|
emit imageLoaded(page);
|
||||||
emit imageLoaded(page, _pages[page]);
|
emit imageLoaded(page, _pages[page]);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user