[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[6212] parsetexi fix memory leaks
From: |
Gavin D. Smith |
Subject: |
[6212] parsetexi fix memory leaks |
Date: |
Thu, 09 Apr 2015 13:15:44 +0000 |
Revision: 6212
http://svn.sv.gnu.org/viewvc/?view=rev&root=texinfo&revision=6212
Author: gavin
Date: 2015-04-09 13:15:43 +0000 (Thu, 09 Apr 2015)
Log Message:
-----------
parsetexi fix memory leaks
Modified Paths:
--------------
trunk/parsetexi/def.c
trunk/parsetexi/end_line.c
trunk/parsetexi/parser.c
trunk/parsetexi/tree.c
trunk/parsetexi/tree.h
Modified: trunk/parsetexi/def.c
===================================================================
--- trunk/parsetexi/def.c 2015-04-09 11:50:36 UTC (rev 6211)
+++ trunk/parsetexi/def.c 2015-04-09 13:15:43 UTC (rev 6212)
@@ -393,6 +393,7 @@
add_to_def_args_extra (def_args, "delimiter", e);
p += len;
}
+ destroy_element (arg);
}
else
{
Modified: trunk/parsetexi/end_line.c
===================================================================
--- trunk/parsetexi/end_line.c 2015-04-09 11:50:36 UTC (rev 6211)
+++ trunk/parsetexi/end_line.c 2015-04-09 13:15:43 UTC (rev 6212)
@@ -1018,6 +1018,7 @@
ELEMENT *end_elt;
debug ("END COMMAND %s", end_command);
+ free (end_command);
/* Reparent the "@end" element to be a child of the block element. */
end_elt = pop_element_from_contents (current);
@@ -1041,7 +1042,12 @@
if (close_preformatted_command (end_id))
current = begin_preformatted (current);
}
- free (end_command);
+ else
+ {
+ /* The "@end" line does not appear in the final tree for a
+ conditional block. */
+ destroy_element_and_children (end_elt);
+ }
} /* 3340 */
else
{
Modified: trunk/parsetexi/parser.c
===================================================================
--- trunk/parsetexi/parser.c 2015-04-09 11:50:36 UTC (rev 6211)
+++ trunk/parsetexi/parser.c 2015-04-09 13:15:43 UTC (rev 6212)
@@ -667,7 +667,7 @@
popped = pop_element_from_contents (current);
if (popped->cmd != end_cmd)
abort(); //error
- destroy_element (popped);
+ destroy_element_and_children (popped);
// abort until end of line, calling new_line
debug ("CLOSED conditional %s", command_name(end_cmd));
Modified: trunk/parsetexi/tree.c
===================================================================
--- trunk/parsetexi/tree.c 2015-04-09 11:50:36 UTC (rev 6211)
+++ trunk/parsetexi/tree.c 2015-04-09 13:15:43 UTC (rev 6212)
@@ -58,6 +58,21 @@
free (e);
}
+/* Recursively destroy this element and all data in its descendants.
+ TODO: Also extra information. */
+void
+destroy_element_and_children (ELEMENT *e)
+{
+ int i;
+
+ for (i = 0; i < e->contents.number; i++)
+ destroy_element_and_children (e->contents.list[i]);
+ for (i = 0; i < e->args.number; i++)
+ destroy_element_and_children (e->args.list[i]);
+
+ destroy_element (e);
+}
+
/* Make sure there is space for at least one more element. */
static void
reallocate_list (ELEMENT_LIST *list)
Modified: trunk/parsetexi/tree.h
===================================================================
--- trunk/parsetexi/tree.h 2015-04-09 11:50:36 UTC (rev 6211)
+++ trunk/parsetexi/tree.h 2015-04-09 13:15:43 UTC (rev 6212)
@@ -27,6 +27,7 @@
ELEMENT *contents_child_by_index (ELEMENT *e, int index);
ELEMENT *args_child_by_index (ELEMENT *e, int index);
void destroy_element (ELEMENT *e);
+void destroy_element_and_children (ELEMENT *e);
#define element_contents_number(e) ((e)->contents.number)
#define element_args_number(e) ((e)->args.number)
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [6212] parsetexi fix memory leaks,
Gavin D. Smith <=