[Sbcl-devel] SBCL on WIndows possible problem...

15 views
Skip to first unread message

ra...@raito.com

unread,
May 4, 2013, 2:39:09 PM5/4/13
to sbcl-...@lists.sourceforge.net
... certainly a change in behavior.

I finally decided to upgrade my SBCL to 1.1.4. I'm really looking forward
to having threading, and I have particular use for foreign thread
callbacks (though I recall a couple of years ago being told it simply
couldn't be done).

I found a change in Control-C handling between 1.0.37 (yeah, it's pretty
old), 1.1.4, and Anton's 1.1.4. None of the 3 act the same. In 1.0.37,
Control-C will exist SBCL. In 1.1.4, Control-C (any number) will do
nothing, but the next form entered at the REPL will invoke the debugger.
In Anton's 1.1.4, the first Control-C will do nothing, but the second will
invoke the debugger.

So, 3 different versions, 3 different behaviors. Which behavior is
supposed to be correct for Windows? (personally, I'm used to Control-C
exiting.) I also checked 1.0.55 on WIndows 7 Enterprise (my work machine),
and Control-C exits there, too (I wasn't about to go installing multiple
versions to check as thoroughly there.).

Here's some results (my comments in parens, because it's hard to know what
I typed where nothing happens)

System:
Microsoft Windows XP
Home Edition
Version 2002
Service Pack 2

(using sbcl-1.0.37-x86-windows-binary.msi)

G:\lisp>sbcl
This is SBCL 1.0.37, an implementation of ANSI Common Lisp.
More information about SBCL is available at <http://www.sbcl.org/>.

SBCL is free software, provided as is, with absolutely no warranty.
It is mostly in the public domain; some portions are provided under
BSD-style licenses. See the CREDITS and COPYING files in the
distribution for more information.

This is experimental prerelease support for the Windows platform: use
at your own risk. "Your Kitten of Death awaits!"
* ^C
G:\lisp>

(using sbcl-1.1.4-x86-windows-binary.msi)

G:\lisp>sbcl
This is SBCL 1.1.4, an implementation of ANSI Common Lisp.
More information about SBCL is available at <http://www.sbcl.org/>.

SBCL is free software, provided as is, with absolutely no warranty.
It is mostly in the public domain; some portions are provided under
BSD-style licenses. See the CREDITS and COPYING files in the
distribution for more information.

This is experimental prerelease support for the Windows platform: use
at your own risk. "Your Kitten of Death awaits!"
*

(multiple Control-Cs have no affect at all)

G:\lisp>sbcl
This is SBCL 1.1.4, an implementation of ANSI Common Lisp.
More information about SBCL is available at <http://www.sbcl.org/>.

SBCL is free software, provided as is, with absolutely no warranty.
It is mostly in the public domain; some portions are provided under
BSD-style licenses. See the CREDITS and COPYING files in the
distribution for more information.

This is experimental prerelease support for the Windows platform: use
at your own risk. "Your Kitten of Death awaits!"
* (sb-exit) ; Control-C followed by deliberately incorrect form

debugger invoked on a SB-SYS:INTERACTIVE-INTERRUPT in thread
#<THREAD "main thread" RUNNING {23EF7901}>:
Interactive interrupt at #x22A77461.

Type HELP for debugger help, or (SB-EXT:EXIT) to exit from SBCL.

restarts (invokable by number or by possibly-abbreviated name):
0: [CONTINUE] Return from SB-WIN32::SIGINT.
1: [ABORT ] Exit debugger, returning to top level.

((FLET #:CLEANUP-FUN-1439 :IN SB-IMPL::REFILL-INPUT-BUFFER))[:CLEANUP]
0] (sb-ext:exit)

G:\lisp>

(using sbcl-1.1.4.0.mswin.1288-90ab477-x86.msi)

G:\lisp>sbcl
This is SBCL 1.1.4.0.mswin.1288-90ab477, an implementation of ANSI Common
Lisp
More information about SBCL is available at <http://www.sbcl.org/>.

SBCL is free software, provided as is, with absolutely no warranty.
It is mostly in the public domain; some portions are provided under
BSD-style licenses. See the CREDITS and COPYING files in the
distribution for more information.

This is experimental prerelease support for the Windows platform: use
at your own risk. "Your Kitten of Death awaits!"
*
(2 Control-Cs entered)

debugger invoked on a SB-SYS:INTERACTIVE-INTERRUPT in thread
#<THREAD "main thread" RUNNING {23DA89B1}>:
Interactive interrupt at #x235A1232.

Type HELP for debugger help, or (SB-EXT:EXIT) to exit from SBCL.

restarts (invokable by number or by possibly-abbreviated name):
0: [CONTINUE] Return from SB-THREAD::SIGINT.
1: [ABORT ] Exit debugger, returning to top level.

((FLET SB-THREAD::INTERRUPT-IT :IN SB-THREAD::WINDOWS-CONSOLE-CONTROL-HANDLE
0] (sb-ext:exit)

G:\lisp>sbcl
This is SBCL 1.1.4.0.mswin.1288-90ab477, an implementation of ANSI Common
Lisp
More information about SBCL is available at <http://www.sbcl.org/>.

SBCL is free software, provided as is, with absolutely no warranty.
It is mostly in the public domain; some portions are provided under
BSD-style licenses. See the CREDITS and COPYING files in the
distribution for more information.

This is experimental prerelease support for the Windows platform: use
at your own risk. "Your Kitten of Death awaits!"
* (sb-exit) ; Control-C followed by deliberately incorrect form

debugger invoked on a SB-SYS:INTERACTIVE-INTERRUPT in thread
#<THREAD "main thread" RUNNING {23DA89B1}>:
Interactive interrupt at #x22A2895E.

Type HELP for debugger help, or (SB-EXT:EXIT) to exit from SBCL.

restarts (invokable by number or by possibly-abbreviated name):
0: [CONTINUE] Return from SB-THREAD::SIGINT.
1: [ABORT ] Exit debugger, returning to top level.

((FLET #:CLEANUP-FUN-1588 :IN SB-IMPL::REFILL-INPUT-BUFFER))[:CLEANUP]
0] (sb-ext:exit)

G:\lisp>

Neil Gilmore
ra...@raito.com


------------------------------------------------------------------------------
Get 100% visibility into Java/.NET code with AppDynamics Lite
It's a free troubleshooting tool designed for production
Get down to code-level detail for bottlenecks, with <2% overhead.
Download for free and get started troubleshooting in minutes.
http://p.sf.net/sfu/appdyn_d2d_ap2
_______________________________________________
Sbcl-devel mailing list
Sbcl-...@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/sbcl-devel

Anton Kovalenko

unread,
May 4, 2013, 5:11:50 PM5/4/13
to sbcl-...@lists.sourceforge.net
ra...@raito.com writes:

> ... certainly a change in behavior.
>
> I found a change in Control-C handling between 1.0.37 (yeah, it's pretty
> old), 1.1.4, and Anton's 1.1.4. None of the 3 act the same. In 1.0.37,
> Control-C will exist SBCL. In 1.1.4, Control-C (any number) will do
> nothing, but the next form entered at the REPL will invoke the debugger.
> In Anton's 1.1.4, the first Control-C will do nothing, but the second will
> invoke the debugger.
>
> So, 3 different versions, 3 different behaviors. Which behavior is
> supposed to be correct for Windows? (personally, I'm used to Control-C
> exiting.)

That's what I intended for my Windows branch:

Control-C on Windows is supposed to imitate Control-C on Unix as closely
as possible, hence the intended behavior is to enter the debugger on the
*first* Control-C, signalling SB-SYS:INTERACTIVE-INTERRUPT.

There is an unsolved problem causing the first Control-C to be ignored
on Windows (IIRC, the problem is control-C during built-in line editing
loop, which is not delivered via the usual console control handler
mechanism).

You can get close enough to the old behavior (immediate quit) with the
following code snippet:

--8<---------------cut here---------------start------------->8---
;; Ignore the next form on wrong branch / wrong OS
#+#.(cl:if (cl:fboundp 'sb-thread::console-control-handler)
'(:and) '(:or))
;; Exit immediately on control-c
(setf (sb-thread::console-control-handler)
(lambda () (sb-ext:exit :abort t)))
--8<---------------cut here---------------end--------------->8---


--
Regards, Anton Kovalenko <http://github.com/akovalenko/sbcl-win32-threads/wiki>
+7(916)345-34-02 | Elektrostal' MO, Russia
Reply all
Reply to author
Forward
0 new messages