From 12a5cedd4f2c5b1f4e303efda6f8ac3e06eec944 Mon Sep 17 00:00:00 2001 From: Tom Tromey Date: Sat, 12 Nov 2016 11:12:41 -0700 Subject: [PATCH] Use gdbpy_enter in cmdpy_function This changes cmdpy_function to use gdbpy_enter and gdbpy_ref. 2017-01-10 Tom Tromey * python/py-cmd.c (cmdpy_function): Use gdbpy_enter, gdbpy_ref. --- gdb/ChangeLog | 4 ++++ gdb/python/py-cmd.c | 26 ++++++++++---------------- 2 files changed, 14 insertions(+), 16 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 9f19ede0ab6..a773b3c60ed 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,7 @@ +2017-01-10 Tom Tromey + + * python/py-cmd.c (cmdpy_function): Use gdbpy_enter, gdbpy_ref. + 2017-01-10 Tom Tromey * python/py-varobj.c (py_varobj_iter_dtor, py_varobj_iter_next): diff --git a/gdb/python/py-cmd.c b/gdb/python/py-cmd.c index 9afa7e48380..8b6293f29a5 100644 --- a/gdb/python/py-cmd.c +++ b/gdb/python/py-cmd.c @@ -117,10 +117,8 @@ static void cmdpy_function (struct cmd_list_element *command, char *args, int from_tty) { cmdpy_object *obj = (cmdpy_object *) get_cmd_context (command); - PyObject *argobj, *ttyobj, *result; - struct cleanup *cleanup; - cleanup = ensure_python_env (get_current_arch (), current_language); + gdbpy_enter enter_py (get_current_arch (), current_language); if (! obj) error (_("Invalid invocation of Python command object.")); @@ -129,7 +127,6 @@ cmdpy_function (struct cmd_list_element *command, char *args, int from_tty) if (obj->command->prefixname) { /* A prefix command does not need an invoke method. */ - do_cleanups (cleanup); return; } error (_("Python command object missing 'invoke' method.")); @@ -137,21 +134,21 @@ cmdpy_function (struct cmd_list_element *command, char *args, int from_tty) if (! args) args = ""; - argobj = PyUnicode_Decode (args, strlen (args), host_charset (), NULL); - if (! argobj) + gdbpy_ref argobj (PyUnicode_Decode (args, strlen (args), host_charset (), + NULL)); + if (argobj == NULL) { gdbpy_print_stack (); error (_("Could not convert arguments to Python string.")); } - ttyobj = from_tty ? Py_True : Py_False; - Py_INCREF (ttyobj); - result = PyObject_CallMethodObjArgs ((PyObject *) obj, invoke_cst, argobj, - ttyobj, NULL); - Py_DECREF (argobj); - Py_DECREF (ttyobj); + gdbpy_ref ttyobj (from_tty ? Py_True : Py_False); + Py_INCREF (ttyobj.get ()); + gdbpy_ref result (PyObject_CallMethodObjArgs ((PyObject *) obj, invoke_cst, + argobj.get (), ttyobj.get (), + NULL)); - if (! result) + if (result == NULL) { PyObject *ptype, *pvalue, *ptraceback; @@ -199,9 +196,6 @@ cmdpy_function (struct cmd_list_element *command, char *args, int from_tty) error ("%s", msg.get ()); } } - - Py_DECREF (result); - do_cleanups (cleanup); } /* Helper function for the Python command completers (both "pure" -- 2.30.2