www.delorie.com/archives/browse.cgi   search  
Mail Archives: djgpp/1993/12/20/22:13:28

Date: Mon, 20 Dec 93 22:06:37 -0500
From: DJ Delorie <dj AT ctron DOT com>
To: djgpp AT sun DOT soe DOT clarkson DOT edu
Subject: possible fix to ctrl-break bug

I think I figured out the Ctrl-Break bug, and it is go32's fault.  To
try the fix, replace the go_til_stop prototype in utils.h with one
that takes an int parameter, and use that int to determine if you
allow the (!was_exception) to do the return.  The go_til_stop calls in
control.c and extdebug.c pass "0" and the ones in utils.c pass "1".
The new code in utils.c:go_til_stop looks like this:

	if (!was_exception && allow_return)
	  return;

The real-mode callbacks were getting an iret from protected mode to
return, which caused this, and sometimes (re-entrancy) it would cause
the wrong go_til_stop to return.  Since the two calls in control.c and
extdebug.c shouldn't be returning this way, they can skip that test
safely.

The call in control.c was returning prematurely, and reporting the
last valid exception that happened - the int 0x16 call.

If this seems to clear up the problem, I'll do a maint2 release with
just that, as it could mess up *all* real-mode callbacks.

DJ


- Raw text -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019