[haiku-commits] haiku: hrev51724 - in src/kits/debugger: files debug_info dwarf

  • From: anevilyak@xxxxxxxxx
  • To: haiku-commits@xxxxxxxxxxxxx
  • Date: Sun, 31 Dec 2017 23:53:24 +0100 (CET)

hrev51724 adds 1 changeset to branch 'master'
old head: 8a9e1e0d4a586732b5008d8a5888e14aa815b893
new head: b1ab02c43433de0fd1e2a47415aca7647b106aef
overview: 
http://cgit.haiku-os.org/haiku/log/?qt=range&q=b1ab02c43433+%5E8a9e1e0d4a58

----------------------------------------------------------------------------

b1ab02c43433: Debugger: More memory management fixes.
  
  DwarfImageDebugInfo:
  - Type name/info entries weren't being freed properly.
  
  BaseUnit:
  - The array of entries itself was being destroyed, but not the actual
    objects. Consequently none of the DIE objects were ever being freed.
  
  CfaRuleSet:
  - The register rules array wasn't being freed.
  
  FileManager:
  - References to entries weren't being released. Some more work remains to be
    done here though, as a subset of these objects still have a non-zero ref
    count in the end.

                                         [ Rene Gollent <rene@xxxxxxxxxxx> ]

----------------------------------------------------------------------------

Revision:    hrev51724
Commit:      b1ab02c43433de0fd1e2a47415aca7647b106aef
URL:         http://cgit.haiku-os.org/haiku/commit/?id=b1ab02c43433
Author:      Rene Gollent <rene@xxxxxxxxxxx>
Date:        Sun Dec 31 22:48:28 2017 UTC

----------------------------------------------------------------------------

5 files changed, 25 insertions(+), 1 deletion(-)
src/kits/debugger/debug_info/DwarfImageDebugInfo.cpp | 8 +++++++-
src/kits/debugger/dwarf/BaseUnit.cpp                 | 2 ++
src/kits/debugger/dwarf/CfaRuleSet.cpp               | 6 ++++++
src/kits/debugger/dwarf/CfaRuleSet.h                 | 1 +
src/kits/debugger/files/FileManager.cpp              | 9 +++++++++

----------------------------------------------------------------------------

diff --git a/src/kits/debugger/debug_info/DwarfImageDebugInfo.cpp 
b/src/kits/debugger/debug_info/DwarfImageDebugInfo.cpp
index 054c9b9..c38e6b8 100644
--- a/src/kits/debugger/debug_info/DwarfImageDebugInfo.cpp
+++ b/src/kits/debugger/debug_info/DwarfImageDebugInfo.cpp
@@ -267,7 +267,7 @@ struct DwarfImageDebugInfo::TypeNameEntry : TypeNameKey {
        TypeNameEntry(const BString& name)
                :
                TypeNameKey(name),
-               types(10, false)
+               types(10, true)
        {
        }
 
@@ -362,6 +362,12 @@ DwarfImageDebugInfo::~DwarfImageDebugInfo()
        fFile->ReleaseReference();
        fTypeCache->ReleaseReference();
 
+       TypeNameEntry* entry = fTypeNameTable->Clear(true);
+       while (entry != NULL) {
+               TypeNameEntry* next = entry->next;
+               delete entry;
+               entry = next;
+       }
        delete fTypeNameTable;
 }
 
diff --git a/src/kits/debugger/dwarf/BaseUnit.cpp 
b/src/kits/debugger/dwarf/BaseUnit.cpp
index 76c5610..54010dd 100644
--- a/src/kits/debugger/dwarf/BaseUnit.cpp
+++ b/src/kits/debugger/dwarf/BaseUnit.cpp
@@ -29,6 +29,8 @@ BaseUnit::BaseUnit(off_t headerOffset, off_t contentOffset,
 
 BaseUnit::~BaseUnit()
 {
+       for (int32 i = 0; i < fEntries.Count(); i++)
+               delete fEntries[i];
 }
 
 
diff --git a/src/kits/debugger/dwarf/CfaRuleSet.cpp 
b/src/kits/debugger/dwarf/CfaRuleSet.cpp
index c88396d..869276e 100644
--- a/src/kits/debugger/dwarf/CfaRuleSet.cpp
+++ b/src/kits/debugger/dwarf/CfaRuleSet.cpp
@@ -19,6 +19,12 @@ CfaRuleSet::CfaRuleSet()
 }
 
 
+CfaRuleSet::~CfaRuleSet()
+{
+       delete[] fRegisterRules;
+}
+
+
 status_t
 CfaRuleSet::Init(uint32 registerCount)
 {
diff --git a/src/kits/debugger/dwarf/CfaRuleSet.h 
b/src/kits/debugger/dwarf/CfaRuleSet.h
index 11873a4..a5c5f78 100644
--- a/src/kits/debugger/dwarf/CfaRuleSet.h
+++ b/src/kits/debugger/dwarf/CfaRuleSet.h
@@ -12,6 +12,7 @@
 class CfaRuleSet {
 public:
                                                                CfaRuleSet();
+                                                               ~CfaRuleSet();
 
                        status_t                        Init(uint32 
registerCount);
                        CfaRuleSet*                     Clone() const;
diff --git a/src/kits/debugger/files/FileManager.cpp 
b/src/kits/debugger/files/FileManager.cpp
index fb614f1..9615b33 100644
--- a/src/kits/debugger/files/FileManager.cpp
+++ b/src/kits/debugger/files/FileManager.cpp
@@ -124,6 +124,9 @@ public:
                        entry->ReleaseReference();
                        entry = next;
                }
+
+               while ((entry = fDeadEntries.RemoveHead()) != NULL)
+                       entry->ReleaseReference();
        }
 
        status_t Init()
@@ -208,6 +211,12 @@ private:
                                }
                        }
                }
+
+               LocatableDirectory* parent = entry->Parent();
+               if (parent != NULL)
+                       parent->RemoveEntry(entry);
+
+               delete entry;
        }
 
        bool _LocateDirectory(LocatableDirectory* directory,


Other related posts:

  • » [haiku-commits] haiku: hrev51724 - in src/kits/debugger: files debug_info dwarf - anevilyak