diff options
author | Pedro Alves <palves@redhat.com> | 2008-07-13 11:28:31 +0000 |
---|---|---|
committer | Pedro Alves <palves@redhat.com> | 2008-07-13 11:28:31 +0000 |
commit | 0ffe501282f3a7e5d6d65730145b11b164622f41 (patch) | |
tree | c2ad7dc1acda42a6917f71d987497265f5c258ec /gdb/utils.c | |
parent | dbba82516a0ef15996744aff2bd7bbd19ee96a12 (diff) | |
download | gdb-0ffe501282f3a7e5d6d65730145b11b164622f41.zip gdb-0ffe501282f3a7e5d6d65730145b11b164622f41.tar.gz gdb-0ffe501282f3a7e5d6d65730145b11b164622f41.tar.bz2 |
* utils.c (struct continuation): Define as inheriting struct
cleanup.
(add_continuation, do_all_continuations)
(discard_all_continuations, add_intermediate_continuation)
(do_all_intermediate_continuations)
(discard_all_intermediate_continuations): Adjust.
Diffstat (limited to 'gdb/utils.c')
-rw-r--r-- | gdb/utils.c | 37 |
1 files changed, 25 insertions, 12 deletions
diff --git a/gdb/utils.c b/gdb/utils.c index 2b34d3e..c787dd0 100644 --- a/gdb/utils.c +++ b/gdb/utils.c @@ -470,19 +470,29 @@ null_cleanup (void *arg) { } +/* Continuations are implemented as cleanups internally. Inherit from + cleanups. */ +struct continuation +{ + struct cleanup base; +}; + /* Add a continuation to the continuation list, the global list - cmd_continuation. The new continuation will be added at the front.*/ + cmd_continuation. The new continuation will be added at the + front. */ void add_continuation (void (*continuation_hook) (void *), void *args, void (*continuation_free_args) (void *)) { - struct cleanup **as_cleanup_p = (struct cleanup **) &cmd_continuation; + struct cleanup *as_cleanup = &cmd_continuation->base; make_cleanup_ftype *continuation_hook_fn = continuation_hook; - make_my_cleanup2 (as_cleanup_p, + make_my_cleanup2 (&as_cleanup, continuation_hook_fn, args, continuation_free_args); + + cmd_continuation = (struct continuation *) as_cleanup; } /* Walk down the cmd_continuation list, and execute all the @@ -503,7 +513,7 @@ do_all_continuations (void) effect of invoking the continuations and the processing of the preexisting continuations will not be affected. */ - continuation_ptr = (struct cleanup *) cmd_continuation; + continuation_ptr = &cmd_continuation->base; cmd_continuation = NULL; /* Work now on the list we have set aside. */ @@ -515,8 +525,9 @@ do_all_continuations (void) void discard_all_continuations (void) { - struct cleanup **continuation_ptr = (struct cleanup **) &cmd_continuation; - discard_my_cleanups (continuation_ptr, NULL); + struct cleanup *continuation_ptr = &cmd_continuation->base; + discard_my_cleanups (&continuation_ptr, NULL); + cmd_continuation = NULL; } /* Add a continuation to the continuation list, the global list @@ -527,13 +538,15 @@ add_intermediate_continuation (void (*continuation_hook) (void *), void *args, void (*continuation_free_args) (void *)) { - struct cleanup **as_cleanup_p = (struct cleanup **) &intermediate_continuation; + struct cleanup *as_cleanup = &intermediate_continuation->base; make_cleanup_ftype *continuation_hook_fn = continuation_hook; - make_my_cleanup2 (as_cleanup_p, + make_my_cleanup2 (&as_cleanup, continuation_hook_fn, args, continuation_free_args); + + intermediate_continuation = (struct continuation *) as_cleanup; } /* Walk down the cmd_continuation list, and execute all the @@ -554,7 +567,7 @@ do_all_intermediate_continuations (void) effect of invoking the continuations and the processing of the preexisting continuations will not be affected. */ - continuation_ptr = (struct cleanup *) intermediate_continuation; + continuation_ptr = &intermediate_continuation->base; intermediate_continuation = NULL; /* Work now on the list we have set aside. */ @@ -566,9 +579,9 @@ do_all_intermediate_continuations (void) void discard_all_intermediate_continuations (void) { - struct cleanup **continuation_ptr - = (struct cleanup **) &intermediate_continuation; - discard_my_cleanups (continuation_ptr, NULL); + struct cleanup *continuation_ptr = &intermediate_continuation->base; + discard_my_cleanups (&continuation_ptr, NULL); + continuation_ptr = NULL; } |