- From: Andy Levine <andyl@infospinner.com>
- Date: Tue, 28 Dec 1999 10:28:37 -0600
- To: <www-lib@w3.org>
Attached find CVS diff files to 2 source files that clean up a few memory
leaks when an app shuts down.
The first, HTIcons.c, adds the function HTIcon_deleteAll(), a function to
undo the effects of HTIconInit(). It clears out the entire icon table,
deleting all elements and nukes the table.
The second, HTMIMPrs.c, fixes the function HTParseSet_deleteAll() which had
the following problems:
1) free'd each element twice
2) the element tokens (pEl->token) was never being free'd
3) the parser hash table itself (me->parsers) was never freed.
Andy Levine
andyl@infospinner.com
Index: HTIcons.c
===================================================================
RCS file: /sources/public/libwww/Library/src/HTIcons.c,v
retrieving revision 2.29
diff -r2.29 HTIcons.c
243a244,283
>
> PRIVATE void HTIconNode_delete(HTIconNode* pNode)
> {
> HT_FREE(pNode->icon_url);
> HT_FREE(pNode->icon_alt);
> HT_FREE(pNode->type_templ);
> HT_FREE(pNode);
> }
>
> /*
> ** cleans up all memory used by icons. Should be called by
> ** HTLibTerminate() (but it isn't)
> **
> */
> PUBLIC void HTIcon_deleteAll()
> {
> if(icons != NULL)
> {
> HTList * iconList = icons;
> HTIconNode * node;
>
> while((node = (HTIconNode*)HTList_removeLastObject(iconList)))
> {
> HTIconNode_delete(node);
> }
>
> /* delete the list as well */
> HTList_delete(icons);
> icons = NULL;
> }
>
> HTIconNode_delete(icon_unknown);
> icon_unknown = NULL;
> HTIconNode_delete(icon_blank);
> icon_blank = NULL;
> HTIconNode_delete(icon_parent);
> icon_parent = NULL;
> HTIconNode_delete(icon_dir);
> icon_dir = NULL;
> }
Index: HTMIMPrs.c
===================================================================
RCS file: /sources/public/libwww/Library/src/HTMIMPrs.c,v
retrieving revision 2.9
diff -r2.9 HTMIMPrs.c
82,87d81
<
< for (i=0; i<me->size; i++)
< for (pEl = me->parsers[i]; pEl; pEl = next) {
< next = pEl->next;
< HT_FREE(pEl);
< }
89,91c83,92
< for (pEl = me->parsers[i]; pEl; pEl = next) {
< next = pEl->next;
< HT_FREE(pEl);
---
> if(me && me->parsers) {
> for (i=0; i<me->size; i++) {
> for (pEl = me->parsers[i]; pEl; pEl = next) {
> next = pEl->next;
> HT_FREE(pEl->token);
> HT_FREE(pEl);
> }
> }
> HT_FREE(me->parsers);
> HT_FREE(me);
93d93
< HT_FREE(me);
Received on Tuesday, 28 December 1999 11:31:01 UTC