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,