Hi Kandarpa,
On Thu, Dec 29, 2011 at 05:24:15AM +0000, Kandarpa Malipeddi wrote:
> Hi,
>
> Thank you very much for your inputs.
>
> In our use case we are not using
> soffice
> -accept="uno:socket,host=127.0.0.1,port=8100,tcpNoDelay=1;urp,Negotiate=0,ForceSynchronous=0;TheComponentContext"
> Following is the description of our use case in c++ code:
>
> 1. We have Reference<XComponentContext> localContext
> 2. From this localContext we are retrieving the Reference <
> XMultiComponentFactory > as follow:
> Reference < XMultiComponentFactory > localServiceManager =
> localContext->getServiceManager();
> 3. From this localServiceManager we are retriving
> "com.sun.star.bridge.UnoUrlResolver" service as follow:
> Reference < XInterface > urlResolverXInterface =
> localServiceManager->createInstanceWithContext("com.sun.star.bridge.UnoUrlResolver",
> localContext);
> 4. From urlResolverXInterface we are retriving the Reference <
> XUnoUrlResolver > as follow:
> Reference < XUnoUrlResolver >urlResolver(urlResolverXInterface, UNO_QUERY
> );
> 5. Invocation of
> urlResolver->resolve("uno:socket,host=127.0.0.1,port=9999,tcpNoDelay=1;urp,Negotiate=0,ForceSynchronous=0;TheComponentContext");
> method results in crash.
>
> We ensured that all References in the above sequence of steps are valid.
> However invocation of
> urlResolver->resolve("uno:socket,host=127.0.0.1,port=9999,tcpNoDelay=1;urp,Negotiate=0,ForceSynchronous=0;TheComponentContext");
> method results in crash.
>
> We debugged the code and found following:
> During the invocation of "urlResolver->resolve" method control reaches to
> "ooo/main/binaryurp/source/bridgefactory.cxx" file of binaryurp code and in
> "BridgeFactory::createBridge(...)" method of "bridgefactory.cxx" file
> following condition check on line 145 throws exception which causes crash.
>
> Snippet of "ooo/main/binaryurp/source/bridgefactory.cxx" file from line 145
> to 154
> =============================================================
> if (!(sProtocol.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM("urp")) &&
> aConnection.is()))
> {
> throw css::lang::IllegalArgumentException(
> rtl::OUString(
> RTL_CONSTASCII_USTRINGPARAM(
> "BridgeFactory::createBridge: sProtocol != urp ||"
> " aConnection == null")),
> static_cast< cppu::OWeakObject * >(this), -1);
> }
> =============================================================
>
> We hope the above explanation would be helpful to understand the cause of
> crash in our use case.an exception only causes a crash if there is no code that catches it. You should catch the exceptions AOO API interface methods are allowed to throw. I guess your urlResolver->resolve() is not surrounded with a try-catch, and com::sun::star::bridge::XUnoUrlResolver::resolve can trhow three kind of exceptions, among those a com::sun::star::lang::IllegalArgumentException. So the underlying problem is not the crash. Back to the root cause, aConnection.is() evaluates to false; that is, there is no connection; for some reason, a connection cannot be established with the office listening to a socket on the given port. Something maybe obvious, but did you start the office with an -accept=... argument (matching the one you use in XUnoUrlResolver::resolve)? Did you check the office is listening on the specified port? Regards -- Ariel Constenla-Haile La Plata, Argentina
pgpchVXCD4twQ.pgp
Description: PGP signature
