Skip to content

Commit 074e5ed

Browse files
committed
Merge in the new GIL.
1 parent 434736a commit 074e5ed

File tree

10 files changed

+522
-73
lines changed

10 files changed

+522
-73
lines changed

Include/ceval.h

+4-4
Original file line numberDiff line numberDiff line change
@@ -112,10 +112,6 @@ PyAPI_FUNC(PyObject *) PyEval_GetCallStats(PyObject *);
112112
PyAPI_FUNC(PyObject *) PyEval_EvalFrame(struct _frame *);
113113
PyAPI_FUNC(PyObject *) PyEval_EvalFrameEx(struct _frame *f, int exc);
114114

115-
/* this used to be handled on a per-thread basis - now just two globals */
116-
PyAPI_DATA(volatile int) _Py_Ticker;
117-
PyAPI_DATA(int) _Py_CheckInterval;
118-
119115
/* Interface for threads.
120116
121117
A module that plans to do a blocking system call (or something else
@@ -174,6 +170,9 @@ PyAPI_FUNC(void) PyEval_AcquireThread(PyThreadState *tstate);
174170
PyAPI_FUNC(void) PyEval_ReleaseThread(PyThreadState *tstate);
175171
PyAPI_FUNC(void) PyEval_ReInitThreads(void);
176172

173+
PyAPI_FUNC(void) _PyEval_SetSwitchInterval(unsigned long microseconds);
174+
PyAPI_FUNC(unsigned long) _PyEval_GetSwitchInterval(void);
175+
177176
#define Py_BEGIN_ALLOW_THREADS { \
178177
PyThreadState *_save; \
179178
_save = PyEval_SaveThread();
@@ -192,6 +191,7 @@ PyAPI_FUNC(void) PyEval_ReInitThreads(void);
192191
#endif /* !WITH_THREAD */
193192

194193
PyAPI_FUNC(int) _PyEval_SliceIndex(PyObject *, Py_ssize_t *);
194+
PyAPI_FUNC(void) _PyEval_SignalAsyncExc(void);
195195

196196

197197
#ifdef __cplusplus

Include/pystate.h

+2
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,8 @@ typedef struct _ts {
8888

8989
PyObject *dict; /* Stores per-thread state */
9090

91+
/* XXX doesn't mean anything anymore (the comment below is obsolete)
92+
=> deprecate or remove? */
9193
/* tick_counter is incremented whenever the check_interval ticker
9294
* reaches zero. The purpose is to give a useful measure of the number
9395
* of interpreted bytecode instructions in a given thread. This

Include/sysmodule.h

-1
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@ PyAPI_FUNC(void) PySys_WriteStderr(const char *format, ...)
1818
Py_GCC_ATTRIBUTE((format(printf, 1, 2)));
1919

2020
PyAPI_DATA(PyObject *) _PySys_TraceFunc, *_PySys_ProfileFunc;
21-
PyAPI_DATA(int) _PySys_CheckInterval;
2221

2322
PyAPI_FUNC(void) PySys_ResetWarnOptions(void);
2423
PyAPI_FUNC(void) PySys_AddWarnOption(const wchar_t *);

Lib/test/test_sys.py

+15
Original file line numberDiff line numberDiff line change
@@ -154,6 +154,21 @@ def test_setcheckinterval(self):
154154
sys.setcheckinterval(n)
155155
self.assertEquals(sys.getcheckinterval(), n)
156156

157+
def test_switchinterval(self):
158+
self.assertRaises(TypeError, sys.setswitchinterval)
159+
self.assertRaises(TypeError, sys.setswitchinterval, "a")
160+
self.assertRaises(ValueError, sys.setswitchinterval, -1.0)
161+
self.assertRaises(ValueError, sys.setswitchinterval, 0.0)
162+
orig = sys.getswitchinterval()
163+
# sanity check
164+
self.assertTrue(orig < 0.5, orig)
165+
try:
166+
for n in 0.00001, 0.05, 3.0, orig:
167+
sys.setswitchinterval(n)
168+
self.assertAlmostEquals(sys.getswitchinterval(), n)
169+
finally:
170+
sys.setswitchinterval(orig)
171+
157172
def test_recursionlimit(self):
158173
self.assertRaises(TypeError, sys.getrecursionlimit, 42)
159174
oldlimit = sys.getrecursionlimit()

Makefile.pre.in

+1-1
Original file line numberDiff line numberDiff line change
@@ -596,7 +596,7 @@ Objects/unicodeobject.o: $(srcdir)/Objects/unicodeobject.c \
596596
$(OPCODETARGETS_H): $(OPCODETARGETGEN_FILES)
597597
$(OPCODETARGETGEN) $(OPCODETARGETS_H)
598598

599-
Python/ceval.o: $(OPCODETARGETS_H)
599+
Python/ceval.o: $(OPCODETARGETS_H) Python/ceval_gil.h
600600

601601
Python/formatter_unicode.o: $(srcdir)/Python/formatter_unicode.c \
602602
$(BYTESTR_DEPS) \

Objects/longobject.c

+1-4
Original file line numberDiff line numberDiff line change
@@ -96,10 +96,7 @@ maybe_small_long(PyLongObject *v)
9696
#define MIN(x, y) ((x) > (y) ? (y) : (x))
9797

9898
#define SIGCHECK(PyTryBlock) \
99-
if (--_Py_Ticker < 0) { \
100-
_Py_Ticker = _Py_CheckInterval; \
101-
if (PyErr_CheckSignals()) PyTryBlock \
102-
}
99+
if (PyErr_CheckSignals()) PyTryBlock \
103100

104101
/* forward declaration */
105102
static int bits_in_digit(digit d);

0 commit comments

Comments
 (0)