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]

Reply via email to