Функция CDirScan NextL повышает KERN-EXEC 0 - PullRequest
0 голосов
/ 07 декабря 2009

Функция 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 теряет свою действительность? Обратите внимание, что асинхронное событие не имеет ничего общего, это может быть простой фиктивный таймер.

Ответы [ 2 ]

2 голосов
/ 07 декабря 2009

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

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

0 голосов
/ 08 декабря 2009

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

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

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

...