Qt 5.15 concurrent blockingMap does not work with QPixmap::scaled anymore
-
Hi,
In our code, we use a void blockingMap with a lambda that basically takes a QStringList with image file paths, then loads those images into a QPixmap and scales them with smooth transformation. The result is atomically stored in a queue.
This was done to improve loading times for the hard refresh of a potentially huge tablewidget with icons.
The problem now is that starting with Qt 5.15 on my local environment the program will never get past the blockingMap.
It seems like all the concurrent threads just enter the pixmap.scaled(...) call and never return from that.I read on the changelog that some multithreading was added to QImage functions, so I fear that this may be the cause.
Maybe someone can recreate this?
Cheers,
Megamouse -
Hi,
If you want somebody to help you test your situation, please provide a minimal compilable example that shows the behaviour you currently have.
You should also state the exact version of 5.15 you are currently using as well as the platform you are having trouble on.
-
@Megamouse Did you run through debugger to see what happens?
-
Windows 10 (10.0.18363 Build 18363)
Qt 5.15.0 (There isn't any other as far as I can tell)
i7 7700KSample Project:
https://drive.google.com/file/d/1NzIiOpMoDZHGOhtpRhjg6wb79Sa4R-L9/view?usp=sharingJust use some base_dir with a lot of pictures and the main window will never show.
This used to work in Qt 5.14. -
@Megamouse said in Qt 5.15 concurrent blockingMap does not work with QPixmap::scaled anymore:
In our code, we use a void blockingMap with a lambda that basically takes a QStringList with image file paths, then loads those images into a QPixmap and scales them with smooth transformation. The result is atomically stored in a queue.
QPixmap
isn't reentrant, so this was never working, it's just shown its ugly fangs and horns now. Switch toQImage
. -
@kshegunov said in Qt 5.15 concurrent blockingMap does not work with QPixmap::scaled anymore:
reentrant
Hmm, I was already suspecting something similar based on the Qt 5 source code.
But sadly, using QImage in the sample changes nothing. -
@Megamouse said in Qt 5.15 concurrent blockingMap does not work with QPixmap::scaled anymore:
But sadly, using QImage in the sample changes nothing.
Then it's possible it's an regression. Strip the GUI stuff from the sample code, and please extract a backtrace with debug info, so we can judge where it hangs. I don't have windows Qt 5.15 on hand to test directly, but I'm willing to glance through the backtrace.
-
Can you provide the link to the bug report ?