Hi all, ,

Pierre-Yves Menguy
I have the exact same problem using GetDataManagerSelection(). I tried cout << selection.size(); many times (always selecting 2 nodes) and the answer changes often :) The program crashes when it's 0 and it "works" when it's 1. I never saw 2, strangely. I'm pretty sure it's a race between two or more threads. The first thread is deleting the user selection and the other thread(s) are reading GetDataManagerSelection() and trying to delete more nodes.

Rostislav Khlebnikov
It doesn't change anything. I forgot to say that the program crashes on line 116
mitk::DataNode::ConstPointer nodeGuard(node);
in void mitk::StandaloneDataStorage::Remove(const mitk::DataNode* node) I thnk Exists() is never called.

Le 2015-01-12 14:27, Pierre-Yves Menguy a écrit :
Hello,
I can't test anything at the moment, but when the event is thrown, can you request for "this->GetDataManagerSelection();" ?
It is available in the main plugin class, inheriting QmitkAbstractView.
Doing so, you'll be able to check if children nodes are also selected.


Best regards,

Pierre-Yves Menguy.

Le 2015-01-12 14:30, Rostislav Khlebnikov a écrit :
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 January 2015 at 20:18, Nil Goyette <[email protected] <mailto:[email protected]>> 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 <http://www.gigenet.com>
    _______________________________________________
    mitk-users mailing list
    [email protected]
    <mailto:[email protected]>
    https://lists.sourceforge.net/lists/listinfo/mitk-users




--
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

Reply via email to