summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ChangeLog7
-rw-r--r--translate.cxx18
2 files changed, 25 insertions, 0 deletions
diff --git a/ChangeLog b/ChangeLog
index fe7eca75..8a8901a4 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2008-01-23 Dave Brolley <brolley@redhat.com>
+
+ * translate.cxx (var::fini): New method.
+ (c_unparser::emit_module_init): Call var::fini when deregistering
+ variables without indices.
+ (c_unparser::emit_module_exit): Likewise.
+
2008-01-22 Jim Keniston <jkenisto@us.ibm.com>
* runtime/uprobes/uprobes.c: Fix from Srinivasa: Recast
diff --git a/translate.cxx b/translate.cxx
index 21a438b6..0beaf1f8 100644
--- a/translate.cxx
+++ b/translate.cxx
@@ -400,6 +400,20 @@ public:
}
}
+ string fini () const
+ {
+ switch (type())
+ {
+ case pe_string:
+ case pe_long:
+ return ""; // no action required
+ case pe_stats:
+ return "_stp_stat_del (" + value () + ");";
+ default:
+ throw semantic_error("unsupported deallocator for " + value());
+ }
+ }
+
void declare(c_unparser &c) const
{
c.c_declare(ty, name);
@@ -1201,6 +1215,8 @@ c_unparser::emit_module_init ()
vardecl* v = session->globals[i];
if (v->index_types.size() > 0)
o->newline() << getmap (v).fini();
+ else
+ o->newline() << getvar (v).fini();
}
o->newline() << "return rc;";
@@ -1262,6 +1278,8 @@ c_unparser::emit_module_exit ()
vardecl* v = session->globals[i];
if (v->index_types.size() > 0)
o->newline() << getmap (v).fini();
+ else
+ o->newline() << getvar (v).fini();
}
o->newline() << "free_percpu (contexts);";