Bug 451175 - Krita deadlocks on cancelling an export or save with a configuration dialog
Summary: Krita deadlocks on cancelling an export or save with a configuration dialog
Status: RESOLVED FIXED
Alias: None
Product: krita
Classification: Applications
Component: General (show other bugs)
Version: git master (please specify the git hash!)
Platform: Compiled Sources Microsoft Windows
: NOR crash
Target Milestone: ---
Assignee: Dmitry Kazakov
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2022-03-05 21:08 UTC by amyspark
Modified: 2022-03-14 11:55 UTC (History)
2 users (show)

See Also:
Latest Commit:
Version Fixed In:
Sentry Crash Report:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description amyspark 2022-03-05 21:08:41 UTC
SUMMARY
***
NOTE: If you are reporting a crash, please try to attach a backtrace with debug symbols.
See https://community.kde.org/Guidelines_and_HOWTOs/Debugging/How_to_create_useful_crash_reports
***

After commit 7516fe61f6b22ca79215d4aac39ab9a7288730fe, Krita deadlocks if a file save or export fires a configuration dialog, and the action gets canceled from inside it.

This is the deadlock. Check the two instances of KoProgressUpdater, they both attempt to lock the same mutex.

ntdll.dll!NtWaitForSingleObject() (Origen desconocido:0)
KernelBase.dll!WaitForSingleObjectEx() (Origen desconocido:0)
Qt5Core.dll!00007ffd918baa88() (Origen desconocido:0)
Qt5Core.dll!00007ffd918a3c29() (Origen desconocido:0)
kritawidgetutils.dll!KoProgressUpdater::updateUi() Line 204 (e:\krita-win\src\libs\widgetutils\KoProgressUpdater.cpp:204)
Qt5Core.dll!00007ffd91a71850() (Origen desconocido:0)
[Inline Frame] kritaglobal.dll!KisSignalCompressor::timeout() Line 151 (e:\krita-win\b_msvc\libs\global\kritaglobal_autogen\EWIEGA46WW\moc_kis_signal_compressor.cpp:151)
[Inline Frame] kritaglobal.dll!KisSignalCompressor::tryEmitSignalSafely() Line 195 (e:\krita-win\src\libs\global\kis_signal_compressor.cpp:195)
kritaglobal.dll!KisSignalCompressor::start() Line 115 (e:\krita-win\src\libs\global\kis_signal_compressor.cpp:115)
Qt5Core.dll!00007ffd91a71850() (Origen desconocido:0)
[Inline Frame] kritawidgetutils.dll!KoUpdaterPrivate::sigUpdated() Line 173 (e:\krita-win\b_msvc\libs\widgetutils\kritawidgetutils_autogen\EWIEGA46WW\moc_KoUpdaterPrivate_p.cpp:173)
[Inline Frame] kritawidgetutils.dll!KoUpdaterPrivate::setProgress(int) Line 85 (e:\krita-win\src\libs\widgetutils\KoUpdaterPrivate_p.cpp:85)
kritawidgetutils.dll!KoProgressUpdater::cancel() Line 173 (e:\krita-win\src\libs\widgetutils\KoProgressUpdater.cpp:173)
Qt5Core.dll!00007ffd91a71850() (Origen desconocido:0)
kritaui.dll!KisDocument::startExportInBackground(const QString & actionName, const QString & location, const QString & realLocation, const QByteArray & mimeType, bool showWarnings, KisPinnedSharedPtr<KisPropertiesConfiguration> exportConfiguration, bool isAdvancedExporting) Line 1509 (e:\krita-win\src\libs\ui\KisDocument.cpp:1509)
kritaui.dll!KisDocument::initiateSavingInBackground(const QString actionName, const QObject * receiverObject, const char * receiverMethod, const KritaUtils::ExportFileJob & job, KisPinnedSharedPtr<KisPropertiesConfiguration> exportConfiguration, std::unique_ptr<KisDocument,std::default_delete<KisDocument>> && optionalClonedDocument, bool isAdvancedExporting) Line 1277 (e:\krita-win\src\libs\ui\KisDocument.cpp:1277)
kritaui.dll!KisDocument::initiateSavingInBackground(const QString actionName, const QObject * receiverObject, const char * receiverMethod, const KritaUtils::ExportFileJob & job, KisPinnedSharedPtr<KisPropertiesConfiguration> exportConfiguration, bool isAdvancedExporting) Line 1200 (e:\krita-win\src\libs\ui\KisDocument.cpp:1200)
kritaui.dll!KisDocument::exportDocumentImpl(const KritaUtils::ExportFileJob & job, KisPinnedSharedPtr<KisPropertiesConfiguration> exportConfiguration, bool isAdvancedExporting) Line 779 (e:\krita-win\src\libs\ui\KisDocument.cpp:779)
kritaui.dll!KisDocument::exportDocument(const QString & path, const QByteArray & mimeType, bool isAdvancedExporting, bool showWarnings, KisPinnedSharedPtr<KisPropertiesConfiguration> exportConfiguration) Line 810 (e:\krita-win\src\libs\ui\KisDocument.cpp:810)
kritaui.dll!KisMainWindow::saveDocument(KisDocument * document, bool saveas, bool isExporting, bool isAdvancedExporting) Line 1370 (e:\krita-win\src\libs\ui\KisMainWindow.cpp:1370)


STEPS TO REPRODUCE
1. Open an image in Krita.
2. Try to export it to e.g. HEIF or TIFF.
3. Cancel the export configuration dialog.

OBSERVED RESULT
Krita ceases to respond.

EXPECTED RESULT
The export is successfully canceled.


SOFTWARE/OS VERSIONS
Windows: 10 21H2
macOS: 
Linux/KDE Plasma: 
(available in About System)
KDE Plasma Version: 
KDE Frameworks Version: 
Qt Version: 5.12.12

ADDITIONAL INFORMATION
commit hash aa0ef82a89056484323f00bd9c22c42aff3a69b0
Comment 1 Dmitry Kazakov 2022-03-14 11:55:31 UTC
Git commit 8f335dfa461857bf32a3aebdcf65d4a6a3c103d6 by Dmitry Kazakov.
Committed on 14/03/2022 at 11:55.
Pushed by dkazakov into branch 'master'.

Fix a deadlock when cancelling save dialog for a PSD file

M  +10   -5    libs/widgetutils/KoProgressUpdater.cpp

https://invent.kde.org/graphics/krita/commit/8f335dfa461857bf32a3aebdcf65d4a6a3c103d6