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
Eskil Abrahamsen Blomfeldt 2012-04-18 10:57:43 +02:00 committed by Qt by Nokia
parent 197b423e96
commit 06d4ea6400
1 changed files with 14 additions and 3 deletions

View File

@ -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;