وظيفة CDIrscan Nextl يثير Kern-EXEC 0
سؤال
تعمل وظيفة CDIrscan Nextl "الذعر الرئيسي Kern-EXEC 0" 0 "إذا لم يتم استدعاؤها بشكل صحيح SETSSCANTATAL () (أي إذا كان يسمى في وقت لاحق داخل نفس الكائن النشط بعد حدث آخر)
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 متغير صلاحيته؟ لاحظ أن الحدث غير المتزامن لا علاقة له، يمكن أن يكون بموجب توقيت دمية بسيط.
المحلول
كتبت بعض رمز الاختبار في محاولة لإعادة إنتاج هذا ولكن لم أستطع.
عمومًا، KERN-EXEC 0
غالبا ما تسبب الذعر من مقابض كائن ص قديمة. على سبيل المثال، تأكد من أن RFs
التعامل معك CDirScan
غير مغلق مبكرا جدا.
نصائح أخرى
هل يمكنك نشر المزيد من التعليمات البرمجية الخاصة بك لتحليلها؟
هل هذا الجزءان من الكود في وظائف مختلفة F1 أو F2 أو كليهما في وظيفة واحدة F1، وهذا غير واضح بالنسبة لي؟
أيضا إذا كان IDIRSCAN جزء من صفك، يجب ألا تتركه في وظيفة Cleanup Stack (NEWLC).