From 788f258604773ccbe9ccba71f9b1725930324275 Mon Sep 17 00:00:00 2001 From: Tom Tromey Date: Tue, 8 Nov 2016 20:14:32 -0700 Subject: [PATCH] Use gdbpy_enter_varobj in py-varobj.c This converts the remaining functions in py-varobj.c to use gdbpy_enter_varobj. 2017-01-10 Tom Tromey * python/py-varobj.c (py_varobj_iter_dtor, py_varobj_iter_next): Use gdbpy_enter_varobj. --- gdb/ChangeLog | 5 +++++ gdb/python/py-varobj.c | 16 +++++----------- 2 files changed, 10 insertions(+), 11 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 6bca72d57fb..9f19ede0ab6 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,8 @@ +2017-01-10 Tom Tromey + + * python/py-varobj.c (py_varobj_iter_dtor, py_varobj_iter_next): + Use gdbpy_enter_varobj. + 2017-01-10 Tom Tromey * varobj.c (gdbpy_enter_varobj): New constructor. diff --git a/gdb/python/py-varobj.c b/gdb/python/py-varobj.c index ffdfa30a69f..bac226fa64b 100644 --- a/gdb/python/py-varobj.c +++ b/gdb/python/py-varobj.c @@ -39,11 +39,8 @@ static void py_varobj_iter_dtor (struct varobj_iter *self) { struct py_varobj_iter *dis = (struct py_varobj_iter *) self; - struct cleanup *back_to = varobj_ensure_python_env (self->var); - + gdbpy_enter_varobj enter_py (self->var); Py_XDECREF (dis->iter); - - do_cleanups (back_to); } /* Implementation of the 'next' method of pretty-printed varobj @@ -53,8 +50,6 @@ static varobj_item * py_varobj_iter_next (struct varobj_iter *self) { struct py_varobj_iter *t = (struct py_varobj_iter *) self; - struct cleanup *back_to; - PyObject *item; PyObject *py_v; varobj_item *vitem; const char *name = NULL; @@ -62,9 +57,9 @@ py_varobj_iter_next (struct varobj_iter *self) if (!gdb_python_initialized) return NULL; - back_to = varobj_ensure_python_env (self->var); + gdbpy_enter_varobj enter_py (self->var); - item = PyIter_Next (t->iter); + gdbpy_ref item (PyIter_Next (t->iter)); if (item == NULL) { @@ -92,7 +87,7 @@ py_varobj_iter_next (struct varobj_iter *self) name_str = xstrprintf ("", self->next_raw_index++); - item = Py_BuildValue ("(ss)", name_str, value_str.get ()); + item.reset (Py_BuildValue ("(ss)", name_str, value_str.get ())); xfree (name_str); if (item == NULL) { @@ -108,7 +103,7 @@ py_varobj_iter_next (struct varobj_iter *self) } } - if (!PyArg_ParseTuple (item, "sO", &name, &py_v)) + if (!PyArg_ParseTuple (item.get (), "sO", &name, &py_v)) { gdbpy_print_stack (); error (_("Invalid item from the child list")); @@ -121,7 +116,6 @@ py_varobj_iter_next (struct varobj_iter *self) vitem->name = name; self->next_raw_index++; - do_cleanups (back_to); return vitem; } -- 2.30.2