summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHui Zhu <teawater@gmail.com>2008-07-27 07:47:56 +0000
committerHui Zhu <teawater@gmail.com>2008-07-27 07:47:56 +0000
commit7134d49c36e1bba9030229a4e641654f1d373b43 (patch)
treed90480c715cc1c0da57fed5694d5025b6727e931
parentfb79db55db4c5271b76cd7bc6faa25a5ace4659e (diff)
downloadgdb-7134d49c36e1bba9030229a4e641654f1d373b43.tar.gz
Add a cleanup in function "record_message".
-rw-r--r--gdb/ChangeLog9
-rw-r--r--gdb/record.c26
2 files changed, 23 insertions, 12 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 4825c7e4d99..8f535a3b5dc 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,12 @@
+2008-07-27 Hui Zhu <teawater@gmail.com>
+
+ Add a cleanup in function "record_message".
+
+ * record.c (record_message_cleanups): New function. Clean for function
+ "record_message".
+ (record_message): Add a cleanup to call function
+ "record_message_cleanups".
+
2008-07-24 Hui Zhu <teawater@gmail.com>
Add a element "to_support_record_wait" to target_ops.
diff --git a/gdb/record.c b/gdb/record.c
index 67658e0f2e0..059b35ee90c 100644
--- a/gdb/record.c
+++ b/gdb/record.c
@@ -213,14 +213,24 @@ record_arch_list_add_end (int need_dasm)
return (0);
}
+static void
+record_message_cleanups (void *ignore)
+{
+ record_list_release (record_arch_list_tail);
+ set_executing (inferior_ptid, 0);
+ normal_stop ();
+}
+
/* Before inferior step (When GDB record the running message, inferior only can
step.), GDB will call this function to record the values to "record_list".
This function will call "gdbarch_record" to record the running message of
inferior and set them to "record_arch_list". And add it to "record_list". */
+
void
record_message (struct gdbarch *gdbarch)
{
int ret;
+ struct cleanup *old_cleanups = make_cleanup (record_message_cleanups, 0);
record_arch_list_head = NULL;
record_arch_list_tail = NULL;
@@ -246,19 +256,11 @@ record_message (struct gdbarch *gdbarch)
}
if (ret > 0)
- {
- record_list_release (record_arch_list_tail);
- set_executing (inferior_ptid, 0);
- normal_stop ();
- error (_("Record: record pause the program."));
- }
+ error (_("Record: record pause the program."));
if (ret < 0)
- {
- record_list_release (record_arch_list_tail);
- set_executing (inferior_ptid, 0);
- normal_stop ();
- error (_("Record: record message error."));
- }
+ error (_("Record: record message error."));
+
+ discard_cleanups (old_cleanups);
record_list->next = record_arch_list_head;
record_arch_list_head->prev = record_list;