SF patch [#466877] SIGBREAK is missing from signal module.
Patch from Steve Scott to add SIGBREAK support (unique to Windows).
diff --git a/Misc/ACKS b/Misc/ACKS
index 753aa73..19bcf2c 100644
--- a/Misc/ACKS
+++ b/Misc/ACKS
@@ -362,6 +362,7 @@
Sam Schulenburg
Dietmar Schwertberger
Barry Scott
+Steven Scott
Nick Seidenman
Fred Sells
Denis Severson
diff --git a/Misc/NEWS b/Misc/NEWS
index b7ccc86..662bd69 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -31,6 +31,26 @@
Windows
+- The signal module now supports SIGBREAK on Windows, thanks to Steven
+ Scott. Note that SIGBREAK is unique to Windows. The default SIGBREAK
+ action remains to call Win32 ExitProcess(). This can be changed via
+ signal.signal(). For example:
+
+ # Make Ctrl+Break raise KeyboardInterrupt, like Python's default Ctrl+C
+ # (SIGINT) behavior.
+ import signal
+ signal.signal(signal.SIGBREAK,
+ signal.default_int_handler)
+
+ try:
+ while 1:
+ pass
+ except KeyboardInterrupt:
+ # We get here on Ctrl+C or Ctrl+Break now; if we had not changed
+ # SIGBREAK, only on Ctrl+C (and Ctrl+Break would terminate the
+ # program without the possibility for any Python-level cleanup).
+ print "Clean exit"
+
What's New in Python 2.2a4?
Release date: 28-Sep-2001
diff --git a/Modules/signalmodule.c b/Modules/signalmodule.c
index 340445f..850221e 100644
--- a/Modules/signalmodule.c
+++ b/Modules/signalmodule.c
@@ -383,6 +383,11 @@
PyDict_SetItemString(d, "SIGINT", x);
Py_XDECREF(x);
#endif
+#ifdef SIGBREAK
+ x = PyInt_FromLong(SIGBREAK);
+ PyDict_SetItemString(d, "SIGBREAK", x);
+ Py_XDECREF(x);
+#endif
#ifdef SIGQUIT
x = PyInt_FromLong(SIGQUIT);
PyDict_SetItemString(d, "SIGQUIT", x);