[augeas-devel] [PATCH 05/16] * src/lens.c (free_lens): free recursive lenses
lutter at redhat.com
lutter at redhat.com
Wed Dec 23 21:28:31 UTC 2009
From: David Lutterkort <lutter at redhat.com>
---
src/lens.c | 17 +++++++++++++----
1 files changed, 13 insertions(+), 4 deletions(-)
diff --git a/src/lens.c b/src/lens.c
index 85af37b..3aa6bf3 100644
--- a/src/lens.c
+++ b/src/lens.c
@@ -668,10 +668,6 @@ void free_lens(struct lens *lens) {
return;
assert(lens->ref == 0);
- unref(lens->info, info);
- for (int t=0; t < ntypes; t++)
- unref(ltype(lens, t), regexp);
-
switch (lens->tag) {
case L_DEL:
unref(lens->regexp, regexp);
@@ -697,10 +693,23 @@ void free_lens(struct lens *lens) {
unref(lens->children[i], lens);
free(lens->children);
break;
+ case L_REC:
+ if (lens->ref != REF_MAX) {
+ /* Break unbounded recursion */
+ lens->ref = REF_MAX;
+ unref(lens->body, lens);
+ }
+ break;
default:
assert(0);
break;
}
+
+ for (int t=0; t < ntypes; t++)
+ unref(ltype(lens, t), regexp);
+
+ unref(lens->info, info);
+
free(lens);
}
--
1.6.5.2
More information about the augeas-devel
mailing list