Only call sigcheck() at the ticker code if we don't have true signals.

This is safe now that both intrcheck() and signalmodule.c schedule a
sigcheck() call via Py_AddPendingCall().

This gives another 7% speedup (never run such a test twice ;-).
This commit is contained in:
Guido van Rossum 1997-01-21 06:15:24 +00:00
parent fcdd0e40a4
commit 70d44787a3
1 changed files with 6 additions and 2 deletions

View File

@ -92,7 +92,6 @@ static object *apply_subscript PROTO((object *, object *));
static object *loop_subscript PROTO((object *, object *)); static object *loop_subscript PROTO((object *, object *));
static int slice_index PROTO((object *, int, int *)); static int slice_index PROTO((object *, int, int *));
static object *apply_slice PROTO((object *, object *, object *)); static object *apply_slice PROTO((object *, object *, object *));
static object *build_slice PROTO((object *, object *, object *));
static int assign_subscript PROTO((object *, object *, object *)); static int assign_subscript PROTO((object *, object *, object *));
static int assign_slice PROTO((object *, object *, object *, object *)); static int assign_slice PROTO((object *, object *, object *, object *));
static int cmp_exception PROTO((object *, object *)); static int cmp_exception PROTO((object *, object *));
@ -557,7 +556,7 @@ eval_code2(co, globals, locals,
So we do it only every Nth instruction. So we do it only every Nth instruction.
The ticker is reset to zero if there are pending The ticker is reset to zero if there are pending
calls (see Py_AddPendingCalls() and calls (see Py_AddPendingCall() and
Py_MakePendingCalls() above). */ Py_MakePendingCalls() above). */
if (--ticker < 0) { if (--ticker < 0) {
@ -568,10 +567,15 @@ eval_code2(co, globals, locals,
goto on_error; goto on_error;
} }
} }
#ifndef HAVE_SIGNAL_H /* Is this the right #define? */
/* If we have true signals, the signal handler will call
Py_AddPendingCall() so we don't have to call sigcheck().
On the Mac and DOS, alas, we have to call it. */
if (sigcheck()) { if (sigcheck()) {
why = WHY_EXCEPTION; why = WHY_EXCEPTION;
goto on_error; goto on_error;
} }
#endif
#ifdef WITH_THREAD #ifdef WITH_THREAD
if (interpreter_lock) { if (interpreter_lock) {