Fix memory leak when drawing text in non-common script
When the font engine cache was updated for new parameters, we would overwrite the cached engine, but not deref the old cached engine, thus it would never be deleted. This is manual cherry pick of 44c14470e5b28e45c19d6959b114e063cf3f4d83 from 4.8 branch. Change-Id: Ice2e555fe380dc9851ef490fa1a6928936ae4c35 Reviewed-by: Jiang Jiang <jiang.jiang@nokia.com>bb10
parent
197b423e96
commit
06d4ea6400
|
|
@ -1755,12 +1755,19 @@ QFontEngine *QTextEngine::fontEngine(const QScriptItem &si, QFixed *ascent, QFix
|
|||
font.setPixelSize((font.pixelSize() * 2) / 3);
|
||||
scaledEngine = font.d->engineForScript(script);
|
||||
}
|
||||
feCache.prevFontEngine = engine;
|
||||
|
||||
if (engine)
|
||||
engine->ref.ref();
|
||||
feCache.prevScaledFontEngine = scaledEngine;
|
||||
if (feCache.prevFontEngine)
|
||||
releaseCachedFontEngine(feCache.prevFontEngine);
|
||||
feCache.prevFontEngine = engine;
|
||||
|
||||
if (scaledEngine)
|
||||
scaledEngine->ref.ref();
|
||||
if (feCache.prevScaledFontEngine)
|
||||
releaseCachedFontEngine(feCache.prevScaledFontEngine);
|
||||
feCache.prevScaledFontEngine = scaledEngine;
|
||||
|
||||
feCache.prevScript = script;
|
||||
feCache.prevPosition = si.position;
|
||||
feCache.prevLength = length(&si);
|
||||
|
|
@ -1770,9 +1777,13 @@ QFontEngine *QTextEngine::fontEngine(const QScriptItem &si, QFixed *ascent, QFix
|
|||
engine = feCache.prevFontEngine;
|
||||
else {
|
||||
engine = font.d->engineForScript(script);
|
||||
feCache.prevFontEngine = engine;
|
||||
|
||||
if (engine)
|
||||
engine->ref.ref();
|
||||
if (feCache.prevFontEngine)
|
||||
releaseCachedFontEngine(feCache.prevFontEngine);
|
||||
feCache.prevFontEngine = engine;
|
||||
|
||||
feCache.prevScript = script;
|
||||
feCache.prevPosition = -1;
|
||||
feCache.prevLength = -1;
|
||||
|
|
|
|||
Loading…
Reference in New Issue