webservices/wsfragment/src/rsendocument.cpp
changeset 29 5743aa3a72c3
parent 28 0802db42e4e9
--- a/webservices/wsfragment/src/rsendocument.cpp	Sun May 30 23:54:06 2010 +0530
+++ b/webservices/wsfragment/src/rsendocument.cpp	Thu Jul 08 14:00:07 2010 +0530
@@ -59,12 +59,17 @@
     RXmlEngDocument doc;
     doc.OpenL(domImpl);
     RSenDocument document;
+    CleanupClosePushL(document);
+	document.ipData =  NULL;
+	document.iInternal = NULL;
     document.ipData = new (ELeave) TSenDocumentData;
     document.iInternal =
         (reinterpret_cast<RSenDocument*>(const_cast<RXmlEngDocument*>(&doc)))->iInternal;
     document.ipData->iInternal = document.iInternal;
+	document.ipData->ipOpenDocuments = NULL;
     document.ipData->ipOpenDocuments = new (ELeave) TInt(1);
     document.ipData->iDomImpl = domImpl;
+    CleanupStack::Pop();
     TCleanupItem cleanup(CleanupRSenDocument, document.ipData);
     CleanupStack::PushL(cleanup);
     return document;
@@ -89,12 +94,17 @@
     RXmlEngDocument doc;
     doc.OpenL(domImpl, aInternal);
     RSenDocument document;
+    CleanupClosePushL(document);
+	document.ipData =  NULL;
+	document.iInternal = NULL;	 
     document.ipData = new (ELeave) TSenDocumentData;
     document.iInternal =
         (reinterpret_cast<RSenDocument*>(const_cast<RXmlEngDocument*>(&doc)))->iInternal;
     document.ipData->iInternal = document.iInternal;
+	document.ipData->ipOpenDocuments = NULL;	
     document.ipData->ipOpenDocuments = new (ELeave) TInt(1);
     document.ipData->iDomImpl = domImpl;
+     CleanupStack::Pop();
     TCleanupItem cleanup(CleanupRSenDocument, document.ipData);
     CleanupStack::PushL(cleanup);
     return document;
@@ -108,26 +118,28 @@
 
 EXPORT_C void RSenDocument::Close()
     {
-    *ipData->ipOpenDocuments = *ipData->ipOpenDocuments - 1;
-    if ( !*ipData->ipOpenDocuments )
-        {
-        RXmlEngDOMImplementation domImpl = ipData->iDomImpl;
-        iInternal = ipData->iInternal;
-        delete ipData->ipOpenDocuments;
-        delete ipData;
-        RXmlEngDocument::Close();
-        domImpl.Close();
-    	TBool* pDisabled = (TBool*)Dll::Tls();
-    	if ( !pDisabled )
-    	    {
-            XmlEngineCleanup();
-    	    }
-        }
-    else
-        {
-        iInternal = NULL;
-        }
-       
+	if(ipData && ipData->ipOpenDocuments)
+		{
+	    *ipData->ipOpenDocuments = *ipData->ipOpenDocuments - 1;
+	    if ( !*ipData->ipOpenDocuments )
+	        {
+	        RXmlEngDOMImplementation domImpl = ipData->iDomImpl;
+	        iInternal = ipData->iInternal;
+	        delete ipData->ipOpenDocuments;
+	        delete ipData;
+	        RXmlEngDocument::Close();
+	        domImpl.Close();
+	    	TBool* pDisabled = (TBool*)Dll::Tls();
+	    	if ( !pDisabled )
+	    	    {
+	            XmlEngineCleanup();
+	    	    }
+	        }
+	    else
+	        {
+	        iInternal = NULL;
+	        }
+       }
     }
 
 EXPORT_C void RSenDocument::Destroy()