Correction to previous leak fix.
- The actual reason the hidden node wasn't being released as expected was that ContainerListener::ModelNodeHidden() added a reference on behalf of its indirect target, while the latter never actually took ownership of said reference.
This commit is contained in:
@@ -1036,7 +1036,7 @@ VariablesView::VariableTableModel::ValueNodeChildrenDeleted(ValueNode* node)
|
|||||||
BReference<ModelNode> hiddenChild;
|
BReference<ModelNode> hiddenChild;
|
||||||
if (modelNode->CountChildren() == 1
|
if (modelNode->CountChildren() == 1
|
||||||
&& modelNode->ChildAt(0)->IsHidden()) {
|
&& modelNode->ChildAt(0)->IsHidden()) {
|
||||||
hiddenChild.SetTo(modelNode->ChildAt(0), true);
|
hiddenChild.SetTo(modelNode->ChildAt(0));
|
||||||
modelNode->RemoveChild(hiddenChild);
|
modelNode->RemoveChild(hiddenChild);
|
||||||
modelNode = hiddenChild;
|
modelNode = hiddenChild;
|
||||||
fNodeTable.Remove(hiddenChild);
|
fNodeTable.Remove(hiddenChild);
|
||||||
@@ -1788,8 +1788,10 @@ VariablesView::MessageReceived(BMessage* message)
|
|||||||
case MSG_MODEL_NODE_HIDDEN:
|
case MSG_MODEL_NODE_HIDDEN:
|
||||||
{
|
{
|
||||||
ModelNode* node;
|
ModelNode* node;
|
||||||
if (message->FindPointer("node", (void**)&node) == B_OK)
|
if (message->FindPointer("node", (void**)&node) == B_OK) {
|
||||||
|
BReference<ModelNode> modelNodeReference(node, true);
|
||||||
_RequestNodeValue(node);
|
_RequestNodeValue(node);
|
||||||
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user