Hi Nil,

I have the following changes to mitkStandaloneDataStorage.cpp (from line 128):

bool mitk::StandaloneDataStorage::Exists(const mitk::DataNode* node) const
{
  itk::MutexLockHolder<itk::SimpleFastMutexLock> locked(m_Mutex);

  // Avoid creating smart pointer which would lead to crash
  // return (m_SourceNodes.find(node) != m_SourceNodes.end());

for (AdjacencyList::const_iterator iter = m_SourceNodes.begin(); iter != m_SourceNodes.end(); ++iter) {
      if (iter->first.GetPointer() == node) {
          return true;
      }
  }
  return false;
}

Likely this is the crash you experience - and this was the way I fixed it in my fork of MITK (at least I think so as the commit was done quite some time ago - in May - and the commit message is: "Avoid creating smart pointer when the node might have been deleted." :)).

Rostislav.


On 12/01/2015 19:18, Nil Goyette wrote:
Hi all,

I have at least two nodes (I have drawn more, but I can reproduce the bug with 2 nodes)
- Node1
--- Node2  (child of Node1)
--- Node3
----- Node4
----- Node5
- Some other nodes

When the user deletes Node1, I want to delete all children nodes (2, 3, 4, 5). To do so, I use NodeDeleted(), I ask the DataStorage for all derivative nodes of the deleted node and delete them all. A problem arises when the user highlights all nodes and delete them. Some nodes are deleted more then one time. Of course, there are conditions in mitk and in my own code that check if the node is null, but it still fails about half of the time. Since the NodeRemoved() event is thrown *before* the actual deletion, the null/exists checks are useless.

I'm probably not the first that want to delete all the children of a node. I feel that this should be simple. Is there a feature to do it that I'm not aware of?

--
Logo Imeka <http://imeka.ca/>     Nil Goyette, M.Sc.
www.imeka.ca <http://imeka.ca/>



------------------------------------------------------------------------------
New Year. New Location. New Benefits. New Data Center in Ashburn, VA.
GigeNET is offering a free month of service with a new server in Ashburn.
Choose from 2 high performing configs, both with 100TB of bandwidth.
Higher redundancy.Lower latency.Increased capacity.Completely compliant.
www.gigenet.com


_______________________________________________
mitk-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/mitk-users

------------------------------------------------------------------------------
New Year. New Location. New Benefits. New Data Center in Ashburn, VA.
GigeNET is offering a free month of service with a new server in Ashburn.
Choose from 2 high performing configs, both with 100TB of bandwidth.
Higher redundancy.Lower latency.Increased capacity.Completely compliant.
www.gigenet.com
_______________________________________________
mitk-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/mitk-users

Reply via email to