summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthias Klose <doko@ubuntu.com>2004-12-01 07:36:58 +0000
committerMatthias Klose <doko@ubuntu.com>2004-12-01 07:36:58 +0000
commitc57bd881ea65d7cce7df7ddd9600718c8e1ea405 (patch)
treedcfb6f0484617f4dd37c7cc49b8652cca298b6aa
parentb7754e120b85901761e0183dcb9ff6bd2b125254 (diff)
downloadcpython-git-c57bd881ea65d7cce7df7ddd9600718c8e1ea405.tar.gz
Taken from 2.4/HEAD:
- Bug #875692: Improve signal handling, especially when using threads, by forcing an early re-execution of PyEval_EvalFrame() "periodic" code when things_to_do is not cleared by Py_MakePendingCalls().
-rw-r--r--Misc/NEWS4
-rw-r--r--Python/ceval.c6
2 files changed, 10 insertions, 0 deletions
diff --git a/Misc/NEWS b/Misc/NEWS
index 89e0216212..eb4b302bd8 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -36,6 +36,10 @@ Core and builtins
- Bug #845802: Python crashed when __init__.py is a directory.
+- Bug #875692: Improve signal handling, especially when using threads, by
+ forcing an early re-execution of PyEval_EvalFrame() "periodic" code when
+ things_to_do is not cleared by Py_MakePendingCalls().
+
Extension modules
-----------------
diff --git a/Python/ceval.c b/Python/ceval.c
index 035520a593..d98dbe11d3 100644
--- a/Python/ceval.c
+++ b/Python/ceval.c
@@ -785,6 +785,12 @@ eval_frame(PyFrameObject *f)
why = WHY_EXCEPTION;
goto on_error;
}
+ if (things_to_do)
+ /* MakePendingCalls() didn't succeed.
+ Force early re-execution of this
+ "periodic" code, possibly after
+ a thread switch */
+ _Py_Ticker = 0;
}
#if !defined(HAVE_SIGNAL_H) || defined(macintosh)
/* If we have true signals, the signal handler