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:
@@ -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));
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user