Introduce gdbpy_enter
This introduces gdbpy_enter, a class that can be used to acquire and release the Python GIL, and also set other Python-related globals used by gdb. ensure_python_env is rewritten in terms of this new class. 2017-01-10 Tom Tromey <tom@tromey.com> * python/python.c (gdbpy_enter): New constructor. (~gdbpy_enter): New destructor. (restore_python_env, ensure_python_env): Rewrite. * python/python-internal.h (gdbpy_enter): New class.
This commit is contained in:
parent
37fce74fb4
commit
4ecee2c47d
3 changed files with 64 additions and 37 deletions
|
@ -501,6 +501,31 @@ int gdbpy_initialize_unwind (void)
|
|||
struct cleanup *make_cleanup_py_decref (PyObject *py);
|
||||
struct cleanup *make_cleanup_py_xdecref (PyObject *py);
|
||||
|
||||
/* Called before entering the Python interpreter to install the
|
||||
current language and architecture to be used for Python values.
|
||||
Also set the active extension language for GDB so that SIGINT's
|
||||
are directed our way, and if necessary install the right SIGINT
|
||||
handler. */
|
||||
class gdbpy_enter
|
||||
{
|
||||
public:
|
||||
|
||||
gdbpy_enter (struct gdbarch *gdbarch, const struct language_defn *language);
|
||||
|
||||
~gdbpy_enter ();
|
||||
|
||||
gdbpy_enter (const gdbpy_enter &) = delete;
|
||||
gdbpy_enter &operator= (const gdbpy_enter &) = delete;
|
||||
|
||||
private:
|
||||
|
||||
struct active_ext_lang_state *m_previous_active;
|
||||
PyGILState_STATE m_state;
|
||||
struct gdbarch *m_gdbarch;
|
||||
const struct language_defn *m_language;
|
||||
PyObject *m_error_type, *m_error_value, *m_error_traceback;
|
||||
};
|
||||
|
||||
struct cleanup *ensure_python_env (struct gdbarch *gdbarch,
|
||||
const struct language_defn *language);
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue