diff options
author | Tom Tromey <tom@tromey.com> | 2017-04-30 22:12:13 -0600 |
---|---|---|
committer | Tom Tromey <tom@tromey.com> | 2017-08-03 07:59:07 -0600 |
commit | 0d50bde32b92821c9f1f660d273e6c996d26dc9f (patch) | |
tree | e19b1a867ba66d4aa410cd1f6240a50e80c0bc62 /gdb/python | |
parent | 7f968c899f21643322dcfaf807ec7d7bee7c9974 (diff) | |
download | gdb-0d50bde32b92821c9f1f660d273e6c996d26dc9f.zip gdb-0d50bde32b92821c9f1f660d273e6c996d26dc9f.tar.gz gdb-0d50bde32b92821c9f1f660d273e6c996d26dc9f.tar.bz2 |
Remove a cleanup in Python
This removes cleanups from gdbpy_decode_line, in favor of a use of
unique_xmalloc_ptr.
ChangeLog
2017-08-03 Tom Tromey <tom@tromey.com>
* python/python.c (gdbpy_decode_line): Use unique_xmalloc_ptr.
Diffstat (limited to 'gdb/python')
-rw-r--r-- | gdb/python/python.c | 30 |
1 files changed, 7 insertions, 23 deletions
diff --git a/gdb/python/python.c b/gdb/python/python.c index 67f134d..c53e10f 100644 --- a/gdb/python/python.c +++ b/gdb/python/python.c @@ -652,7 +652,6 @@ gdbpy_decode_line (PyObject *self, PyObject *args) appease gcc. */ struct symtab_and_line sal; char *arg = NULL; - struct cleanup *cleanups; gdbpy_ref<> result; gdbpy_ref<> unparsed; event_location_up location; @@ -660,8 +659,6 @@ gdbpy_decode_line (PyObject *self, PyObject *args) if (! PyArg_ParseTuple (args, "|s", &arg)) return NULL; - cleanups = make_cleanup (null_cleanup, NULL); - sals.sals = NULL; if (arg != NULL) @@ -685,12 +682,13 @@ gdbpy_decode_line (PyObject *self, PyObject *args) } END_CATCH + /* Ensure that the sals data is freed, when needed. */ + gdb::unique_xmalloc_ptr<struct symtab_and_line> free_sals; if (sals.sals != NULL && sals.sals != &sal) - make_cleanup (xfree, sals.sals); + free_sals.reset (sals.sals); if (except.reason < 0) { - do_cleanups (cleanups); /* We know this will always throw. */ gdbpy_convert_exception (except); return NULL; @@ -702,20 +700,14 @@ gdbpy_decode_line (PyObject *self, PyObject *args) result.reset (PyTuple_New (sals.nelts)); if (result == NULL) - { - do_cleanups (cleanups); - return NULL; - } + return NULL; for (i = 0; i < sals.nelts; ++i) { PyObject *obj; obj = symtab_and_line_to_sal_object (sals.sals[i]); if (! obj) - { - do_cleanups (cleanups); - return NULL; - } + return NULL; PyTuple_SetItem (result.get (), i, obj); } @@ -728,19 +720,13 @@ gdbpy_decode_line (PyObject *self, PyObject *args) gdbpy_ref<> return_result (PyTuple_New (2)); if (return_result == NULL) - { - do_cleanups (cleanups); - return NULL; - } + return NULL; if (arg != NULL && strlen (arg) > 0) { unparsed.reset (PyString_FromString (arg)); if (unparsed == NULL) - { - do_cleanups (cleanups); - return NULL; - } + return NULL; } else { @@ -751,8 +737,6 @@ gdbpy_decode_line (PyObject *self, PyObject *args) PyTuple_SetItem (return_result.get (), 0, unparsed.release ()); PyTuple_SetItem (return_result.get (), 1, result.release ()); - do_cleanups (cleanups); - return return_result.release (); } |