diff options
author | Tom Tromey <tromey@redhat.com> | 2012-03-28 17:38:08 +0000 |
---|---|---|
committer | Tom Tromey <tromey@redhat.com> | 2012-03-28 17:38:08 +0000 |
commit | cc0265cdda9dc7e8665e8bfcf5b4477489daf27c (patch) | |
tree | 1d05afdaef9575e73736a04049a6252da37b5952 /gdb/python/py-inferior.c | |
parent | 3ad2ec6f1106b136964a6350c8fba1ee649135bb (diff) | |
download | gdb-cc0265cdda9dc7e8665e8bfcf5b4477489daf27c.zip gdb-cc0265cdda9dc7e8665e8bfcf5b4477489daf27c.tar.gz gdb-cc0265cdda9dc7e8665e8bfcf5b4477489daf27c.tar.bz2 |
* python/py-inferior.c (infpy_read_memory): Remove cleanups and
explicitly free 'buffer' on exit paths. Decref 'membuf_object'
before returning.
Diffstat (limited to 'gdb/python/py-inferior.c')
-rw-r--r-- | gdb/python/py-inferior.c | 20 |
1 files changed, 8 insertions, 12 deletions
diff --git a/gdb/python/py-inferior.c b/gdb/python/py-inferior.c index 339a221..06d3272 100644 --- a/gdb/python/py-inferior.c +++ b/gdb/python/py-inferior.c @@ -405,8 +405,7 @@ infpy_read_memory (PyObject *self, PyObject *args, PyObject *kw) CORE_ADDR addr, length; void *buffer = NULL; membuf_object *membuf_obj; - PyObject *addr_obj, *length_obj; - struct cleanup *cleanups; + PyObject *addr_obj, *length_obj, *result; volatile struct gdb_exception except; static char *keywords[] = { "address", "length", NULL }; @@ -414,8 +413,6 @@ infpy_read_memory (PyObject *self, PyObject *args, PyObject *kw) &addr_obj, &length_obj)) return NULL; - cleanups = make_cleanup (null_cleanup, NULL); - TRY_CATCH (except, RETURN_MASK_ALL) { if (!get_addr_from_python (addr_obj, &addr) @@ -426,39 +423,38 @@ infpy_read_memory (PyObject *self, PyObject *args, PyObject *kw) } buffer = xmalloc (length); - make_cleanup (xfree, buffer); read_memory (addr, buffer, length); } if (except.reason < 0) { - do_cleanups (cleanups); + xfree (buffer); GDB_PY_HANDLE_EXCEPTION (except); } if (error) { - do_cleanups (cleanups); + xfree (buffer); return NULL; } membuf_obj = PyObject_New (membuf_object, &membuf_object_type); if (membuf_obj == NULL) { + xfree (buffer); PyErr_SetString (PyExc_MemoryError, _("Could not allocate memory buffer object.")); - do_cleanups (cleanups); return NULL; } - discard_cleanups (cleanups); - membuf_obj->buffer = buffer; membuf_obj->addr = addr; membuf_obj->length = length; - return PyBuffer_FromReadWriteObject ((PyObject *) membuf_obj, 0, - Py_END_OF_BUFFER); + result = PyBuffer_FromReadWriteObject ((PyObject *) membuf_obj, 0, + Py_END_OF_BUFFER); + Py_DECREF (membuf_obj); + return result; } /* Implementation of gdb.write_memory (address, buffer [, length]). |