Date: Mon, 20 Dec 93 22:06:37 -0500 From: DJ Delorie 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