Yet another AccessViolation in DataObjectImpl::~DataObjectImpl
--------------------------------------------------------------

                 Key: TUSCANY-1203
                 URL: https://issues.apache.org/jira/browse/TUSCANY-1203
             Project: Tuscany
          Issue Type: Bug
          Components: C++ SDO
    Affects Versions: Cpp-current
         Environment: PHP 
            Reporter: Caroline Maynard


This one occurs when deleting a DataObject which has several open properties. 
The logic in the destructor is: 

  while (i != PropertyValues.end()) 
        {
            unsigned int pindx = (*i).first;
            DataObjectImplPtr dol = (*i).second;

            unset(pindx);
            i = PropertyValues.begin();
            if (i != PropertyValues.end() && (*i).first == pindx )
            {
                // unset has not removed the item from the list - do it 
                // here instead
                PropertyValues.erase(i);
                i = PropertyValues.begin();
            }
        }

However what happens in the unset() method is that if the property is open, 
undefineProperty() is called. This removes the open property and "shuffles up" 
the rest, so that a different property is assigned the property index pindx. 
Which means that even though the unset has removed the item from the list, the 
test (*).first==pindx  passes, which results in the next property being removed 
from the list even though it has not yet been unset. 

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to