Author: jsdelfino
Date: Wed Nov 29 09:28:37 2006
New Revision: 480639
URL: http://svn.apache.org/viewvc?view=rev&rev=480639
Log:
Fixed bug where we were setting into an Operation pointer to local variables on
the stack, causing memory violations. Added calls to detach() to detach
DataObjects deserialized from a SOAP payload from their container before adding
setting them on the Operation.
Modified:
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/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=480639&r1=480638&r2=480639
==============================================================================
---
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
Wed Nov 29 09:28:37 2006
@@ -576,9 +576,10 @@
{
loginfo("Null DataObject return value");
}
-
- // Detach from it's container as sequence will
go out of scope
- (*dataObjectData)->detach();
+ else
+ {
+ (*dataObjectData)->detach();
+ }
operation.setReturnValue(dataObjectData);
}
}
@@ -673,8 +674,10 @@
{
loginfo("Null DataObject return value");
}
- // Detach from it's container as outputDataObject
will go out of scope
- (*dataObjectData)->detach();
+ else
+ {
+ (*dataObjectData)->detach();
+ }
operation.setReturnValue(dataObjectData);
}
break;
@@ -717,8 +720,10 @@
{
loginfo("Null DataObject
return value");
}
- // Detach from it's container as
sequence will go out of scope
- (*dataObjectData)->detach();
+ else
+ {
+ (*dataObjectData)->detach();
+ }
operation.setReturnValue(dataObjectData);
}
}
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=480639&r1=480638&r2=480639
==============================================================================
---
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
Wed Nov 29 09:28:37 2006
@@ -163,18 +163,19 @@
case Type::BytesType:
{
int len = inputDataObject->getLength(pl[i]);
- char* bytesData = new char[len+1];
- int bytesWritten =
inputDataObject->getBytes(pl[i], bytesData, len);
+ char** bytesData = new char*;
+ *bytesData = new char[len+1];
+ int bytesWritten =
inputDataObject->getBytes(pl[i], *bytesData, len);
// Ensure the bytes end with the null char.
Not sure if this is neccessary
if(bytesWritten <= len)
{
- bytesData[bytesWritten] = 0;
+ (*bytesData)[bytesWritten] = 0;
}
else
{
- bytesData[len] = 0;
+ (*bytesData)[len] = 0;
}
- operation.addParameter(&bytesData);
+ operation.addParameter(bytesData);
}
break;
case Type::CharacterType:
@@ -230,12 +231,17 @@
break;
case Type::DataObjectType:
{
- DataObjectPtr dataObjectData =
inputDataObject->getDataObject(pl[i]);
- if(!dataObjectData)
+ DataObjectPtr* dataObjectData = new
DataObjectPtr;
+ *dataObjectData =
inputDataObject->getDataObject(pl[i]);
+ if(!*dataObjectData)
{
loginfo("Null DataObject parameter named
%s", name);
}
- operation.addParameter(&dataObjectData);
+ else
+ {
+ (*dataObjectData)->detach();
+ }
+ operation.addParameter(dataObjectData);
}
break;
case Type::OpenDataObjectType:
@@ -249,18 +255,20 @@
for(unsigned int j=0; j<dataObjectList.size();
j++)
{
- DataObjectPtr dataObjectData =
dataObjectList[j];
- if(!dataObjectData)
+ DataObjectPtr dob = dataObjectList[j];
+ if(!dob)
{
// Add a null DataObject ptr
+ DataObjectPtr* dataObjectData = new
DataObjectPtr;
+ *dataObjectData = NULL;
loginfo("Null OpenDataObject parameter
named %s[%d]", name, j);
-
operation.addParameter(&dataObjectData);
+ operation.addParameter(dataObjectData);
}
else
{
- SequencePtr sequence =
dataObjectData->getSequence();
+ SequencePtr sequence =
dob->getSequence();
if (sequence->size()!=0)
{
// Add a text element
@@ -272,12 +280,17 @@
else
{
// Add a complex element
DataObject
- DataObjectPtr dob =
sequence->getDataObjectValue(0);
- if(!dob)
+ DataObjectPtr* dataObjectData
= new DataObjectPtr;
+ *dataObjectData =
sequence->getDataObjectValue(0);
+ if(!*dataObjectData)
{
loginfo("Null DataObject
parameter named %s", name);
}
- operation.addParameter(&dob);
+ else
+ {
+
(*dataObjectData)->detach();
+ }
+
operation.addParameter(dataObjectData);
}
}
else
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]