Permalink
Browse files
bpo-36475: Make PyThread_exit_thread with _Py_NO_RETURN (GH-13068)
- Loading branch information...
|
|
@@ -21,17 +21,6 @@ PyAPI_FUNC(void) PyErr_GetExcInfo(PyObject **, PyObject **, PyObject **); |
|
|
|
PyAPI_FUNC(void) PyErr_SetExcInfo(PyObject *, PyObject *, PyObject *); |
|
|
|
#endif |
|
|
|
|
|
|
|
#if defined(__clang__) || \ |
|
|
|
(defined(__GNUC__) && \ |
|
|
|
((__GNUC__ >= 3) || \ |
|
|
|
(__GNUC__ == 2) && (__GNUC_MINOR__ >= 5))) |
|
|
|
# define _Py_NO_RETURN __attribute__((__noreturn__)) |
|
|
|
#elif defined(_MSC_VER) |
|
|
|
# define _Py_NO_RETURN __declspec(noreturn) |
|
|
|
#else |
|
|
|
# define _Py_NO_RETURN |
|
|
|
#endif |
|
|
|
|
|
|
|
/* Defined in Python/pylifecycle.c */ |
|
|
|
PyAPI_FUNC(void) _Py_NO_RETURN Py_FatalError(const char *message); |
|
|
|
|
|
|
|
|
|
@@ -829,4 +829,18 @@ extern _invalid_parameter_handler _Py_silent_invalid_parameter_handler; |
|
|
|
# define _Py_FORCE_UTF8_FS_ENCODING |
|
|
|
#endif |
|
|
|
|
|
|
|
/* Mark a function which cannot return. Example: |
|
|
|
|
|
|
|
PyAPI_FUNC(void) _Py_NO_RETURN PyThread_exit_thread(void); */ |
|
|
|
#if defined(__clang__) || \ |
|
|
|
(defined(__GNUC__) && \ |
|
|
|
((__GNUC__ >= 3) || \ |
|
|
|
(__GNUC__ == 2) && (__GNUC_MINOR__ >= 5))) |
|
|
|
# define _Py_NO_RETURN __attribute__((__noreturn__)) |
|
|
|
#elif defined(_MSC_VER) |
|
|
|
# define _Py_NO_RETURN __declspec(noreturn) |
|
|
|
#else |
|
|
|
# define _Py_NO_RETURN |
|
|
|
#endif |
|
|
|
|
|
|
|
#endif /* Py_PYPORT_H */ |
|
|
@@ -23,7 +23,7 @@ typedef enum PyLockStatus { |
|
|
|
|
|
|
|
PyAPI_FUNC(void) PyThread_init_thread(void); |
|
|
|
PyAPI_FUNC(unsigned long) PyThread_start_new_thread(void (*)(void *), void *); |
|
|
|
PyAPI_FUNC(void) PyThread_exit_thread(void); |
|
|
|
PyAPI_FUNC(void) _Py_NO_RETURN PyThread_exit_thread(void); |
|
|
|
PyAPI_FUNC(unsigned long) PyThread_get_thread_ident(void); |
|
|
|
|
|
|
|
PyAPI_FUNC(PyThread_type_lock) PyThread_allocate_lock(void); |
|
|
|
|
|
@@ -211,7 +211,6 @@ exit_thread_if_finalizing(PyThreadState *tstate) |
|
|
|
if (_Py_IsFinalizing() && !_Py_CURRENTLY_FINALIZING(tstate)) { |
|
|
|
drop_gil(tstate); |
|
|
|
PyThread_exit_thread(); |
|
|
|
Py_UNREACHABLE(); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
@@ -227,7 +227,7 @@ PyThread_get_thread_ident(void) |
|
|
|
return GetCurrentThreadId(); |
|
|
|
} |
|
|
|
|
|
|
|
void |
|
|
|
void _Py_NO_RETURN |
|
|
|
PyThread_exit_thread(void) |
|
|
|
{ |
|
|
|
dprintf(("%lu: PyThread_exit_thread called\n", PyThread_get_thread_ident())); |
|
|
|
|
|
@@ -302,7 +302,7 @@ PyThread_get_thread_ident(void) |
|
|
|
return (unsigned long) threadid; |
|
|
|
} |
|
|
|
|
|
|
|
void |
|
|
|
void _Py_NO_RETURN |
|
|
|
PyThread_exit_thread(void) |
|
|
|
{ |
|
|
|
dprintf(("PyThread_exit_thread called\n")); |
|
|
|
0 comments on commit
c664b34