From f4b417c62a4f272c4cf9a074d0f7a3a97201f9db Mon Sep 17 00:00:00 2001 From: Sebastian Schmidt Date: Tue, 17 Apr 2012 11:23:35 +0200 Subject: Update to upstream bash 4.2 This upgrades bash to from 4.1-rc to 4.2-release. See CWRU/changelog for changes. Change-Id: I926269c300cf44fa25964b5b375a148fcf11c4b7 --- unwind_prot.c | 33 ++++++++++++++++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) (limited to 'unwind_prot.c') diff --git a/unwind_prot.c b/unwind_prot.c index 9e150a6..a477c03 100644 --- a/unwind_prot.c +++ b/unwind_prot.c @@ -48,6 +48,7 @@ #include "unwind_prot.h" #include "quit.h" #include "sig.h" +#include "error.h" /* for internal_warning */ /* Structure describing a saved variable and the value to restore it to. */ typedef struct { @@ -240,18 +241,24 @@ unwind_frame_discard_internal (tag, ignore) char *tag, *ignore; { UNWIND_ELT *elt; + int found; + found = 0; while (elt = unwind_protect_list) { unwind_protect_list = unwind_protect_list->head.next; if (elt->head.cleanup == 0 && (STREQ (elt->arg.v, tag))) { uwpfree (elt); + found = 1; break; } else uwpfree (elt); } + + if (found == 0) + internal_warning ("unwind_frame_discard: %s: frame not found", tag); } /* Restore the value of a variable, based on the contents of SV. @@ -269,17 +276,20 @@ unwind_frame_run_internal (tag, ignore) char *tag, *ignore; { UNWIND_ELT *elt; + int found; + found = 0; while (elt = unwind_protect_list) { unwind_protect_list = elt->head.next; /* If tag, then compare. */ - if (!elt->head.cleanup) + if (elt->head.cleanup == 0) { if (tag && STREQ (elt->arg.v, tag)) { uwpfree (elt); + found = 1; break; } } @@ -293,6 +303,8 @@ unwind_frame_run_internal (tag, ignore) uwpfree (elt); } + if (tag && found == 0) + internal_warning ("unwind_frame_run: %s: frame not found", tag); } static void @@ -324,3 +336,22 @@ unwind_protect_mem (var, size) { without_interrupts (unwind_protect_mem_internal, var, (char *) &size); } + +#if defined (DEBUG) +#include + +void +print_unwind_protect_tags () +{ + UNWIND_ELT *elt; + + elt = unwind_protect_list; + while (elt) + { + unwind_protect_list = unwind_protect_list->head.next; + if (elt->head.cleanup == 0) + fprintf(stderr, "tag: %s\n", elt->arg.v); + elt = unwind_protect_list; + } +} +#endif -- cgit v1.1