mirror of https://github.com/python/cpython
parent
b45f351832
commit
6b4953fd3d
|
@ -123,6 +123,7 @@ option '-uall,-bsddb'.
|
|||
|
||||
import os
|
||||
import sys
|
||||
import signal
|
||||
import getopt
|
||||
import random
|
||||
import warnings
|
||||
|
@ -289,6 +290,12 @@ def main(tests=None, testdir=None, verbose=0, quiet=False, generate=False,
|
|||
if single and fromfile:
|
||||
usage(2, "-s and -f don't go together!")
|
||||
|
||||
def handle_signal(*args):
|
||||
raise RuntimeError('signal received %s' % args)
|
||||
|
||||
# Provide a traceback if we are terminated.
|
||||
signal.signal(signal.SIGTERM, handle_signal)
|
||||
|
||||
good = []
|
||||
bad = []
|
||||
skipped = []
|
||||
|
|
|
@ -105,6 +105,12 @@ CField_FromDesc(PyObject *desc, int index,
|
|||
StgDictObject *idict;
|
||||
if (adict && adict->proto) {
|
||||
idict = PyType_stgdict(adict->proto);
|
||||
if (!idict) {
|
||||
PyErr_SetString(PyExc_TypeError,
|
||||
"has no _stginfo_");
|
||||
Py_DECREF(self);
|
||||
return NULL;
|
||||
}
|
||||
if (idict->getfunc == getentry("c")->getfunc) {
|
||||
struct fielddesc *fd = getentry("s");
|
||||
getfunc = fd->getfunc;
|
||||
|
|
|
@ -486,9 +486,10 @@ function_call(PyObject *func, PyObject *arg, PyObject *kw)
|
|||
Py_ssize_t nk, nd;
|
||||
|
||||
argdefs = PyFunction_GET_DEFAULTS(func);
|
||||
/* XXX(nnorwitz): don't we know argdefs is either NULL or a tuple? */
|
||||
if (argdefs != NULL && PyTuple_Check(argdefs)) {
|
||||
d = &PyTuple_GET_ITEM((PyTupleObject *)argdefs, 0);
|
||||
nd = PyTuple_Size(argdefs);
|
||||
nd = PyTuple_GET_SIZE(argdefs);
|
||||
}
|
||||
else {
|
||||
d = NULL;
|
||||
|
@ -517,7 +518,7 @@ function_call(PyObject *func, PyObject *arg, PyObject *kw)
|
|||
result = PyEval_EvalCodeEx(
|
||||
(PyCodeObject *)PyFunction_GET_CODE(func),
|
||||
PyFunction_GET_GLOBALS(func), (PyObject *)NULL,
|
||||
&PyTuple_GET_ITEM(arg, 0), PyTuple_Size(arg),
|
||||
&PyTuple_GET_ITEM(arg, 0), PyTuple_GET_SIZE(arg),
|
||||
k, nk, d, nd,
|
||||
PyFunction_GET_CLOSURE(func));
|
||||
|
||||
|
|
|
@ -229,6 +229,15 @@ PyEval_InitThreads(void)
|
|||
main_thread = PyThread_get_thread_ident();
|
||||
}
|
||||
|
||||
void
|
||||
_PyEval_FiniThreads(void)
|
||||
{
|
||||
if (interpreter_lock)
|
||||
PyThread_free_lock(interpreter_lock);
|
||||
interpreter_lock = 0;
|
||||
main_thread = 0;
|
||||
}
|
||||
|
||||
void
|
||||
PyEval_AcquireLock(void)
|
||||
{
|
||||
|
|
|
@ -60,6 +60,7 @@ static void call_sys_exitfunc(void);
|
|||
static void call_ll_exitfuncs(void);
|
||||
extern void _PyUnicode_Init(void);
|
||||
extern void _PyUnicode_Fini(void);
|
||||
extern void _PyEval_FiniThreads(void);
|
||||
|
||||
#ifdef WITH_THREAD
|
||||
extern void _PyGILState_Init(PyInterpreterState *, PyThreadState *);
|
||||
|
@ -461,6 +462,8 @@ Py_Finalize(void)
|
|||
_PyUnicode_Fini();
|
||||
#endif
|
||||
|
||||
_PyEval_FiniThreads();
|
||||
|
||||
/* XXX Still allocated:
|
||||
- various static ad-hoc pointers to interned strings
|
||||
- int and float free list blocks
|
||||
|
|
Loading…
Reference in New Issue