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)
|
border_style borderStyle, bool showHorizontalScrollbar)
|
||||||
:
|
:
|
||||||
BColumnListView(name, flags, borderStyle, 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()
|
Table::~Table()
|
||||||
{
|
{
|
||||||
for (int32 i = CountColumns() - 1; i >= 0; i--)
|
|
||||||
RemoveColumn(ColumnAt(i));
|
|
||||||
|
|
||||||
// rows are deleted by the BColumnListView destructor automatically
|
// 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),
|
AbstractTable(name, flags, borderStyle, showHorizontalScrollbar),
|
||||||
fModel(NULL),
|
fModel(NULL),
|
||||||
|
fToolTipProvider(NULL),
|
||||||
fRootNode(NULL),
|
fRootNode(NULL),
|
||||||
fSelectionModel(this),
|
fSelectionModel(this),
|
||||||
fIgnoreSelectionChange(0)
|
fIgnoreSelectionChange(0)
|
||||||
@@ -699,9 +700,6 @@ TreeTable::TreeTable(TreeTableModel* model, const char* name, uint32 flags,
|
|||||||
TreeTable::~TreeTable()
|
TreeTable::~TreeTable()
|
||||||
{
|
{
|
||||||
SetTreeTableModel(NULL);
|
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);
|
status_t error = interface->StartTeamDebugger(options);
|
||||||
if (error != B_OK) {
|
if (error != B_OK) {
|
||||||
// TODO: notify user.
|
// TODO: notify user.
|
||||||
} else
|
}
|
||||||
uiReference.Detach();
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case MSG_START_NEW_TEAM:
|
case MSG_START_NEW_TEAM:
|
||||||
@@ -605,7 +604,6 @@ Debugger::_StartNewTeam(TargetHostInterface* interface, const char* path,
|
|||||||
status_t error = interface->StartTeamDebugger(options);
|
status_t error = interface->StartTeamDebugger(options);
|
||||||
if (error == B_OK) {
|
if (error == B_OK) {
|
||||||
deleter.Detach();
|
deleter.Detach();
|
||||||
uiReference.Detach();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return error;
|
return error;
|
||||||
@@ -624,11 +622,7 @@ Debugger::_HandleOptions(const Options& options)
|
|||||||
BReference<UserInterface> uiReference(debuggerOptions.userInterface, true);
|
BReference<UserInterface> uiReference(debuggerOptions.userInterface, true);
|
||||||
TargetHostInterface* hostInterface
|
TargetHostInterface* hostInterface
|
||||||
= TargetHostInterfaceRoster::Default()->ActiveInterfaceAt(0);
|
= TargetHostInterfaceRoster::Default()->ActiveInterfaceAt(0);
|
||||||
status_t error = hostInterface->StartTeamDebugger(debuggerOptions);
|
return hostInterface->StartTeamDebugger(debuggerOptions);
|
||||||
if (error == B_OK)
|
|
||||||
uiReference.Detach();
|
|
||||||
|
|
||||||
return error;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -138,6 +138,7 @@ GraphicalUserInterface::~GraphicalUserInterface()
|
|||||||
{
|
{
|
||||||
delete fTeamWindowMessenger;
|
delete fTeamWindowMessenger;
|
||||||
delete fFilePanel;
|
delete fFilePanel;
|
||||||
|
delete fFilePanelHandler;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -2034,6 +2034,7 @@ SourceView::SourceView(Team* team, Listener* listener)
|
|||||||
fStackTrace(NULL),
|
fStackTrace(NULL),
|
||||||
fStackFrame(NULL),
|
fStackFrame(NULL),
|
||||||
fSourceCode(NULL),
|
fSourceCode(NULL),
|
||||||
|
fMarkerManager(NULL),
|
||||||
fMarkerView(NULL),
|
fMarkerView(NULL),
|
||||||
fTextView(NULL),
|
fTextView(NULL),
|
||||||
fListener(listener),
|
fListener(listener),
|
||||||
@@ -2052,6 +2053,8 @@ SourceView::~SourceView()
|
|||||||
SetStackFrame(NULL);
|
SetStackFrame(NULL);
|
||||||
SetStackTrace(NULL, NULL);
|
SetStackTrace(NULL, NULL);
|
||||||
SetSourceCode(NULL);
|
SetSourceCode(NULL);
|
||||||
|
|
||||||
|
delete fMarkerManager;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -24,13 +24,16 @@
|
|||||||
|
|
||||||
ValueHandlerRoster::ValueHandlerRoster()
|
ValueHandlerRoster::ValueHandlerRoster()
|
||||||
:
|
:
|
||||||
fLock("value handler roster")
|
fLock("value handler roster"),
|
||||||
|
fValueHandlers(20, false)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
ValueHandlerRoster::~ValueHandlerRoster()
|
ValueHandlerRoster::~ValueHandlerRoster()
|
||||||
{
|
{
|
||||||
|
for(int32 i = 0; ValueHandler* handler = fValueHandlers.ItemAt(i); i++)
|
||||||
|
handler->ReleaseReference();
|
||||||
}
|
}
|
||||||
|
|
||||||
/*static*/ ValueHandlerRoster*
|
/*static*/ ValueHandlerRoster*
|
||||||
|
|||||||
@@ -114,6 +114,9 @@ GlobalTypeCache::~GlobalTypeCache()
|
|||||||
entry = nextEntry;
|
entry = nextEntry;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
delete fTypesByName;
|
||||||
|
delete fTypesByID;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -23,13 +23,18 @@
|
|||||||
|
|
||||||
ImageDebugLoadingStateHandlerRoster::ImageDebugLoadingStateHandlerRoster()
|
ImageDebugLoadingStateHandlerRoster::ImageDebugLoadingStateHandlerRoster()
|
||||||
:
|
:
|
||||||
fLock("type handler roster")
|
fLock("loading state handler roster"),
|
||||||
|
fStateHandlers(20, false)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
ImageDebugLoadingStateHandlerRoster::~ImageDebugLoadingStateHandlerRoster()
|
ImageDebugLoadingStateHandlerRoster::~ImageDebugLoadingStateHandlerRoster()
|
||||||
{
|
{
|
||||||
|
for (int32 i = 0; ImageDebugLoadingStateHandler* handler
|
||||||
|
= fStateHandlers.ItemAt(i); i++) {
|
||||||
|
handler->ReleaseReference();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -32,6 +32,16 @@ TargetHostInterfaceRoster::TargetHostInterfaceRoster()
|
|||||||
|
|
||||||
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);
|
AutoLocker<TargetHostInterfaceRoster> locker(this);
|
||||||
fActiveInterfaces.RemoveItem(interface);
|
fActiveInterfaces.RemoveItem(interface);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -26,7 +26,8 @@ NetworkTargetHostInterfaceInfo::NetworkTargetHostInterfaceInfo()
|
|||||||
|
|
||||||
NetworkTargetHostInterfaceInfo::~NetworkTargetHostInterfaceInfo()
|
NetworkTargetHostInterfaceInfo::~NetworkTargetHostInterfaceInfo()
|
||||||
{
|
{
|
||||||
delete fDescription;
|
if (fDescription != NULL)
|
||||||
|
fDescription->ReleaseReference();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -39,21 +40,20 @@ NetworkTargetHostInterfaceInfo::Init()
|
|||||||
|
|
||||||
Setting* setting = new(std::nothrow) StringSettingImpl(kHostnameSetting,
|
Setting* setting = new(std::nothrow) StringSettingImpl(kHostnameSetting,
|
||||||
"Hostname", "");
|
"Hostname", "");
|
||||||
|
BReference<Setting> settingsReference(setting, true);
|
||||||
if (setting == NULL)
|
if (setting == NULL)
|
||||||
return B_NO_MEMORY;
|
return B_NO_MEMORY;
|
||||||
ObjectDeleter<Setting> settingDeleter(setting);
|
|
||||||
if (!fDescription->AddSetting(setting))
|
if (!fDescription->AddSetting(setting))
|
||||||
return B_NO_MEMORY;
|
return B_NO_MEMORY;
|
||||||
|
|
||||||
settingDeleter.Detach();
|
|
||||||
setting = new(std::nothrow) BoundedSettingImpl(kPortSetting, "Port",
|
setting = new(std::nothrow) BoundedSettingImpl(kPortSetting, "Port",
|
||||||
(uint16)1, (uint16)65535, (uint16)8305);
|
(uint16)1, (uint16)65535, (uint16)8305);
|
||||||
if (setting == NULL)
|
if (setting == NULL)
|
||||||
return B_NO_MEMORY;
|
return B_NO_MEMORY;
|
||||||
if (!fDescription->AddSetting(setting)) {
|
|
||||||
delete setting;
|
settingsReference.SetTo(setting, true);
|
||||||
|
if (!fDescription->AddSetting(setting))
|
||||||
return B_NO_MEMORY;
|
return B_NO_MEMORY;
|
||||||
}
|
|
||||||
|
|
||||||
return B_OK;
|
return B_OK;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -73,6 +73,8 @@ TypeHandlerRoster::TypeHandlerRoster()
|
|||||||
|
|
||||||
TypeHandlerRoster::~TypeHandlerRoster()
|
TypeHandlerRoster::~TypeHandlerRoster()
|
||||||
{
|
{
|
||||||
|
for (int32 i = 0; TypeHandler* handler = fTypeHandlers.ItemAt(i); i++)
|
||||||
|
handler->ReleaseReference();
|
||||||
}
|
}
|
||||||
|
|
||||||
/*static*/ TypeHandlerRoster*
|
/*static*/ TypeHandlerRoster*
|
||||||
|
|||||||
@@ -16,7 +16,9 @@
|
|||||||
|
|
||||||
ValueNodeContainer::ValueNodeContainer()
|
ValueNodeContainer::ValueNodeContainer()
|
||||||
:
|
:
|
||||||
fLock("value node container")
|
fLock("value node container"),
|
||||||
|
fChildren(20, false),
|
||||||
|
fListeners(20, false)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -24,6 +26,7 @@ ValueNodeContainer::ValueNodeContainer()
|
|||||||
ValueNodeContainer::~ValueNodeContainer()
|
ValueNodeContainer::~ValueNodeContainer()
|
||||||
{
|
{
|
||||||
RemoveAllChildren();
|
RemoveAllChildren();
|
||||||
|
fListeners.MakeEmpty();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user