/* Continuations for GDB, the GNU debugger.
- Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2007, 2008,
- 2009, 2010, 2011 Free Software Foundation, Inc.
+ Copyright (C) 1999-2019 Free Software Foundation, Inc.
This file is part of GDB.
#ifndef CONTINUATIONS_H
#define CONTINUATIONS_H
-struct thread_info;
struct inferior;
/* To continue the execution commands when running gdb asynchronously.
used by the finish and until commands, and in the remote protocol
when opening an extended-remote connection. */
-/* Prototype of the continuation callback functions. */
-typedef void (continuation_ftype) (void *);
+/* Prototype of the continuation callback functions. ARG is the
+ continuation argument registered in the corresponding
+ add_*_continuation call. ERR is true when the command should be
+ cancelled instead of finished normally. In that case, the
+ continuation should clean up whatever state had been set up for the
+ command in question (e.g., remove momentary breakpoints). This
+ happens e.g., when an error was thrown while handling a target
+ event, or when the inferior thread the command was being executed
+ on exits. */
+typedef void (continuation_ftype) (void *arg, int err);
/* Prototype of the function responsible for releasing the argument
passed to the continuation callback functions, either when the
continuation is called, or discarded. */
typedef void (continuation_free_arg_ftype) (void *);
-/* Thread specific continuations. */
-
-extern void add_continuation (struct thread_info *,
- continuation_ftype *, void *,
- continuation_free_arg_ftype *);
-extern void do_all_continuations (void);
-extern void do_all_continuations_thread (struct thread_info *);
-extern void discard_all_continuations (void);
-extern void discard_all_continuations_thread (struct thread_info *);
-
-extern void add_intermediate_continuation (struct thread_info *,
- continuation_ftype *, void *,
- continuation_free_arg_ftype *);
-extern void do_all_intermediate_continuations (void);
-extern void do_all_intermediate_continuations_thread (struct thread_info *);
-extern void discard_all_intermediate_continuations (void);
-extern void discard_all_intermediate_continuations_thread (struct thread_info *);
-
/* Inferior specific (any thread) continuations. */
extern void add_inferior_continuation (continuation_ftype *,
void *,
continuation_free_arg_ftype *);
-extern void do_all_inferior_continuations (void);
+extern void do_all_inferior_continuations (int err);
extern void discard_all_inferior_continuations (struct inferior *inf);
#endif