diff options
author | Michael W. Hudson <mwh@python.net> | 2005-04-07 10:11:19 (GMT) |
---|---|---|
committer | Michael W. Hudson <mwh@python.net> | 2005-04-07 10:11:19 (GMT) |
commit | e3afc598bc62c6ad46c56feec3f18cf8131c91c6 (patch) | |
tree | a9aa0012c005163c8925db55f1a136ffd1c9b8de /Parser/myreadline.c | |
parent | ad351f806d74d8ffbfd8b8f8f78b72043d9c8168 (diff) | |
download | cpython-e3afc598bc62c6ad46c56feec3f18cf8131c91c6.zip cpython-e3afc598bc62c6ad46c56feec3f18cf8131c91c6.tar.gz cpython-e3afc598bc62c6ad46c56feec3f18cf8131c91c6.tar.bz2 |
In a threads-disabled build, typing Ctrl-C into a raw_input() crashed,
because (essentially) I didn't realise that PY_BEGIN/END_ALLOW_THREADS
actually expanded to nothing under a no-threads build, so if you somehow
NULLed out the threadstate (e.g. by calling PyThread_SaveThread) it would
stay NULLed when you return to Python. Argh!
Backport candidate.
Diffstat (limited to 'Parser/myreadline.c')
-rw-r--r-- | Parser/myreadline.c | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/Parser/myreadline.c b/Parser/myreadline.c index 7fc421e..a932a87 100644 --- a/Parser/myreadline.c +++ b/Parser/myreadline.c @@ -82,9 +82,13 @@ my_fgets(char *buf, int len, FILE *fp) #ifdef EINTR if (errno == EINTR) { int s; +#ifdef WITH_THREAD PyEval_RestoreThread(_PyOS_ReadlineTState); +#endif s = PyErr_CheckSignals(); +#ifdef WITH_THREAD PyEval_SaveThread(); +#endif if (s < 0) { return 1; } |