You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by ro...@apache.org on 2006/10/11 00:39:43 UTC
svn commit: r462618 - in /incubator/tuscany/cpp/sca/runtime:
core/src/tuscany/sca/core/ extensions/php/src/tuscany/sca/php/
extensions/python/src/tuscany/sca/python/
extensions/ruby/src/tuscany/sca/ruby/
extensions/ws/reference/axis2c/src/tuscany/sca/w...
Author: robbinspg
Date: Tue Oct 10 15:39:42 2006
New Revision: 462618
URL: http://svn.apache.org/viewvc?view=rev&rev=462618
Log:
TUSCANY-816 - revised fix
This fix ensures a DataObjectPtr as a parameter or return value is released in the Operation destructor.
Modified:
incubator/tuscany/cpp/sca/runtime/core/src/tuscany/sca/core/Operation.cpp
incubator/tuscany/cpp/sca/runtime/core/src/tuscany/sca/core/Operation.h
incubator/tuscany/cpp/sca/runtime/extensions/php/src/tuscany/sca/php/PHPServiceWrapper.cpp
incubator/tuscany/cpp/sca/runtime/extensions/python/src/tuscany/sca/python/PythonServiceWrapper.cpp
incubator/tuscany/cpp/sca/runtime/extensions/ruby/src/tuscany/sca/ruby/RubyServiceProxy.cpp
incubator/tuscany/cpp/sca/runtime/extensions/ruby/src/tuscany/sca/ruby/RubyServiceWrapper.cpp
incubator/tuscany/cpp/sca/runtime/extensions/ws/reference/axis2c/src/tuscany/sca/ws/Axis2Client.cpp
incubator/tuscany/cpp/sca/runtime/extensions/ws/service/axis2c/src/tuscany/sca/ws/WSServiceProxy.cpp
Modified: incubator/tuscany/cpp/sca/runtime/core/src/tuscany/sca/core/Operation.cpp
URL: http://svn.apache.org/viewvc/incubator/tuscany/cpp/sca/runtime/core/src/tuscany/sca/core/Operation.cpp?view=diff&rev=462618&r1=462617&r2=462618
==============================================================================
--- incubator/tuscany/cpp/sca/runtime/core/src/tuscany/sca/core/Operation.cpp (original)
+++ incubator/tuscany/cpp/sca/runtime/core/src/tuscany/sca/core/Operation.cpp Tue Oct 10 15:39:42 2006
@@ -51,14 +51,91 @@
Operation::~Operation()
{
LOGENTRY(1,"Operation::destructor");
+ clean();
LOGEXIT(1,"Operation::destructor");
}
+
+ // ==========
+ // Copy Constructor
+ // ==========
+ Operation::Operation(const Operation& op)
+ {
+ LOGENTRY(1,"Operation::copy contructor");
+ copy(op);
+ LOGEXIT(1,"Operation::copy contructor");
+ }
+
+ // ==========
+ // operator=
+ // ==========
+ Operation& Operation::operator=(const Operation& op)
+ {
+ LOGENTRY(1,"Operation::operator=");
+ if (&op != this)
+ {
+ copy(op);
+ }
+ LOGEXIT(1,"Operation::operator=");
+ return *this;
+ }
+
+ // ==========
+ // Clean
+ // ==========
+ void Operation::clean()
+ {
+ LOGENTRY(1,"Operation::clean");
+ for (unsigned int i = 0; i < getNParms(); i++)
+ {
+ const Parameter& parm = getParameter(i);
+ if (parm.getType() == DATAOBJECT)
+ {
+ delete (DataObjectPtr*)parm.getValue();
+ }
+ }
+
+ parameters.empty();
+
+ if (getReturnType() == DATAOBJECT)
+ {
+ delete (DataObjectPtr*)getReturnValue();
+ }
+
+ LOGEXIT(1,"Operation::clean");
+ }
+ // ==========
+ // Copy
+ // ==========
+ void Operation::copy(const Operation& op)
+ {
+ LOGENTRY(1,"Operation::copy");
+ clean();
+ for (unsigned int i = 0; i < op.getNParms(); i++)
+ {
+ const Parameter& parm = op.getParameter(i);
+ if (parm.getType() == DATAOBJECT)
+ {
+ addParameter((const DataObject*)parm.getValue());
+ }
+ else
+ {
+ parameters.insert(parameters.end(), parm);
+ }
+ }
+
+ if (getReturnType() == DATAOBJECT)
+ {
+ setReturnValue((const DataObjectPtr*)op.getReturnValue());
+ }
+
+ LOGEXIT(1,"Operation::copy");
+ }
// ==============================================
// getParameter: return parameter at position pos
// ==============================================
- void* Operation::getParameterValue(unsigned int pos)
+ void* Operation::getParameterValue(unsigned int pos) const
{
if (pos < parameters.size())
{
@@ -71,7 +148,7 @@
// ==============================================
// getParameter: return of parameter
// ==============================================
- Operation::Parameter& Operation::getParameter(unsigned int pos)
+ const Operation::Parameter& Operation::getParameter(unsigned int pos) const
{
if (pos < parameters.size())
{
@@ -85,7 +162,7 @@
// ==============================================
// getParameterType: return type of parameter
// ==============================================
- Operation::ParameterType Operation::getParameterType(unsigned int pos)
+ Operation::ParameterType Operation::getParameterType(unsigned int pos) const
{
if (pos < parameters.size())
{
@@ -185,7 +262,7 @@
void Operation::addParameter(const DataObjectPtr *parm)
{
LOGINFO(4, "Operation::addParameter(DataObjectPtr)");
- parameters.insert(parameters.end(), Parameter((void*)parm, DATAOBJECT));
+ parameters.insert(parameters.end(), Parameter((void*)new DataObjectPtr(*parm), DATAOBJECT));
}
Operation::Parameter::Parameter(void* val, Operation::ParameterType typ)
@@ -283,7 +360,7 @@
void Operation::setReturnValue(const DataObjectPtr *parm)
{
LOGINFO(4, "Operation::setReturnValue(DataObjectPtr*)");
- returnValue = Parameter((void*)parm, DATAOBJECT);
+ returnValue = Parameter((void*)new DataObjectPtr(*parm), DATAOBJECT);
}
Modified: incubator/tuscany/cpp/sca/runtime/core/src/tuscany/sca/core/Operation.h
URL: http://svn.apache.org/viewvc/incubator/tuscany/cpp/sca/runtime/core/src/tuscany/sca/core/Operation.h?view=diff&rev=462618&r1=462617&r2=462618
==============================================================================
--- incubator/tuscany/cpp/sca/runtime/core/src/tuscany/sca/core/Operation.h (original)
+++ incubator/tuscany/cpp/sca/runtime/core/src/tuscany/sca/core/Operation.h Tue Oct 10 15:39:42 2006
@@ -55,10 +55,20 @@
SCA_API virtual ~Operation();
/**
+ * Copy constructor.
+ */
+ SCA_API Operation(const Operation& op);
+
+ /**
+ * Assignment operator.
+ */
+ SCA_API Operation& operator=(const Operation& op);
+
+ /**
* Return the operation name.
* @return The name of the operation.
*/
- SCA_API const string& getName() {return name;}
+ SCA_API const string& getName() const {return name;}
enum ParameterType
@@ -85,8 +95,8 @@
{
public:
SCA_API Parameter(void* value = NULL, ParameterType type = VOID_TYPE);
- SCA_API void* getValue() {return value;}
- SCA_API ParameterType getType() {return type;}
+ SCA_API void* getValue() const {return value;}
+ SCA_API ParameterType getType() const {return type;}
private:
void* value;
@@ -134,7 +144,7 @@
SCA_API void addParameter(const string *parm);
SCA_API void addParameter(const DataObjectPtr *parm);
- SCA_API unsigned int getNParms() {return parameters.size();}
+ SCA_API unsigned int getNParms() const {return parameters.size();}
/**
* Get a parameter from the operation.
@@ -142,7 +152,7 @@
* @return Pointer to the paramter at the given postion. Should be
* cast to the appropriate type.
*/
- SCA_API Parameter& getParameter(unsigned int pos);
+ SCA_API const Parameter& getParameter(unsigned int pos) const;
/**
* Get a parameter type from the operation.
@@ -150,7 +160,7 @@
* @return Pointer to the paramter at the given postion. Should be
* cast to the appropriate type.
*/
- SCA_API ParameterType getParameterType(unsigned int pos);
+ SCA_API ParameterType getParameterType(unsigned int pos) const;
/**
* Get a parameter from the operation.
@@ -158,10 +168,10 @@
* @return Pointer to the paramter at the given postion. Should be
* cast to the appropriate type.
*/
- SCA_API void* getParameterValue(unsigned int pos);
+ SCA_API void* getParameterValue(unsigned int pos) const;
- SCA_API ParameterType getReturnType() {return returnValue.getType();}
- SCA_API void* getReturnValue() {return returnValue.getValue();}
+ SCA_API ParameterType getReturnType() const {return returnValue.getType();}
+ SCA_API void* getReturnValue() const {return returnValue.getValue();}
private:
/**
@@ -177,6 +187,9 @@
PARAMETER_VECTOR parameters;
Parameter returnValue;
+
+ void clean();
+ void copy(const Operation& op);
};
} // End namespace sca
Modified: incubator/tuscany/cpp/sca/runtime/extensions/php/src/tuscany/sca/php/PHPServiceWrapper.cpp
URL: http://svn.apache.org/viewvc/incubator/tuscany/cpp/sca/runtime/extensions/php/src/tuscany/sca/php/PHPServiceWrapper.cpp?view=diff&rev=462618&r1=462617&r2=462618
==============================================================================
--- incubator/tuscany/cpp/sca/runtime/extensions/php/src/tuscany/sca/php/PHPServiceWrapper.cpp (original)
+++ incubator/tuscany/cpp/sca/runtime/extensions/php/src/tuscany/sca/php/PHPServiceWrapper.cpp Tue Oct 10 15:39:42 2006
@@ -179,7 +179,7 @@
// add the parameters to the call
for(unsigned int i = 0; i < operation.getNParms(); i++)
{
- Operation::Parameter& parm = operation.getParameter(i);
+ const Operation::Parameter& parm = operation.getParameter(i);
switch(parm.getType())
{
case Operation::BOOL:
Modified: incubator/tuscany/cpp/sca/runtime/extensions/python/src/tuscany/sca/python/PythonServiceWrapper.cpp
URL: http://svn.apache.org/viewvc/incubator/tuscany/cpp/sca/runtime/extensions/python/src/tuscany/sca/python/PythonServiceWrapper.cpp?view=diff&rev=462618&r1=462617&r2=462618
==============================================================================
--- incubator/tuscany/cpp/sca/runtime/extensions/python/src/tuscany/sca/python/PythonServiceWrapper.cpp (original)
+++ incubator/tuscany/cpp/sca/runtime/extensions/python/src/tuscany/sca/python/PythonServiceWrapper.cpp Tue Oct 10 15:39:42 2006
@@ -304,7 +304,7 @@
for(unsigned int i = 0; i < operation.getNParms(); i++)
{
- Operation::Parameter& parm = operation.getParameter(i);
+ const Operation::Parameter& parm = operation.getParameter(i);
switch(parm.getType())
{
case Operation::BOOL:
Modified: incubator/tuscany/cpp/sca/runtime/extensions/ruby/src/tuscany/sca/ruby/RubyServiceProxy.cpp
URL: http://svn.apache.org/viewvc/incubator/tuscany/cpp/sca/runtime/extensions/ruby/src/tuscany/sca/ruby/RubyServiceProxy.cpp?view=diff&rev=462618&r1=462617&r2=462618
==============================================================================
--- incubator/tuscany/cpp/sca/runtime/extensions/ruby/src/tuscany/sca/ruby/RubyServiceProxy.cpp (original)
+++ incubator/tuscany/cpp/sca/runtime/extensions/ruby/src/tuscany/sca/ruby/RubyServiceProxy.cpp Tue Oct 10 15:39:42 2006
@@ -227,14 +227,14 @@
commonj::sdo::XMLHelper* xmlHelper = composite->getXMLHelper();
commonj::sdo::XMLDocumentPtr xmlDoc = xmlHelper->load(str.c_str());
- DataObjectPtr* dob = new DataObjectPtr;
+ DataObjectPtr dob;
if (xmlDoc != NULL)
{
- *dob = xmlDoc->getRootDataObject();
+ dob = xmlDoc->getRootDataObject();
}
- if (*dob != NULL)
+ if (dob != NULL)
{
- operation.addParameter(dob);
+ operation.addParameter(&dob);
}
else
{
Modified: incubator/tuscany/cpp/sca/runtime/extensions/ruby/src/tuscany/sca/ruby/RubyServiceWrapper.cpp
URL: http://svn.apache.org/viewvc/incubator/tuscany/cpp/sca/runtime/extensions/ruby/src/tuscany/sca/ruby/RubyServiceWrapper.cpp?view=diff&rev=462618&r1=462617&r2=462618
==============================================================================
--- incubator/tuscany/cpp/sca/runtime/extensions/ruby/src/tuscany/sca/ruby/RubyServiceWrapper.cpp (original)
+++ incubator/tuscany/cpp/sca/runtime/extensions/ruby/src/tuscany/sca/ruby/RubyServiceWrapper.cpp Tue Oct 10 15:39:42 2006
@@ -146,7 +146,7 @@
{
VALUE value;
- Operation::Parameter& parm = operation.getParameter(i);
+ const Operation::Parameter& parm = operation.getParameter(i);
Operation::ParameterType parmType = parm.getType();
switch(parmType)
{
@@ -678,15 +678,15 @@
Composite* composite = component->getComposite();
commonj::sdo::XMLHelper* xmlHelper = composite->getXMLHelper();
commonj::sdo::XMLDocumentPtr xmlDoc = xmlHelper->load(str.c_str());
-
- DataObjectPtr* dob = new DataObjectPtr;
+
+ DataObjectPtr dob;
if (xmlDoc != NULL)
{
- *dob = xmlDoc->getRootDataObject();
+ dob = xmlDoc->getRootDataObject();
}
- if (*dob != NULL)
+ if (dob != NULL)
{
- operation.setReturnValue(dob);
+ operation.setReturnValue(&dob);
}
else
{
Modified: incubator/tuscany/cpp/sca/runtime/extensions/ws/reference/axis2c/src/tuscany/sca/ws/Axis2Client.cpp
URL: http://svn.apache.org/viewvc/incubator/tuscany/cpp/sca/runtime/extensions/ws/reference/axis2c/src/tuscany/sca/ws/Axis2Client.cpp?view=diff&rev=462618&r1=462617&r2=462618
==============================================================================
--- incubator/tuscany/cpp/sca/runtime/extensions/ws/reference/axis2c/src/tuscany/sca/ws/Axis2Client.cpp (original)
+++ incubator/tuscany/cpp/sca/runtime/extensions/ws/reference/axis2c/src/tuscany/sca/ws/Axis2Client.cpp Tue Oct 10 15:39:42 2006
@@ -308,7 +308,7 @@
pname << "param" << (i+1);
DataObjectList& l = inputDataObject->getList(pname.str());
- Operation::Parameter& parm = operation.getParameter(i);
+ const Operation::Parameter& parm = operation.getParameter(i);
switch(parm.getType())
{
case Operation::BOOL:
@@ -386,7 +386,7 @@
// Each parameter in the operation should be a property on the request dataobject
for (int i=0; i<operation.getNParms(); i++)
{
- Operation::Parameter& parm = operation.getParameter(i);
+ const Operation::Parameter& parm = operation.getParameter(i);
switch(parm.getType())
{
case Operation::BOOL:
@@ -614,13 +614,12 @@
break;
case Type::DataObjectType:
{
- DataObjectPtr* dataObjectData = new DataObjectPtr;
- *dataObjectData = outputDataObject->getDataObject(pl[i]);
+ DataObjectPtr dataObjectData = outputDataObject->getDataObject(pl[i]);
if(!dataObjectData)
{
LOGINFO(4, "SDO DataObject return value was null");
}
- operation.setReturnValue(dataObjectData);
+ operation.setReturnValue(&dataObjectData);
}
break;
case Type::OpenDataObjectType:
@@ -636,9 +635,7 @@
DataObjectPtr dataObjectData = dataObjectList[j];
if(!dataObjectData)
{
- DataObjectPtr* dob = new DataObjectPtr;
- *dob = NULL;
- operation.setReturnValue(dob);
+ operation.setReturnValue(&dataObjectData);
LOGINFO(4, "SDO OpenDataObject return value was null");
}
else
@@ -656,13 +653,12 @@
else
{
// Return a DataObject representing a complex element
- DataObjectPtr* dob = new DataObjectPtr;
- *dob = sequence->getDataObjectValue(0);
- if(!*dob)
+ DataObjectPtr dob = sequence->getDataObjectValue(0);
+ if(!dob)
{
LOGINFO(4, "SDO DataObject return value was null");
}
- operation.setReturnValue(dob);
+ operation.setReturnValue(&dob);
}
}
else
Modified: incubator/tuscany/cpp/sca/runtime/extensions/ws/service/axis2c/src/tuscany/sca/ws/WSServiceProxy.cpp
URL: http://svn.apache.org/viewvc/incubator/tuscany/cpp/sca/runtime/extensions/ws/service/axis2c/src/tuscany/sca/ws/WSServiceProxy.cpp?view=diff&rev=462618&r1=462617&r2=462618
==============================================================================
--- incubator/tuscany/cpp/sca/runtime/extensions/ws/service/axis2c/src/tuscany/sca/ws/WSServiceProxy.cpp (original)
+++ incubator/tuscany/cpp/sca/runtime/extensions/ws/service/axis2c/src/tuscany/sca/ws/WSServiceProxy.cpp Tue Oct 10 15:39:42 2006
@@ -233,14 +233,12 @@
break;
case Type::DataObjectType:
{
- DataObjectPtr* dataObjectData = new DataObjectPtr;
- *dataObjectData = inputDataObject->getDataObject(pl[i]);
-
+ DataObjectPtr dataObjectData = inputDataObject->getDataObject(pl[i]);
if(!dataObjectData)
{
LOGINFO_1(4, "SDO DataObject parameter named %s was null", name);
}
- operation.addParameter(dataObjectData);
+ operation.addParameter(&dataObjectData);
}
break;
case Type::OpenDataObjectType:
@@ -261,9 +259,7 @@
// Add a null DataObject ptr
LOGINFO_2(4, "SDO OpenDataObject parameter named %s[%d] was null", name, j);
- DataObjectPtr* dob = new DataObjectPtr;
- *dob = NULL;
- operation.addParameter(dob);
+ operation.addParameter(&dataObjectData);
}
else
{
@@ -280,13 +276,12 @@
else
{
// Add a complex element DataObject
- DataObjectPtr* dob = new DataObjectPtr;
- *dob = sequence->getDataObjectValue(0);
- if(!*dob)
+ DataObjectPtr dob = sequence->getDataObjectValue(0);
+ if(!dob)
{
LOGINFO_1(4, "SDO DataObject parameter named %s was null", name);
}
- operation.addParameter(dob);
+ operation.addParameter(&dob);
}
}
else
---------------------------------------------------------------------
To unsubscribe, e-mail: tuscany-commits-unsubscribe@ws.apache.org
For additional commands, e-mail: tuscany-commits-help@ws.apache.org