[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
some leaks fixed in ddd 3.3.1
From: |
Arnaud Desitter |
Subject: |
some leaks fixed in ddd 3.3.1 |
Date: |
Fri, 11 May 2001 17:16:07 +0100 |
Hi,
You will find below a patch fixing a series of memory leaks
in ddd 3.3.1. Two of them, respectively in Assoc.h and vsl-gramma.Y
were fairly major and the present fix may help sorting some
performance problems.
Cheers,
Arnaud
Only in ddd-3.3.1-1: Makefile
Only in ddd-3.3.1-1: config.cache
Only in ddd-3.3.1-1: config.log
Only in ddd-3.3.1-1: config.status
diff -ur ddd-3.3.1/ddd/Assoc.h ddd-3.3.1-1/ddd/Assoc.h
--- ddd-3.3.1/ddd/Assoc.h Mon May 29 15:07:20 2000
+++ ddd-3.3.1-1/ddd/Assoc.h Tue May 8 12:44:24 2001
@@ -99,6 +99,20 @@
return entries = e;
}
+private:
+
+ // Destroy all elements
+ void destroyAll()
+ {
+ AssocRec<K,V> *next = 0;
+ for (AssocRec<K,V> *e = entries; e != 0; e = next)
+ {
+ next = e->next;
+ delete e;
+ }
+ entries = 0;
+ }
+
public:
// Constructors
_Assoc():
@@ -108,12 +122,7 @@
// Destructor
virtual ~_Assoc()
{
- AssocRec<K,V> *next = 0;
- for (AssocRec<K,V> *e = entries; e != 0; e = next)
- {
- next = e->next;
- delete e;
- }
+ destroyAll();
}
// Resources
@@ -194,7 +203,7 @@
if (this != &m)
{
if (entries)
- delete entries;
+ destroyAll();
entries = 0;
for (AssocRec<K,V> *e = m.entries; e != 0; e = e->next)
Only in ddd-3.3.1-1/ddd: Ddd
Only in ddd-3.3.1-1/ddd: USERINFO
Only in ddd-3.3.1-1/ddd: bld.h
Only in ddd-3.3.1-1/ddd: build.h
Only in ddd-3.3.1-1/ddd: cfg.texi
diff -ur ddd-3.3.1/ddd/comm-manag.C ddd-3.3.1-1/ddd/comm-manag.C
--- ddd-3.3.1/ddd/comm-manag.C Mon Mar 26 17:40:05 2001
+++ ddd-3.3.1-1/ddd/comm-manag.C Fri May 11 15:20:35 2001
@@ -1842,7 +1842,13 @@
bool send_ok = gdb->send_user_cmd_plus(cmds, dummy, cmds.size(),
extra_completed, (void*)extra_data,
cmd, (void *)cmd_data);
-
+ //deallocate resources
+ if (!send_ok)
+ {
+ delete extra_data;
+ // TODO LEAK ?? cmd_data
+ }
+
if (!send_ok)
post_gdb_busy(origin);
}
@@ -2126,6 +2132,7 @@
cmd_data->graph_cmd = "";
cmd_data->user_answer = "";
gdb->send_user_cmd(cmd, (void *)cmd_data);
+ // TODO LEAK on cmd_data ?
return;
}
@@ -2267,6 +2274,7 @@
cmd_data->filter_disp = Filter;
cmd_data->user_prompt = false; // No more prompts
gdb->send_user_cmd(gdb->display_command());
+ // TODO LEAK on cmd_data ?
return;
}
Only in ddd-3.3.1-1/ddd: config.h
Only in ddd-3.3.1-1/ddd: config.log
Only in ddd-3.3.1-1/ddd: config.status
diff -ur ddd-3.3.1/ddd/converters.C ddd-3.3.1-1/ddd/converters.C
--- ddd-3.3.1/ddd/converters.C Thu Apr 26 12:08:07 2001
+++ ddd-3.3.1-1/ddd/converters.C Fri May 11 14:59:58 2001
@@ -460,10 +460,8 @@
}
-static void XmStringFreeCB(XtPointer client_data, XtIntervalId *id)
+static void XmStringFreeCB(XtPointer client_data, XtIntervalId *)
{
- (void) id; // Use it
-
XmString xs = (XmString)client_data;
XmStringFree(xs);
}
@@ -576,7 +574,9 @@
0, XmStringFreeCB, (XtPointer)target);
#else
// It seems this does this apply to all Motif implementations...
- (void) XmStringFreeCB; // Use it
+ // TODO LEAK
+ // Weird ! I comment it out.
+ // (void) XmStringFreeCB; // Use it
#endif
done(XmString, target);
Only in ddd-3.3.1-1/ddd: ddd.man
diff -ur ddd-3.3.1/ddd/glob.C ddd-3.3.1-1/ddd/glob.C
--- ddd-3.3.1/ddd/glob.C Thu Apr 26 12:08:07 2001
+++ ddd-3.3.1-1/ddd/glob.C Wed May 9 10:35:44 2001
@@ -463,9 +463,13 @@
if (directories == 0)
goto memory_error;
else if (directories == (char **)-1)
- return (char **) -1;
+ {
+ if (result) free(result);
+ return (char **) -1;
+ }
else if (*directories == 0)
{
+ if (result) free(result);
free ((char *) directories);
return (char **) -1;
}
@@ -538,6 +542,7 @@
(char *)(directory_len == 0
? (char *)"." : directory_name));
+ if (result) free(result);
if (temp_results == 0 || temp_results == (char **)-1)
return temp_results;
Only in ddd-3.3.1-1/ddd: host.h
Only in ddd-3.3.1-1/ddd: libtool
Only in ddd-3.3.1-1/ddd: root.h
Only in ddd-3.3.1-1/ddd: stamp-h
Only in ddd-3.3.1-1/ddd: vr.h
diff -ur ddd-3.3.1/ddd/vsl-gramma.Y ddd-3.3.1-1/ddd/vsl-gramma.Y
--- ddd-3.3.1/ddd/vsl-gramma.Y Tue Dec 19 00:21:47 2000
+++ ddd-3.3.1-1/ddd/vsl-gramma.Y Fri May 4 16:04:43 2001
@@ -196,7 +196,9 @@
*$1.file, $1.line);
}
delete $1.id;
+ $1.id = 0;
delete $1.file;
+ $1.file = 0;
}
function_header : function_identifier function_argument
@@ -219,6 +221,7 @@
$$.line = vsllinenumber;
delete $1;
+ $1 = 0;
}
function_identifier : identifier
@@ -279,7 +282,9 @@
}
delete $1.id;
+ $1.id = 0;
delete $1.file;
+ $1.file = 0;
}
local_header : function_header EQ
@@ -316,7 +321,9 @@
}
delete $1.id;
+ $1.id = 0;
delete $1.file;
+ $1.file = 0;
}
global_header : function_header ARROW
@@ -509,9 +516,10 @@
// Bug workaround
char *buf = (char *)*$1;
- string name = buf;
+ const string name(buf);
$$ = new StringNode(name);
delete $1;
+ $1 = 0;
ASSERT($$->OK());
}
@@ -549,6 +557,9 @@
$$ = ($2) ?
vsllib->_call(*$1, $2) : 0;
ASSERT($$ == 0 || $$->OK());
+
+ delete $1;
+ $1 = 0;
}
unary_expression : NOT box_expression
@@ -770,6 +781,7 @@
ASSERT($$->OK());
delete $1;
+ $1 = 0;
}
@@ -784,8 +796,11 @@
{
ASSERT($1->OK());
- string func_name = *$1;
+ const string func_name(*$1);
vsllib->override(func_name);
+
+ delete $1;
+ $1 = 0;
}
replace_declaration : REPLACE replace_list
@@ -797,7 +812,7 @@
{
ASSERT($1->OK());
- string func_name = *$1;
+ const string func_name(*$1);
if (vsllib->replace(func_name)
&& vsllib->replace("#" + func_name))
{
@@ -812,6 +827,9 @@
"(...)' undefined");
}
}
+
+ delete $1;
+ $1 = 0;
}
%% /* DO NOT REMOVE THIS COMMENT -- MUNCH-YACC DEPENDS ON IT */
Only in ddd-3.3.1-1: ddd.spec
_____________________________________________________________________
This message has been checked for all known viruses by Star Internet delivered
through the MessageLabs Virus Scanning Service. For further information visit
http://www.star.net.uk/stats.asp
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- some leaks fixed in ddd 3.3.1,
Arnaud Desitter <=