[Lldb-commits] [PATCH] D83876: [lldb] Add SBModule::GarbageCollectAllocatedModules and clear modules after each test run
This revision was not accepted when it landed; it landed in state "Needs Review". This revision was automatically updated to reflect the committed changes. Closed by commit rGc2f9454a16e4: [lldb] Add SBModule::GarbageCollectAllocatedModules and clear modules after… (authored by teemperor). Herald added a project: LLDB. Herald added a subscriber: lldb-commits. Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D83876/new/ https://reviews.llvm.org/D83876 Files: lldb/bindings/interface/SBModule.i lldb/include/lldb/API/SBModule.h lldb/packages/Python/lldbsuite/test/lldbtest.py lldb/source/API/SBModule.cpp Index: lldb/source/API/SBModule.cpp === --- lldb/source/API/SBModule.cpp +++ lldb/source/API/SBModule.cpp @@ -690,6 +690,13 @@ return Module::GetNumberAllocatedModules(); } +void SBModule::GarbageCollectAllocatedModules() { + LLDB_RECORD_STATIC_METHOD_NO_ARGS(void, SBModule, +GarbageCollectAllocatedModules); + const bool mandatory = false; + ModuleList::RemoveOrphanSharedModules(mandatory); +} + namespace lldb_private { namespace repro { Index: lldb/packages/Python/lldbsuite/test/lldbtest.py === --- lldb/packages/Python/lldbsuite/test/lldbtest.py +++ lldb/packages/Python/lldbsuite/test/lldbtest.py @@ -1094,6 +1094,17 @@ lldb.SBDebugger.Destroy(self.dbg) del self.dbg +# All modules should be orphaned now so that they can be cleared from +# the shared module cache. +lldb.SBModule.GarbageCollectAllocatedModules() + +# Modules are not orphaned during reproducer replay because they're +# leaked on purpose. +if not configuration.is_reproducer(): +# Assert that the global module cache is empty. +self.assertEqual(lldb.SBModule.GetNumberAllocatedModules(), 0) + + # = # Various callbacks to allow introspection of test progress # = @@ -2068,13 +2079,9 @@ for target in targets: self.dbg.DeleteTarget(target) -# Modules are not orphaned during reproducer replay because they're -# leaked on purpose. if not configuration.is_reproducer(): # Assert that all targets are deleted. -assert self.dbg.GetNumTargets() == 0 -# Assert that the global module cache is empty. -assert lldb.SBModule.GetNumberAllocatedModules() == 0 +self.assertEqual(self.dbg.GetNumTargets(), 0) # Do this last, to make sure it's in reverse order from how we setup. Base.tearDown(self) Index: lldb/include/lldb/API/SBModule.h === --- lldb/include/lldb/API/SBModule.h +++ lldb/include/lldb/API/SBModule.h @@ -291,6 +291,9 @@ /// Get the number of global modules. static uint32_t GetNumberAllocatedModules(); + /// Remove any global modules which are no longer needed. + static void GarbageCollectAllocatedModules(); + private: friend class SBAddress; friend class SBFrame; Index: lldb/bindings/interface/SBModule.i === --- lldb/bindings/interface/SBModule.i +++ lldb/bindings/interface/SBModule.i @@ -353,6 +353,17 @@ static uint32_t GetNumberAllocatedModules(); +%feature("docstring", " +Removes all modules which are no longer needed by any part of LLDB from +the module cache. + +This is an implementation detail exposed for testing and should not be +relied upon. Use SBDebugger::MemoryPressureDetected instead to reduce +LLDB's memory consumption during execution. +") GarbageCollectAllocatedModules; +static void +GarbageCollectAllocatedModules(); + STRING_EXTENSION(SBModule) #ifdef SWIGPYTHON Index: lldb/source/API/SBModule.cpp === --- lldb/source/API/SBModule.cpp +++ lldb/source/API/SBModule.cpp @@ -690,6 +690,13 @@ return Module::GetNumberAllocatedModules(); } +void SBModule::GarbageCollectAllocatedModules() { + LLDB_RECORD_STATIC_METHOD_NO_ARGS(void, SBModule, +GarbageCollectAllocatedModules); + const bool mandatory = false; + ModuleList::RemoveOrphanSharedModules(mandatory); +} + namespace lldb_private { namespace repro { Index: lldb/packages/Python/lldbsuite/test/lldbtest.py === --- lldb/packages/Python/lldbsuite/test/lldbtest.py +++ lldb/packages/Python/lldbsuite/test/lldbtest.py @@ -1094,6 +1094,17 @@ lldb.SBDebugger.Destroy(self.dbg) del self.dbg +# All modules should be orphaned now so that th
[Lldb-commits] [PATCH] D83876: [lldb] Add SBModule::GarbageCollectAllocatedModules and clear modules after each test run
teemperor updated this revision to Diff 285938. teemperor retitled this revision from "[lldb] Add SBModule::ClearCachedModules and clear modules after each test run" to "[lldb] Add SBModule::GarbageCollectAllocatedModules and clear modules after each test run". teemperor edited the summary of this revision. teemperor added a comment. - Rename to GarbageCollectAllocatedModules CHANGES SINCE LAST ACTION https://reviews.llvm.org/D83876/new/ https://reviews.llvm.org/D83876 Files: lldb/bindings/interface/SBModule.i lldb/include/lldb/API/SBModule.h lldb/packages/Python/lldbsuite/test/lldbtest.py lldb/source/API/SBModule.cpp Index: lldb/source/API/SBModule.cpp === --- lldb/source/API/SBModule.cpp +++ lldb/source/API/SBModule.cpp @@ -690,6 +690,13 @@ return Module::GetNumberAllocatedModules(); } +void SBModule::GarbageCollectAllocatedModules() { + LLDB_RECORD_STATIC_METHOD_NO_ARGS(void, SBModule, +GarbageCollectAllocatedModules); + const bool mandatory = false; + ModuleList::RemoveOrphanSharedModules(mandatory); +} + namespace lldb_private { namespace repro { Index: lldb/packages/Python/lldbsuite/test/lldbtest.py === --- lldb/packages/Python/lldbsuite/test/lldbtest.py +++ lldb/packages/Python/lldbsuite/test/lldbtest.py @@ -1094,6 +1094,17 @@ lldb.SBDebugger.Destroy(self.dbg) del self.dbg +# All modules should be orphaned now so that they can be cleared from +# the shared module cache. +lldb.SBModule.GarbageCollectAllocatedModules() + +# Modules are not orphaned during reproducer replay because they're +# leaked on purpose. +if not configuration.is_reproducer(): +# Assert that the global module cache is empty. +self.assertEqual(lldb.SBModule.GetNumberAllocatedModules(), 0) + + # = # Various callbacks to allow introspection of test progress # = @@ -2068,13 +2079,9 @@ for target in targets: self.dbg.DeleteTarget(target) -# Modules are not orphaned during reproducer replay because they're -# leaked on purpose. if not configuration.is_reproducer(): # Assert that all targets are deleted. -assert self.dbg.GetNumTargets() == 0 -# Assert that the global module cache is empty. -assert lldb.SBModule.GetNumberAllocatedModules() == 0 +self.assertEqual(self.dbg.GetNumTargets(), 0) # Do this last, to make sure it's in reverse order from how we setup. Base.tearDown(self) Index: lldb/include/lldb/API/SBModule.h === --- lldb/include/lldb/API/SBModule.h +++ lldb/include/lldb/API/SBModule.h @@ -291,6 +291,9 @@ /// Get the number of global modules. static uint32_t GetNumberAllocatedModules(); + /// Remove any global modules which are no longer needed. + static void GarbageCollectAllocatedModules(); + private: friend class SBAddress; friend class SBFrame; Index: lldb/bindings/interface/SBModule.i === --- lldb/bindings/interface/SBModule.i +++ lldb/bindings/interface/SBModule.i @@ -353,6 +353,17 @@ static uint32_t GetNumberAllocatedModules(); +%feature("docstring", " +Removes all modules which are no longer needed by any part of LLDB from +the module cache. + +This is an implementation detail exposed for testing and should not be +relied upon. Use SBDebugger::MemoryPressureDetected instead to reduce +LLDB's memory consumption during execution. +") GarbageCollectAllocatedModules; +static void +GarbageCollectAllocatedModules(); + STRING_EXTENSION(SBModule) #ifdef SWIGPYTHON Index: lldb/source/API/SBModule.cpp === --- lldb/source/API/SBModule.cpp +++ lldb/source/API/SBModule.cpp @@ -690,6 +690,13 @@ return Module::GetNumberAllocatedModules(); } +void SBModule::GarbageCollectAllocatedModules() { + LLDB_RECORD_STATIC_METHOD_NO_ARGS(void, SBModule, +GarbageCollectAllocatedModules); + const bool mandatory = false; + ModuleList::RemoveOrphanSharedModules(mandatory); +} + namespace lldb_private { namespace repro { Index: lldb/packages/Python/lldbsuite/test/lldbtest.py === --- lldb/packages/Python/lldbsuite/test/lldbtest.py +++ lldb/packages/Python/lldbsuite/test/lldbtest.py @@ -1094,6 +1094,17 @@ lldb.SBDebugger.Destroy(self.dbg) del self.dbg +# All modules should be orphaned now so that they can be cleared fro