Bugzilla – Attachment 159778 Details for
Bug 115399
Data race in typelib_typedescription_register
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
Example to reproduce my findings
example.diff (text/plain), 26.40 KB, created by
straub
on 2020-04-21 08:58:11 UTC
(
hide
)
Description:
Example to reproduce my findings
Filename:
MIME Type:
Creator:
straub
Created:
2020-04-21 08:58:11 UTC
Size:
26.40 KB
patch
obsolete
>diff --git a/odk/examples/cpp/outstruct/Makefile b/odk/examples/cpp/outstruct/Makefile >new file mode 100644 >index 000000000000..d7fc06b53aa5 >--- /dev/null >+++ b/odk/examples/cpp/outstruct/Makefile >@@ -0,0 +1,175 @@ >+#************************************************************************* >+# >+# The Contents of this file are made available subject to the terms of >+# the BSD license. >+# >+# Copyright 2000, 2010 Oracle and/or its affiliates. >+# All rights reserved. >+# >+# Redistribution and use in source and binary forms, with or without >+# modification, are permitted provided that the following conditions >+# are met: >+# 1. Redistributions of source code must retain the above copyright >+# notice, this list of conditions and the following disclaimer. >+# 2. Redistributions in binary form must reproduce the above copyright >+# notice, this list of conditions and the following disclaimer in the >+# documentation and/or other materials provided with the distribution. >+# 3. Neither the name of Sun Microsystems, Inc. nor the names of its >+# contributors may be used to endorse or promote products derived >+# from this software without specific prior written permission. >+# >+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS >+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT >+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS >+# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE >+# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, >+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, >+# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS >+# OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND >+# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR >+# TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE >+# USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. >+# >+#************************************************************************** >+ >+# Builds the C++ counter example of the SDK. >+ >+PRJ=../../.. >+SETTINGS=$(PRJ)/settings >+ >+include $(SETTINGS)/settings.mk >+include $(SETTINGS)/std.mk >+ >+# Define non-platform/compiler specific settings >+COMP_NAME=outstruct >+COMP_IMPL_NAME=$(COMP_NAME).uno.$(SHAREDLIB_EXT) >+COMP_IMPL=$(SHAREDLIB_OUT)/$(COMP_IMPL_NAME) >+COMP_RDB_NAME = $(COMP_NAME).uno.rdb >+COMP_RDB = $(OUT_BIN)/$(COMP_RDB_NAME) >+OUT_COMP_INC = $(OUT_INC)/$(COMP_NAME) >+OUT_COMP_GEN = $(OUT_MISC)/$(COMP_NAME) >+OUT_COMP_OBJ = $(OUT_OBJ)/$(COMP_NAME) >+OUT_COMP_SLO = $(OUT_SLO)/$(COMP_NAME) >+COMP_SERVICES=$(SHAREDLIB_OUT)/outstructservices.rdb >+ >+ENV_EXAMPLE_TYPES=-env:URE_MORE_TYPES=$(URLPREFIX)$(COMP_RDB) >+ENV_COMP_SERVICES=-env:URE_MORE_SERVICES=$(URLPREFIX)$(COMP_SERVICES) >+ >+COMP_TYPEFLAG = $(OUT_MISC)/cpp_$(COMP_NAME)_types.flag >+ >+IDLFILES = XCountable.idl >+ >+COMPCXXFILES = counter.cxx >+ >+CXXFILES = countermain.cxx >+ >+SLOFILES = $(patsubst %.cxx,$(OUT_COMP_SLO)/%.$(OBJ_EXT),$(COMPCXXFILES)) >+OBJFILES = $(patsubst %.cxx,$(OUT_COMP_SLO)/%.$(OBJ_EXT),$(CXXFILES)) >+ >+GENURDFILES = $(patsubst %.idl,$(OUT_COMP_GEN)/%.urd,$(IDLFILES)) >+ >+TYPESLIST = -Tfoo.XCountable >+ >+# Targets >+.PHONY: ALL >+ALL : \ >+ CppCounterExampleLib >+ >+include $(SETTINGS)/stdtarget.mk >+ >+$(OUT_COMP_GEN)/%.urd : %.idl >+ -$(MKDIR) $(subst /,$(PS),$(@D)) >+ $(IDLC) -I. -I$(IDL_DIR) -O$(OUT_COMP_GEN) $< >+ >+# This example type library will be extended by the URE types >+$(OUT_BIN)/%.rdb : $(GENURDFILES) >+ -$(MKDIR) $(subst /,$(PS),$(@D)) >+ -$(DEL) $(subst \\,\,$(subst /,$(PS),$@)) >+ $(REGMERGE) $@ /UCR $(GENURDFILES) >+# $(REGMERGE) $@ / $(URE_TYPES) >+ >+$(COMP_TYPEFLAG) : $(COMP_RDB) $(SDKTYPEFLAG) >+ -$(MKDIR) $(subst /,$(PS),$(@D)) >+ -$(DEL) $(subst \\,\,$(subst /,$(PS),$(COMP_TYPEFLAG))) >+ $(CPPUMAKER) -Gc -O$(OUT_COMP_INC) $(TYPESLIST) $(COMP_RDB) -X $(URE_TYPES) >+ echo flagged > $@ >+ >+$(OUT_COMP_OBJ)/%.$(OBJ_EXT) : %.cxx $(COMP_TYPEFLAG) >+ -$(MKDIR) $(subst /,$(PS),$(OUT_OBJ)) >+ -$(MKDIR) $(subst /,$(PS),$(@D)) >+ $(CC) $(CC_FLAGS) -g -O0 $(CC_INCLUDES) -I$(OUT_COMP_INC) $(CC_DEFINES) $(CC_OUTPUT_SWITCH)$(subst /,$(PS),$@) $< >+ >+$(OUT_COMP_SLO)/%.$(OBJ_EXT) : %.cxx $(COMP_TYPEFLAG) >+ -$(MKDIR) $(subst /,$(PS),$(OUT_SLO)) >+ -$(MKDIR) $(subst /,$(PS),$(@D)) >+ $(CC) $(CC_FLAGS) -g -O0 $(CC_INCLUDES) -I$(OUT_COMP_INC) $(CC_DEFINES) $(CC_OUTPUT_SWITCH)$(subst /,$(PS),$@) $< >+ >+ifeq "$(OS)" "WIN" >+$(SHAREDLIB_OUT)/%.$(SHAREDLIB_EXT) : $(SLOFILES) >+ -$(MKDIR) $(subst /,$(PS),$(@D)) >+ -$(MKDIR) $(subst /,$(PS),$(OUT_COMP_GEN)) >+ $(LINK) $(COMP_LINK_FLAGS) /OUT:$@ \ >+ /MAP:$(OUT_COMP_GEN)/$(subst $(SHAREDLIB_EXT),map,$(@F)) $(SLOFILES) \ >+ $(CPPUHELPERLIB) $(CPPULIB) $(SALLIB) msvcprt.lib $(LIBO_SDK_LDFLAGS_STDLIBS) >+ $(LINK_MANIFEST) >+else >+$(SHAREDLIB_OUT)/%.$(SHAREDLIB_EXT) : $(SLOFILES) >+ -$(MKDIR) $(subst /,$(PS),$(@D)) >+ $(LINK) $(COMP_LINK_FLAGS) $(LINK_LIBS) -o $@ $(SLOFILES) \ >+ $(CPPUHELPERLIB) $(CPPULIB) $(SALLIB) $(STC++LIB) >+ifeq "$(OS)" "MACOSX" >+ $(INSTALL_NAME_URELIBS) $@ >+endif >+endif >+ >+$(OUT_BIN)/countermain$(EXE_EXT) : $(OUT_COMP_OBJ)/countermain.$(OBJ_EXT) $(SHAREDLIB_OUT)/outstruct.uno.$(SHAREDLIB_EXT) >+ifeq "$(OS)" "WIN" >+ -$(MKDIR) $(subst /,$(PS),$(@D)) >+ $(LINK) $(EXE_LINK_FLAGS) /OUT:$@ /MAP:$(OUT_COMP_GEN)/$(basename $(@F)).map \ >+ $< $(CPPUHELPERLIB) $(CPPULIB) $(SALHELPERLIB) $(SALLIB) >+else >+ -$(MKDIR) $(subst /,$(PS),$(@D)) >+ $(LINK) $(EXE_LINK_FLAGS) $(LINK_LIBS) -o $@ $< \ >+ $(CPPUHELPERLIB) $(CPPULIB) $(SALHELPERLIB) $(SALLIB) $(STDC++LIB) >+endif >+ >+$(COMP_SERVICES) : >+ -$(MKDIR) $(subst /,$(PS),$(@D)) >+ @echo $(OSEP)?xml version="$(QM)1.0$(QM)" encoding="$(QM)UTF-8$(QM)"?$(CSEP) > $@ >+ @echo $(OSEP)components xmlns="$(QM)http://openoffice.org/2010/uno-components$(QM)"$(CSEP) >> $@ >+ @echo $(SQM) $(SQM)$(OSEP)component loader="$(QM)com.sun.star.loader.SharedLibrary$(QM)" uri="$(QM)$(COMP_IMPL_NAME)$(QM)"$(CSEP) >> $@ >+ @echo $(SQM) $(SQM)$(OSEP)implementation name="$(QM)com.sun.star.comp.example.cpp.Counter$(QM)"$(CSEP) >> $@ >+ @echo $(SQM) $(SQM)$(OSEP)service name="$(QM)foo.Counter$(QM)"/$(CSEP) >> $@ >+ @echo $(SQM) $(SQM)$(OSEP)/implementation$(CSEP) >> $@ >+ @echo $(SQM) $(SQM)$(OSEP)/component$(CSEP) >> $@ >+ @echo $(OSEP)/components$(CSEP) >> $@ >+ >+CppCounterExampleLib : $(SHAREDLIB_OUT)/$(COMP_IMPL_NAME) $(COMP_IMPL) $(COMP_SERVICES) >+ >+CppCounterExample : $(OUT_BIN)/countermain$(EXE_EXT) $(COMP_IMPL) $(COMP_SERVICES) >+ @echo -------------------------------------------------------------------------------- >+ @echo Please use the following command to execute the example! >+ @echo - >+ @echo $(MAKE) countermain.run >+ @echo - >+ @echo NOTE: The example makes use of the URE and use the defaultBootstrap_InitialComponentContext method. >+ @echo $(SQM) $(SQM)The additional example IDL types are provided via the UNO environment variable -env:URE_MORE_TYPES=... >+ @echo $(SQM) $(SQM)and the example component is made available via -env:URE_MORE_SERVICES=... >+ @echo $(SQM) $(SQM)Please check the generated $(QM)$(COMP_SERVICES)$(QM) to see how you can specify your own components in such an environment >+ @echo $(SQM) $(SQM)and how to use the passive UNO registration. >+ @echo -------------------------------------------------------------------------------- >+ >+%.run: $(OUT_BIN)/countermain$(EXE_EXT) $(COMP_IMPL) >+ cd $(subst /,$(PS),$(OUT_BIN)) && $(basename $@) $(ENV_EXAMPLE_TYPES) $(ENV_COMP_SERVICES) >+ >+.PHONY: clean >+clean : >+ -$(DELRECURSIVE) $(subst /,$(PS),$(OUT_COMP_INC)) >+ -$(DELRECURSIVE) $(subst /,$(PS),$(OUT_COMP_GEN)) >+ -$(DELRECURSIVE) $(subst /,$(PS),$(OUT_COMP_OBJ)) >+ -$(DELRECURSIVE) $(subst /,$(PS),$(OUT_COMP_SLO)) >+ -$(DEL) $(subst \\,\,$(subst /,$(PS),$(COMP_TYPEFLAG))) >+ -$(DEL) $(subst \\,\,$(subst /,$(PS),$(COMP_RDB))) >+ -$(DEL) $(subst \\,\,$(subst /,$(PS),$(SHAREDLIB_OUT)/$(COMP_NAME).*)) >+ -$(DEL) $(subst \\,\,$(subst /,$(PS),$(OUT_BIN)/countermain*)) >+ -$(DEL) $(subst \\,\,$(subst /,$(PS),$(COMP_SERVICES))) >diff --git a/odk/examples/cpp/outstruct/XCountable.idl b/odk/examples/cpp/outstruct/XCountable.idl >new file mode 100644 >index 000000000000..9283fe2bbff4 >--- /dev/null >+++ b/odk/examples/cpp/outstruct/XCountable.idl >@@ -0,0 +1,58 @@ >+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ >+/************************************************************************* >+ * >+ * The Contents of this file are made available subject to the terms of >+ * the BSD license. >+ * >+ * Copyright 2000, 2010 Oracle and/or its affiliates. >+ * All rights reserved. >+ * >+ * Redistribution and use in source and binary forms, with or without >+ * modification, are permitted provided that the following conditions >+ * are met: >+ * 1. Redistributions of source code must retain the above copyright >+ * notice, this list of conditions and the following disclaimer. >+ * 2. Redistributions in binary form must reproduce the above copyright >+ * notice, this list of conditions and the following disclaimer in the >+ * documentation and/or other materials provided with the distribution. >+ * 3. Neither the name of Sun Microsystems, Inc. nor the names of its >+ * contributors may be used to endorse or promote products derived >+ * from this software without specific prior written permission. >+ * >+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS >+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT >+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS >+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE >+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, >+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, >+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS >+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND >+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR >+ * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE >+ * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. >+ * >+ *************************************************************************/ >+ >+#include <com/sun/star/uno/XInterface.idl> >+ >+module foo >+{ >+ struct XOut >+ { >+ long aLong; >+ type aInterface; >+ }; >+ >+ interface XCountable : com::sun::star::uno::XInterface >+ { >+ any outMethod([in] type aType, [out] XOut outParam); >+ }; >+ >+ service Counter >+ { >+ // exported interfaces: >+ interface XCountable; >+ }; >+}; >+ >+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ >diff --git a/odk/examples/cpp/outstruct/counter.cxx b/odk/examples/cpp/outstruct/counter.cxx >new file mode 100644 >index 000000000000..dc1e85b2d2ba >--- /dev/null >+++ b/odk/examples/cpp/outstruct/counter.cxx >@@ -0,0 +1,188 @@ >+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ >+/************************************************************************* >+ * >+ * The Contents of this file are made available subject to the terms of >+ * the BSD license. >+ * >+ * Copyright 2000, 2010 Oracle and/or its affiliates. >+ * All rights reserved. >+ * >+ * Redistribution and use in source and binary forms, with or without >+ * modification, are permitted provided that the following conditions >+ * are met: >+ * 1. Redistributions of source code must retain the above copyright >+ * notice, this list of conditions and the following disclaimer. >+ * 2. Redistributions in binary form must reproduce the above copyright >+ * notice, this list of conditions and the following disclaimer in the >+ * documentation and/or other materials provided with the distribution. >+ * 3. Neither the name of Sun Microsystems, Inc. nor the names of its >+ * contributors may be used to endorse or promote products derived >+ * from this software without specific prior written permission. >+ * >+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS >+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT >+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS >+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE >+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, >+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, >+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS >+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND >+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR >+ * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE >+ * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. >+ * >+ *************************************************************************/ >+ >+/* >+ * service implementation: foo.Counter >+ * exported interfaces: foo.XCounter >+ * >+ * simple example component implementing a counter >+ */ >+ >+#include <stdio.h> >+#include <rtl/ustring.hxx> >+#include <uno/lbnames.h> >+#include <cppuhelper/queryinterface.hxx> >+#include <cppuhelper/factory.hxx> >+#include <cppuhelper/supportsservice.hxx> >+// generated c++ interfaces >+#include <com/sun/star/lang/XSingleServiceFactory.hpp> >+#include <com/sun/star/lang/XMultiServiceFactory.hpp> >+#include <com/sun/star/lang/XServiceInfo.hpp> >+#include <com/sun/star/registry/XRegistryKey.hpp> >+#include <foo/XCountable.hpp> >+#include <iostream> >+#include <sys/types.h> >+#include <unistd.h> >+ >+#define SERVICENAME "foo.Counter" >+#define IMPLNAME "com.sun.star.comp.example.cpp.Counter" >+using namespace ::std; >+ >+using namespace ::rtl; >+using namespace ::osl; >+using namespace ::cppu; >+using namespace ::com::sun::star::uno; >+using namespace ::com::sun::star::lang; >+using namespace ::com::sun::star::registry; >+using namespace ::foo; >+ >+class MyCounterImpl >+ : public XCountable >+ , public XServiceInfo >+{ >+ // to obtain other services if needed >+ Reference< XMultiServiceFactory > m_xServiceManager; >+ >+ sal_Int32 m_nRefCount; >+ >+ Type mXOutType; >+ >+public: >+ MyCounterImpl( const Reference< XMultiServiceFactory > & xServiceManager ) >+ : m_xServiceManager( xServiceManager ), m_nRefCount( 0 ) >+ { >+ printf("MyCounterImpl: please attach to %d\n", getpid()); >+ >+ mXOutType = ::cppu::UnoType< ::foo::XOut >::get(); >+ } >+ ~MyCounterImpl() >+ { printf( "< MyCounterImpl dtor called >\n" ); } >+ >+ // XInterface implementation >+ virtual void SAL_CALL acquire() throw () >+ { ++m_nRefCount; } >+ virtual void SAL_CALL release() throw () >+ { if (! --m_nRefCount) delete this; } >+ virtual Any SAL_CALL queryInterface( const Type & rType ) throw (RuntimeException) >+ { return cppu::queryInterface(rType, >+ static_cast< XInterface* >( static_cast< XServiceInfo* >( this ) ), >+ static_cast< XCountable* >( this ), static_cast< XServiceInfo* >( this ) ); } >+ >+ // XServiceInfo implementation >+ virtual OUString SAL_CALL getImplementationName( ) throw(RuntimeException); >+ virtual sal_Bool SAL_CALL supportsService( const OUString& ServiceName ) throw(RuntimeException); >+ virtual Sequence< OUString > SAL_CALL getSupportedServiceNames( ) throw(RuntimeException); >+ static Sequence< OUString > SAL_CALL getSupportedServiceNames_Static( ); >+ >+ // XCountable implementation >+ virtual::css::uno::Any SAL_CALL outMethod(const Type& aType, XOut& outParam ) throw (RuntimeException) >+ { >+ outParam.aLong = 4; >+ return Any(); >+ } >+}; >+ >+OUString SAL_CALL MyCounterImpl::getImplementationName( ) >+ throw(RuntimeException) >+{ >+ return OUString( IMPLNAME ); >+} >+ >+sal_Bool SAL_CALL MyCounterImpl::supportsService( const OUString& ServiceName ) >+ throw(RuntimeException) >+{ >+ return cppu::supportsService(this, ServiceName); >+} >+ >+Sequence<OUString> SAL_CALL MyCounterImpl::getSupportedServiceNames( ) >+ throw(RuntimeException) >+{ >+ return getSupportedServiceNames_Static(); >+} >+ >+Sequence<OUString> SAL_CALL MyCounterImpl::getSupportedServiceNames_Static( ) >+{ >+ OUString aName( SERVICENAME ); >+ return Sequence< OUString >( &aName, 1 ); >+} >+ >+/** >+ * Function to create a new component instance; is needed by factory helper implementation. >+ * @param xMgr service manager to if the components needs other component instances >+ */ >+Reference< XInterface > SAL_CALL MyCounterImpl_create( >+ const Reference< XMultiServiceFactory > & xMgr ) >+{ >+ return Reference<XInterface>(static_cast<XCountable*>(new MyCounterImpl(xMgr))); >+} >+ >+/** >+ * This function is called to get service factories for an implementation. >+ * >+ * @param pImplName name of implementation >+ * @param pServiceManager a service manager, need for component creation >+ * @param pRegistryKey the registry key for this component, need for persistent data >+ * @return a component factory >+ */ >+extern "C" SAL_DLLPUBLIC_EXPORT void * SAL_CALL component_getFactory(const sal_Char * pImplName, void * pServiceManager, void * pRegistryKey) >+{ >+ void * pRet = 0; >+ >+ if (rtl_str_compare( pImplName, IMPLNAME ) == 0) >+ { >+ Reference< XSingleServiceFactory > xFactory( createSingleFactory( >+ reinterpret_cast< XMultiServiceFactory * >( pServiceManager ), >+ OUString( IMPLNAME ), >+ MyCounterImpl_create, >+ MyCounterImpl::getSupportedServiceNames_Static() ) ); >+ >+ if (xFactory.is()) >+ { >+ xFactory->acquire(); >+ pRet = xFactory.get(); >+ } >+ } >+ >+ return pRet; >+} >+ >+extern "C" SAL_DLLPUBLIC_EXPORT void SAL_CALL >+component_getImplementationEnvironment( >+ char const ** ppEnvTypeName, uno_Environment **) >+{ >+ *ppEnvTypeName = CPPU_CURRENT_LANGUAGE_BINDING_NAME; >+} >+ >+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ >diff --git a/odk/examples/cpp/outstruct/countermain.cxx_bla b/odk/examples/cpp/outstruct/countermain.cxx_bla >new file mode 100644 >index 000000000000..5a613f588f32 >--- /dev/null >+++ b/odk/examples/cpp/outstruct/countermain.cxx_bla >@@ -0,0 +1,98 @@ >+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ >+/************************************************************************* >+ * >+ * The Contents of this file are made available subject to the terms of >+ * the BSD license. >+ * >+ * Copyright 2000, 2010 Oracle and/or its affiliates. >+ * All rights reserved. >+ * >+ * Redistribution and use in source and binary forms, with or without >+ * modification, are permitted provided that the following conditions >+ * are met: >+ * 1. Redistributions of source code must retain the above copyright >+ * notice, this list of conditions and the following disclaimer. >+ * 2. Redistributions in binary form must reproduce the above copyright >+ * notice, this list of conditions and the following disclaimer in the >+ * documentation and/or other materials provided with the distribution. >+ * 3. Neither the name of Sun Microsystems, Inc. nor the names of its >+ * contributors may be used to endorse or promote products derived >+ * from this software without specific prior written permission. >+ * >+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS >+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT >+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS >+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE >+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, >+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, >+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS >+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND >+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR >+ * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE >+ * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. >+ * >+ *************************************************************************/ >+ >+// simple client application registering and using the counter component. >+#include "sal/config.h" >+ >+#include <cstdlib> >+#include <stdio.h> >+ >+#include <sal/main.h> >+#include <rtl/ustring.hxx> >+ >+#include <osl/diagnose.h> >+ >+#include <cppuhelper/bootstrap.hxx> >+ >+// generated c++ interfaces >+#include <com/sun/star/lang/XComponent.hpp> >+#include <com/sun/star/lang/XMultiComponentFactory.hpp> >+#include <foo/XCountable.hpp> >+ >+ >+using namespace foo; >+using namespace cppu; >+using namespace com::sun::star::uno; >+using namespace com::sun::star::lang; >+ >+using namespace ::rtl; >+ >+ >+SAL_IMPLEMENT_MAIN() >+{ >+ try { >+ >+ Reference< XComponentContext > xContext(::cppu::defaultBootstrap_InitialComponentContext()); >+ OSL_ENSURE( xContext.is(), "### bootstrap failed!" ); >+ >+ Reference< XMultiComponentFactory > xMgr = xContext->getServiceManager(); >+ OSL_ENSURE( xMgr.is(), "### cannot get initial service manager!" ); >+ >+ Reference< XInterface > xx = xMgr->createInstanceWithContext( "foo.Counter", xContext); >+ >+ OSL_ENSURE( xx.is(), "### cannot get service instance of \"foo.Counter\"!" ); >+ >+ Reference< XCountable > xCount( xx, UNO_QUERY ); >+ OSL_ENSURE( xCount.is(), "### cannot query XCountable interface of service instance \"foo.Counter\"!" ); >+ >+ if (xCount.is()) >+ { >+ xCount->setCount( 42 ); >+ fprintf( stdout , "%d," , (int)xCount->getCount() ); >+ fprintf( stdout , "%d," , (int)xCount->increment() ); >+ fprintf( stdout , "%d\n" , (int)xCount->decrement() ); >+ } >+ >+ Reference< XComponent >::query( xContext )->dispose(); >+ return EXIT_SUCCESS; >+ >+ } catch( Exception& e) { >+ printf("Error: caught exception:\n %s\n", >+ OUStringToOString(e.Message, RTL_TEXTENCODING_ASCII_US).getStr()); >+ return EXIT_FAILURE; >+ } >+} >+ >+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ >diff --git a/odk/examples/cpp/remoteclient/Makefile b/odk/examples/cpp/remoteclient/Makefile >index 238ec3ca2a74..bc72afcc161f 100644 >--- a/odk/examples/cpp/remoteclient/Makefile >+++ b/odk/examples/cpp/remoteclient/Makefile >@@ -49,8 +49,10 @@ COMP_RDB = $(OUT_BIN)/$(COMP_RDB_NAME) > COMP_SERVICES=$(SHAREDLIB_OUT)/remoteclientsample.rdb > > ENV_COMP_SERVICES=-env:URE_MORE_SERVICES=$(URLPREFIX)$(COMP_SERVICES) >+ENV_COMP_SERVICES_HOST=-env:URE_MORE_SERVICES=$(URLPREFIX)$(SHAREDLIB_OUT)/outstructservices.rdb > >-OUT_COMP_INC=$(OUT_INC)/$(COMP_NAME) >+#OUT_COMP_INC=$(OUT_INC)/$(COMP_NAME) >+OUT_COMP_INC=$(OUT_INC)/outstruct > OUT_COMP_GEN=$(OUT_MISC)/$(COMP_NAME) > OUT_COMP_SLO=$(OUT_SLO)/$(COMP_NAME) > >@@ -60,6 +62,8 @@ CXXFILES = remoteclient.cxx > > SLOFILES = $(patsubst %.cxx,$(OUT_COMP_SLO)/%.$(OBJ_EXT),$(CXXFILES)) > >+ENV_EXAMPLE_TYPES=-env:URE_MORE_TYPES=$(URLPREFIX)$(OUT_BIN)/outstruct.uno.rdb >+ > # Targets > .PHONY: ALL > ALL : \ >@@ -75,7 +79,7 @@ $(OUT_BIN)/%.rdb : > > $(OUT_COMP_SLO)/%.$(OBJ_EXT) : %.cxx $(SDKTYPEFLAG) > -$(MKDIR) $(subst /,$(PS),$(@D)) >- $(CC) $(CC_FLAGS) $(CC_INCLUDES) -I$(OUT_COMP_INC) $(CC_DEFINES) $(CC_OUTPUT_SWITCH)$(subst /,$(PS),$@) $< >+ $(CC) $(CC_FLAGS) -std=c++11 -g -O0 $(CC_INCLUDES) -I$(OUT_COMP_INC) $(CC_DEFINES) $(CC_OUTPUT_SWITCH)$(subst /,$(PS),$@) $< > > ifeq "$(OS)" "WIN" > $(SHAREDLIB_OUT)/%.$(SHAREDLIB_EXT) : $(SLOFILES) >@@ -126,22 +130,23 @@ CppClientExample : $(COMP_IMPL) $(COMP_SERVICES) > @echo Start the remote server process ... > @echo - > ifeq "$(OS)" "WIN" >- start uno $(ENV_COMP_SERVICES) --singleaccept -s com.sun.star.io.Pipe \ >- -u "uno:socket,host=localhost,port=2083;urp;MyPipe" >+ start uno $(ENV_EXAMPLE_TYPES) $(ENV_COMP_SERVICES_HOST) --singleaccept -s foo.Counter \ >+ -u "uno:socket,host=localhost,port=2083;urp;OutStruct" > else >- uno $(ENV_COMP_SERVICES) --singleaccept -s com.sun.star.io.Pipe \ >- -u "uno:socket,host=localhost,port=2083;urp;MyPipe" & >+ /workspaces/socbm451/mastraub/libreoffice6_repo/core/instdir/program/uno $(ENV_EXAMPLE_TYPES) $(ENV_COMP_SERVICES_HOST) --singleaccept -s foo.Counter \ >+ -u "uno:socket,host=localhost,port=2083;urp;OutStruct" & > @echo waiting on the server process ... >- sleep 5 >+ sleep 1 > endif > @echo - > @echo ... remote server process runs ... > @echo - >- @echo Start remote client process ... >+ @echo Start remote client processes ... > @echo - >- uno $(ENV_COMP_SERVICES) -s com.sun.star.bridge.example.RemoteClientSample \ >- -- "uno:socket,host=localhost,port=2083;urp;MyPipe" >+ /workspaces/socbm451/mastraub/libreoffice6_repo/core/instdir/program/uno $(ENV_EXAMPLE_TYPES) $(ENV_COMP_SERVICES) -s com.sun.star.bridge.example.RemoteClientSample \ >+ -- "uno:socket,host=localhost,port=2083;urp;OutStruct" > @echo - >+ sleep 1 > > .PHONY: clean > clean : >diff --git a/odk/examples/cpp/remoteclient/remoteclient.cxx b/odk/examples/cpp/remoteclient/remoteclient.cxx >index e754a2fa42e3..407605caf199 100644 >--- a/odk/examples/cpp/remoteclient/remoteclient.cxx >+++ b/odk/examples/cpp/remoteclient/remoteclient.cxx >@@ -54,6 +54,12 @@ > > #include <cppuhelper/implbase1.hxx> > >+#include <foo/XCountable.hpp> >+#include <sys/types.h> >+#include <unistd.h> >+ >+#include <thread> >+ > using namespace ::rtl; > using namespace ::cppu; > using namespace ::osl; >@@ -80,7 +86,8 @@ public: // Methods > > > private: // helper methods >- void testPipe( const Reference < XInterface > & rComponent ); >+ void testPipe( const Reference < XInterface > & rComponent ); >+ void testOutStruct( const Reference < XInterface > & rComponent ); > Reference< XMultiServiceFactory > m_xSMgr; > }; > >@@ -139,6 +146,28 @@ void PipeClientMain::testPipe( const Reference< XInterface > & rxInterface ) > } > } > >+void PipeClientMain::testOutStruct( const Reference< XInterface > & rxInterface ) >+{ >+ printf( "got component under test\n"); >+ >+ Reference< foo::XCountable > countable( rxInterface, UNO_QUERY ); >+ if (countable.is()) >+ { >+ printf( "unoQuery successful\n" ); >+ } >+ >+ printf("looping until a debugger is attached to %d ...\n", getpid()); >+ // Once attached, set this to false. Your breakpoint in typelib.cxx: 1493 >+ // will be reached by the server process multiple times, but once for the >+ // XOut struct >+ bool wait = true; >+ while(wait); >+ >+ >+ foo::XOut out; >+ (void) countable->outMethod(foo::XCountable::static_type(), out); >+ printf( "done\n" ); >+} > > sal_Int32 PipeClientMain::run( const Sequence< OUString > & aArguments ) throw ( RuntimeException ) > { >@@ -157,7 +186,8 @@ sal_Int32 PipeClientMain::run( const Sequence< OUString > & aArguments ) throw ( > if( r.is() ) > { > printf( "got the remote initial object\n" ); >- testPipe( r ); >+ //testPipe( r ); >+ testOutStruct(r); > } > else > {
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Raw
Actions:
View
Attachments on
bug 115399
: 159778