Функция CDirScan NextL вызывает KERN-EXEC 0

Функция CDirScan NextL вызывает "Main Panic KERN-EXEC 0", если она не вызывается сразу SetScanDataL() (т.е. если она вызывается позже в том же активном объекте после другого события)

f1() - вызывается внутри активного объекта

iDirScan = CDirScan::NewLC(aFs);
iDirScan->SetScanDataL(aPath, 
    KEntryAttDir|KEntryAttMatchExclusive, 
    ESortNone, CDirScan::EScanDownTree);
//wait for some asynchronous event

f2() - вызывается внутри того же активного объекта после какого-то асинхронного события

CDir* dir = NULL;
TRAPD(error, iDirScan->NextL(dir)); -->> "Main Panic KERN-EXEC 0"

Если iDirScan->NextL() вызывается перед ожиданием какого-либо асинхронного события, все работает нормально.

Почему переменная CDirScan теряет свою действительность? Обратите внимание, что асинхронное событие не имеет ничего общего, это может быть простой фиктивный таймер.


person Bojan Milankovic    schedule 07.12.2009    source источник


Ответы (2)


Я написал тестовый код, пытаясь воспроизвести это, но не смог.

Как правило, паники KERN-EXEC 0 чаще всего вызываются устаревшими дескрипторами объектов R. Например, убедитесь, что дескриптор RFs, который вы передаете CDirScan, не закрывается слишком рано.

person laalto    schedule 07.12.2009
comment
Абсолютная правда. Спасибо, лаалто. - person Bojan Milankovic; 07.12.2009

Не могли бы вы опубликовать больше своего кода для анализа?

Это две части кода находятся в разных функциях f1, f2 или обе в одной функции f1, мне непонятно?

Также, если iDirScan является частью вашего класса, вы не должны оставлять его в функции очистки стека (NewLC).

person Michal    schedule 08.12.2009
comment
Я случайно уничтожил сессию RFs в f1. Вот почему мой код не работал. - person Bojan Milankovic; 10.12.2009