rob at codeweavers.com
Tue Sep 21 10:38:35 CDT 2004
This patch disables DPMI. If sti has been executed beforehand and an
instruction (such as an interrupt) must be emulated then it can cause an
infinite loop around the enumation of the iret instruction in the DPMI
call. Even after (probably rather poorly) hacking around this issue I
still got unprivileged instruction exceptions from the iret instruction.
Without more expert eyes being cast on this code the only thing I can
suggest to fix non-DPMI applications with the above case is to disable
DPMI event checking.
Disable DPMI event checking as it can cause infinite loops in some cases.
-------------- next part --------------
RCS file: /home/wine/wine/dlls/kernel/wowthunk.c,v
retrieving revision 1.52
diff -u -p -r1.52 wowthunk.c
--- wine/dlls/kernel/wowthunk.c 17 May 2004 21:08:31 -0000 1.52
+++ wine/dlls/kernel/wowthunk.c 21 Sep 2004 15:30:43 -0000
@@ -194,6 +194,14 @@ static void insert_event_check( CONTEXT
char *stack = wine_ldt_get_ptr( context->SegSs, context->Esp );
+ * FIXME: DPMI seems rather buggy so it is disabled for the moment.
+ * In particular, if sti has been executed beforehand and an instruction
+ * (such as an interrupt) must be emulated then it can cause an infinite
+ * loop around the enumation of the iret instruction in the DPMI call
if(context->SegCs == dpmi_checker_selector &&
context->Eip >= dpmi_checker_offset_call &&
context->Eip <= dpmi_checker_offset_cleanup)
More information about the wine-patches