blob: ecd00ce5b421feb0a87e417e94649dc0b6e5b8fc [file] [log] [blame]
Guido van Rossuma027efa1997-05-05 20:56:21 +00001
2/* Thread and interpreter state structures and their interfaces */
3
4#include "Python.h"
5
Tim Peters84705582004-10-10 02:47:33 +00006/* --------------------------------------------------------------------------
7CAUTION
8
Victor Stinner1a7425f2013-07-07 16:25:15 +02009Always use PyMem_RawMalloc() and PyMem_RawFree() directly in this file. A
10number of these functions are advertised as safe to call when the GIL isn't
11held, and in a debug build Python redirects (e.g.) PyMem_NEW (etc) to Python's
12debugging obmalloc functions. Those aren't thread-safe (they rely on the GIL
13to avoid the expense of doing their own locking).
Tim Peters84705582004-10-10 02:47:33 +000014-------------------------------------------------------------------------- */
15
Martin v. Löwisf0473d52001-07-18 16:17:16 +000016#ifdef HAVE_DLOPEN
17#ifdef HAVE_DLFCN_H
18#include <dlfcn.h>
19#endif
20#ifndef RTLD_LAZY
21#define RTLD_LAZY 1
22#endif
23#endif
24
Benjamin Peterson43162b82012-04-13 11:58:27 -040025#ifdef __cplusplus
26extern "C" {
27#endif
Martin v. Löwisf0473d52001-07-18 16:17:16 +000028
Guido van Rossum1d5ad901999-06-18 14:22:24 +000029#ifdef WITH_THREAD
30#include "pythread.h"
31static PyThread_type_lock head_mutex = NULL; /* Protects interp->tstate_head */
Moshe Zadka9fb6af92000-08-04 21:27:47 +000032#define HEAD_INIT() (void)(head_mutex || (head_mutex = PyThread_allocate_lock()))
Guido van Rossum1d5ad901999-06-18 14:22:24 +000033#define HEAD_LOCK() PyThread_acquire_lock(head_mutex, WAIT_LOCK)
34#define HEAD_UNLOCK() PyThread_release_lock(head_mutex)
Michael W. Hudson188d4362005-06-20 16:52:57 +000035
36/* The single PyInterpreterState used by this process'
37 GILState implementation
38*/
39static PyInterpreterState *autoInterpreterState = NULL;
40static int autoTLSkey = 0;
Guido van Rossum1d5ad901999-06-18 14:22:24 +000041#else
42#define HEAD_INIT() /* Nothing */
43#define HEAD_LOCK() /* Nothing */
44#define HEAD_UNLOCK() /* Nothing */
45#endif
46
Guido van Rossum25ce5661997-08-02 03:10:38 +000047static PyInterpreterState *interp_head = NULL;
Guido van Rossuma027efa1997-05-05 20:56:21 +000048
Jeffrey Yasskin39370832010-05-03 19:29:34 +000049/* Assuming the current thread holds the GIL, this is the
50 PyThreadState for the current thread. */
51_Py_atomic_address _PyThreadState_Current = {NULL};
Guido van Rossum6297a7a2003-02-19 15:53:17 +000052PyThreadFrameGetter _PyThreadState_GetFrame = NULL;
Guido van Rossuma027efa1997-05-05 20:56:21 +000053
Michael W. Hudsonce7da6c2005-09-30 08:20:24 +000054#ifdef WITH_THREAD
Michael W. Hudson188d4362005-06-20 16:52:57 +000055static void _PyGILState_NoteThreadState(PyThreadState* tstate);
Michael W. Hudsonce7da6c2005-09-30 08:20:24 +000056#endif
Michael W. Hudson188d4362005-06-20 16:52:57 +000057
Guido van Rossuma027efa1997-05-05 20:56:21 +000058
59PyInterpreterState *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +000060PyInterpreterState_New(void)
Guido van Rossuma027efa1997-05-05 20:56:21 +000061{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000062 PyInterpreterState *interp = (PyInterpreterState *)
Victor Stinner1a7425f2013-07-07 16:25:15 +020063 PyMem_RawMalloc(sizeof(PyInterpreterState));
Guido van Rossum25ce5661997-08-02 03:10:38 +000064
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000065 if (interp != NULL) {
66 HEAD_INIT();
Thomas Wouters0e3f5912006-08-11 14:57:12 +000067#ifdef WITH_THREAD
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000068 if (head_mutex == NULL)
69 Py_FatalError("Can't initialize threads for interpreter");
Thomas Wouters0e3f5912006-08-11 14:57:12 +000070#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000071 interp->modules = NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000072 interp->modules_by_index = NULL;
73 interp->sysdict = NULL;
74 interp->builtins = NULL;
75 interp->tstate_head = NULL;
76 interp->codec_search_path = NULL;
77 interp->codec_search_cache = NULL;
78 interp->codec_error_registry = NULL;
79 interp->codecs_initialized = 0;
Victor Stinner3cbf14b2011-04-27 00:24:21 +020080 interp->fscodec_initialized = 0;
Brett Cannonfd074152012-04-14 14:10:13 -040081 interp->importlib = NULL;
Martin v. Löwisf0473d52001-07-18 16:17:16 +000082#ifdef HAVE_DLOPEN
83#ifdef RTLD_NOW
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000084 interp->dlopenflags = RTLD_NOW;
Martin v. Löwisf0473d52001-07-18 16:17:16 +000085#else
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000086 interp->dlopenflags = RTLD_LAZY;
Martin v. Löwisf0473d52001-07-18 16:17:16 +000087#endif
88#endif
Martin v. Löwisf30d60e2004-06-08 08:17:44 +000089#ifdef WITH_TSC
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000090 interp->tscdump = 0;
Martin v. Löwisf30d60e2004-06-08 08:17:44 +000091#endif
Guido van Rossum25ce5661997-08-02 03:10:38 +000092
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000093 HEAD_LOCK();
94 interp->next = interp_head;
95 interp_head = interp;
96 HEAD_UNLOCK();
97 }
Guido van Rossum25ce5661997-08-02 03:10:38 +000098
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000099 return interp;
Guido van Rossuma027efa1997-05-05 20:56:21 +0000100}
101
102
103void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000104PyInterpreterState_Clear(PyInterpreterState *interp)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000105{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000106 PyThreadState *p;
107 HEAD_LOCK();
108 for (p = interp->tstate_head; p != NULL; p = p->next)
109 PyThreadState_Clear(p);
110 HEAD_UNLOCK();
111 Py_CLEAR(interp->codec_search_path);
112 Py_CLEAR(interp->codec_search_cache);
113 Py_CLEAR(interp->codec_error_registry);
114 Py_CLEAR(interp->modules);
115 Py_CLEAR(interp->modules_by_index);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000116 Py_CLEAR(interp->sysdict);
117 Py_CLEAR(interp->builtins);
Brett Cannonfd074152012-04-14 14:10:13 -0400118 Py_CLEAR(interp->importlib);
Guido van Rossum25ce5661997-08-02 03:10:38 +0000119}
120
121
122static void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000123zapthreads(PyInterpreterState *interp)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000124{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000125 PyThreadState *p;
126 /* No need to lock the mutex here because this should only happen
127 when the threads are all really dead (XXX famous last words). */
128 while ((p = interp->tstate_head) != NULL) {
129 PyThreadState_Delete(p);
130 }
Guido van Rossum25ce5661997-08-02 03:10:38 +0000131}
132
133
134void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000135PyInterpreterState_Delete(PyInterpreterState *interp)
Guido van Rossuma027efa1997-05-05 20:56:21 +0000136{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000137 PyInterpreterState **p;
138 zapthreads(interp);
139 HEAD_LOCK();
140 for (p = &interp_head; ; p = &(*p)->next) {
141 if (*p == NULL)
142 Py_FatalError(
143 "PyInterpreterState_Delete: invalid interp");
144 if (*p == interp)
145 break;
146 }
147 if (interp->tstate_head != NULL)
148 Py_FatalError("PyInterpreterState_Delete: remaining threads");
149 *p = interp->next;
150 HEAD_UNLOCK();
Victor Stinner1a7425f2013-07-07 16:25:15 +0200151 PyMem_RawFree(interp);
Antoine Pitrou8db076c2011-10-30 19:13:55 +0100152#ifdef WITH_THREAD
153 if (interp_head == NULL && head_mutex != NULL) {
154 PyThread_free_lock(head_mutex);
155 head_mutex = NULL;
156 }
157#endif
Guido van Rossuma027efa1997-05-05 20:56:21 +0000158}
159
160
Michael W. Hudson019a78e2002-11-08 12:53:11 +0000161/* Default implementation for _PyThreadState_GetFrame */
162static struct _frame *
163threadstate_getframe(PyThreadState *self)
164{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000165 return self->frame;
Michael W. Hudson019a78e2002-11-08 12:53:11 +0000166}
167
Victor Stinner45b9be52010-03-03 23:28:07 +0000168static PyThreadState *
169new_threadstate(PyInterpreterState *interp, int init)
Guido van Rossuma027efa1997-05-05 20:56:21 +0000170{
Victor Stinner1a7425f2013-07-07 16:25:15 +0200171 PyThreadState *tstate = (PyThreadState *)PyMem_RawMalloc(sizeof(PyThreadState));
Tim Peters84705582004-10-10 02:47:33 +0000172
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000173 if (_PyThreadState_GetFrame == NULL)
174 _PyThreadState_GetFrame = threadstate_getframe;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000175
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000176 if (tstate != NULL) {
177 tstate->interp = interp;
Guido van Rossuma027efa1997-05-05 20:56:21 +0000178
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000179 tstate->frame = NULL;
180 tstate->recursion_depth = 0;
181 tstate->overflowed = 0;
182 tstate->recursion_critical = 0;
183 tstate->tracing = 0;
184 tstate->use_tracing = 0;
185 tstate->tick_counter = 0;
186 tstate->gilstate_counter = 0;
187 tstate->async_exc = NULL;
Martin v. Löwisf9ce67d2003-07-13 10:41:53 +0000188#ifdef WITH_THREAD
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000189 tstate->thread_id = PyThread_get_thread_ident();
Martin v. Löwisf9ce67d2003-07-13 10:41:53 +0000190#else
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000191 tstate->thread_id = 0;
Martin v. Löwisf9ce67d2003-07-13 10:41:53 +0000192#endif
Guido van Rossuma027efa1997-05-05 20:56:21 +0000193
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000194 tstate->dict = NULL;
Guido van Rossumede04391998-04-10 20:18:25 +0000195
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000196 tstate->curexc_type = NULL;
197 tstate->curexc_value = NULL;
198 tstate->curexc_traceback = NULL;
Guido van Rossuma027efa1997-05-05 20:56:21 +0000199
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000200 tstate->exc_type = NULL;
201 tstate->exc_value = NULL;
202 tstate->exc_traceback = NULL;
Guido van Rossuma027efa1997-05-05 20:56:21 +0000203
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000204 tstate->c_profilefunc = NULL;
205 tstate->c_tracefunc = NULL;
206 tstate->c_profileobj = NULL;
207 tstate->c_traceobj = NULL;
Guido van Rossuma027efa1997-05-05 20:56:21 +0000208
Antoine Pitrou2b0218a2012-09-06 00:59:49 +0200209 tstate->trash_delete_nesting = 0;
210 tstate->trash_delete_later = NULL;
Antoine Pitrou7b476992013-09-07 23:38:37 +0200211 tstate->on_delete = NULL;
212 tstate->on_delete_data = NULL;
Antoine Pitrou2b0218a2012-09-06 00:59:49 +0200213
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000214 if (init)
215 _PyThreadState_Init(tstate);
Michael W. Hudson188d4362005-06-20 16:52:57 +0000216
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000217 HEAD_LOCK();
Charles-Francois Natalif28dfdd2013-05-08 21:09:52 +0200218 tstate->prev = NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000219 tstate->next = interp->tstate_head;
Charles-Francois Natalif28dfdd2013-05-08 21:09:52 +0200220 if (tstate->next)
221 tstate->next->prev = tstate;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000222 interp->tstate_head = tstate;
223 HEAD_UNLOCK();
224 }
Guido van Rossum25ce5661997-08-02 03:10:38 +0000225
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000226 return tstate;
Guido van Rossuma027efa1997-05-05 20:56:21 +0000227}
228
Victor Stinner45b9be52010-03-03 23:28:07 +0000229PyThreadState *
230PyThreadState_New(PyInterpreterState *interp)
231{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000232 return new_threadstate(interp, 1);
Victor Stinner45b9be52010-03-03 23:28:07 +0000233}
234
235PyThreadState *
236_PyThreadState_Prealloc(PyInterpreterState *interp)
237{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000238 return new_threadstate(interp, 0);
Victor Stinner45b9be52010-03-03 23:28:07 +0000239}
240
241void
242_PyThreadState_Init(PyThreadState *tstate)
243{
244#ifdef WITH_THREAD
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000245 _PyGILState_NoteThreadState(tstate);
Victor Stinner45b9be52010-03-03 23:28:07 +0000246#endif
247}
248
Martin v. Löwis1a214512008-06-11 05:26:20 +0000249PyObject*
Martin v. Löwis7800f752012-06-22 12:20:55 +0200250PyState_FindModule(struct PyModuleDef* module)
Martin v. Löwis1a214512008-06-11 05:26:20 +0000251{
Martin v. Löwis7800f752012-06-22 12:20:55 +0200252 Py_ssize_t index = module->m_base.m_index;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000253 PyInterpreterState *state = PyThreadState_GET()->interp;
254 PyObject *res;
255 if (index == 0)
256 return NULL;
257 if (state->modules_by_index == NULL)
258 return NULL;
Antoine Pitrou75506e82012-08-20 19:30:46 +0200259 if (index >= PyList_GET_SIZE(state->modules_by_index))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000260 return NULL;
261 res = PyList_GET_ITEM(state->modules_by_index, index);
262 return res==Py_None ? NULL : res;
Martin v. Löwis1a214512008-06-11 05:26:20 +0000263}
264
265int
266_PyState_AddModule(PyObject* module, struct PyModuleDef* def)
267{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000268 PyInterpreterState *state = PyThreadState_GET()->interp;
269 if (!def)
270 return -1;
271 if (!state->modules_by_index) {
272 state->modules_by_index = PyList_New(0);
273 if (!state->modules_by_index)
274 return -1;
275 }
276 while(PyList_GET_SIZE(state->modules_by_index) <= def->m_base.m_index)
277 if (PyList_Append(state->modules_by_index, Py_None) < 0)
278 return -1;
279 Py_INCREF(module);
280 return PyList_SetItem(state->modules_by_index,
281 def->m_base.m_index, module);
Martin v. Löwis1a214512008-06-11 05:26:20 +0000282}
Guido van Rossuma027efa1997-05-05 20:56:21 +0000283
Martin v. Löwis7800f752012-06-22 12:20:55 +0200284int
285PyState_AddModule(PyObject* module, struct PyModuleDef* def)
286{
287 Py_ssize_t index;
288 PyInterpreterState *state = PyThreadState_GET()->interp;
289 if (!def) {
290 Py_FatalError("PyState_AddModule: Module Definition is NULL");
291 return -1;
292 }
293 index = def->m_base.m_index;
294 if (state->modules_by_index) {
295 if(PyList_GET_SIZE(state->modules_by_index) >= index) {
296 if(module == PyList_GET_ITEM(state->modules_by_index, index)) {
297 Py_FatalError("PyState_AddModule: Module already added!");
298 return -1;
299 }
300 }
301 }
302 return _PyState_AddModule(module, def);
303}
304
305int
306PyState_RemoveModule(struct PyModuleDef* def)
307{
308 Py_ssize_t index = def->m_base.m_index;
309 PyInterpreterState *state = PyThreadState_GET()->interp;
310 if (index == 0) {
311 Py_FatalError("PyState_RemoveModule: Module index invalid.");
312 return -1;
313 }
314 if (state->modules_by_index == NULL) {
315 Py_FatalError("PyState_RemoveModule: Interpreters module-list not acessible.");
316 return -1;
317 }
318 if (index > PyList_GET_SIZE(state->modules_by_index)) {
319 Py_FatalError("PyState_RemoveModule: Module index out of bounds.");
320 return -1;
321 }
322 return PyList_SetItem(state->modules_by_index, index, Py_None);
323}
324
Antoine Pitrou40322e62013-08-11 00:30:09 +0200325/* used by import.c:PyImport_Cleanup */
326void
327_PyState_ClearModules(void)
328{
329 PyInterpreterState *state = PyThreadState_GET()->interp;
330 if (state->modules_by_index) {
331 Py_ssize_t i;
332 for (i = 0; i < PyList_GET_SIZE(state->modules_by_index); i++) {
333 PyObject *m = PyList_GET_ITEM(state->modules_by_index, i);
334 if (PyModule_Check(m)) {
335 /* cleanup the saved copy of module dicts */
336 PyModuleDef *md = PyModule_GetDef(m);
337 if (md)
338 Py_CLEAR(md->m_base.m_copy);
339 }
340 }
341 /* Setting modules_by_index to NULL could be dangerous, so we
342 clear the list instead. */
343 if (PyList_SetSlice(state->modules_by_index,
344 0, PyList_GET_SIZE(state->modules_by_index),
345 NULL))
346 PyErr_WriteUnraisable(state->modules_by_index);
347 }
348}
349
Guido van Rossuma027efa1997-05-05 20:56:21 +0000350void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000351PyThreadState_Clear(PyThreadState *tstate)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000352{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000353 if (Py_VerboseFlag && tstate->frame != NULL)
354 fprintf(stderr,
355 "PyThreadState_Clear: warning: thread still has a frame\n");
Guido van Rossum25ce5661997-08-02 03:10:38 +0000356
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000357 Py_CLEAR(tstate->frame);
Guido van Rossum25ce5661997-08-02 03:10:38 +0000358
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000359 Py_CLEAR(tstate->dict);
360 Py_CLEAR(tstate->async_exc);
Guido van Rossumede04391998-04-10 20:18:25 +0000361
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000362 Py_CLEAR(tstate->curexc_type);
363 Py_CLEAR(tstate->curexc_value);
364 Py_CLEAR(tstate->curexc_traceback);
Guido van Rossum25ce5661997-08-02 03:10:38 +0000365
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000366 Py_CLEAR(tstate->exc_type);
367 Py_CLEAR(tstate->exc_value);
368 Py_CLEAR(tstate->exc_traceback);
Guido van Rossum25ce5661997-08-02 03:10:38 +0000369
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000370 tstate->c_profilefunc = NULL;
371 tstate->c_tracefunc = NULL;
372 Py_CLEAR(tstate->c_profileobj);
373 Py_CLEAR(tstate->c_traceobj);
Guido van Rossum25ce5661997-08-02 03:10:38 +0000374}
375
376
Guido van Rossum29757862001-01-23 01:46:06 +0000377/* Common code for PyThreadState_Delete() and PyThreadState_DeleteCurrent() */
378static void
379tstate_delete_common(PyThreadState *tstate)
Guido van Rossuma027efa1997-05-05 20:56:21 +0000380{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000381 PyInterpreterState *interp;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000382 if (tstate == NULL)
383 Py_FatalError("PyThreadState_Delete: NULL tstate");
384 interp = tstate->interp;
385 if (interp == NULL)
386 Py_FatalError("PyThreadState_Delete: NULL interp");
387 HEAD_LOCK();
Charles-Francois Natalif28dfdd2013-05-08 21:09:52 +0200388 if (tstate->prev)
389 tstate->prev->next = tstate->next;
390 else
391 interp->tstate_head = tstate->next;
392 if (tstate->next)
393 tstate->next->prev = tstate->prev;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000394 HEAD_UNLOCK();
Antoine Pitrou7b476992013-09-07 23:38:37 +0200395 if (tstate->on_delete != NULL) {
396 tstate->on_delete(tstate->on_delete_data);
397 }
Victor Stinner1a7425f2013-07-07 16:25:15 +0200398 PyMem_RawFree(tstate);
Guido van Rossuma027efa1997-05-05 20:56:21 +0000399}
400
401
Guido van Rossum29757862001-01-23 01:46:06 +0000402void
403PyThreadState_Delete(PyThreadState *tstate)
404{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000405 if (tstate == _Py_atomic_load_relaxed(&_PyThreadState_Current))
406 Py_FatalError("PyThreadState_Delete: tstate is still current");
Tim Petersf4e69282006-02-27 17:15:31 +0000407#ifdef WITH_THREAD
Antoine Pitrou079ce542010-09-08 12:37:10 +0000408 if (autoInterpreterState && PyThread_get_key_value(autoTLSkey) == tstate)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000409 PyThread_delete_key_value(autoTLSkey);
Tim Petersf4e69282006-02-27 17:15:31 +0000410#endif /* WITH_THREAD */
Christian Heimesb9dbc7d2013-07-01 23:42:28 +0200411 tstate_delete_common(tstate);
Guido van Rossum29757862001-01-23 01:46:06 +0000412}
413
414
415#ifdef WITH_THREAD
416void
417PyThreadState_DeleteCurrent()
418{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000419 PyThreadState *tstate = (PyThreadState*)_Py_atomic_load_relaxed(
420 &_PyThreadState_Current);
421 if (tstate == NULL)
422 Py_FatalError(
423 "PyThreadState_DeleteCurrent: no current tstate");
424 _Py_atomic_store_relaxed(&_PyThreadState_Current, NULL);
Antoine Pitrou079ce542010-09-08 12:37:10 +0000425 if (autoInterpreterState && PyThread_get_key_value(autoTLSkey) == tstate)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000426 PyThread_delete_key_value(autoTLSkey);
Christian Heimesb9dbc7d2013-07-01 23:42:28 +0200427 tstate_delete_common(tstate);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000428 PyEval_ReleaseLock();
Guido van Rossum29757862001-01-23 01:46:06 +0000429}
430#endif /* WITH_THREAD */
431
432
Antoine Pitrou8408cea2013-05-05 23:47:09 +0200433/*
434 * Delete all thread states except the one passed as argument.
435 * Note that, if there is a current thread state, it *must* be the one
436 * passed as argument. Also, this won't touch any other interpreters
437 * than the current one, since we don't know which thread state should
438 * be kept in those other interpreteres.
439 */
440void
441_PyThreadState_DeleteExcept(PyThreadState *tstate)
442{
443 PyInterpreterState *interp = tstate->interp;
444 PyThreadState *p, *next, *garbage;
445 HEAD_LOCK();
446 /* Remove all thread states, except tstate, from the linked list of
447 thread states. This will allow calling PyThreadState_Clear()
Charles-Francois Natalif28dfdd2013-05-08 21:09:52 +0200448 without holding the lock. */
Antoine Pitrou8408cea2013-05-05 23:47:09 +0200449 garbage = interp->tstate_head;
Charles-Francois Natalif28dfdd2013-05-08 21:09:52 +0200450 if (garbage == tstate)
451 garbage = tstate->next;
452 if (tstate->prev)
453 tstate->prev->next = tstate->next;
454 if (tstate->next)
455 tstate->next->prev = tstate->prev;
456 tstate->prev = tstate->next = NULL;
Antoine Pitrou8408cea2013-05-05 23:47:09 +0200457 interp->tstate_head = tstate;
Antoine Pitrou8408cea2013-05-05 23:47:09 +0200458 HEAD_UNLOCK();
459 /* Clear and deallocate all stale thread states. Even if this
460 executes Python code, we should be safe since it executes
461 in the current thread, not one of the stale threads. */
462 for (p = garbage; p; p = next) {
463 next = p->next;
464 PyThreadState_Clear(p);
Victor Stinner1a7425f2013-07-07 16:25:15 +0200465 PyMem_RawFree(p);
Antoine Pitrou8408cea2013-05-05 23:47:09 +0200466 }
467}
468
469
Guido van Rossuma027efa1997-05-05 20:56:21 +0000470PyThreadState *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000471PyThreadState_Get(void)
Guido van Rossuma027efa1997-05-05 20:56:21 +0000472{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000473 PyThreadState *tstate = (PyThreadState*)_Py_atomic_load_relaxed(
474 &_PyThreadState_Current);
475 if (tstate == NULL)
476 Py_FatalError("PyThreadState_Get: no current thread");
Guido van Rossum25ce5661997-08-02 03:10:38 +0000477
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000478 return tstate;
Guido van Rossuma027efa1997-05-05 20:56:21 +0000479}
480
481
482PyThreadState *
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000483PyThreadState_Swap(PyThreadState *newts)
Guido van Rossuma027efa1997-05-05 20:56:21 +0000484{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000485 PyThreadState *oldts = (PyThreadState*)_Py_atomic_load_relaxed(
486 &_PyThreadState_Current);
Guido van Rossum25ce5661997-08-02 03:10:38 +0000487
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000488 _Py_atomic_store_relaxed(&_PyThreadState_Current, newts);
489 /* It should not be possible for more than one thread state
490 to be used for a thread. Check this the best we can in debug
491 builds.
492 */
Martin v. Löwis9e296252003-05-01 05:25:29 +0000493#if defined(Py_DEBUG) && defined(WITH_THREAD)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000494 if (newts) {
495 /* This can be called from PyEval_RestoreThread(). Similar
496 to it, we need to ensure errno doesn't change.
497 */
498 int err = errno;
499 PyThreadState *check = PyGILState_GetThisThreadState();
500 if (check && check->interp == newts->interp && check != newts)
501 Py_FatalError("Invalid thread state for this thread");
502 errno = err;
503 }
Mark Hammond8d98d2c2003-04-19 15:41:53 +0000504#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000505 return oldts;
Guido van Rossuma027efa1997-05-05 20:56:21 +0000506}
Guido van Rossumede04391998-04-10 20:18:25 +0000507
508/* An extension mechanism to store arbitrary additional per-thread state.
509 PyThreadState_GetDict() returns a dictionary that can be used to hold such
510 state; the caller should pick a unique key and store its state there. If
Guido van Rossum0fc8f002003-04-15 15:12:39 +0000511 PyThreadState_GetDict() returns NULL, an exception has *not* been raised
512 and the caller should assume no per-thread state is available. */
Guido van Rossumede04391998-04-10 20:18:25 +0000513
514PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000515PyThreadState_GetDict(void)
Guido van Rossumede04391998-04-10 20:18:25 +0000516{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000517 PyThreadState *tstate = (PyThreadState*)_Py_atomic_load_relaxed(
518 &_PyThreadState_Current);
519 if (tstate == NULL)
520 return NULL;
Guido van Rossumede04391998-04-10 20:18:25 +0000521
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000522 if (tstate->dict == NULL) {
523 PyObject *d;
524 tstate->dict = d = PyDict_New();
525 if (d == NULL)
526 PyErr_Clear();
527 }
528 return tstate->dict;
Guido van Rossumede04391998-04-10 20:18:25 +0000529}
Guido van Rossumf5df46d2001-07-19 12:19:27 +0000530
531
Guido van Rossumb8b6d0c2003-06-28 21:53:52 +0000532/* Asynchronously raise an exception in a thread.
533 Requested by Just van Rossum and Alex Martelli.
Guido van Rossum0f1f63c2005-02-08 02:07:57 +0000534 To prevent naive misuse, you must write your own extension
Thomas Wouters00ee7ba2006-08-21 19:07:27 +0000535 to call this, or use ctypes. Must be called with the GIL held.
536 Returns the number of tstates modified (normally 1, but 0 if `id` didn't
537 match any known thread id). Can be called with exc=NULL to clear an
538 existing async exception. This raises no exceptions. */
Guido van Rossumb8b6d0c2003-06-28 21:53:52 +0000539
540int
541PyThreadState_SetAsyncExc(long id, PyObject *exc) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000542 PyThreadState *tstate = PyThreadState_GET();
543 PyInterpreterState *interp = tstate->interp;
544 PyThreadState *p;
Thomas Wouters00ee7ba2006-08-21 19:07:27 +0000545
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000546 /* Although the GIL is held, a few C API functions can be called
547 * without the GIL held, and in particular some that create and
548 * destroy thread and interpreter states. Those can mutate the
549 * list of thread states we're traversing, so to prevent that we lock
550 * head_mutex for the duration.
551 */
552 HEAD_LOCK();
553 for (p = interp->tstate_head; p != NULL; p = p->next) {
554 if (p->thread_id == id) {
555 /* Tricky: we need to decref the current value
556 * (if any) in p->async_exc, but that can in turn
557 * allow arbitrary Python code to run, including
558 * perhaps calls to this function. To prevent
559 * deadlock, we need to release head_mutex before
560 * the decref.
561 */
562 PyObject *old_exc = p->async_exc;
563 Py_XINCREF(exc);
564 p->async_exc = exc;
565 HEAD_UNLOCK();
566 Py_XDECREF(old_exc);
567 _PyEval_SignalAsyncExc();
568 return 1;
569 }
570 }
571 HEAD_UNLOCK();
572 return 0;
Guido van Rossumb8b6d0c2003-06-28 21:53:52 +0000573}
574
575
Guido van Rossumf5df46d2001-07-19 12:19:27 +0000576/* Routines for advanced debuggers, requested by David Beazley.
577 Don't use unless you know what you are doing! */
578
579PyInterpreterState *
580PyInterpreterState_Head(void)
581{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000582 return interp_head;
Guido van Rossumf5df46d2001-07-19 12:19:27 +0000583}
584
585PyInterpreterState *
586PyInterpreterState_Next(PyInterpreterState *interp) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000587 return interp->next;
Guido van Rossumf5df46d2001-07-19 12:19:27 +0000588}
589
590PyThreadState *
591PyInterpreterState_ThreadHead(PyInterpreterState *interp) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000592 return interp->tstate_head;
Guido van Rossumf5df46d2001-07-19 12:19:27 +0000593}
594
595PyThreadState *
596PyThreadState_Next(PyThreadState *tstate) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000597 return tstate->next;
Guido van Rossumf5df46d2001-07-19 12:19:27 +0000598}
Mark Hammond8d98d2c2003-04-19 15:41:53 +0000599
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000600/* The implementation of sys._current_frames(). This is intended to be
601 called with the GIL held, as it will be when called via
602 sys._current_frames(). It's possible it would work fine even without
603 the GIL held, but haven't thought enough about that.
604*/
605PyObject *
606_PyThread_CurrentFrames(void)
607{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000608 PyObject *result;
609 PyInterpreterState *i;
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000610
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000611 result = PyDict_New();
612 if (result == NULL)
613 return NULL;
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000614
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000615 /* for i in all interpreters:
616 * for t in all of i's thread states:
617 * if t's frame isn't NULL, map t's id to its frame
Ezio Melotti13925002011-03-16 11:05:33 +0200618 * Because these lists can mutate even when the GIL is held, we
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000619 * need to grab head_mutex for the duration.
620 */
621 HEAD_LOCK();
622 for (i = interp_head; i != NULL; i = i->next) {
623 PyThreadState *t;
624 for (t = i->tstate_head; t != NULL; t = t->next) {
625 PyObject *id;
626 int stat;
627 struct _frame *frame = t->frame;
628 if (frame == NULL)
629 continue;
630 id = PyLong_FromLong(t->thread_id);
631 if (id == NULL)
632 goto Fail;
633 stat = PyDict_SetItem(result, id, (PyObject *)frame);
634 Py_DECREF(id);
635 if (stat < 0)
636 goto Fail;
637 }
638 }
639 HEAD_UNLOCK();
640 return result;
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000641
642 Fail:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000643 HEAD_UNLOCK();
644 Py_DECREF(result);
645 return NULL;
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000646}
Guido van Rossumb8b6d0c2003-06-28 21:53:52 +0000647
Mark Hammond8d98d2c2003-04-19 15:41:53 +0000648/* Python "auto thread state" API. */
649#ifdef WITH_THREAD
650
651/* Keep this as a static, as it is not reliable! It can only
652 ever be compared to the state for the *current* thread.
653 * If not equal, then it doesn't matter that the actual
654 value may change immediately after comparison, as it can't
655 possibly change to the current thread's state.
656 * If equal, then the current thread holds the lock, so the value can't
657 change until we yield the lock.
658*/
659static int
660PyThreadState_IsCurrent(PyThreadState *tstate)
661{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000662 /* Must be the tstate for this thread */
663 assert(PyGILState_GetThisThreadState()==tstate);
664 return tstate == _Py_atomic_load_relaxed(&_PyThreadState_Current);
Mark Hammond8d98d2c2003-04-19 15:41:53 +0000665}
666
Tim Peters4c1f5ec2004-10-09 17:25:05 +0000667/* Internal initialization/finalization functions called by
668 Py_Initialize/Py_Finalize
Mark Hammond8d98d2c2003-04-19 15:41:53 +0000669*/
Tim Peters19717fa2004-10-09 17:38:29 +0000670void
671_PyGILState_Init(PyInterpreterState *i, PyThreadState *t)
Mark Hammond8d98d2c2003-04-19 15:41:53 +0000672{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000673 assert(i && t); /* must init with valid states */
674 autoTLSkey = PyThread_create_key();
Kristján Valur Jónsson2fea9b92010-09-20 02:11:49 +0000675 if (autoTLSkey == -1)
676 Py_FatalError("Could not allocate TLS entry");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000677 autoInterpreterState = i;
678 assert(PyThread_get_key_value(autoTLSkey) == NULL);
679 assert(t->gilstate_counter == 0);
Michael W. Hudson188d4362005-06-20 16:52:57 +0000680
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000681 _PyGILState_NoteThreadState(t);
Mark Hammond8d98d2c2003-04-19 15:41:53 +0000682}
683
Tim Peters19717fa2004-10-09 17:38:29 +0000684void
685_PyGILState_Fini(void)
Mark Hammond8d98d2c2003-04-19 15:41:53 +0000686{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000687 PyThread_delete_key(autoTLSkey);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000688 autoInterpreterState = NULL;
Mark Hammond8d98d2c2003-04-19 15:41:53 +0000689}
690
Charles-François Natalia233df82011-11-22 19:49:51 +0100691/* Reset the TLS key - called by PyOS_AfterFork().
Antoine Pitrou0c759fe2011-04-27 19:28:05 +0200692 * This should not be necessary, but some - buggy - pthread implementations
Charles-François Natalia233df82011-11-22 19:49:51 +0100693 * don't reset TLS upon fork(), see issue #10517.
Antoine Pitrou0c759fe2011-04-27 19:28:05 +0200694 */
695void
696_PyGILState_Reinit(void)
697{
698 PyThreadState *tstate = PyGILState_GetThisThreadState();
699 PyThread_delete_key(autoTLSkey);
700 if ((autoTLSkey = PyThread_create_key()) == -1)
701 Py_FatalError("Could not allocate TLS entry");
702
Charles-François Natalia233df82011-11-22 19:49:51 +0100703 /* If the thread had an associated auto thread state, reassociate it with
704 * the new key. */
705 if (tstate && PyThread_set_key_value(autoTLSkey, (void *)tstate) < 0)
Antoine Pitrou0c759fe2011-04-27 19:28:05 +0200706 Py_FatalError("Couldn't create autoTLSkey mapping");
707}
708
Michael W. Hudson188d4362005-06-20 16:52:57 +0000709/* When a thread state is created for a thread by some mechanism other than
710 PyGILState_Ensure, it's important that the GILState machinery knows about
711 it so it doesn't try to create another thread state for the thread (this is
712 a better fix for SF bug #1010677 than the first one attempted).
713*/
Thomas Wouters89f507f2006-12-13 04:49:30 +0000714static void
Michael W. Hudson188d4362005-06-20 16:52:57 +0000715_PyGILState_NoteThreadState(PyThreadState* tstate)
716{
Antoine Pitrou079ce542010-09-08 12:37:10 +0000717 /* If autoTLSkey isn't initialized, this must be the very first
718 threadstate created in Py_Initialize(). Don't do anything for now
719 (we'll be back here when _PyGILState_Init is called). */
720 if (!autoInterpreterState)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000721 return;
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000722
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000723 /* Stick the thread state for this thread in thread local storage.
Michael W. Hudson188d4362005-06-20 16:52:57 +0000724
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000725 The only situation where you can legitimately have more than one
726 thread state for an OS level thread is when there are multiple
727 interpreters, when:
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000728
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000729 a) You shouldn't really be using the PyGILState_ APIs anyway,
730 and:
Michael W. Hudson188d4362005-06-20 16:52:57 +0000731
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000732 b) The slightly odd way PyThread_set_key_value works (see
733 comments by its implementation) means that the first thread
734 state created for that given OS level thread will "win",
735 which seems reasonable behaviour.
736 */
737 if (PyThread_set_key_value(autoTLSkey, (void *)tstate) < 0)
738 Py_FatalError("Couldn't create autoTLSkey mapping");
Michael W. Hudson188d4362005-06-20 16:52:57 +0000739
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000740 /* PyGILState_Release must not try to delete this thread state. */
741 tstate->gilstate_counter = 1;
Michael W. Hudson188d4362005-06-20 16:52:57 +0000742}
743
Mark Hammond8d98d2c2003-04-19 15:41:53 +0000744/* The public functions */
Tim Peters19717fa2004-10-09 17:38:29 +0000745PyThreadState *
746PyGILState_GetThisThreadState(void)
Mark Hammond8d98d2c2003-04-19 15:41:53 +0000747{
Antoine Pitrou079ce542010-09-08 12:37:10 +0000748 if (autoInterpreterState == NULL)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000749 return NULL;
750 return (PyThreadState *)PyThread_get_key_value(autoTLSkey);
Mark Hammond8d98d2c2003-04-19 15:41:53 +0000751}
752
Kristján Valur Jónsson684cd0e2013-03-23 03:36:16 -0700753int
754PyGILState_Check(void)
755{
756 /* can't use PyThreadState_Get() since it will assert that it has the GIL */
757 PyThreadState *tstate = (PyThreadState*)_Py_atomic_load_relaxed(
758 &_PyThreadState_Current);
759 return tstate && (tstate == PyGILState_GetThisThreadState());
760}
761
Tim Peters19717fa2004-10-09 17:38:29 +0000762PyGILState_STATE
763PyGILState_Ensure(void)
Mark Hammond8d98d2c2003-04-19 15:41:53 +0000764{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000765 int current;
766 PyThreadState *tcur;
767 /* Note that we do not auto-init Python here - apart from
768 potential races with 2 threads auto-initializing, pep-311
769 spells out other issues. Embedders are expected to have
770 called Py_Initialize() and usually PyEval_InitThreads().
771 */
772 assert(autoInterpreterState); /* Py_Initialize() hasn't been called! */
773 tcur = (PyThreadState *)PyThread_get_key_value(autoTLSkey);
774 if (tcur == NULL) {
775 /* Create a new thread state for this thread */
776 tcur = PyThreadState_New(autoInterpreterState);
777 if (tcur == NULL)
778 Py_FatalError("Couldn't create thread-state for new thread");
779 /* This is our thread state! We'll need to delete it in the
780 matching call to PyGILState_Release(). */
781 tcur->gilstate_counter = 0;
782 current = 0; /* new thread state is never current */
783 }
784 else
785 current = PyThreadState_IsCurrent(tcur);
786 if (current == 0)
787 PyEval_RestoreThread(tcur);
788 /* Update our counter in the thread-state - no need for locks:
789 - tcur will remain valid as we hold the GIL.
790 - the counter is safe as we are the only thread "allowed"
791 to modify this value
792 */
793 ++tcur->gilstate_counter;
794 return current ? PyGILState_LOCKED : PyGILState_UNLOCKED;
Mark Hammond8d98d2c2003-04-19 15:41:53 +0000795}
796
Tim Peters19717fa2004-10-09 17:38:29 +0000797void
798PyGILState_Release(PyGILState_STATE oldstate)
Mark Hammond8d98d2c2003-04-19 15:41:53 +0000799{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000800 PyThreadState *tcur = (PyThreadState *)PyThread_get_key_value(
801 autoTLSkey);
802 if (tcur == NULL)
803 Py_FatalError("auto-releasing thread-state, "
804 "but no thread-state for this thread");
805 /* We must hold the GIL and have our thread state current */
806 /* XXX - remove the check - the assert should be fine,
807 but while this is very new (April 2003), the extra check
808 by release-only users can't hurt.
809 */
810 if (! PyThreadState_IsCurrent(tcur))
811 Py_FatalError("This thread state must be current when releasing");
812 assert(PyThreadState_IsCurrent(tcur));
813 --tcur->gilstate_counter;
814 assert(tcur->gilstate_counter >= 0); /* illegal counter value */
Mark Hammond8d98d2c2003-04-19 15:41:53 +0000815
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000816 /* If we're going to destroy this thread-state, we must
817 * clear it while the GIL is held, as destructors may run.
818 */
819 if (tcur->gilstate_counter == 0) {
820 /* can't have been locked when we created it */
821 assert(oldstate == PyGILState_UNLOCKED);
822 PyThreadState_Clear(tcur);
823 /* Delete the thread-state. Note this releases the GIL too!
824 * It's vital that the GIL be held here, to avoid shutdown
825 * races; see bugs 225673 and 1061968 (that nasty bug has a
826 * habit of coming back).
827 */
828 PyThreadState_DeleteCurrent();
829 }
830 /* Release the lock if necessary */
831 else if (oldstate == PyGILState_UNLOCKED)
832 PyEval_SaveThread();
Mark Hammond8d98d2c2003-04-19 15:41:53 +0000833}
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000834
Benjamin Peterson3bf01752012-04-13 18:06:36 -0400835#endif /* WITH_THREAD */
836
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000837#ifdef __cplusplus
838}
839#endif
840
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000841