mirror of
https://github.com/subsurface/subsurface.git
synced 2025-02-19 22:16:15 +00:00
When handing off a picture to a worker thread, copy it first
as otherwise we crash when the picture is freed before the worker thread (to load from the net or to compute hashes) is finished Signed-off-by: Robert C. Helling <helling@atdotde.de> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
This commit is contained in:
parent
3c7e14a18f
commit
8a59d78faa
5 changed files with 30 additions and 6 deletions
|
@ -17,6 +17,11 @@ ImageDownloader::ImageDownloader(struct picture *pic)
|
|||
picture = pic;
|
||||
}
|
||||
|
||||
ImageDownloader::~ImageDownloader()
|
||||
{
|
||||
picture_free(picture);
|
||||
}
|
||||
|
||||
void ImageDownloader::load(bool fromHash){
|
||||
QUrl url;
|
||||
if(fromHash)
|
||||
|
@ -79,21 +84,21 @@ SHashedImage::SHashedImage(struct picture *picture) : QImage()
|
|||
if (filename.isNull()) {
|
||||
// That didn't produce a local filename.
|
||||
// Try the cloud server
|
||||
QtConcurrent::run(loadPicture, picture, true);
|
||||
QtConcurrent::run(loadPicture, clone_picture(picture), true);
|
||||
} else {
|
||||
// Load locally from translated file name
|
||||
load(filename);
|
||||
if (!isNull()) {
|
||||
// Make sure the hash still matches the image file
|
||||
QtConcurrent::run(updateHash, picture);
|
||||
QtConcurrent::run(updateHash, clone_picture(picture));
|
||||
} else {
|
||||
// Interpret filename as URL
|
||||
QtConcurrent::run(loadPicture, picture, false);
|
||||
QtConcurrent::run(loadPicture, clone_picture(picture), false);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// We loaded successfully. Now, make sure hash is up to date.
|
||||
QtConcurrent::run(hashPicture, picture);
|
||||
QtConcurrent::run(hashPicture, clone_picture(picture));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue