Commit 7731c8e3 authored by Jukka Heinonen's avatar Jukka Heinonen Committed by Alexandre Julliard

Pending timer interrupts no longer deadlock DOSVM_Wait.

Restored interrupt priorities to correct values.
parent 068fa5d4
......@@ -75,8 +75,8 @@ typedef void (*DOSRELAY)(CONTEXT86*,void*);
typedef void (WINAPI *RMCBPROC)(CONTEXT86*);
typedef void (WINAPI *INTPROC)(CONTEXT86*);
#define DOS_PRIORITY_REALTIME 1 /* IRQ0 - FIXME: should be 0 */
#define DOS_PRIORITY_KEYBOARD 0 /* IRQ1 - FIXME: should be 1 */
#define DOS_PRIORITY_REALTIME 0 /* IRQ0 */
#define DOS_PRIORITY_KEYBOARD 1 /* IRQ1 */
#define DOS_PRIORITY_VGA 2 /* IRQ9 */
#define DOS_PRIORITY_MOUSE 5 /* IRQ12 */
#define DOS_PRIORITY_SERIAL 10 /* IRQ4 */
......
......@@ -272,16 +272,18 @@ void WINAPI DOSVM_Wait( CONTEXT86 *waitctx )
{
/*
* FIXME: This does not work in protected mode DOS programs.
* FIXME: If we have pending IRQ which has 16-bit handler,
* DOSVM_SendQueuedEvents may stuck in which case application
* deadlocks. This is why keyboard events must have top
* priority (default timer IRQ handler is 16-bit code).
* FIXME: Critical section locking is broken.
*/
CONTEXT86 context = *waitctx;
IF_SET(&context);
SET_PEND(&context);
context.SegCs = 0;
context.Eip = 0;
DOSVM_SendQueuedEvents(&context);
if(context.SegCs || context.Eip)
DPMI_CallRMProc( &context, NULL, 0, TRUE );
}
else
{
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment