diff -r 7516d6d86cf5 -r ed14f46c0e55 src/hbcore/effects/hbeffectcontroller.cpp --- a/src/hbcore/effects/hbeffectcontroller.cpp Mon Oct 04 17:49:30 2010 +0300 +++ b/src/hbcore/effects/hbeffectcontroller.cpp Mon Oct 18 18:23:13 2010 +0300 @@ -252,16 +252,30 @@ if (!shared) { HbEffectFxmlData fxmlData; QFile file(filePath); - if (!file.open(QFile::ReadOnly | QFile::Text)) { + if (!file.open(QFile::ReadOnly)) { qWarning("HbEffect: Opening of %s failed", qPrintable(filePath)); if (indexForSetInUseWhenFail >= 0) { mEffectEntries[indexForSetInUseWhenFail].mInUse = true; } return false; } - mParser->read(&file, &fxmlData); + QByteArray arr(file.readAll()); file.close(); + // Read effect using QBuffer, because XML parsing does unnecessary file accesses + QBuffer fxmlBuffer(&arr, 0); + if (!fxmlBuffer.open(QFile::ReadOnly | QFile::Text)) { + // This really shouldn't fail, but better be sure + qWarning("HbEffect: Opening QBuffer for %s failed", qPrintable(filePath)); + if (indexForSetInUseWhenFail >= 0) { + mEffectEntries[indexForSetInUseWhenFail].mInUse = true; + } + return false; + } + + mParser->read(&fxmlBuffer, &fxmlData); + fxmlBuffer.close(); + if (mParser->error() != QXmlStreamReader::NoError) { qWarning() << "HbEffect: Parsing of file" << qPrintable(filePath) << "failed:" << mParser->errorString();