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