+Mon Jun 5 18:44:14 2000 Andrew Cagney <cagney@b1.cygnus.com>
+
+ * thread.c (make_cleanup_restore_current_thread,
+ do_restore_current_thread_cleanup): New functions.
+ (thread_apply_all_command, thread_apply_command): Use. Call
+ do_cleanups when finished.
+
+ * defs.h (make_cleanup_func): Delete typedef.
+ * TODO: Update.
+
Wed Jun 7 11:34:54 2000 Andrew Cagney <cagney@b1.cygnus.com>
* arch-utils.c (target_byte_order, target_byte_order_auto,
--
-Elimination of make_cleanup_func. (Andrew Cagney)
-
-make_cleanup_func elimination
-http://sourceware.cygnus.com/ml/gdb-patches/2000-q1/msg00791.html
-http://sourceware.cygnus.com/ml/gdb-patches/2000-q1/msg00814.html
-
---
-
Fix copyright notices.
Turns out that ``1998-2000'' isn't considered valid :-(
Elimination of ``(catch_errors_ftype *) func''.
Like make_cleanup_func it isn't portable.
+http://sourceware.cygnus.com/ml/gdb-patches/2000-q1/msg00791.html
+http://sourceware.cygnus.com/ml/gdb-patches/2000-q1/msg00814.html
+
--
extern void discard_exec_error_cleanups (struct cleanup *);
extern void discard_my_cleanups (struct cleanup **, struct cleanup *);
-/* DEPRECATED: cagney/2000-03-04: Do not use this typedef to cast
- function pointers so that they match the argument to the various
- cleanup functions. Post GDB 5.0, this typedef will be
- deleted. [Editors note: cagney was the person that added most of
- those type casts] */
-typedef void (*make_cleanup_func) (void *);
-
/* NOTE: cagney/2000-03-04: This typedef is strictly for the
make_cleanup function declarations below. Do not use this typedef
as a cast when passing functions into the make_cleanup() code.
}
}
+struct current_thread_cleanup
+{
+ int inferior_pid;
+};
+
+static void
+do_restore_current_thread_cleanup (void *arg)
+{
+ struct current_thread_cleanup *old = arg;
+ restore_current_thread (old->inferior_pid);
+ free (old);
+}
+
+static struct cleanup *
+make_cleanup_restore_current_thread (int inferior_pid)
+{
+ struct current_thread_cleanup *old
+ = xmalloc (sizeof (struct current_thread_cleanup));
+ old->inferior_pid = inferior_pid;
+ return make_cleanup (do_restore_current_thread_cleanup, old);
+}
+
/* Apply a GDB command to a list of threads. List syntax is a whitespace
seperated list of numbers, or ranges, or the keyword `all'. Ranges consist
of two numbers seperated by a hyphen. Examples:
if (cmd == NULL || *cmd == '\000')
error ("Please specify a command following the thread ID list");
- old_chain = make_cleanup ((make_cleanup_func) restore_current_thread,
- (void *) inferior_pid);
+ old_chain = make_cleanup_restore_current_thread (inferior_pid);
for (tp = thread_list; tp; tp = tp->next)
if (thread_alive (tp))
#endif
execute_command (cmd, from_tty);
}
+
+ do_cleanups (old_chain);
}
static void
if (*cmd == '\000')
error ("Please specify a command following the thread ID list");
- old_chain = make_cleanup ((make_cleanup_func) restore_current_thread,
- (void *) inferior_pid);
+ old_chain = make_cleanup_restore_current_thread (inferior_pid);
while (tidlist < cmd)
{
}
}
}
+
+ do_cleanups (old_chain);
}
/* Switch to the specified thread. Will dispatch off to thread_apply_command