aboutsummaryrefslogtreecommitdiff
path: root/gdb
diff options
context:
space:
mode:
authorAndrew Burgess <andrew.burgess@embecosm.com>2015-05-21 00:51:23 +0200
committerAndrew Burgess <andrew.burgess@embecosm.com>2015-05-21 20:49:00 +0200
commitc1b009eed88d41b22c9faf68d0dc15967292f6c9 (patch)
tree0c1331c45e60f5c9b3f0b36df76ea133180bd745 /gdb
parent880d1e40c771e4a389d0b29bf196b50f1b696ea9 (diff)
downloadgdb-c1b009eed88d41b22c9faf68d0dc15967292f6c9.zip
gdb-c1b009eed88d41b22c9faf68d0dc15967292f6c9.tar.gz
gdb-c1b009eed88d41b22c9faf68d0dc15967292f6c9.tar.bz2
gdb: Add cleanup to avoid memory leak on error.
Use cleanup to avoid leaking memory if an error occurs during tui start up. gdb/ChangeLog: * tui/tui-layout.c (tui_set_layout_for_display_command): Ensure buf_ptr is freed.
Diffstat (limited to 'gdb')
-rw-r--r--gdb/ChangeLog5
-rw-r--r--gdb/tui/tui-layout.c4
2 files changed, 8 insertions, 1 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 3c80d3a..f9b91d5 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,5 +1,10 @@
2015-05-21 Andrew Burgess <andrew.burgess@embecosm.com>
+ * tui/tui-layout.c (tui_set_layout_for_display_command): Ensure
+ buf_ptr is freed.
+
+2015-05-21 Andrew Burgess <andrew.burgess@embecosm.com>
+
* tui/tui-layout.c (tui_layout_command): Move call to tui_enable
into ...
(tui_set_layout_for_display_command): ...here, before calling
diff --git a/gdb/tui/tui-layout.c b/gdb/tui/tui-layout.c
index abd9810..0255c39 100644
--- a/gdb/tui/tui-layout.c
+++ b/gdb/tui/tui-layout.c
@@ -409,10 +409,12 @@ tui_set_layout_by_name (const char *layout_name)
char *buf_ptr;
enum tui_layout_type new_layout = UNDEFINED_LAYOUT;
enum tui_layout_type cur_layout = tui_current_layout ();
+ struct cleanup *old_chain;
buf_ptr = (char *) xstrdup (layout_name);
for (i = 0; (i < strlen (layout_name)); i++)
buf_ptr[i] = toupper (buf_ptr[i]);
+ old_chain = make_cleanup (xfree, buf_ptr);
/* First check for ambiguous input. */
if (strlen (buf_ptr) <= 1 && *buf_ptr == 'S')
@@ -450,7 +452,7 @@ tui_set_layout_by_name (const char *layout_name)
tui_set_layout (new_layout);
}
}
- xfree (buf_ptr);
+ do_cleanups (old_chain);
}
else
status = TUI_FAILURE;