Debugger: Another set of #13800 fixes.

AbstractTable/Table/TreeTable:
- Let BColumnListView take care of deleting columns. The previous
  approach was resulting in the columns being leaked.

Debugger:
- Don't detach the UI reference, as TeamDebugger will acquire its own.

GraphicalUserInterface:
- Cleanup of file panel handler.

SourceView:
- Clean up marker manager.

*Roster:
- Clean up registered objects in destructors.

GlobalTypeLookup:
- Clean up hash tables.

NetworkTargetHostInterfaceInfo:
- Fix reference handling for settings.
This commit is contained in:
Rene Gollent
2018-01-11 22:39:55 -05:00
parent ffe684b96c
commit c0936b5a03
13 changed files with 44 additions and 24 deletions
@@ -109,7 +109,7 @@ AbstractTable::AbstractTable(const char* name, uint32 flags,
border_style borderStyle, bool showHorizontalScrollbar)
:
BColumnListView(name, flags, borderStyle, showHorizontalScrollbar),
fColumns(20, true)
fColumns(20, false)
{
}
@@ -402,9 +402,6 @@ Table::Table(TableModel* model, const char* name, uint32 flags,
Table::~Table()
{
for (int32 i = CountColumns() - 1; i >= 0; i--)
RemoveColumn(ColumnAt(i));
// rows are deleted by the BColumnListView destructor automatically
}
@@ -688,6 +688,7 @@ TreeTable::TreeTable(TreeTableModel* model, const char* name, uint32 flags,
:
AbstractTable(name, flags, borderStyle, showHorizontalScrollbar),
fModel(NULL),
fToolTipProvider(NULL),
fRootNode(NULL),
fSelectionModel(this),
fIgnoreSelectionChange(0)
@@ -699,9 +700,6 @@ TreeTable::TreeTable(TreeTableModel* model, const char* name, uint32 flags,
TreeTable::~TreeTable()
{
SetTreeTableModel(NULL);
for (int32 i = CountColumns() - 1; i >= 0; i--)
RemoveColumn(ColumnAt(i));
}
+2 -8
View File
@@ -433,8 +433,7 @@ Debugger::MessageReceived(BMessage* message)
status_t error = interface->StartTeamDebugger(options);
if (error != B_OK) {
// TODO: notify user.
} else
uiReference.Detach();
}
break;
}
case MSG_START_NEW_TEAM:
@@ -605,7 +604,6 @@ Debugger::_StartNewTeam(TargetHostInterface* interface, const char* path,
status_t error = interface->StartTeamDebugger(options);
if (error == B_OK) {
deleter.Detach();
uiReference.Detach();
}
return error;
@@ -624,11 +622,7 @@ Debugger::_HandleOptions(const Options& options)
BReference<UserInterface> uiReference(debuggerOptions.userInterface, true);
TargetHostInterface* hostInterface
= TargetHostInterfaceRoster::Default()->ActiveInterfaceAt(0);
status_t error = hostInterface->StartTeamDebugger(debuggerOptions);
if (error == B_OK)
uiReference.Detach();
return error;
return hostInterface->StartTeamDebugger(debuggerOptions);
}
@@ -138,6 +138,7 @@ GraphicalUserInterface::~GraphicalUserInterface()
{
delete fTeamWindowMessenger;
delete fFilePanel;
delete fFilePanelHandler;
}
@@ -2034,6 +2034,7 @@ SourceView::SourceView(Team* team, Listener* listener)
fStackTrace(NULL),
fStackFrame(NULL),
fSourceCode(NULL),
fMarkerManager(NULL),
fMarkerView(NULL),
fTextView(NULL),
fListener(listener),
@@ -2052,6 +2053,8 @@ SourceView::~SourceView()
SetStackFrame(NULL);
SetStackTrace(NULL, NULL);
SetSourceCode(NULL);
delete fMarkerManager;
}
@@ -24,13 +24,16 @@
ValueHandlerRoster::ValueHandlerRoster()
:
fLock("value handler roster")
fLock("value handler roster"),
fValueHandlers(20, false)
{
}
ValueHandlerRoster::~ValueHandlerRoster()
{
for(int32 i = 0; ValueHandler* handler = fValueHandlers.ItemAt(i); i++)
handler->ReleaseReference();
}
/*static*/ ValueHandlerRoster*
@@ -114,6 +114,9 @@ GlobalTypeCache::~GlobalTypeCache()
entry = nextEntry;
}
}
delete fTypesByName;
delete fTypesByID;
}
@@ -23,13 +23,18 @@
ImageDebugLoadingStateHandlerRoster::ImageDebugLoadingStateHandlerRoster()
:
fLock("type handler roster")
fLock("loading state handler roster"),
fStateHandlers(20, false)
{
}
ImageDebugLoadingStateHandlerRoster::~ImageDebugLoadingStateHandlerRoster()
{
for (int32 i = 0; ImageDebugLoadingStateHandler* handler
= fStateHandlers.ItemAt(i); i++) {
handler->ReleaseReference();
}
}
@@ -32,6 +32,16 @@ TargetHostInterfaceRoster::TargetHostInterfaceRoster()
TargetHostInterfaceRoster::~TargetHostInterfaceRoster()
{
for (int32 i = 0; TargetHostInterfaceInfo* info
= fInterfaceInfos.ItemAt(i); i++) {
info->ReleaseReference();
}
for (int32 i = 0; TargetHostInterface* interface
= fActiveInterfaces.ItemAt(i); i++) {
if (interface->Lock())
interface->Quit();
}
}
@@ -185,6 +195,7 @@ TargetHostInterfaceRoster::TargetHostInterfaceQuit(
{
AutoLocker<TargetHostInterfaceRoster> locker(this);
fActiveInterfaces.RemoveItem(interface);
}
@@ -26,7 +26,8 @@ NetworkTargetHostInterfaceInfo::NetworkTargetHostInterfaceInfo()
NetworkTargetHostInterfaceInfo::~NetworkTargetHostInterfaceInfo()
{
delete fDescription;
if (fDescription != NULL)
fDescription->ReleaseReference();
}
@@ -39,21 +40,20 @@ NetworkTargetHostInterfaceInfo::Init()
Setting* setting = new(std::nothrow) StringSettingImpl(kHostnameSetting,
"Hostname", "");
BReference<Setting> settingsReference(setting, true);
if (setting == NULL)
return B_NO_MEMORY;
ObjectDeleter<Setting> settingDeleter(setting);
if (!fDescription->AddSetting(setting))
return B_NO_MEMORY;
settingDeleter.Detach();
setting = new(std::nothrow) BoundedSettingImpl(kPortSetting, "Port",
(uint16)1, (uint16)65535, (uint16)8305);
if (setting == NULL)
return B_NO_MEMORY;
if (!fDescription->AddSetting(setting)) {
delete setting;
settingsReference.SetTo(setting, true);
if (!fDescription->AddSetting(setting))
return B_NO_MEMORY;
}
return B_OK;
}
@@ -73,6 +73,8 @@ TypeHandlerRoster::TypeHandlerRoster()
TypeHandlerRoster::~TypeHandlerRoster()
{
for (int32 i = 0; TypeHandler* handler = fTypeHandlers.ItemAt(i); i++)
handler->ReleaseReference();
}
/*static*/ TypeHandlerRoster*
@@ -16,7 +16,9 @@
ValueNodeContainer::ValueNodeContainer()
:
fLock("value node container")
fLock("value node container"),
fChildren(20, false),
fListeners(20, false)
{
}
@@ -24,6 +26,7 @@ ValueNodeContainer::ValueNodeContainer()
ValueNodeContainer::~ValueNodeContainer()
{
RemoveAllChildren();
fListeners.MakeEmpty();
}