From: Tom Tromey Date: Sat, 12 Nov 2016 18:12:41 +0000 (-0700) Subject: Use gdbpy_enter in cmdpy_function X-Git-Tag: gdb-8.0-release~946 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=12a5cedd4f2c5b1f4e303efda6f8ac3e06eec944;p=external%2Fbinutils.git 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. --- diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 9f19ede..a773b3c 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,5 +1,9 @@ 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): Use gdbpy_enter_varobj. diff --git a/gdb/python/py-cmd.c b/gdb/python/py-cmd.c index 9afa7e4..8b6293f 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"