Review Request 112277: Fix deadlock by avoid calling Qfont::QFont() in KFontSettingsData
Àlex Fiestas
afiestas at kde.org
Sun Aug 25 20:38:57 UTC 2013
-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
http://git.reviewboard.kde.org/r/112277/
-----------------------------------------------------------
(Updated Aug. 25, 2013, 8:38 p.m.)
Review request for KDE Frameworks and Kevin Ottens.
Description
-------
While writing tests for KFontSettingsData I found this deadlock:
http://paste.kde.org/p1fada663/
Shorter version of the deadlock by calling QFont::QFont in KFontSettingsData::font()
http://paste.kde.org/pda7fc276/
Basically:
QApplicationPrivate::initializeWidgetFontHash
KFontSettingsData::font
QVariant magic, which calls QFont::QFont (http://qt.gitorious.org/qt/qtbase/blobs/stable/src/gui/text/qfont.cpp#line677)
QFont::QFont
QGuiApplication::font
KFontSettingsData::font
QFont::QFont
QGuiApplication::font
And lock takes place
So the patch simply avoids calling QFont::QFont by reusing the QFont we already have (initialized with the default values) and using QFont::fromString in case we have data to set to it.
To reproduce simply set fonts in kdeglobals:
[General]
desktopFont=Ubuntu,9,-1,5,50,0,0,0,0,0
fixed=Ubuntu Mono,10,-1,5,50,0,0,0,0,0
font=Ubuntu,9,-1,5,50,0,0,0,0,0
menuFont=Ubuntu,9,-1,5,50,0,0,0,0,0
smallestReadableFont=Ubuntu,8,-1,5,50,0,0,0,0,0
taskbarFont=Ubuntu,9,-1,5,50,0,0,0,0,0
toolBarFont=Ubuntu,8,-1,5,50,0,0,0,0,0
and then execute QApplication.
Diffs
-----
staging/frameworkintegration/src/platformtheme/kfontsettingsdata.cpp 70c1d26
Diff: http://git.reviewboard.kde.org/r/112277/diff/
Testing
-------
Tested in different app's using qpa plus the kfontsettingsdata test I'm writing.
Thanks,
Àlex Fiestas
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.kde.org/pipermail/kde-frameworks-devel/attachments/20130825/34283563/attachment.html>
More information about the Kde-frameworks-devel
mailing list