You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tuscany.apache.org by "Yuling Zhang (JIRA)" <de...@tuscany.apache.org> on 2008/12/15 08:49:44 UTC
[jira] Updated: (TUSCANY-2749) Some methods do not support
multi-thread.
[ https://issues.apache.org/jira/browse/TUSCANY-2749?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Yuling Zhang updated TUSCANY-2749:
----------------------------------
Attachment: SAX2Parser.cpp
Only stream_twice method is changed. I t uses another method of libxml2 to parse the xsd character string.
> Some methods do not support multi-thread.
> -----------------------------------------
>
> Key: TUSCANY-2749
> URL: https://issues.apache.org/jira/browse/TUSCANY-2749
> Project: Tuscany
> Issue Type: Bug
> Components: C++ SDO
> Affects Versions: Cpp-M3
> Environment: Windows XP
> Visual C++6.0
> CPP-tuscany_sdo-M3
> libxml2-2.7.2
> iconv-1.7.2
> zlib-1.2.3
> boost-1.33.1
> Reporter: Yuling Zhang
> Fix For: Cpp-Next
>
> Attachments: SAX2Parser.cpp
>
> Original Estimate: 168h
> Remaining Estimate: 168h
>
> The methods object-serializing/object-antiserializing related will get failed in multi-threaded envoriment.
> They are as followed:
> //used when antiserializing a SDO object from a character string
> const char* XSDHelperImpl::define(const char* schema, bool loadImportNamespace= "")
> //used when serializing a SDO object into a character string
> char* XMLHelperImpl::save(
> DataObjectPtr dataObject,
> const char* rootElementURI,
> const char* rootElementName,
> int indent= -1)
> // used when serializing a SDO object into a xml file
> void XMLHelperImpl::save(
> DataObjectPtr dataObject,
> const char* rootElementURI,
> const char* rootElementName,
> const char* xmlFile,
> int indent = -1)
> //used when get a SOD object's shcema character string
> char* XSDHelperImpl::generate(
> const TypeList& types,
> const char* targetNamespaceURI = "",
> int indent = -1)
> //used when get a SDO object's schema file
> void XSDHelperImpl::generateFile(
> const TypeList& types,
> const char* fileName,
> const char* targetNamespaceURI = "",
> int indent = -1)
> (The multi-thread lib used to test these methods is boost-1.33.1.)
> All of them are successed in the first thread but get failed from the second thread.
> The exceptions are catched by "catch(...)" not by "catch (SDORuntimeException e)".
> Because only one method is successed in multi-threaded envoriment that serializs a SDO object from a file(it is defineFile from XSDHelperImpl), I made a comparision of it with the unsafe methods listed above. I find the reason of these mehtods getting failed in multi-threaeded envoriment is that they call some operations from libxml2 which are multi-thread unsafe. In the patch provided I changed the implemention of stream_twice method from SAX2Parser which is called by define method from XSDHelperImpl.The changement is mainly the replacment of unsafe method of libxml2 with a safe one. For the rest of the methods above, I do not find corresponding safe methods to replace the unsafe ones, so they still remain unresolved.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.