aboutsummaryrefslogtreecommitdiff
path: root/gdb/cleanups.h
diff options
context:
space:
mode:
authorDoug Evans <dje@google.com>2012-04-19 19:11:02 +0000
committerDoug Evans <dje@google.com>2012-04-19 19:11:02 +0000
commitb10faa68a450b43f31b78cc11bd06774a256a0a4 (patch)
tree49486c6adb717809dcb8e81f45488093dc58cf98 /gdb/cleanups.h
parentff188ee48bcc46a18ce380dfa2b9c2b94751ea91 (diff)
downloadgdb-b10faa68a450b43f31b78cc11bd06774a256a0a4.zip
gdb-b10faa68a450b43f31b78cc11bd06774a256a0a4.tar.gz
gdb-b10faa68a450b43f31b78cc11bd06774a256a0a4.tar.bz2
* cleanups.h (struct cleanup): Move to cleanups.c.
(make_cleanup_dtor_ftype): New typedef. (make_cleanup_dtor): Use it. (ALL_CLEANUPS): Replace with ... (all_cleanups): ... this. Declare. All uses updated. * cleanups.c: #include "gdb_assert.h". (sentinel_cleanup): New static global. (SENTINEL_CLEANUP): Define. (cleanup_chain, final_cleanup_chain): Initialize to SENTINEL_CLEANUP. (make_my_cleanup2): Assert result is non-NULL. (all_cleanups): New function. (save_my_cleanups): Initialize new chain to SENTINEL_CLEANUP instead of NULL.
Diffstat (limited to 'gdb/cleanups.h')
-rw-r--r--gdb/cleanups.h34
1 files changed, 9 insertions, 25 deletions
diff --git a/gdb/cleanups.h b/gdb/cleanups.h
index 689c0d1..ed62786 100644
--- a/gdb/cleanups.h
+++ b/gdb/cleanups.h
@@ -19,28 +19,8 @@
#ifndef CLEANUPS_H
#define CLEANUPS_H
-/* The cleanup list records things that have to be undone
- if an error happens (descriptors to be closed, memory to be freed, etc.)
- Each link in the chain records a function to call and an
- argument to give it.
-
- Use make_cleanup to add an element to the cleanup chain.
- Use do_cleanups to do all cleanup actions back to a given
- point in the chain. Use discard_cleanups to remove cleanups
- from the chain back to a given point, not doing them.
-
- If the argument is pointer to allocated memory, then you need
- to additionally set the 'free_arg' member to a function that will
- free that memory. This function will be called both when the cleanup
- is executed and when it's discarded. */
-
-struct cleanup
- {
- struct cleanup *next;
- void (*function) (void *);
- void (*free_arg) (void *);
- void *arg;
- };
+/* Outside of cleanups.c, this is an opaque type. */
+struct cleanup;
/* NOTE: cagney/2000-03-04: This typedef is strictly for the
make_cleanup function declarations below. Do not use this typedef
@@ -49,21 +29,25 @@ struct cleanup
Calling a f(char*) function with f(void*) is non-portable. */
typedef void (make_cleanup_ftype) (void *);
+/* Function type for the dtor in make_cleanup_dtor. */
+typedef void (make_cleanup_dtor_ftype) (void *);
+
/* WARNING: The result of the "make cleanup" routines is not the intuitive
choice of being a handle on the just-created cleanup. Instead it is an
opaque handle of the cleanup mechanism and represents all cleanups created
- from that point onwards. */
+ from that point onwards.
+ The result is guaranteed to be non-NULL though. */
extern struct cleanup *make_cleanup (make_cleanup_ftype *, void *);
extern struct cleanup *make_cleanup_dtor (make_cleanup_ftype *, void *,
- void (*dtor) (void *));
+ make_cleanup_dtor_ftype *);
extern struct cleanup *make_final_cleanup (make_cleanup_ftype *, void *);
/* A special value to pass to do_cleanups and do_final_cleanups
to tell them to do all cleanups. */
-#define ALL_CLEANUPS ((struct cleanup *)0)
+extern struct cleanup *all_cleanups (void);
extern void do_cleanups (struct cleanup *);
extern void do_final_cleanups (struct cleanup *);