aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Cagney <cagney@redhat.com>2000-05-16 04:57:49 +0000
committerAndrew Cagney <cagney@redhat.com>2000-05-16 04:57:49 +0000
commite2f9c4749114f7ddcd18e62e5559d0fa14bf0935 (patch)
treeb03b48f1bbc38e03f1baab6f5a5575d2b8128caf
parent56e290f494ab802bbc5c26c445dad0d1e6a7f37b (diff)
downloadfsf-binutils-gdb-e2f9c4749114f7ddcd18e62e5559d0fa14bf0935.zip
fsf-binutils-gdb-e2f9c4749114f7ddcd18e62e5559d0fa14bf0935.tar.gz
fsf-binutils-gdb-e2f9c4749114f7ddcd18e62e5559d0fa14bf0935.tar.bz2
Make free_current_contents more robust. Use in MI.
-rw-r--r--gdb/ChangeLog4
-rw-r--r--gdb/mi/ChangeLog-mi5
-rw-r--r--gdb/mi/mi-main.c10
-rw-r--r--gdb/utils.c7
4 files changed, 16 insertions, 10 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index aa37cd5..ff3747e 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,7 @@
+Tue May 16 14:17:20 2000 Andrew Cagney <cagney@b1.cygnus.com>
+
+ * utils.c (free_current_contents): Make more robust.
+
Tue May 16 13:30:08 2000 Andrew Cagney <cagney@b1.cygnus.com>
* symtab.h (make_cleanup_discard_minimal_symbols): Replace
diff --git a/gdb/mi/ChangeLog-mi b/gdb/mi/ChangeLog-mi
index d2eafae..5edfce4 100644
--- a/gdb/mi/ChangeLog-mi
+++ b/gdb/mi/ChangeLog-mi
@@ -1,3 +1,8 @@
+Tue May 16 14:13:41 2000 Andrew Cagney <cagney@b1.cygnus.com>
+
+ * mi-main.c (mi_cmd_execute): Use free_current_contents.
+ (free_and_reset): Delete.
+
Mon May 15 16:17:56 2000 Andrew Cagney <cagney@b1.cygnus.com>
* mi-main.c (mi_cmd_data_assign, mi_cmd_data_evaluate_expression),
diff --git a/gdb/mi/mi-main.c b/gdb/mi/mi-main.c
index 22745a0..872b7b2 100644
--- a/gdb/mi/mi-main.c
+++ b/gdb/mi/mi-main.c
@@ -70,7 +70,6 @@ static enum mi_cmd_result mi_execute_async_cli_command (char *mi, char *args, in
static void mi_execute_command_wrapper (char *cmd);
void mi_exec_async_cli_cmd_continuation (struct continuation_arg *arg);
-static void free_and_reset (char **arg);
static int register_changed_p (int regnum);
static int get_register (int regnum, int format);
@@ -1199,7 +1198,7 @@ mi_cmd_execute (struct mi_parse *parse)
}
}
last_async_command = xstrdup (parse->token);
- make_exec_cleanup ((make_cleanup_func) free_and_reset, &last_async_command);
+ make_exec_cleanup (free_current_contents, &last_async_command);
/* FIXME: DELETE THIS! */
if (parse->cmd->args_func != NULL)
return parse->cmd->args_func (parse->args, 0 /*from_tty */ );
@@ -1226,13 +1225,6 @@ mi_cmd_execute (struct mi_parse *parse)
}
}
-void
-free_and_reset (char **arg)
-{
- free (*arg);
- *arg = NULL;
-}
-
static void
mi_execute_command_wrapper (char *cmd)
{
diff --git a/gdb/utils.c b/gdb/utils.c
index 3fd055ca..45fdb1d 100644
--- a/gdb/utils.c
+++ b/gdb/utils.c
@@ -390,8 +390,13 @@ void
free_current_contents (void *ptr)
{
void **location = ptr;
+ if (location == NULL)
+ internal_error ("free_current_contents: NULL pointer");
if (*location != NULL)
- free (*location);
+ {
+ free (*location);
+ *location = NULL;
+ }
}
/* Provide a known function that does nothing, to use as a base for