ddd
[Top][All Lists]
Advanced

[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



reply via email to

[Prev in Thread] Current Thread [Next in Thread]