- Fix a problem with normal and special APCs being inserted in the wrong order, spotted by Jury Sidorov. Now Borland Turbo Debugger should be able to debug applications, also it can fix hangs in other applications.

- When delivering kernel APC, set the pending flag to false (by analogy with delivering user APC and clearing its pending flag).
See issue #3426 for more details.

svn path=/trunk/; revision=34230
This commit is contained in:
Aleksey Bragin 2008-07-01 10:08:14 +00:00
parent 8aec8d2388
commit 45d38334d5

View file

@ -145,8 +145,8 @@ KiInsertQueueApc(IN PKAPC Apc,
/* Get the APC */
QueuedApc = CONTAINING_RECORD(NextEntry, KAPC, ApcListEntry);
/* Is this a Normal APC? If so, break */
if (QueuedApc->NormalRoutine) break;
/* Is this a No-Normal APC? If so, break */
if (!QueuedApc->NormalRoutine) break;
/* Move to the next APC in the Queue */
NextEntry = NextEntry->Blink;
@ -320,6 +320,9 @@ KiDeliverApc(IN KPROCESSOR_MODE DeliveryMode,
break;
}
/* It's not pending anymore */
Thread->ApcState.KernelApcPending = FALSE;
/* Get the next Entry */
ApcListEntry = Thread->ApcState.ApcListHead[KernelMode].Flink;
Apc = CONTAINING_RECORD(ApcListEntry, KAPC, ApcListEntry);