summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjohn_c <john_c@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>2006-04-28 03:50:28 +0000
committerjohn_c <john_c@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>2006-04-28 03:50:28 +0000
commit88556d568eb0a06bf8af2ddefacbc1ad5f00401e (patch)
tree72f4a0e33b9dd26d1783ff005d67494bfb79a9de
parent317d8c1ce78436f0107f056418c0c5f5b4231069 (diff)
downloadATCD-oci_dave_wchar_refactor_branch.tar.gz
4_27_06 branch merge in and compile error fixedoci_dave_wchar_refactor_branch
-rw-r--r--ACE-INSTALL.html16
-rw-r--r--ChangeLog547
-rw-r--r--TAO/CIAO/ChangeLog93
-rw-r--r--TAO/CIAO/DAnCE/NodeApplication/NodeApplication_Impl.cpp8
-rw-r--r--TAO/CIAO/DAnCE/NodeApplication/NodeApplication_Impl.h2
-rw-r--r--TAO/CIAO/DAnCE/NodeApplicationManager/Containers_Info_Map.cpp11
-rw-r--r--TAO/CIAO/DAnCE/NodeApplicationManager/Containers_Info_Map.h5
-rw-r--r--TAO/CIAO/DAnCE/TargetManager/DomainDataManager.h7
-rw-r--r--TAO/CIAO/DAnCE/TargetManager/TargetManager.mpc4
-rw-r--r--TAO/CIAO/ciao/Deployment_Core.idl2
-rw-r--r--TAO/CIAO/tools/Config_Handlers/ADD_Handler.cpp4
-rw-r--r--TAO/CIAO/tools/Config_Handlers/CCD_Handler.cpp12
-rw-r--r--TAO/CIAO/tools/Config_Handlers/CEPE_Handler.cpp4
-rw-r--r--TAO/CIAO/tools/Config_Handlers/CEPE_Handler.h76
-rw-r--r--TAO/CIAO/tools/Config_Handlers/CPD_Handler.cpp2
-rw-r--r--TAO/CIAO/tools/Config_Handlers/CPD_Handler.h76
-rw-r--r--TAO/CIAO/tools/Config_Handlers/Config_Handlers.mpc14
-rw-r--r--TAO/CIAO/tools/Config_Handlers/DP_Handler.cpp8
-rw-r--r--TAO/CIAO/tools/Config_Handlers/Deployment.hpp190
-rw-r--r--TAO/CIAO/tools/Config_Handlers/ERE_Handler.cpp4
-rw-r--r--TAO/CIAO/tools/Config_Handlers/ERE_Handler.h75
-rw-r--r--TAO/CIAO/tools/Config_Handlers/MDD_Handler.cpp2
-rw-r--r--TAO/CIAO/tools/Config_Handlers/PCD_Handler.cpp2
-rw-r--r--TAO/CIAO/tools/Config_Handlers/PCD_Handler.h4
-rw-r--r--TAO/CIAO/tools/Config_Handlers/Package_Handlers/CAD_Handler.cpp28
-rw-r--r--TAO/CIAO/tools/Config_Handlers/Package_Handlers/CID_Handler.cpp413
-rw-r--r--TAO/CIAO/tools/Config_Handlers/Package_Handlers/CPD_Handler.cpp11
-rw-r--r--TAO/CIAO/tools/Config_Handlers/Package_Handlers/CPD_Handler.h8
-rw-r--r--TAO/CIAO/tools/Config_Handlers/Package_Handlers/Comp_Intf_Descr_Handler.cpp11
-rw-r--r--TAO/CIAO/tools/Config_Handlers/Package_Handlers/IAD_Handler.cpp3
-rw-r--r--TAO/CIAO/tools/Config_Handlers/Package_Handlers/NIA_Handler.h5
-rw-r--r--TAO/CIAO/tools/Config_Handlers/Package_Handlers/PCD_Handler.cpp31
-rw-r--r--TAO/CIAO/tools/Config_Handlers/Package_Handlers/PC_Intf.cpp6
-rw-r--r--TAO/CIAO/tools/Config_Handlers/Package_Handlers/PC_Intf.h2
-rw-r--r--TAO/CIAO/tools/Config_Handlers/Package_Handlers/Package_Handlers.mpc7
-rw-r--r--TAO/CIAO/tools/Config_Handlers/Package_Handlers/SID_Handler.cpp4
-rw-r--r--TAO/CIAO/tools/Config_Handlers/Package_Handlers/SID_Handler.h4
-rw-r--r--TAO/CIAO/tools/Config_Handlers/Property_Handler.cpp2
-rw-r--r--TAO/CIAO/tools/Config_Handlers/Property_Handler.h79
-rw-r--r--TAO/CIAO/tools/Config_Handlers/Req_Handler.cpp4
-rw-r--r--TAO/CIAO/tools/Config_Handlers/Req_Handler.h76
-rw-r--r--TAO/CIAO/tools/Config_Handlers/SatisfierProperty_Handler.cpp2
-rw-r--r--TAO/CIAO/tools/Config_Handlers/SatisfierProperty_Handler.h78
-rw-r--r--TAO/CIAO/tools/Config_Handlers/Utils/Functors.h88
-rw-r--r--TAO/CIAO/tools/Config_Handlers/XMLSchema/Types.hpp10
-rw-r--r--TAO/CIAO/tools/Config_Handlers/XML_File_Intf.cpp6
-rw-r--r--TAO/CIAO/tools/Config_Handlers/XSCRT/Elements.hpp81
-rw-r--r--TAO/CIAO/tools/Config_Handlers/XSCRT/XML.hpp10
-rw-r--r--TAO/CIAO/tools/Config_Handlers/XSCRT/XMLSchema.hpp10
-rw-r--r--TAO/CIAO/tools/Config_Handlers/cdp.hpp976
-rw-r--r--TAO/CIAO/tools/Config_Handlers/toplevel.hpp193
-rw-r--r--TAO/ChangeLog1453
-rw-r--r--TAO/NEWS4
-rw-r--r--TAO/TAO_IDL/be/be_visitor_valuebox/cdr_op_ch.cpp5
-rw-r--r--TAO/TAO_IDL/be/be_visitor_valuebox/cdr_op_cs.cpp4
-rw-r--r--TAO/TAO_IDL/be/be_visitor_valuebox/valuebox_ch.cpp5
-rw-r--r--TAO/TAO_IDL/be/be_visitor_valuebox/valuebox_ci.cpp10
-rw-r--r--TAO/TAO_IDL/be/be_visitor_valuebox/valuebox_cs.cpp6
-rw-r--r--TAO/TAO_IDL/be/be_visitor_valuetype/cdr_op_ch.cpp14
-rw-r--r--TAO/TAO_IDL/be/be_visitor_valuetype/cdr_op_cs.cpp4
-rw-r--r--TAO/TAO_IDL/be/be_visitor_valuetype/marshal_cs.cpp85
-rw-r--r--TAO/TAO_IDL/be/be_visitor_valuetype/valuetype_ch.cpp18
-rw-r--r--TAO/TAO_IDL/be/be_visitor_valuetype/valuetype_ci.cpp23
-rw-r--r--TAO/TAO_IDL/be/be_visitor_valuetype/valuetype_cs.cpp83
-rw-r--r--TAO/TAO_IDL/be/be_visitor_valuetype/valuetype_obv_ch.cpp33
-rw-r--r--TAO/TAO_IDL/be/be_visitor_valuetype/valuetype_obv_cs.cpp28
-rw-r--r--TAO/TAO_IDL/be/be_visitor_valuetype_fwd/cdr_op_ch.cpp11
-rw-r--r--TAO/TAO_IDL/fe/fe_lookup.cpp117
-rw-r--r--TAO/TAO_IDL/fe/idl.yy22
-rw-r--r--TAO/TAO_IDL/fe/y.tab.cpp22
-rw-r--r--TAO/docs/Options.html35
-rw-r--r--TAO/orbsvcs/examples/ORT/Server_IORInterceptor.cpp2
-rw-r--r--TAO/orbsvcs/examples/ORT/Server_IORInterceptor.h2
-rw-r--r--TAO/orbsvcs/orbsvcs/LoadBalancing/LB_IORInterceptor.cpp2
-rw-r--r--TAO/orbsvcs/orbsvcs/LoadBalancing/LB_IORInterceptor.h2
-rw-r--r--TAO/orbsvcs/orbsvcs/PortableGroup/GOA.cpp68
-rw-r--r--TAO/orbsvcs/orbsvcs/PortableGroup/GOA.h4
-rw-r--r--TAO/orbsvcs/orbsvcs/PortableGroup/PG_Servant_Dispatcher.cpp2
-rw-r--r--TAO/orbsvcs/orbsvcs/PortableGroup/PG_Servant_Dispatcher.h2
-rw-r--r--TAO/orbsvcs/orbsvcs/Trader/Constraint_Visitors.cpp4
-rw-r--r--TAO/orbsvcs/orbsvcs/Trader/Interpreter_Utils.cpp44
-rw-r--r--TAO/orbsvcs/orbsvcs/Trader/Interpreter_Utils.h73
-rw-r--r--TAO/orbsvcs/orbsvcs/Trader/Offer_Database.cpp8
-rw-r--r--TAO/orbsvcs/orbsvcs/Trader/Offer_Database.h6
-rw-r--r--TAO/orbsvcs/orbsvcs/Trader/Service_Type_Repository.cpp26
-rw-r--r--TAO/orbsvcs/orbsvcs/Trader/Service_Type_Repository.h18
-rw-r--r--TAO/orbsvcs/orbsvcs/Trader/Trader.h2
-rw-r--r--TAO/orbsvcs/orbsvcs/Trader/Trader_Constraint_Visitors.cpp6
-rw-r--r--TAO/orbsvcs/orbsvcs/Trader/Trader_Interfaces.cpp8
-rw-r--r--TAO/orbsvcs/orbsvcs/Trader/Trader_Interfaces.h6
-rw-r--r--TAO/orbsvcs/orbsvcs/Trader/Trader_Utils.cpp61
-rw-r--r--TAO/orbsvcs/orbsvcs/Trader/Trader_Utils.h9
-rw-r--r--TAO/orbsvcs/tests/AVStreams/Multicast/ftp.cpp2
-rw-r--r--TAO/orbsvcs/tests/AVStreams/Pluggable/ftp.cpp2
-rw-r--r--TAO/orbsvcs/tests/Trading/TTest.idl19
-rw-r--r--TAO/performance-tests/AMI_Latency/Roundtrip.cpp26
-rw-r--r--TAO/performance-tests/AMI_Latency/Roundtrip.h46
-rw-r--r--TAO/performance-tests/AMI_Latency/Roundtrip_Handler.cpp75
-rw-r--r--TAO/performance-tests/AMI_Latency/Roundtrip_Handler.h61
-rw-r--r--TAO/performance-tests/AMI_Latency/Server_Task.cpp24
-rw-r--r--TAO/performance-tests/AMI_Latency/client.cpp185
-rw-r--r--TAO/performance-tests/AMI_Latency/server.cpp155
-rw-r--r--TAO/performance-tests/DII_Latency/Roundtrip.cpp26
-rw-r--r--TAO/performance-tests/DII_Latency/Roundtrip.h46
-rw-r--r--TAO/performance-tests/DII_Latency/client.cpp178
-rw-r--r--TAO/performance-tests/DII_Latency/server.cpp136
-rw-r--r--TAO/performance-tests/DSI_Latency/Roundtrip.cpp97
-rw-r--r--TAO/performance-tests/DSI_Latency/Roundtrip.h48
-rw-r--r--TAO/performance-tests/DSI_Latency/client.cpp163
-rw-r--r--TAO/performance-tests/DSI_Latency/server.cpp142
-rw-r--r--TAO/performance-tests/Deferred_Latency/Roundtrip.cpp26
-rw-r--r--TAO/performance-tests/Deferred_Latency/Roundtrip.h46
-rw-r--r--TAO/performance-tests/Deferred_Latency/client.cpp203
-rw-r--r--TAO/performance-tests/Deferred_Latency/server.cpp136
-rw-r--r--TAO/performance-tests/RTCorba/Multiple_Endpoints/Endpoint_Per_Priority/Makefile616
-rw-r--r--TAO/performance-tests/Single_Threaded_Latency/Roundtrip.cpp26
-rw-r--r--TAO/performance-tests/Single_Threaded_Latency/Roundtrip.h46
-rw-r--r--TAO/performance-tests/Single_Threaded_Latency/client.cpp164
-rw-r--r--TAO/performance-tests/Single_Threaded_Latency/server.cpp136
-rw-r--r--TAO/performance-tests/Thread_Per_Connection_Latency/Client_Task.cpp65
-rw-r--r--TAO/performance-tests/Thread_Per_Connection_Latency/Client_Task.h46
-rw-r--r--TAO/performance-tests/Thread_Per_Connection_Latency/Roundtrip.cpp26
-rw-r--r--TAO/performance-tests/Thread_Per_Connection_Latency/Roundtrip.h46
-rw-r--r--TAO/performance-tests/Thread_Per_Connection_Latency/client.cpp149
-rw-r--r--TAO/performance-tests/Thread_Per_Connection_Latency/server.cpp136
-rw-r--r--TAO/performance-tests/Thread_Pool_Latency/Client_Task.cpp65
-rw-r--r--TAO/performance-tests/Thread_Pool_Latency/Client_Task.h46
-rw-r--r--TAO/performance-tests/Thread_Pool_Latency/Roundtrip.cpp26
-rw-r--r--TAO/performance-tests/Thread_Pool_Latency/Roundtrip.h46
-rw-r--r--TAO/performance-tests/Thread_Pool_Latency/Worker_Thread.cpp24
-rw-r--r--TAO/performance-tests/Thread_Pool_Latency/client.cpp149
-rw-r--r--TAO/performance-tests/Thread_Pool_Latency/server.cpp139
-rw-r--r--TAO/tao/AnyTypeCode/PI_ForwardA.h5
-rw-r--r--TAO/tao/AnyTypeCode/skip.cpp6
-rw-r--r--TAO/tao/Blocked_Connect_Strategy.cpp12
-rw-r--r--TAO/tao/Blocked_Connect_Strategy.h6
-rw-r--r--TAO/tao/Bounded_Sequence_CDR_T.h35
-rw-r--r--TAO/tao/CORBALOC_Parser.cpp3
-rw-r--r--TAO/tao/CSD_Framework/CSD_Default_Servant_Dispatcher.cpp4
-rw-r--r--TAO/tao/CSD_Framework/CSD_Default_Servant_Dispatcher.h2
-rw-r--r--TAO/tao/CSD_Framework/CSD_POA.cpp4
-rw-r--r--TAO/tao/CSD_Framework/CSD_POA.h4
-rw-r--r--TAO/tao/CSD_ThreadPool/CSD_TP_Strategy_Factory.cpp2
-rw-r--r--TAO/tao/Client_Strategy_Factory.cpp6
-rw-r--r--TAO/tao/Client_Strategy_Factory.h9
-rw-r--r--TAO/tao/Codeset/Codeset_Manager_i.cpp5
-rw-r--r--TAO/tao/Codeset/Codeset_Manager_i.h10
-rw-r--r--TAO/tao/Connect_Strategy.cpp40
-rw-r--r--TAO/tao/Connect_Strategy.h20
-rw-r--r--TAO/tao/DLL_Parser.cpp6
-rw-r--r--TAO/tao/Endpoint.cpp9
-rw-r--r--TAO/tao/Endpoint.h21
-rw-r--r--TAO/tao/IIOP_Connection_Handler.cpp47
-rw-r--r--TAO/tao/IIOP_Connection_Handler.h5
-rw-r--r--TAO/tao/IIOP_Connector.cpp307
-rw-r--r--TAO/tao/IIOP_Connector.h33
-rw-r--r--TAO/tao/IIOP_Endpoint.cpp85
-rw-r--r--TAO/tao/IIOP_Endpoint.h27
-rw-r--r--TAO/tao/IIOP_Profile.cpp75
-rw-r--r--TAO/tao/IIOP_Profile.h12
-rw-r--r--TAO/tao/IORInterceptor/IORInfo.cpp6
-rw-r--r--TAO/tao/IORInterceptor/IORInfo.h2
-rw-r--r--TAO/tao/IORInterceptor/IORInfoC.h2
-rw-r--r--TAO/tao/IORInterceptor/IORInterceptorC.h2
-rw-r--r--TAO/tao/IORInterceptor/IORInterceptor_Adapter_Impl.cpp2
-rw-r--r--TAO/tao/IORInterceptor/IORInterceptor_Adapter_Impl.h2
-rw-r--r--TAO/tao/IORInterceptor_Adapter.h2
-rw-r--r--TAO/tao/Invocation_Endpoint_Selectors.cpp138
-rw-r--r--TAO/tao/Invocation_Endpoint_Selectors.h1
-rw-r--r--TAO/tao/LF_CH_Event.h11
-rw-r--r--TAO/tao/LF_Connect_Strategy.cpp26
-rw-r--r--TAO/tao/LF_Connect_Strategy.h10
-rw-r--r--TAO/tao/LF_Event.h7
-rw-r--r--TAO/tao/MProfile.cpp15
-rw-r--r--TAO/tao/MProfile.h8
-rw-r--r--TAO/tao/MProfile.i4
-rw-r--r--TAO/tao/Makefile.am110
-rw-r--r--TAO/tao/Messaging/ExceptionHolderC.cpp44
-rw-r--r--TAO/tao/Messaging/ExceptionHolderC.h7
-rw-r--r--TAO/tao/ORB.cpp98
-rw-r--r--TAO/tao/ORB_Core.cpp420
-rw-r--r--TAO/tao/ORB_Core.h34
-rw-r--r--TAO/tao/ORB_Core.i40
-rw-r--r--TAO/tao/ObjRefTemplate/Default_ORTC.cpp47
-rw-r--r--TAO/tao/ObjRefTemplate/Default_ORTC.h69
-rw-r--r--TAO/tao/ObjRefTemplate/ObjectReferenceTemplateC.cpp70
-rw-r--r--TAO/tao/ObjRefTemplate/ObjectReferenceTemplateC.h9
-rw-r--r--TAO/tao/Object.cpp2
-rw-r--r--TAO/tao/Object.h4
-rw-r--r--TAO/tao/PI/ORBInitializer_Registry_Impl.cpp65
-rw-r--r--TAO/tao/PI/ORBInitializer_Registry_Impl.h11
-rw-r--r--TAO/tao/PI/PI.cpp58
-rw-r--r--TAO/tao/PI/PI.h16
-rw-r--r--TAO/tao/PI/PolicyFactory_Loader.cpp9
-rw-r--r--TAO/tao/PI/PolicyFactory_Loader.h6
-rw-r--r--TAO/tao/PI_Forward.pidl2
-rw-r--r--TAO/tao/PI_ForwardC.h5
-rw-r--r--TAO/tao/Parser_Registry.cpp3
-rw-r--r--TAO/tao/PortableServer/Default_Acceptor_Filter.h2
-rw-r--r--TAO/tao/PortableServer/Default_Servant_Dispatcher.cpp2
-rw-r--r--TAO/tao/PortableServer/Default_Servant_Dispatcher.h2
-rw-r--r--TAO/tao/PortableServer/Object_Adapter.cpp28
-rw-r--r--TAO/tao/PortableServer/Object_Adapter.h4
-rw-r--r--TAO/tao/PortableServer/POAManager.cpp28
-rw-r--r--TAO/tao/PortableServer/POAManager.h40
-rw-r--r--TAO/tao/PortableServer/POAManager.i23
-rw-r--r--TAO/tao/PortableServer/POAManager.pidl2
-rw-r--r--TAO/tao/PortableServer/POAManagerC.h7
-rw-r--r--TAO/tao/PortableServer/POAManagerFactory.cpp2
-rw-r--r--TAO/tao/PortableServer/PortableServer.h1
-rw-r--r--TAO/tao/PortableServer/PortableServer.pidl6
-rw-r--r--TAO/tao/PortableServer/PortableServerC.h26
-rw-r--r--TAO/tao/PortableServer/Regular_POA.cpp2
-rw-r--r--TAO/tao/PortableServer/Regular_POA.h2
-rw-r--r--TAO/tao/PortableServer/Root_POA.cpp87
-rw-r--r--TAO/tao/PortableServer/Root_POA.h21
-rw-r--r--TAO/tao/PortableServer/Servant_Dispatcher.h8
-rw-r--r--TAO/tao/Profile.cpp43
-rw-r--r--TAO/tao/Profile.h35
-rw-r--r--TAO/tao/Profile_Transport_Resolver.cpp62
-rw-r--r--TAO/tao/Profile_Transport_Resolver.h22
-rw-r--r--TAO/tao/RTPortableServer/RT_POA.cpp4
-rw-r--r--TAO/tao/RTPortableServer/RT_POA.h4
-rw-r--r--TAO/tao/RTPortableServer/RT_Servant_Dispatcher.cpp2
-rw-r--r--TAO/tao/RTPortableServer/RT_Servant_Dispatcher.h2
-rw-r--r--TAO/tao/Reactive_Connect_Strategy.cpp27
-rw-r--r--TAO/tao/Reactive_Connect_Strategy.h10
-rw-r--r--TAO/tao/Strategies/OC_Endpoint_Selector_Loader.cpp17
-rw-r--r--TAO/tao/Strategies/OC_Endpoint_Selector_Loader.h7
-rw-r--r--TAO/tao/Strategies/Optimized_Connection_Endpoint_Selector.cpp2
-rw-r--r--TAO/tao/TAO_Internal.cpp632
-rw-r--r--TAO/tao/TAO_Internal.h21
-rw-r--r--TAO/tao/Transport.cpp2
-rw-r--r--TAO/tao/Transport_Connector.cpp183
-rw-r--r--TAO/tao/Transport_Connector.h31
-rw-r--r--TAO/tao/Transport_Descriptor_Interface.cpp2
-rw-r--r--TAO/tao/Transport_Descriptor_Interface.h4
-rw-r--r--TAO/tao/Transport_Descriptor_Interface.inl6
-rw-r--r--TAO/tao/Unbounded_Sequence_CDR_T.h33
-rw-r--r--TAO/tao/Valuetype/AbstractBase.cpp6
-rw-r--r--TAO/tao/Valuetype/AbstractBase.h1
-rw-r--r--TAO/tao/Valuetype/StringValueC.cpp16
-rw-r--r--TAO/tao/Valuetype/StringValueC.h114
-rw-r--r--TAO/tao/Valuetype/StringValueC.inl15
-rw-r--r--TAO/tao/Valuetype/ValueBase.cpp619
-rw-r--r--TAO/tao/Valuetype/ValueBase.h157
-rw-r--r--TAO/tao/Valuetype/ValueBase.inl34
-rw-r--r--TAO/tao/Valuetype/Value_CORBA_methods.h1
-rw-r--r--TAO/tao/default_client.cpp6
-rw-r--r--TAO/tao/default_client.h8
-rw-r--r--TAO/tao/default_resource.cpp17
-rw-r--r--TAO/tao/default_resource.h7
-rw-r--r--TAO/tao/orbconf.h4
-rw-r--r--TAO/tao/params.cpp4
-rw-r--r--TAO/tao/params.h29
-rw-r--r--TAO/tao/params.i36
-rw-r--r--TAO/tao/tao.mpc35
-rw-r--r--TAO/tests/AMI/ami_test.idl10
-rw-r--r--TAO/tests/Bug_1676_Regression/client.cpp48
-rw-r--r--TAO/tests/DLL_ORB/Test_Client_Module.cpp56
-rw-r--r--TAO/tests/DLL_ORB/Test_Server_Module.cpp40
-rw-r--r--TAO/tests/ORT/ORT_test_IORInterceptor.cpp2
-rw-r--r--TAO/tests/ORT/ORT_test_IORInterceptor.h2
-rw-r--r--TAO/tests/POA/README14
-rw-r--r--TAO/tests/Param_Test/svc.conf2
-rw-r--r--TAO/tests/Portable_Interceptors/IORInterceptor/FOO_IORInterceptor.cpp2
-rw-r--r--TAO/tests/Portable_Interceptors/IORInterceptor/FOO_IORInterceptor.h2
-rw-r--r--TAO/tests/Sequence_Unit_Tests/Sequence_Unit_Tests.mpc8
-rw-r--r--TAO/tests/Smart_Proxies/Benchmark/client.cpp2
-rw-r--r--TAO/tests/Smart_Proxies/Policy/client.cpp2
-rw-r--r--TAO/tests/Smart_Proxies/client.cpp2
-rw-r--r--TAO/tests/Smart_Proxies/dtor/client.cpp2
-rw-r--r--THANKS1
-rw-r--r--ace/ACE.cpp3
-rw-r--r--ace/ATM_Addr.h12
-rw-r--r--ace/Array_Map.h2
-rw-r--r--ace/Atomic_Op_T.h6
-rw-r--r--ace/Base_Thread_Adapter.h4
-rw-r--r--ace/CDR_Base.h5
-rw-r--r--ace/CDR_Stream.cpp41
-rw-r--r--ace/CDR_Stream.h11
-rw-r--r--ace/Cached_Connect_Strategy_T.h4
-rw-r--r--ace/Capabilities.h6
-rw-r--r--ace/Cleanup.h3
-rw-r--r--ace/DLL.cpp27
-rw-r--r--ace/DLL.h10
-rw-r--r--ace/DLL_Manager.cpp106
-rw-r--r--ace/Default_Constants.h2
-rw-r--r--ace/Dynamic_Service.cpp12
-rw-r--r--ace/Dynamic_Service.h22
-rw-r--r--ace/Dynamic_Service.inl12
-rw-r--r--ace/Dynamic_Service_Base.cpp69
-rw-r--r--ace/Dynamic_Service_Base.h25
-rw-r--r--ace/Global_Macros.h4
-rw-r--r--ace/Hash_Map_Manager_T.h4
-rw-r--r--ace/Log_Msg.h2
-rw-r--r--ace/Log_Msg_Callback.h2
-rw-r--r--ace/Log_Msg_IPC.h2
-rw-r--r--ace/Map_Manager.h4
-rw-r--r--ace/OS_NS_sys_sendfile.cpp4
-rw-r--r--ace/OS_NS_sys_sendfile.h8
-rw-r--r--ace/OS_NS_sys_sendfile.inl8
-rw-r--r--ace/POSIX_Asynch_IO.h17
-rw-r--r--ace/POSIX_Proactor.h6
-rw-r--r--ace/Parse_Node.cpp152
-rw-r--r--ace/Parse_Node.h169
-rw-r--r--ace/Process_Manager.cpp30
-rw-r--r--ace/RB_Tree.h4
-rw-r--r--ace/Service_Config.cpp961
-rw-r--r--ace/Service_Config.h237
-rw-r--r--ace/Service_Config.inl82
-rw-r--r--ace/Service_Gestalt.cpp8
-rw-r--r--ace/Service_Object.cpp21
-rw-r--r--ace/Service_Object.h19
-rw-r--r--ace/Service_Object.inl5
-rw-r--r--ace/Service_Repository.cpp140
-rw-r--r--ace/Service_Repository.h13
-rw-r--r--ace/Service_Types.cpp20
-rw-r--r--ace/Sock_Connect.cpp6
-rw-r--r--ace/Strategies_T.h32
-rw-r--r--ace/Svc_Conf.h104
-rw-r--r--ace/Svc_Conf.y93
-rw-r--r--ace/Svc_Conf_Tokens.h94
-rw-r--r--ace/Svc_Conf_y.cpp1969
-rw-r--r--ace/Timer_Heap_T.h2
-rw-r--r--ace/Timer_List_T.h8
-rw-r--r--ace/Timer_Queue_Adapters.h10
-rw-r--r--ace/Timer_Queue_T.h4
-rw-r--r--ace/Timer_Wheel_T.h2
-rw-r--r--ace/config-openvms.h483
-rw-r--r--ace/svcconf.mpb24
-rw-r--r--bin/tao_orb_tests.lst15
-rw-r--r--include/makeinclude/platform_hpux_kcc.GNU123
-rw-r--r--include/makeinclude/platform_irix6.x_kcc.GNU41
-rw-r--r--include/makeinclude/platform_linux_kcc.GNU72
-rw-r--r--include/makeinclude/platform_osf1_4.x_kcc.GNU65
-rw-r--r--include/makeinclude/platform_sunos5_kcc.GNU111
-rw-r--r--include/makeinclude/platform_tru64_kcc.GNU35
-rw-r--r--include/makeinclude/platform_vxworks5.5.x.GNU2
339 files changed, 10176 insertions, 9784 deletions
diff --git a/ACE-INSTALL.html b/ACE-INSTALL.html
index c4f26ba777c..af32d3517b3 100644
--- a/ACE-INSTALL.html
+++ b/ACE-INSTALL.html
@@ -116,7 +116,7 @@ document</a>.</p><p>
<tr>
<th>DOC Group</th>
<td>Solaris 7, 8, 9, and 10 (many compilers excluding SunC++ 4.x);
- Windows 2000, XP (MSVC++ 6, 7.1, and 8);
+ Windows 2000, XP (MSVC++ 7.1, and 8);
many versions of Linux/Intel (many compilers), Linux/IA64 (GCC).
</td>
<td>DOC sites at <a href="http://www.dre.vanderbilt.edu/">ISIS</a>,
@@ -147,7 +147,7 @@ document</a>.</p><p>
<td>Maintains ACE on many platforms required for their ACE and
TAO service offerings. Besides the standard DOC group platforms
we also support AIX, Borland C++ Builder 6/2006, CBuilderX 1.0, MinGW,
- Cygwin, VxWorks 5.5.1 & 6.x, OpenVMS 7.3-2 & 8.2-1,
+ Cygwin, VxWorks 5.5.1 & 6.2, OpenVMS 7.3-2 & 8.2-1,
Tru64, SuSE Linux on Alpha/IA32/EM64T,
HPUX 11i v2/v2 32/64 bit on PA-RISC, and
HPUX 11i v2 on Itanium. The Intel C++ compiler is supported on
@@ -177,7 +177,7 @@ document</a>.</p><p>
no longer maintained and may be removed from ACE at any time.
If you want to have support for these environments contact one
of the commercial support organisations. The platforms include:
- DG/UX, VxWorks 5.4, MSVC5, Borland C++ Builder 4 and 5.
+ DG/UX, VxWorks 5.4, MSVC5/6/7.0, Borland C++ Builder 4 and 5.
For up-to-date listings on platform that are deprecated and pending
removal from ACE, please see the <a href="NEWS">NEWS file</a>.
</td>
@@ -213,10 +213,10 @@ supported by the DOC group, Riverace, OCI or Remedy IT. </p><p>
ACE (including TAO and CIAO) uses MPC (MakeProjectCreator) to generate
files useful for the build tools (such as GNUmakefiles for UNIX based
-platforms, dsp and dsw files for VC6 and borland makefiles) on various
+platforms, sln and vcproj files for VC71/vc8 and borland makefiles) on various
platforms. To help new users to bootstrap quickly the release bundles
-of ACE (TAO and CIAO) includes GNUmakefiles for UNIX platforms, VC6
-project files, and VC71 solution files. If it is necessary to generate
+of ACE (TAO and CIAO) includes GNUmakefiles for UNIX platforms, and VC71/vc8
+solution files. If it is necessary to generate
files for build tools for other compilers such as Visual Age for IBM,
and Windows CE users have to run MPC themselves to generate the
appropriate files. Please see <a href="MPC/USAGE">USAGE</a>, <a
@@ -2945,9 +2945,9 @@ quickly.
from <code> $ACE_ROOT </code> to generate GNUmakefiles. Please use
- <code> $ACE_ROOT/bin/mwc.pl -type vc6 ACE.mwc </code> </p><p>
+ <code> $ACE_ROOT/bin/mwc.pl -type vc8 ACE.mwc </code> </p><p>
- to generate VC6 project and workspace files. Please use <code>-type
+ to generate VC8 project and solution files. Please use <code>-type
vc71</code> to generate VC71 project and solution files.
</p></li><li>If you want to build TAO+CIAO and its associated libraries
diff --git a/ChangeLog b/ChangeLog
index 9c210d62fb2..ee7448f4afd 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,550 @@
+Thu Apr 27 18:33:18 UTC 2006 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tests/Aio_Platform_Test.cpp:
+ When AIO is not available, just print an info message and exit
+
+ * tests/run_test.lst:
+ Added Aio_Platform_Test, it was not in this file at all
+
+Thu Apr 27 14:57:10 UTC 2006 Iliyan Jeliazkov <iliyan@ociweb.com>
+
+ * ace/Svc_Conf.y:
+ * ace/Svc_Conf_Tokens.h:
+ * ace/Svc_Conf_y.cpp:
+
+ Fixed fuzz complaint about #include inside a versioned namespace
+ in Svc_Conf_y.cpp. It was due to a code that Bison generates a
+ part of the parser, from Svc_Conf.y. Changed the versioned
+ namespace to encloses the non-generated code only, while the
+ rest of the parser seems to be designed so that multiple parses
+ can coexist without name clashes.
+
+Thu Apr 27 14:29:07 UTC 2006 Iliyan Jeliazkov <iliyan@ociweb.com>
+
+ * ace/Dynamic_Service_Dependency.h:
+ * ace/Dynamic_Service_Dependency.cpp:
+
+ Updated to remove an empty inl file.
+
+ * ace/Dynamic_Service_Dependency.inl:
+
+ Removed this file.
+
+Thu Apr 27 14:00:18 UTC 2006 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * ace/Sock_Connect.cpp:
+ Implemented get_ip_interfaces for OpenVMS
+
+Thu Apr 27 11:19:18 UTC 2006 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * ace/Array_Map.h:
+ * ace/ATM_Addr.h:
+ * ace/Atomic_Op_T.h:
+ * ace/Base_Thread_Adapter.h:
+ * ace/Cached_Connect_Strategy_T.h:
+ * ace/Capabilities.h:
+ * ace/Default_Constants.h:
+ * ace/Hash_Map_Manager_T.h:
+ * ace/Log_Msg_Callback.h:
+ * ace/Log_Msg_IPC.h:
+ * ace/Map_Manager.h:
+ * ace/POSIX_Asynch_IO.h:
+ * ace/POSIX_Proactor.h:
+ * ace/RB_Tree.h:
+ * ace/Strategies_T.h:
+ * ace/Timer_Heap_T.h:
+ * ace/Timer_List_T.h:
+ * ace/Timer_Queue_Adapters.h:
+ * ace/Timer_Queue_T.h:
+ * ace/Timer_Wheel_T.h:
+ Fixed doxygen warnings
+
+Thu Apr 27 01:49:18 UTC 2006 Ossama Othman <ossama@dre.vanderbilt.edu>
+
+ * ace/OS_NS_sys_sendfile.h (sendfile, sendfile_emulation):
+ * ace/OS_NS_sys_sendfile.cpp (sendfile_emulation):
+
+ ACE_LOFF_T -> off_t. Expected ACE_LOFF_T behavior is still
+ under scrutiny.
+
+ * ace/OS_NS_sys_sendfile.inl:
+
+ Added missing <sys/sendfile.h> include directive. Addresses
+ infinite recursion at run-time when ACE_HAS_SENDFILE is defined.
+
+ (sendfile):
+
+ ACE_LOFF_T -> off_t, as above.
+
+Wed Apr 26 22:00:21 UTC 2006 Iliyan Jeliazkov <iliyan@ociweb.com>
+
+ * ace/Parse_Node.h:
+ * ace/Service_Gestalt.h:
+
+ Correcting a build problem, caused by the extraneous semicolons
+ after ACE_UNIMPLEMENTED_FUNC
+
+Wed Apr 26 20:21:49 UTC 2006 Iliyan Jeliazkov <iliyan@ociweb.com>
+
+ The motivation for these changes was to enable support in ACE
+ for multiple instances of Service Configuration Repository, or
+ more appropriately - "Gestalt" (from the German word, meaning
+ something that's more than the sum of its parts). This is
+ feature is necessary to enable support for ORB-specific, or more
+ generally - service-specific sets of services, i.e. to be able
+ to have dynamically loaded services to use their own private set
+ of service objects. In the context of the implementation I will
+ use "gestalt" as a synonym for service configuration context or
+ service configuration repository.
+
+ In order to accomplish this, the "instance"-related
+ functionality of the former ACE_Service_Config class has been
+ moved to another class - ACE_Service_Gestalt. The
+ ACE_Service_Config retains all static interfaces and those
+ members, pertaining to the concept of process-wide configuration
+ state. The service config, as known today has been retained as a
+ concept, but in its specialized semantics as holding a
+ process-wide configuration state. The primary concept expressing
+ an instance of configuration context is the gestalt. The
+ implementation actually uses a specialization of
+ ACE_Service_Gestalt in order to implement ACE_Service_Config as
+ a singleton, special case of configuration context.
+
+ The static methods in ACE_Service_Config provide access to
+ process-wide gestalt (ubergestalt, anyone?) instance.
+
+ For more details, here is the history of all included changes,
+ with their motivation and explanation. It is ordered
+ alphabetically, by the names of the changed files:
+
+ * ace/ACE.cpp:
+
+ Added to the condition evaluating ACE::debug() to include a
+ check if environmental variable ACE_DEBUG has been set.
+
+ Updated the debug() function to call getenv() only once by using
+ a method-local static variable to hold the value from the
+ environment.
+
+ * ace/DLL.h:
+ * ace/DLL.cpp:
+
+ Implemented an operator=, needed in order to implement the
+ ACE_Service_Configuration_Guard class.
+
+ * ace/DLL_Manager.cpp:
+
+ Improved the error diagnostics so that a "file not found" would
+ not mask a "symbol not defined" error when loading a DLL.
+
+ * ace/Dynamic_Service.h:
+
+ "Privatized" copy ctor and operator= for ACE_Dynamic_Service
+ objects since it is not designed for such operations.
+
+ * ace/Dynamic_Service.inl:
+
+ Added overloaded method instance() for ACE_ANTI_TCHAR.
+
+ * ace/Dynamic_Service.cpp:
+
+ Changes to enable instantiation of a service, based on the
+ registration in a particular service repository. Adding a method
+ that takes ACE_Service_Gestalt* additional parameter.
+
+ * ace/Dynamic_Service_Base.h:
+ * ace/Dynamic_Service_Base.cpp:
+
+ Factored out a find_i() method to be used by the friend
+ ACE_Dynamic_Service_Dependency class. It implements the specific
+ lookup policy that extends the search to the global repository
+ if the named service object can not be found locally.
+
+ Added instance method, allowing the caller to explicitly specify
+ the gestalt.
+
+ * ace/Dynamic_Service_Dependency.h:
+ * ace/Dynamic_Service_Dependency.inl:
+ * ace/Dynamic_Service_Dependency.cpp:
+
+ A newly introduced class, whose instances are designed to be
+ embedded inside instances of other classes, typically created by
+ DLL-based factories (service objects). This provides a way to
+ declare dependency on a specific service, thus avoiding order of
+ initialization issues with objects whose implementation code
+ resides in dynamically loaded services.
+
+ It is disastrous to have dynamically loadable services create
+ and give away ownership of objects and then be unloaded before
+ all those instances have been deleted. Normally the code for
+ such objects classes resides within the TEXT segment of the DLL,
+ which implements the service. If a service gets removed, its DLL
+ may be unmapped from memory and then any attempt to invoke a
+ method on the said objects will cause SEGV.
+
+ Such instances must contain a member of
+ ACE_Dynamic_Service_Dependency initialized with the service they
+ depend on. @code ACE_Dynamic_Service_Dependency's constructor
+ and destructor are "magical" - they work by maintaining the
+ underlying dynamic service's DLL reference count.
+
+ The problem was not present before because the one Service
+ Repository outlived any other user objects. Now that an
+ un-loadable service can own its configuration, the sequence of
+ service finalization has been reversed.
+
+ Updated the implementation of ACE_Dynamic_Service_Dependency
+ class to ease debugging. ACE_Dynamic_Service_Dependency gets
+ initialized whenever a dependent service gets loaded, to help us
+ keep our access to dependent instances after their DLL is gone
+ (by upping the ref count on the DLL).
+
+ Updated usage of gestalt's instance() to current(). Removed
+ unnecessary comments.
+
+ * ace/Global_Macros.h:
+
+ Changed the ACE_STATIC_SVC_DEFINE to use the new
+ ACE_Service_Config::insert () method, which allows to streamline
+ the Service Configuration interface and promote hiding the
+ storage used for the static service descriptors.
+
+ * ace/Parse_Node.h:
+ * ace/Parse_Node.cpp:
+
+ Changes to aid in keeping track of the gestalt, while deep in
+ the guts of the svc.conf parser.
+
+ Replaced the ACE_Service_Gestalt & in the method signatures with
+ ACE_Service_Gestalt * to unify the interfaces.
+
+ Updated the static function node's logic to use only
+ ACE_Service_Gestalt public members and to no longer rely on
+ knowledge about the internal storage representation of service
+ repository.
+
+ Removed a static_cast<> in ACE_Static_Function_Node::symbol()
+ that was causing problems on some platforms. It was not even
+ necessary as both sides were of the same type.
+
+ * ace/Service_Config.{h,inl,cpp}:
+
+ This separates the responsibilities between the service gestalt,
+ which represents an _instance_ of configuration information, and
+ the service config, which represents a special, process-wide,
+ global configuration repository. Since both these entities
+ represent the same concept - service configuration state, but
+ from different aspects, the ACE_Service_Config now inherits
+ (publicly) from ACE_Service_Gestalt.
+
+ Lots of instance-related code moved to ACE_Service_Gestalt
+ Replaced the use of char with ACE_ANTI_TCHAR and the appropriate
+ ACE_TEXT_* macros.
+
+ Moved the parsing of command-line options, pertaining to the
+ process as a whole, here - in the parse_args_i () (protected,
+ virtual).
+
+ In order to resolve a problem caused by the inability of a
+ dependent static service to determine which gestalt they need to
+ register with, the concept of "current" was separated from the
+ "global" gestalt. The current gestalt is pointed to by a
+ pointer, stored in thread-specific storage (TSS) and manipulated
+ by the ACE_Service_Config_Guard class that implements the
+ "resource acquisition is initialization" idiom.
+
+ Fixed an error in the separation of responsibilities between the
+ instance gestalt and the global (ubergestalt), during
+ initialization. The bug can cause infinite recursion, when
+ initializing an ORB, housed in a dynamic service. The singleton
+ gestalt (i.e. ACE_Service_Config) must be initialized through
+ open_i(), before open_i() can proceed initializing the specific
+ gestalt instance. The difficulty is in that some use cases
+ reverse the order of initialization by calling
+ ACE_Service_Config::open () first and then, at some point call
+ the instance gestalt open_i(). The solution is to use the
+ is_initialized_ member together with an explicit call to
+ ACE_Service_Config::global()->open_i(). To ease debugging of
+ the process of registering static service, I have changes the
+ ACE_Service_Config::static_svcs() to return
+ ACE_Service_Gestalt::instance (), instead. Thus all the
+ ACE_STATIC_SVC* macros are still working (no need to change
+ existing code), but now there is a convenient place to debug -
+ see the newly added ACE_Service_Gestalt::insert () method. The
+ header file no longer declares ACE_STATIC_SVCS,
+ ACE_STATIC_SVCS_ITERATOR, ACE_SVC_QUEUE and
+ ACE_SVC_QUEUE_ITERATOR. Those are now protected typedefs in
+ ACE_Service_Gestalt, where they are actually used.
+
+ Added new insert () method to use instead of the sequence
+ static_svc ()->insert () which unnecessary exposes the internal
+ storage structure of Service Configurator. Made no_static_svcs_
+ an instance member, instead of a class (static) member, thus
+ providing for ability to set it per instance, not globally.
+
+ Added default values for open_i() and declared private copy ctor
+ and assignment operator for ACE_Service_Config_Guard, since it
+ is not intended to be copied.
+
+ Similarly, moved the parts of the open_i() functionality that
+ did not belong in every instance of the gestalt.
+ ACE_Service_Config is again a process-wide Singleton,registered
+ with ACE_Object_Manager.
+
+ Eliminated old #if 0-ed code in Service_Config.cpp.
+
+ * ace/Service_Gestalt.h:
+ * ace/Service_Gestalt.inl:
+ * ace/Service_Gestalt.cpp:
+
+ Encapsulates the idea of Service Configuration repository, or
+ configuration context.
+
+ Changed open_i to be able to detect if it is working on the
+ special, process-wide instance (ubergestalt) or a "plain"
+ gestalt instance, since there are things that must only be done
+ once per process - like signal handler, logging key and
+ daemon-ization of the whole process.
+
+ Added an ignore_static_svcs parameter to
+ ACE_Service_Gestalt::open_i in order to preserve the prior
+ behavior of the singleton ACE_Service_Gestalt instance. Even
+ though its no_static_svcs_ member was being initialized with 1,
+ some clients (TAO) needs to be able to override it. Since now a
+ call to open_i on an instance gestalt may precede in time the
+ call to open_i on the ubergestalt, we need a mechanism to allow
+ the no_static_svcs_ value to be overridden.
+
+ Added the insert()'s implementation (described above). Added a
+ singleton() method to return the process-wide gestalt singleton
+ (or ubergestalt?:). Used in open_i() to account for the fact
+ that now a Service Gestalt may be called to open () prior to
+ open () on the singleton instance, which would typically contain
+ the bulk of the static service object descriptors.
+
+ There was a problem with "hybrid" service objects, i.e. dynamic
+ SO which contains static SO (dependent services). The dependent
+ services are typically registered via static ctor or static
+ initializer at the point of loading of the dynamic SO's DLL. As
+ such, they end up registering before the dynamic SO. Upon
+ finalization of the service repository, the dynamic SO is
+ finalized first, thus unloading its DLL and unmapping the TEXT
+ segment, where the dependent static services code is. When
+ next, the static SO is to be finalized its memory is no longer
+ at valid address. The change ensures the dynamic service is
+ registered *before* its dependent static services and will
+ therefore be finalized last. The solution is based upon the
+ concept of forward declaring a dynamic service, named after the
+ configuration file being processed. Before processing a file,
+ we simply check for an existing service with the same name and
+ "pass" if we find one.
+
+ Fixed the ACE_Service_Config_Guard's detection of the case where
+ the forward service declaration was not replaced by a proper
+ declaration as expected. It now properly removes the forward
+ decl, not the "good" instance.
+
+ Cleared up the TSS management issue, causing executable to crash
+ on startup. The problem was due to an order-of-instantiation
+ issue, involving the TSS-based pointer to the current
+ gestalt. Used ACE_Object_Manager's shutting_down and starting_up
+ methods to determine if it is safe to use the static ACE_TSS
+ instance.
+
+ Added const-ness for find(). Removed prototypes for initialize,
+ resume, suspend and remove that used plain char type and
+ conditionally compiled in only for WinCE and
+ ACE_USES_WCHAR. Service_Config still declares and defines these
+ (using ACE_ANTI_TCHAR). Updated to resolve problems when built
+ with ACE_USES_WCHAR.
+
+ Declared private copy ctor and assignment operator for
+ ACE_Service_Gestalt and ACE_Service_Type_Factory, since their
+ instances are not intended to be copied. Added an
+ ACE_UNIMPLEMENTED_FUNC macro for the copy-ctor and assignment
+ operator of ACE_Service_Type_Factory.
+
+ Reorganized to streamline the header file and remove unnecessary
+ declarations and to add a decl for find_static_svc_descriptor().
+
+ Changed the open() method's implementation to incorporate the
+ additional parameter for open_i().
+
+ Added the new find_static_svc_descriptor() member, which allows
+ ACE_Static_Function_Node to not need to know how the static
+ services are registered in the service repository.
+
+ * ace/Service_Object.h:
+ * ace/Service_Object.inl:
+ * ace/Service_Object.cpp:
+
+ Exposed the dll_ member through dll () const method because the
+ reference is needed by the new ACE_Dynamic_Service_Dependency
+ class. Fixed the dump () method.
+
+ * ace/Service_Repository.h:
+ * ace/Service_Repository.cpp:
+
+ Added const-ness for the find* () methods. Added debugging. The
+ remove method changes the order of services registrations in the
+ repository, which may break the Service Repository's invariant,
+ imposed by the need to correctly finalize dynamic services with
+ their own static services.
+
+ For example, consider a case where a static service (S0) is
+ registered in the repository. Then a DLL-based service (D1)
+ registers its own static service (S1). So far the order is
+ "finalization-compatible": S0 < D1 < S1, i.e. services will be
+ finalized in reverse order and D1's DLL will still be available
+ when finalizing S1. Now let's remove (S0). Currently, after
+ this operation the repository end up in this order: S1 < D1,
+ which is trivially not finalization-compatible.
+
+ Instead of replacing the pointer with the last ptr to a svc in
+ the array (repository) and then decrementing the current size of
+ the repo, the solution actually shifts left the rest of the
+ array.
+
+ * ace/Service_Types.cpp:
+ * ace/Shared_Object.cpp:
+
+ Removed some and updated existing debug statements. Eliminated
+ dead partial instantiation code.
+
+ * ace/Svc_Conf.y:
+ * ace/Svc_Conf.h:
+ * ace/Svc_Conf_Tokens.h:
+ * ace/Svc_Conf_y.cpp:
+
+ Changed to allow propagation of the knowledge about which
+ gestalt is currently being used for service registrations.
+
+ Factored the ACE_Svc_Conf_Param class out in its own translation
+ unit.
+
+ * ace/Svc_Conf_Param.h:
+
+ Replaced the ACE_Service_Gestalt & in the method signatures with
+ ACE_Service_Gestalt *
+
+ * ace/svcconf.mpb:
+
+ Updated the svcconf.mpb rule to allow building with Bison 2.0
+ and up. The change adds #ifdef/#endif around the generated
+ header file. A YYSTYPE_IS_DECLARED define is added in order to
+ make sure the token declarations from the Svc_Conf_Tokens.h are
+ used instead of those generated in the Svc_Conf_y.cpp file.
+
+ Added the new Dynamic_Service_Dependency.* files.
+
+ * bin/tao_orb_tests.lst:
+
+ Adding the new tests to the automated test suite to run during
+ the nightly builds.
+
+Wed Apr 26 17:13:57 UTC 2006 Phil Mesnier <mesnier_p@ociweb.com>
+
+ * bin/tao_orb_tests.lst:
+ Added test for Parallel_Connect_Strategy. This test will take
+ about 9 minutes to run to completion.
+
+Wed Apr 26 14:22:31 UTC 2006 Phil Mesnier <mesnier_p@ociweb.com>
+
+ * bin/tao_orb_tests.lst:
+ Added tests for new POA features.
+
+ * bin/MakeProjectCreator/config/endpointpolicy.mpb:
+ Applications wishing to use the TAO EndpointPolicy should add
+ this base project to their MPC files. This will include
+ libTAO_EndpointPolicy in their link lines.
+
+Wed Apr 26 14:10:12 UTC 2006 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * include/makeinclude/platform_hpux_kcc.GNU:
+ * include/makeinclude/platform_irix6.x_kcc.GNU:
+ * include/makeinclude/platform_linux_kcc.GNU:
+ * include/makeinclude/platform_osf1_4.x_kcc.GNU:
+ * include/makeinclude/platform_sunos5_kcc.GNU:
+ * include/makeinclude/platform_tru64_kcc.GNU:
+ Removed these files which are for the KAI C++ compiler. This
+ compiler doesn't exist anymore and full support for KAI C++
+ has been removed now from ACE/TAO. See bugzilla bug 2007
+
+Wed Apr 26 13:03:12 UTC 2006 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * bin/tao_orb_tests.lst:
+ Added TAO/tests/POA/Bug_2511_Regression
+
+Wed Apr 26 12:52:12 UTC 2006 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * ace/Process_Manager.cpp:
+ Fixed fuzz errors and use const when possible
+
+Wed Apr 26 12:02:12 UTC 2006 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tests/CDR_Test.cpp:
+ Boolean is now size 1 or bigger, the marshaling code will take
+ care that a Boolean is marshaled as octet of size 1
+
+Wed Apr 26 11:28:28 UTC 2006 Phil Mesnier <mesnier_p@ociweb.com>
+
+ * bin/tao_orb_tests.lst:
+ Added TAO/tests/OBV/truncatable.
+
+Wed Apr 26 10:05:12 UTC 2006 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * bin/tao_orb_tests.lst:
+ Added TAO/tests/OBV
+
+Wed Apr 26 09:56:12 UTC 2006 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * bin/tao_orb_tests.lst:
+ Added TAO/tests/Portable_Interceptors/Bug_2510_Regression
+
+Wed Apr 26 07:21:12 UTC 2006 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * include/makeinclude/platform_vxworks5.5.x.GNU:
+ Increased template-depth to 50, hopefully this is large enough to
+ also build CIAO
+
+Tue Apr 25 16:44:04 UTC 2006 Phil Mesnier <mesnier_p@ociweb.com>
+
+ * ace/CDR_Stream.h:
+ * ace/CDR_Stream.cpp:
+ Added code to support rewinding the output CDR to some previous
+ location and updating a value there. This is required to support
+ marshaling offset values were the target of the offset is not
+ known until the final offset target is actually reached.
+
+Tue Apr 25 13:50:12 UTC 2006 Martin Corino <mcorino@remedy.nl>
+
+ * tests/Signal_Test.cpp:
+ Fixed this test for (modern) Linux and Solaris at least.
+ The crux is blocking signals before calling sigwait() when doing
+ synchronous signal handling.
+
+Tue Apr 25 09:35:12 UTC 2006 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * ace/Base_Thread_Adapter.h:
+ * ace/Cleanup.h:
+ Fixed some errors I made
+
+Tue Apr 25 09:23:12 UTC 2006 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * ACE-INSTALL.html:
+ Updated supported platforms and use vc8 for the MPC examples
+
+Tue Apr 25 08:49:12 UTC 2006 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * ace/CDR_Base.h:
+ Always use bool for Boolean, see bugzilla 2514 for more info
+
+Tue Apr 25 06:33:12 UTC 2006 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * ace/Log_Msg.h:
+ Put back ACE_TSS_CLEANUP_NAME that got lost by accident with the
+ vc6 cleanup. Thanks to Olli Savia for reporting this.
+
Mon Apr 24 17:39:12 UTC 2006 Johnny Willemsen <jwillemsen@remedy.nl>
* tests/run_test.lst:
diff --git a/TAO/CIAO/ChangeLog b/TAO/CIAO/ChangeLog
index 76e0c4ecf02..9a09cf0140a 100644
--- a/TAO/CIAO/ChangeLog
+++ b/TAO/CIAO/ChangeLog
@@ -1272,6 +1272,99 @@ Wed Feb 1 21:21:35 UTC 2006 William Otte <wotte@dre.vanderbilt.edu>
Wed Feb 1 20:42:42 UTC 2006 William Otte <wotte@dre.vanderbilt.edu>
+ * tools/Config_Handlers/Config_Handlers.mpc
+ * tools/Config_Handlers/Property_Handler.h
+ * tools/Config_Handlers/SatisfierProperty_Handler.h
+ * tools/Config_Handlers/Package_Handlers/CAD_Handler.cpp
+ * tools/Config_Handlers/Package_Handlers/CID_Handler.cpp
+ * tools/Config_Handlers/Package_Handlers/CPD_Handler.cpp
+ * tools/Config_Handlers/Package_Handlers/Comp_Intf_Descr_Handler.cpp
+ * tools/Config_Handlers/Package_Handlers/IAD_Handler.cpp
+ * tools/Config_Handlers/Package_Handlers/Package_Handlers.mpc
+ * tools/Config_Handlers/Utils/Functors.h
+
+ Introduced a workaround for a ICE in GCC 4.0.22.
+
+Wed Apr 26 13:10:12 UTC 2006 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tools/Config_Handlers/DP_Handler.cpp:
+ * tools/Config_Handlers/XML_File_Intf.cpp:
+ * tools/Config_Handlers/Package_Handlers/PC_Intf.cpp:
+ * tools/Config_Handlers/XSCRT/XMLSchema.hpp:
+ * tools/Config_Handlers/XSCRT/Elements.hpp:
+ * tools/Config_Handlers/XSCRT/XML.hpp:
+ Removed workarounds for vc6 again
+
+ * tools/Config_Handlers/Package_Handlers/NIA_Handler.h:
+ Added missing post.h
+
+ * tools/Config_Handlers/Package_Handlers/CPD_Handler.h:
+ * tools/Config_Handlers/Package_Handlers/PC_Intf.h:
+ Fixed incorrect file tags
+
+Wed Apr 26 08:46:12 UTC 2006 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * DAnCE/TargetManager/DomainDataManager.h:
+ Fixed compile problem in gcc4 build
+
+Tue Apr 25 21:27:05 UTC 2006 William R. Otte <wotte@dre.vanderbilt.edu>
+
+ * DAnCE/TargetManager/TargetManager.mpc
+
+ Linking problems for Borland.
+
+ * tools/Config_Handlers/Package_Handlers/PCD_Handler.cpp
+ * tools/Config_Handlers/Package_Handlers/SID_Handler.cpp
+
+ More compile fixes for Borland.
+Tue Apr 25 20:12:25 UTC 2006 William R. Otte <wotte@dre.vanderbilt.edu>
+
+ * DAnCE/NodeApplication/NodeApplication_Impl.cpp
+ * DAnCE/NodeApplication/NodeApplication_Impl.h
+ * DAnCE/NodeApplicationManager/Containers_Info_Map.cpp
+ * DAnCE/NodeApplicationManager/Containers_Info_Map.h
+ * ciao/Deployment_Core.idl
+ * tools/Config_Handlers/ADD_Handler.cpp
+ * tools/Config_Handlers/CCD_Handler.cpp
+ * tools/Config_Handlers/CEPE_Handler.cpp
+ * tools/Config_Handlers/CEPE_Handler.h
+ * tools/Config_Handlers/CPD_Handler.cpp
+ * tools/Config_Handlers/CPD_Handler.h
+ * tools/Config_Handlers/DP_Handler.cpp
+ * tools/Config_Handlers/Deployment.hpp
+ * tools/Config_Handlers/ERE_Handler.cpp
+ * tools/Config_Handlers/ERE_Handler.h
+ * tools/Config_Handlers/MDD_Handler.cpp
+ * tools/Config_Handlers/PCD_Handler.cpp
+ * tools/Config_Handlers/PCD_Handler.h
+ * tools/Config_Handlers/Property_Handler.cpp
+ * tools/Config_Handlers/Property_Handler.h
+ * tools/Config_Handlers/Req_Handler.cpp
+ * tools/Config_Handlers/Req_Handler.h
+ * tools/Config_Handlers/SatisfierProperty_Handler.cpp
+ * tools/Config_Handlers/SatisfierProperty_Handler.h
+ * tools/Config_Handlers/cdp.hpp
+ * tools/Config_Handlers/toplevel.hpp
+ * tools/Config_Handlers/Package_Handlers/CAD_Handler.cpp
+ * tools/Config_Handlers/Package_Handlers/CID_Handler.cpp
+ * tools/Config_Handlers/Package_Handlers/CPD_Handler.cpp
+ * tools/Config_Handlers/Package_Handlers/CPD_Handler.h
+ * tools/Config_Handlers/Package_Handlers/Comp_Intf_Descr_Handler.cpp
+ * tools/Config_Handlers/Package_Handlers/NIA_Handler.h
+ * tools/Config_Handlers/Package_Handlers/PCD_Handler.cpp
+ * tools/Config_Handlers/Package_Handlers/SID_Handler.cpp
+ * tools/Config_Handlers/Package_Handlers/SID_Handler.h
+
+ Compilation fixes for borland, some cosmetic fixes as well.
+
+Tue Apr 25 09:00:12 UTC 2006 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tools/Config_Handlers/CPD_Handler.h:
+ ComponentPortDescription is a struct, so also forward declare it
+ as a struct
+
+Mon Apr 24 18:53:22 UTC 2006 William R. Otte <wotte@dre.vanderbilt.edu>
+
* CIDLC/ServantSourceGenerator.cpp
Fixed a code generation problem caused by careless merging.
diff --git a/TAO/CIAO/DAnCE/NodeApplication/NodeApplication_Impl.cpp b/TAO/CIAO/DAnCE/NodeApplication/NodeApplication_Impl.cpp
index 5edb7a51b3a..0cd1d7954b2 100644
--- a/TAO/CIAO/DAnCE/NodeApplication/NodeApplication_Impl.cpp
+++ b/TAO/CIAO/DAnCE/NodeApplication/NodeApplication_Impl.cpp
@@ -413,13 +413,13 @@ CIAO::NodeApplication_Impl::passivate_component (const char * name
"CIAO::NodeApplication_Impl::passivate_component, "
"invalid instance [%s] \n",
name));
- ACE_TRY_THROW (Deployment::StartError ());
+ ACE_TRY_THROW (Components::RemoveFailure ());
}
if (CORBA::is_nil (comp_state.objref_.in ()))
{
ACE_DEBUG ((LM_DEBUG, "comp is nil\n"));
- throw Deployment::StartError ();
+ throw Components::RemoveFailure ();
}
comp_state.objref_->ciao_passivate (ACE_ENV_SINGLE_ARG_PARAMETER);
@@ -430,7 +430,7 @@ void
CIAO::NodeApplication_Impl::activate_component (const char * name
ACE_ENV_ARG_DECL)
ACE_THROW_SPEC ((::CORBA::SystemException,
- ::Components::RemoveFailure))
+ ::Deployment::StartError))
{
Component_State_Info comp_state;
@@ -438,7 +438,7 @@ CIAO::NodeApplication_Impl::activate_component (const char * name
{
ACE_ERROR ((LM_ERROR,
"CIAO (%P|%t) - NodeApplication_Impl.cpp, "
- "CIAO::NodeApplication_Impl::passivate_component, "
+ "CIAO::NodeApplication_Impl::activate_component, "
"invalid instance [%s] \n",
name));
ACE_TRY_THROW (Deployment::StartError ());
diff --git a/TAO/CIAO/DAnCE/NodeApplication/NodeApplication_Impl.h b/TAO/CIAO/DAnCE/NodeApplication/NodeApplication_Impl.h
index 8a08e3456c5..ee1878ff07d 100644
--- a/TAO/CIAO/DAnCE/NodeApplication/NodeApplication_Impl.h
+++ b/TAO/CIAO/DAnCE/NodeApplication/NodeApplication_Impl.h
@@ -183,7 +183,7 @@ namespace CIAO
virtual void activate_component (const char * name
ACE_ENV_ARG_DECL_WITH_DEFAULTS)
ACE_THROW_SPEC ((::CORBA::SystemException,
- ::Components::RemoveFailure));
+ ::Deployment::StartError));
virtual void passivate_component (const char * name
ACE_ENV_ARG_DECL_WITH_DEFAULTS)
diff --git a/TAO/CIAO/DAnCE/NodeApplicationManager/Containers_Info_Map.cpp b/TAO/CIAO/DAnCE/NodeApplicationManager/Containers_Info_Map.cpp
index df31c704651..352a005515a 100644
--- a/TAO/CIAO/DAnCE/NodeApplicationManager/Containers_Info_Map.cpp
+++ b/TAO/CIAO/DAnCE/NodeApplicationManager/Containers_Info_Map.cpp
@@ -272,9 +272,11 @@ namespace CIAO
// For svnt/exec artifacts
for (CORBA::ULong j = 0; j < artifact_num; ++j)
{
- const Deployment::ArtifactDeploymentDescription & arti =
+ Deployment::ArtifactDeploymentDescription arti =
this->plan_.artifact[ impl.artifactRef[j] ];
+ // @Stoyan: Is there any particular reason the repository
+ // manager should only work on Windows? -Will
#if defined (ACE_WIN32) || defined (ACE_WIN64)
for (size_t loc_num = 0;
loc_num < arti.location.length ();
@@ -292,8 +294,11 @@ namespace CIAO
"Containers_Info_Map::insert_instance_into_container -"
"ERROR: Unable to resolve HTTP ref to location[%d] of %s\n",
loc_num, arti.name.in ()));
-
- arti.location[loc_num] = CORBA::string_dup ("HTTP_failure");
+
+ // @Stoyan: This is an inappropriate response to
+ // this type of failure. Please throw an
+ // exception, Deployment::UnknownImplId would be appropriate.
+ arti.location[loc_num] = "HTTP_failure";
}
else
{
diff --git a/TAO/CIAO/DAnCE/NodeApplicationManager/Containers_Info_Map.h b/TAO/CIAO/DAnCE/NodeApplicationManager/Containers_Info_Map.h
index 4fb23a46f19..a60cbe662b3 100644
--- a/TAO/CIAO/DAnCE/NodeApplicationManager/Containers_Info_Map.h
+++ b/TAO/CIAO/DAnCE/NodeApplicationManager/Containers_Info_Map.h
@@ -87,7 +87,10 @@ namespace CIAO
* any references to HTTP URLs
*/
protected:
-
+
+ // @Stoyan - Please follow ACE coding guideines when naming your
+ //member variables. In particular, please use lower case and
+ //follow the name with a trailing underscore.
//directory in which to download the libraries obtained via HTTP
ACE_CString HTTP_DOWNLOAD_PATH;
diff --git a/TAO/CIAO/DAnCE/TargetManager/DomainDataManager.h b/TAO/CIAO/DAnCE/TargetManager/DomainDataManager.h
index 84e50a5fabf..ea704259a0e 100644
--- a/TAO/CIAO/DAnCE/TargetManager/DomainDataManager.h
+++ b/TAO/CIAO/DAnCE/TargetManager/DomainDataManager.h
@@ -201,10 +201,9 @@ namespace CIAO
* @param available The available Properties
*/
- void CIAO::DomainDataManager::
- match_properties (
- ::Deployment::Properties deployed,
- ::Deployment::SatisfierProperties& available);
+ void match_properties (
+ ::Deployment::Properties deployed,
+ ::Deployment::SatisfierProperties& available);
/// The different actiona that can take place
diff --git a/TAO/CIAO/DAnCE/TargetManager/TargetManager.mpc b/TAO/CIAO/DAnCE/TargetManager/TargetManager.mpc
index b5a7aaa5458..07200eb0eca 100644
--- a/TAO/CIAO/DAnCE/TargetManager/TargetManager.mpc
+++ b/TAO/CIAO/DAnCE/TargetManager/TargetManager.mpc
@@ -22,7 +22,7 @@ project(CIAO_TargetManager_stub): ciao_client_dnc, ciao_deployment_stub {
project(CIAO_TargetManager_svnt) : ciao_servant_dnc {
after += CIAO_TargetManager_stub
sharedname = TargetManager_svnt
- libs += TargetManager_stub
+ libs += TargetManager_stub NodeManager_stub
idlflags += -Wb,export_macro=TARGETMANAGER_SVNT_Export -Wb,export_include=TargetManager_svnt_export.h
dynamicflags = TARGETMANAGER_SVNT_BUILD_DLL
@@ -47,7 +47,7 @@ project(CIAO_TargetManager_svnt) : ciao_servant_dnc {
project(CIAO_TargetManager_exec) : ciao_servant_dnc, ciao_config_handlers, ciao_domainapplicationmanager_dnc {
after += CIAO_TargetManager_svnt
sharedname = TargetManager_exec
- libs += TargetManager_stub TargetManager_svnt
+ libs += TargetManager_stub TargetManager_svnt NodeManager_stub
idlflags += -Wb,export_macro=TARGETMANAGER_EXEC_Export -Wb,export_include=TargetManager_exec_export.h
dynamicflags = TARGETMANAGER_EXEC_BUILD_DLL
diff --git a/TAO/CIAO/ciao/Deployment_Core.idl b/TAO/CIAO/ciao/Deployment_Core.idl
index bfb58b6e2c8..6f0a465f7e2 100644
--- a/TAO/CIAO/ciao/Deployment_Core.idl
+++ b/TAO/CIAO/ciao/Deployment_Core.idl
@@ -284,7 +284,7 @@ module Deployment
/// CIAO specific extensions
/// Activate a component instance from the NodeApplication
void activate_component (in string inst_name)
- raises (::Components::RemoveFailure);
+ raises (::Deployment::StartError);
/// CIAO specific extensions
/// Passivate a component instance from the NodeApplication
diff --git a/TAO/CIAO/tools/Config_Handlers/ADD_Handler.cpp b/TAO/CIAO/tools/Config_Handlers/ADD_Handler.cpp
index 204bd665a70..0a81e4c4859 100644
--- a/TAO/CIAO/tools/Config_Handlers/ADD_Handler.cpp
+++ b/TAO/CIAO/tools/Config_Handlers/ADD_Handler.cpp
@@ -84,8 +84,8 @@ namespace CIAO
adcb != adce;
++adcb)
{
- Property_Handler::get_property ((*adcb),
- dest.execParameter[len++]);
+ Property_Handler::handle_property ((*adcb),
+ dest.execParameter[len++]);
}
if (src.id_p ())
diff --git a/TAO/CIAO/tools/Config_Handlers/CCD_Handler.cpp b/TAO/CIAO/tools/Config_Handlers/CCD_Handler.cpp
index 70104131917..f7e4a7e82d3 100644
--- a/TAO/CIAO/tools/Config_Handlers/CCD_Handler.cpp
+++ b/TAO/CIAO/tools/Config_Handlers/CCD_Handler.cpp
@@ -70,8 +70,8 @@ namespace CIAO
pstart != pend;
++pstart)
{
- Property_Handler::get_property (*pstart,
- toconfig.configProperty [pos++]);
+ Property_Handler::handle_property (*pstart,
+ toconfig.configProperty [pos++]);
}
pos = 0;
@@ -81,8 +81,7 @@ namespace CIAO
port != desc.end_port ();
++port)
{
- CPD_Handler::component_port_description (
- *port,
+ CPD_Handler::handle_component_port_description (*port,
toconfig.port[pos++]);
}
@@ -105,9 +104,8 @@ namespace CIAO
infoProp != desc.end_infoProperty();
infoProp++)
{
- Property_Handler::get_property (
- *infoProp,
- toconfig.infoProperty[pos]);
+ Property_Handler::handle_property (*infoProp,
+ toconfig.infoProperty[pos]);
}
}
diff --git a/TAO/CIAO/tools/Config_Handlers/CEPE_Handler.cpp b/TAO/CIAO/tools/Config_Handlers/CEPE_Handler.cpp
index b061c426987..3131ce5735b 100644
--- a/TAO/CIAO/tools/Config_Handlers/CEPE_Handler.cpp
+++ b/TAO/CIAO/tools/Config_Handlers/CEPE_Handler.cpp
@@ -24,13 +24,13 @@ namespace CIAO
eeci_b != eeci_e;
++eeci_b)
{
- CEPE_Handler::external_port_endpoint ((*eeci_b),
+ CEPE_Handler::handle_external_port_endpoint ((*eeci_b),
dest[pos++]);
}
}
void
- CEPE_Handler::external_port_endpoint (
+ CEPE_Handler::handle_external_port_endpoint (
const ComponentExternalPortEndpoint &src,
::Deployment::ComponentExternalPortEndpoint &dest)
{
diff --git a/TAO/CIAO/tools/Config_Handlers/CEPE_Handler.h b/TAO/CIAO/tools/Config_Handlers/CEPE_Handler.h
index 681fcb1ec43..f0ba7f0d2fb 100644
--- a/TAO/CIAO/tools/Config_Handlers/CEPE_Handler.h
+++ b/TAO/CIAO/tools/Config_Handlers/CEPE_Handler.h
@@ -1,11 +1,11 @@
//==============================================================
/**
-* @file CEPE_Handler.h
-*
-* $Id$
-*
-* @author Jules White <jules@dre.vanderbilt.edu>
-*/
+ * @file CEPE_Handler.h
+ *
+ * $Id$
+ *
+ * @author Jules White <jules@dre.vanderbilt.edu>
+ */
//================================================================
#ifndef CIAO_CONFIG_HANDLERS_CEPE_HANDLER_H
@@ -21,48 +21,46 @@
namespace Deployment
{
-class ComponentExternalPortEndpoints;
-struct ComponentExternalPortEndpoint;
+ class ComponentExternalPortEndpoints;
+ struct ComponentExternalPortEndpoint;
}
namespace CIAO
{
-namespace Config_Handlers
-{
-class PlanConnectionDescription;
-class ComponentExternalPortEndpoint;
+ namespace Config_Handlers
+ {
+ class PlanConnectionDescription;
+ class ComponentExternalPortEndpoint;
-/*
-* @class CEPE_Handler
-*
-* @brief Handler class for <ComponentExternalPortEndpoint> types.
-*
-* This class defines handler methods to map values from
-* XSC ComponentExternalPortEndpoint objects, parsed from
-* the descriptor files, to the corresponding CORBA IDL type.
-*
-*/
+ /*
+ * @class CEPE_Handler
+ *
+ * @brief Handler class for <ComponentExternalPortEndpoint> types.
+ *
+ * This class defines handler methods to map values from
+ * XSC ComponentExternalPortEndpoint objects, parsed from
+ * the descriptor files, to the corresponding CORBA IDL type.
+ *
+ */
-class Config_Handlers_Export CEPE_Handler
-{
-public:
-static void external_port_endpoints (
-const PlanConnectionDescription &src,
-::Deployment::ComponentExternalPortEndpoints &dest);
+ class Config_Handlers_Export CEPE_Handler
+ {
+ public:
+ static void external_port_endpoints (const PlanConnectionDescription &src,
+ ::Deployment::ComponentExternalPortEndpoints &dest);
-static ComponentExternalPortEndpoint
-external_port_endpoint (
-const ::Deployment::ComponentExternalPortEndpoint &src);
+ static ComponentExternalPortEndpoint
+ external_port_endpoint (const ::Deployment::ComponentExternalPortEndpoint &src);
-static void external_port_endpoint (const ComponentExternalPortEndpoint &src,
-::Deployment::ComponentExternalPortEndpoint &dest);
-};
+ static void handle_external_port_endpoint (const ComponentExternalPortEndpoint &src,
+ ::Deployment::ComponentExternalPortEndpoint &dest);
+ };
-typedef Sequence_Handler < ComponentExternalPortEndpoint,
-::Deployment::ComponentExternalPortEndpoints,
-::Deployment::ComponentExternalPortEndpoint,
-CEPE_Handler::external_port_endpoint > CEPE_Functor;
-}
+ typedef Sequence_Handler < ComponentExternalPortEndpoint,
+ ::Deployment::ComponentExternalPortEndpoints,
+ ::Deployment::ComponentExternalPortEndpoint,
+ CEPE_Handler::handle_external_port_endpoint > CEPE_Functor;
+ }
}
#include /**/ "ace/post.h"
diff --git a/TAO/CIAO/tools/Config_Handlers/CPD_Handler.cpp b/TAO/CIAO/tools/Config_Handlers/CPD_Handler.cpp
index 67fcc0901c6..0b7b54d1adf 100644
--- a/TAO/CIAO/tools/Config_Handlers/CPD_Handler.cpp
+++ b/TAO/CIAO/tools/Config_Handlers/CPD_Handler.cpp
@@ -10,7 +10,7 @@ namespace CIAO
namespace Config_Handlers
{
void
- CPD_Handler::component_port_description (
+ CPD_Handler::handle_component_port_description (
const ComponentPortDescription& desc,
Deployment::ComponentPortDescription& toconfig)
{
diff --git a/TAO/CIAO/tools/Config_Handlers/CPD_Handler.h b/TAO/CIAO/tools/Config_Handlers/CPD_Handler.h
index 31737241b51..57c97bc5b60 100644
--- a/TAO/CIAO/tools/Config_Handlers/CPD_Handler.h
+++ b/TAO/CIAO/tools/Config_Handlers/CPD_Handler.h
@@ -1,11 +1,11 @@
//================================================
/**
-* @file CPD_Handler.h
-*
-* $Id$
-*
-* @author Jules White <jules@dre.vanderbilt.edu>
-*/
+ * @file CPD_Handler.h
+ *
+ * $Id$
+ *
+ * @author Jules White <jules@dre.vanderbilt.edu>
+ */
//================================================
#ifndef CIAO_CONFIG_HANDLERS_CPD_HANDLER_H
@@ -22,48 +22,46 @@
namespace Deployment
{
-class ComponentPortDescription;
-class ComponentPortDescriptions;
+ struct ComponentPortDescription;
+ class ComponentPortDescriptions;
}
namespace CIAO
{
-namespace Config_Handlers
-{
-class ComponentPortDescription;
-/*
-* @class CPD_Handler
-*
-* @brief Handler class for <CCMComponentPortDescription> types.
-*
-* This class defines handler methods to map values from
-* XSC objects, parsed from the descriptor files, to the
-* corresponding CORBA IDL type for the schema element.
-*
-*/
+ namespace Config_Handlers
+ {
+ class ComponentPortDescription;
+ /*
+ * @class CPD_Handler
+ *
+ * @brief Handler class for <CCMComponentPortDescription> types.
+ *
+ * This class defines handler methods to map values from
+ * XSC objects, parsed from the descriptor files, to the
+ * corresponding CORBA IDL type for the schema element.
+ *
+ */
-class Config_Handlers_Export CPD_Handler
-{
+ class Config_Handlers_Export CPD_Handler
+ {
-public:
-/// Maps the values from the XSC object
-/// <ComponentInterfaceDescription> to the CORBA IDL type
-/// <Deployment::ComponentInterfaceDescription>.
-static void component_port_description (
-const ComponentPortDescription &desc,
-::Deployment::ComponentPortDescription &toconfig);
+ public:
+ /// Maps the values from the XSC object
+ /// <ComponentInterfaceDescription> to the CORBA IDL type
+ /// <Deployment::ComponentInterfaceDescription>.
+ static void handle_component_port_description (const ComponentPortDescription &desc,
+ ::Deployment::ComponentPortDescription &toconfig);
-static ComponentPortDescription
-component_port_description (
-const Deployment::ComponentPortDescription& src);
-};
+ static ComponentPortDescription
+ component_port_description (const Deployment::ComponentPortDescription& src);
+ };
-typedef Sequence_Handler < ComponentPortDescription,
-::Deployment::ComponentPortDescriptions,
-::Deployment::ComponentPortDescription,
-CPD_Handler::component_port_description > CPD_Functor;
+ typedef Sequence_Handler < ComponentPortDescription,
+ ::Deployment::ComponentPortDescriptions,
+ ::Deployment::ComponentPortDescription,
+ CPD_Handler::handle_component_port_description > CPD_Functor;
-}
+ }
}
#include /**/ "ace/post.h"
diff --git a/TAO/CIAO/tools/Config_Handlers/Config_Handlers.mpc b/TAO/CIAO/tools/Config_Handlers/Config_Handlers.mpc
index e4f3bb21e66..da9f5d0ba3e 100644
--- a/TAO/CIAO/tools/Config_Handlers/Config_Handlers.mpc
+++ b/TAO/CIAO/tools/Config_Handlers/Config_Handlers.mpc
@@ -1,11 +1,6 @@
//$Id$
project (XSC_XML_Handlers) : acelib, xerces {
-
- verbatim(gnuace, macros) {
- override no_hidden_visibility = 1
- }
-
sharedname += XSC_XML_Handlers
dynamicflags = XSC_XML_HANDLERS_BUILD_DLL
macros += XML_USE_PTHREADS
@@ -28,14 +23,13 @@ project (XSC_XML_Handlers) : acelib, xerces {
Header_Files {
XSC_XML_Handlers_Export.h
}
-}
-
-project (XSC_Config_Handlers) : ciao_deployment_stub, xerces, dynamicany, typecodefactory {
verbatim(gnuace, macros) {
override no_hidden_visibility = 1
}
+}
+project (XSC_Config_Handlers) : ciao_deployment_stub, xerces, dynamicany, typecodefactory {
after += CIAO_Events_Handlers RT_CCM_Config_Handlers XSC_XML_Handlers XSC_DynAny_Handler
sharedname = XSC_Config_Handlers
dynamicflags = CONFIG_HANDLERS_BUILD_DLL
@@ -82,6 +76,10 @@ project (XSC_Config_Handlers) : ciao_deployment_stub, xerces, dynamicany, typeco
Header_Files {
Config_Handlers_Export.h
}
+
+ verbatim(gnuace, macros) {
+ override no_hidden_visibility = 1
+ }
}
project (XSC_Config_Handlers_Tests) : ciao_component_dnc, ciao_config_handlers, ifr_client {
diff --git a/TAO/CIAO/tools/Config_Handlers/DP_Handler.cpp b/TAO/CIAO/tools/Config_Handlers/DP_Handler.cpp
index fb66b16fa41..0953c705cd5 100644
--- a/TAO/CIAO/tools/Config_Handlers/DP_Handler.cpp
+++ b/TAO/CIAO/tools/Config_Handlers/DP_Handler.cpp
@@ -1,8 +1,4 @@
-#if defined (_MSC_VER) && (_MSC_VER < 1300)
-#pragma warning (disable: 4018)
-#pragma warning (disable: 4284)
-#pragma warning (disable: 4146)
-#endif
+// $Id$
#include "DP_Handler.h"
#include "ace/UUID.h"
@@ -175,7 +171,7 @@ ACE_RCSID (Config_Handlers,
}
else
{
- Property_Handler::get_property (*pstart,
+ Property_Handler::handle_property (*pstart,
this->idl_dp_->infoProperty [len]);
}
}
diff --git a/TAO/CIAO/tools/Config_Handlers/Deployment.hpp b/TAO/CIAO/tools/Config_Handlers/Deployment.hpp
index 6c6cea3596f..ca6cf839a75 100644
--- a/TAO/CIAO/tools/Config_Handlers/Deployment.hpp
+++ b/TAO/CIAO/tools/Config_Handlers/Deployment.hpp
@@ -1,13 +1,13 @@
/* $Id$
-* This code was generated by the XML Schema Compiler.
-*
-* Changes made to this code will most likely be overwritten
-* when the handlers are recompiled.
-*
-* If you find errors or feel that there are bugfixes to be made,
-* please contact the current XSC maintainer:
-* Will Otte <wotte@dre.vanderbilt.edu>
-*/
+ * This code was generated by the XML Schema Compiler.
+ *
+ * Changes made to this code will most likely be overwritten
+ * when the handlers are recompiled.
+ *
+ * If you find errors or feel that there are bugfixes to be made,
+ * please contact the current XSC maintainer:
+ * Will Otte <wotte@dre.vanderbilt.edu>
+ */
// Fix for Borland compilers, which seem to have a broken
@@ -24,9 +24,9 @@
//
namespace CIAO
{
-namespace Config_Handlers
-{
-}
+ namespace Config_Handlers
+ {
+ }
}
#include <memory>
@@ -45,109 +45,109 @@ namespace Config_Handlers
namespace CIAO
{
-namespace Config_Handlers
-{
-}
+ namespace Config_Handlers
+ {
+ }
}
namespace CIAO
{
-namespace Config_Handlers
-{
-XSC_XML_Handlers_Export
-::CIAO::Config_Handlers::Domain
-domain (xercesc::DOMDocument const*);
-
-XSC_XML_Handlers_Export
-::CIAO::Config_Handlers::DeploymentPlan
-deploymentPlan (xercesc::DOMDocument const*);
-
-XSC_XML_Handlers_Export
-::CIAO::Config_Handlers::ImplementationArtifactDescription
-implementationArtifactDescription (xercesc::DOMDocument const*);
-
-XSC_XML_Handlers_Export
-::CIAO::Config_Handlers::ComponentInterfaceDescription
-componentInterfaceDescription (xercesc::DOMDocument const*);
-
-XSC_XML_Handlers_Export
-::CIAO::Config_Handlers::ComponentImplementationDescription
-componentImplementationDescription (xercesc::DOMDocument const*);
-
-XSC_XML_Handlers_Export
-::CIAO::Config_Handlers::ComponentPackageDescription
-componentPackageDescription (xercesc::DOMDocument const*);
-
-XSC_XML_Handlers_Export
-::CIAO::Config_Handlers::PackageConfiguration
-packageConfiguration (xercesc::DOMDocument const*);
-
-XSC_XML_Handlers_Export
-::CIAO::Config_Handlers::TopLevelPackageDescription
-topLevelPackageDescription (xercesc::DOMDocument const*);
-}
+ namespace Config_Handlers
+ {
+ XSC_XML_Handlers_Export
+ ::CIAO::Config_Handlers::Domain
+ domain (xercesc::DOMDocument const*);
+
+ XSC_XML_Handlers_Export
+ ::CIAO::Config_Handlers::DeploymentPlan
+ deploymentPlan (xercesc::DOMDocument const*);
+
+ XSC_XML_Handlers_Export
+ ::CIAO::Config_Handlers::ImplementationArtifactDescription
+ implementationArtifactDescription (xercesc::DOMDocument const*);
+
+ XSC_XML_Handlers_Export
+ ::CIAO::Config_Handlers::ComponentInterfaceDescription
+ componentInterfaceDescription (xercesc::DOMDocument const*);
+
+ XSC_XML_Handlers_Export
+ ::CIAO::Config_Handlers::ComponentImplementationDescription
+ componentImplementationDescription (xercesc::DOMDocument const*);
+
+ XSC_XML_Handlers_Export
+ ::CIAO::Config_Handlers::ComponentPackageDescription
+ componentPackageDescription (xercesc::DOMDocument const*);
+
+ XSC_XML_Handlers_Export
+ ::CIAO::Config_Handlers::PackageConfiguration
+ packageConfiguration (xercesc::DOMDocument const*);
+
+ XSC_XML_Handlers_Export
+ ::CIAO::Config_Handlers::TopLevelPackageDescription
+ topLevelPackageDescription (xercesc::DOMDocument const*);
+ }
}
#include "XMLSchema/Traversal.hpp"
namespace CIAO
{
-namespace Config_Handlers
-{
-namespace Traversal
-{
-}
-}
+ namespace Config_Handlers
+ {
+ namespace Traversal
+ {
+ }
+ }
}
#include "XMLSchema/Writer.hpp"
namespace CIAO
{
-namespace Config_Handlers
-{
-namespace Writer
-{
-}
-}
+ namespace Config_Handlers
+ {
+ namespace Writer
+ {
+ }
+ }
}
namespace CIAO
{
-namespace Config_Handlers
-{
-XSC_XML_Handlers_Export
-void
-domain (::CIAO::Config_Handlers::Domain const&, xercesc::DOMDocument*);
-
-XSC_XML_Handlers_Export
-void
-deploymentPlan (::CIAO::Config_Handlers::DeploymentPlan const&, xercesc::DOMDocument*);
-
-XSC_XML_Handlers_Export
-void
-implementationArtifactDescription (::CIAO::Config_Handlers::ImplementationArtifactDescription const&, xercesc::DOMDocument*);
-
-XSC_XML_Handlers_Export
-void
-componentInterfaceDescription (::CIAO::Config_Handlers::ComponentInterfaceDescription const&, xercesc::DOMDocument*);
-
-XSC_XML_Handlers_Export
-void
-componentImplementationDescription (::CIAO::Config_Handlers::ComponentImplementationDescription const&, xercesc::DOMDocument*);
-
-XSC_XML_Handlers_Export
-void
-componentPackageDescription (::CIAO::Config_Handlers::ComponentPackageDescription const&, xercesc::DOMDocument*);
-
-XSC_XML_Handlers_Export
-void
-packageConfiguration (::CIAO::Config_Handlers::PackageConfiguration const&, xercesc::DOMDocument*);
-
-XSC_XML_Handlers_Export
-void
-topLevelPackageDescription (::CIAO::Config_Handlers::TopLevelPackageDescription const&, xercesc::DOMDocument*);
-}
+ namespace Config_Handlers
+ {
+ XSC_XML_Handlers_Export
+ void
+ domain (::CIAO::Config_Handlers::Domain const&, xercesc::DOMDocument*);
+
+ XSC_XML_Handlers_Export
+ void
+ deploymentPlan (::CIAO::Config_Handlers::DeploymentPlan const&, xercesc::DOMDocument*);
+
+ XSC_XML_Handlers_Export
+ void
+ implementationArtifactDescription (::CIAO::Config_Handlers::ImplementationArtifactDescription const&, xercesc::DOMDocument*);
+
+ XSC_XML_Handlers_Export
+ void
+ componentInterfaceDescription (::CIAO::Config_Handlers::ComponentInterfaceDescription const&, xercesc::DOMDocument*);
+
+ XSC_XML_Handlers_Export
+ void
+ componentImplementationDescription (::CIAO::Config_Handlers::ComponentImplementationDescription const&, xercesc::DOMDocument*);
+
+ XSC_XML_Handlers_Export
+ void
+ componentPackageDescription (::CIAO::Config_Handlers::ComponentPackageDescription const&, xercesc::DOMDocument*);
+
+ XSC_XML_Handlers_Export
+ void
+ packageConfiguration (::CIAO::Config_Handlers::PackageConfiguration const&, xercesc::DOMDocument*);
+
+ XSC_XML_Handlers_Export
+ void
+ topLevelPackageDescription (::CIAO::Config_Handlers::TopLevelPackageDescription const&, xercesc::DOMDocument*);
+ }
}
#endif // DEPLOYMENT_HPP
diff --git a/TAO/CIAO/tools/Config_Handlers/ERE_Handler.cpp b/TAO/CIAO/tools/Config_Handlers/ERE_Handler.cpp
index 200282aa792..d64528cfdeb 100644
--- a/TAO/CIAO/tools/Config_Handlers/ERE_Handler.cpp
+++ b/TAO/CIAO/tools/Config_Handlers/ERE_Handler.cpp
@@ -24,13 +24,13 @@ namespace CIAO
erep_b != erep_e;
++erep_b)
{
- ERE_Handler::external_ref_endpoint ((*erep_b),
+ ERE_Handler::handle_external_ref_endpoint ((*erep_b),
dest[pos++]);
}
}
void
- ERE_Handler::external_ref_endpoint (
+ ERE_Handler::handle_external_ref_endpoint (
const ExternalReferenceEndpoint &src,
Deployment::ExternalReferenceEndpoint &dest)
{
diff --git a/TAO/CIAO/tools/Config_Handlers/ERE_Handler.h b/TAO/CIAO/tools/Config_Handlers/ERE_Handler.h
index 934e2273bf5..c3bad772118 100644
--- a/TAO/CIAO/tools/Config_Handlers/ERE_Handler.h
+++ b/TAO/CIAO/tools/Config_Handlers/ERE_Handler.h
@@ -1,11 +1,11 @@
//==============================================================
/**
-* @file ERE_Handler.h
-*
-* $Id$
-*
-* @author Jules White <jules@dre.vanderbilt.edu>
-*/
+ * @file ERE_Handler.h
+ *
+ * $Id$
+ *
+ * @author Jules White <jules@dre.vanderbilt.edu>
+ */
//================================================================
#ifndef CIAO_CONFIG_HANDLERS_ERE_HANDLER_H
@@ -22,49 +22,48 @@
namespace Deployment
{
-class ExternalReferenceEndpoints;
-struct ExternalReferenceEndpoint;
+ class ExternalReferenceEndpoints;
+ struct ExternalReferenceEndpoint;
}
namespace CIAO
{
-namespace Config_Handlers
-{
-class PlanConnectionDescription;
-class ExternalReferenceEndpoint;
+ namespace Config_Handlers
+ {
+ class PlanConnectionDescription;
+ class ExternalReferenceEndpoint;
-/*
-* @class ERE_Handler
-*
-* @brief Handler class for <ExternalReferenceEndpoint> types.
-*
-* This class defines handler methods to map values from
-* XSC ExternalReferenceEndpoint objects, parsed from
-* the descriptor files, to the corresponding CORBA IDL type.
-*
-*/
+ /*
+ * @class ERE_Handler
+ *
+ * @brief Handler class for <ExternalReferenceEndpoint> types.
+ *
+ * This class defines handler methods to map values from
+ * XSC ExternalReferenceEndpoint objects, parsed from
+ * the descriptor files, to the corresponding CORBA IDL type.
+ *
+ */
-class Config_Handlers_Export ERE_Handler
-{
-public:
-static void external_ref_endpoints (
-const PlanConnectionDescription &src,
-::Deployment::ExternalReferenceEndpoints &dest);
+ class Config_Handlers_Export ERE_Handler
+ {
+ public:
+ static void external_ref_endpoints (const PlanConnectionDescription &src,
+ ::Deployment::ExternalReferenceEndpoints &dest);
-static ExternalReferenceEndpoint external_ref_endpoint (
-const Deployment::ExternalReferenceEndpoint& src);
+ static ExternalReferenceEndpoint external_ref_endpoint (
+ const Deployment::ExternalReferenceEndpoint& src);
-static void external_ref_endpoint (const ExternalReferenceEndpoint &src,
-Deployment::ExternalReferenceEndpoint &dest);
-};
+ static void handle_external_ref_endpoint (const ExternalReferenceEndpoint &src,
+ Deployment::ExternalReferenceEndpoint &dest);
+ };
-typedef Sequence_Handler < ExternalReferenceEndpoint,
-::Deployment::ExternalReferenceEndpoints,
-::Deployment::ExternalReferenceEndpoint,
-ERE_Handler::external_ref_endpoint > ERE_Functor;
+ typedef Sequence_Handler < ExternalReferenceEndpoint,
+ ::Deployment::ExternalReferenceEndpoints,
+ ::Deployment::ExternalReferenceEndpoint,
+ ERE_Handler::handle_external_ref_endpoint > ERE_Functor;
-}
+ }
}
#include /**/ "ace/post.h"
diff --git a/TAO/CIAO/tools/Config_Handlers/MDD_Handler.cpp b/TAO/CIAO/tools/Config_Handlers/MDD_Handler.cpp
index 9006956d2de..c86d6dc1da1 100644
--- a/TAO/CIAO/tools/Config_Handlers/MDD_Handler.cpp
+++ b/TAO/CIAO/tools/Config_Handlers/MDD_Handler.cpp
@@ -87,7 +87,7 @@ namespace CIAO
epcb != epce;
++epcb)
{
- Property_Handler::get_property ((*epcb),
+ Property_Handler::handle_property ((*epcb),
toconfig.execParameter[len++]);
}
diff --git a/TAO/CIAO/tools/Config_Handlers/PCD_Handler.cpp b/TAO/CIAO/tools/Config_Handlers/PCD_Handler.cpp
index bcb5e4d917c..23b332d471e 100644
--- a/TAO/CIAO/tools/Config_Handlers/PCD_Handler.cpp
+++ b/TAO/CIAO/tools/Config_Handlers/PCD_Handler.cpp
@@ -26,7 +26,7 @@ namespace CIAO
///This method takes a <Deployment::PlanConnectionDescription>
///and maps the values from the passed in XSC
///PlanConnectionDescription to its members.
- void PCD_Handler::get_PlanConnectionDescription (const PlanConnectionDescription& desc,
+ void PCD_Handler::handle_PlanConnectionDescription (const PlanConnectionDescription& desc,
Deployment::PlanConnectionDescription& toconfig)
{
CIAO_TRACE("PCD_Handler::get_PlanConnectionDescription");
diff --git a/TAO/CIAO/tools/Config_Handlers/PCD_Handler.h b/TAO/CIAO/tools/Config_Handlers/PCD_Handler.h
index edac698d7b6..7b852203f60 100644
--- a/TAO/CIAO/tools/Config_Handlers/PCD_Handler.h
+++ b/TAO/CIAO/tools/Config_Handlers/PCD_Handler.h
@@ -53,7 +53,7 @@ namespace CIAO
///This method takes a <Deployment::PlanConnectionDescription>
///and maps the values from the passed in XSC
///PlanConnectionDescription to its members.
- static void get_PlanConnectionDescription (const PlanConnectionDescription& desc,
+ static void handle_PlanConnectionDescription (const PlanConnectionDescription& desc,
Deployment::PlanConnectionDescription& toconfig);
//This method takes a <Deployment::PlanConnectionDescription>
@@ -66,7 +66,7 @@ namespace CIAO
typedef Sequence_Handler < PlanConnectionDescription,
::Deployment::PlanConnectionDescriptions,
::Deployment::PlanConnectionDescription,
- PCD_Handler::get_PlanConnectionDescription > PCD_Functor;
+ PCD_Handler::handle_PlanConnectionDescription > PCD_Functor;
}
}
diff --git a/TAO/CIAO/tools/Config_Handlers/Package_Handlers/CAD_Handler.cpp b/TAO/CIAO/tools/Config_Handlers/Package_Handlers/CAD_Handler.cpp
index d9756f3c07f..ec3bb20e539 100644
--- a/TAO/CIAO/tools/Config_Handlers/Package_Handlers/CAD_Handler.cpp
+++ b/TAO/CIAO/tools/Config_Handlers/Package_Handlers/CAD_Handler.cpp
@@ -21,7 +21,7 @@ namespace CIAO
{
struct SPE_Handler
{
- static void get_spe (const SubcomponentPortEndpoint &desc,
+ static void handle_spe (const SubcomponentPortEndpoint &desc,
::Deployment::SubcomponentPortEndpoint &toconfig)
{
CIAO_TRACE("SPE_Handler::get_spe");
@@ -50,11 +50,11 @@ namespace CIAO
typedef Sequence_Handler < SubcomponentPortEndpoint,
::Deployment::SubcomponentPortEndpoints,
::Deployment::SubcomponentPortEndpoint,
- SPE_Handler::get_spe > SPE_Functor;
+ SPE_Handler::handle_spe > SPE_Functor;
struct ACD_Handler
{
- static void get_acd (const AssemblyConnectionDescription &desc,
+ static void handle_acd (const AssemblyConnectionDescription &desc,
::Deployment::AssemblyConnectionDescription &toconfig)
{
CIAO_TRACE("ACD_Handler::get_acd");
@@ -67,6 +67,9 @@ namespace CIAO
Requirement_Functor (toconfig.deployRequirement));
toconfig.internalEndpoint.length (desc.count_internalEndpoint ());
+ SEQ_HAND_GCC_BUG_WORKAROUND (SPE_Handler::handle_spe,
+ desc.begin_internalEndpoint (),
+ toconfig.internalEndpoint);
std::for_each (desc.begin_internalEndpoint (),
desc.end_internalEndpoint (),
SPE_Functor (toconfig.internalEndpoint));
@@ -113,12 +116,12 @@ namespace CIAO
typedef Sequence_Handler < AssemblyConnectionDescription,
::Deployment::AssemblyConnectionDescriptions,
::Deployment::AssemblyConnectionDescription,
- ACD_Handler::get_acd > ACD_Functor;
+ ACD_Handler::handle_acd > ACD_Functor;
struct SPR_Handler
{
- static void get_spr (const SubcomponentPropertyReference &desc,
+ static void handle_spr (const SubcomponentPropertyReference &desc,
::Deployment::SubcomponentPropertyReference &toconfig)
{
CIAO_TRACE("SPR_Handler::get_spr");
@@ -149,11 +152,11 @@ namespace CIAO
typedef Sequence_Handler < SubcomponentPropertyReference,
::Deployment::SubcomponentPropertyReferences,
::Deployment::SubcomponentPropertyReference,
- SPR_Handler::get_spr > SPR_Functor;
+ SPR_Handler::handle_spr > SPR_Functor;
struct APM_Handler
{
- static void get_apm (const AssemblyPropertyMapping &desc,
+ static void handle_apm (const AssemblyPropertyMapping &desc,
::Deployment::AssemblyPropertyMapping &toconfig)
{
CIAO_TRACE("APM_Handler::get_apm");
@@ -162,6 +165,9 @@ namespace CIAO
toconfig.externalName = desc.externalName ().c_str ();
toconfig.delegatesTo.length (desc.count_delegatesTo ());
+ SEQ_HAND_GCC_BUG_WORKAROUND (SPR_Handler::handle_spr,
+ desc.begin_delegatesTo (),
+ toconfig.delegatesTo);
std::for_each (desc.begin_delegatesTo (),
desc.end_delegatesTo (),
SPR_Functor (toconfig.delegatesTo));
@@ -185,7 +191,7 @@ namespace CIAO
typedef Sequence_Handler < AssemblyPropertyMapping,
::Deployment::AssemblyPropertyMappings,
::Deployment::AssemblyPropertyMapping,
- APM_Handler::get_apm > APM_Functor;
+ APM_Handler::handle_apm > APM_Functor;
}
@@ -204,11 +210,17 @@ namespace CIAO
/* @@ MAJO: Implement Locality */
toconfig.connection.length (desc.count_connection ());
+ SEQ_HAND_GCC_BUG_WORKAROUND (ACD_Handler::handle_acd,
+ desc.begin_connection (),
+ toconfig.connection);
std::for_each (desc.begin_connection (),
desc.end_connection (),
ACD_Functor (toconfig.connection));
toconfig.externalProperty.length (desc.count_externalProperty ());
+ SEQ_HAND_GCC_BUG_WORKAROUND (APM_Handler::handle_apm,
+ desc.begin_externalProperty (),
+ toconfig.externalProperty);
std::for_each (desc.begin_externalProperty (),
desc.end_externalProperty (),
APM_Functor (toconfig.externalProperty));
diff --git a/TAO/CIAO/tools/Config_Handlers/Package_Handlers/CID_Handler.cpp b/TAO/CIAO/tools/Config_Handlers/Package_Handlers/CID_Handler.cpp
index 782027a38fb..d5e39d485da 100644
--- a/TAO/CIAO/tools/Config_Handlers/Package_Handlers/CID_Handler.cpp
+++ b/TAO/CIAO/tools/Config_Handlers/Package_Handlers/CID_Handler.cpp
@@ -27,218 +27,222 @@ namespace CIAO
IDREF_Base<CORBA::ULong> CID_Handler::IDREF;
- namespace
+ struct Capability_Handler
{
- struct Capability_Handler
- {
- static void get_capability (const Capability &desc,
- ::Deployment::Capability &toconfig)
- {
- CIAO_TRACE ("Capability_Handler::get_capability");
-
- toconfig.name = desc.name ().c_str ();
-
- toconfig.resourceType.length (desc.count_resourceType ());
- std::for_each (desc.begin_resourceType (),
- desc.end_resourceType (),
- String_Seq_Functor (toconfig.resourceType));
-
- toconfig.property.length (desc.count_property ());
- std::for_each (desc.begin_property (),
- desc.end_property (),
- SatisfierProperty_Functor (toconfig.property));
- }
-
- static Capability get_capability (const ::Deployment::Capability &src)
- {
- CIAO_TRACE ("Capability_Handler::get_capability - reverse");
-
- Capability retval (src.name.in ());
-
- for (CORBA::ULong i = 0; i < src.resourceType.length (); ++i)
- retval.add_resourceType (src.resourceType[i]);
-
- for (CORBA::ULong i = 0; i < src.property.length (); ++i)
- retval.add_property (SatisfierProperty_Handler::get_sat_property (src.property[i]));
-
- return retval;
- }
- };
-
- typedef Sequence_Handler < Capability,
- ::Deployment::Capabilities,
- ::Deployment::Capability,
- Capability_Handler::get_capability > Capability_Functor;
-
- struct IR_Handler
- {
- static void get_ir (const ImplementationRequirement &desc,
- ::Deployment::ImplementationRequirement &toconfig)
- {
- CIAO_TRACE ("IR_Handler::get_ir");
-
- if (desc.resourceUsage_p ())
- {
- switch (desc.resourceUsage ().integral ())
- {
- case ResourceUsageKind::None_l:
- toconfig.resourceUsage = Deployment::None;
- break;
-
- case ResourceUsageKind::InstanceUsesResource_l:
- toconfig.resourceUsage = Deployment::InstanceUsesResource;
- break;
-
- case ResourceUsageKind::ResourceUsesInstance_l:
- toconfig.resourceUsage = Deployment::ResourceUsesInstance;
- break;
-
- case ResourceUsageKind::PortUsesResource_l:
- toconfig.resourceUsage = Deployment::PortUsesResource;
- break;
-
- case ResourceUsageKind::ResourceUsesPort_l:
- toconfig.resourceUsage = Deployment::ResourceUsesPort;
- break;
-
- default:
- throw Config_Error (desc.name (),
- "Unknown ResourceUsageKind.");
- break;
- }
- }
-
- if (desc.resourcePort_p ())
- toconfig.resourcePort = desc.resourcePort ().c_str ();
-
- if (desc.componentPort_p ())
- toconfig.componentPort = desc.componentPort ().c_str ();
-
- toconfig.resourceType = desc.resourceType ().c_str ();
- toconfig.name = desc.name ().c_str ();
-
- std::for_each (desc.begin_property (),
- desc.end_property (),
- Property_Functor (toconfig.property ));
- }
-
- static ImplementationRequirement
- get_ir (const ::Deployment::ImplementationRequirement &src)
- {
- CIAO_TRACE ("IR_Handler::get_ir - reverse");
-
- ImplementationRequirement retval (src.resourceType.in (),
- src.name.in ());
-
- if (src.resourceUsage.length () == 1)
- switch (src.resourceUsage[0])
- {
- case Deployment::None:
- retval.resourceUsage (ResourceUsageKind::None);
- break;
+ static void handle_capability (const Capability &desc,
+ ::Deployment::Capability &toconfig)
+ {
+ CIAO_TRACE ("Capability_Handler::get_capability");
- case Deployment::InstanceUsesResource:
- retval.resourceUsage (ResourceUsageKind::InstanceUsesResource);
- break;
+ toconfig.name = desc.name ().c_str ();
- case Deployment::ResourceUsesInstance:
- retval.resourceUsage (ResourceUsageKind::ResourceUsesInstance);
- break;
+ toconfig.resourceType.length (desc.count_resourceType ());
+ std::for_each (desc.begin_resourceType (),
+ desc.end_resourceType (),
+ String_Seq_Functor (toconfig.resourceType));
- case Deployment::PortUsesResource:
- retval.resourceUsage (ResourceUsageKind::PortUsesResource);
- break;
+ toconfig.property.length (desc.count_property ());
+ std::for_each (desc.begin_property (),
+ desc.end_property (),
+ SatisfierProperty_Functor (toconfig.property));
+ }
- case Deployment::ResourceUsesPort:
- retval.resourceUsage (ResourceUsageKind::ResourceUsesPort);
- break;
+ static Capability get_capability (const ::Deployment::Capability &src)
+ {
+ CIAO_TRACE ("Capability_Handler::get_capability - reverse");
- default:
- throw Config_Error (src.name.in (),
- "Unknown ResourceUsageKind.");
- break;
- }
+ Capability retval (src.name.in ());
- retval.resourcePort (src.resourcePort.in ());
+ for (CORBA::ULong i = 0; i < src.resourceType.length (); ++i)
+ retval.add_resourceType (src.resourceType[i]);
- retval.componentPort (src.componentPort.in ());
+ for (CORBA::ULong i = 0; i < src.property.length (); ++i)
+ retval.add_property (SatisfierProperty_Handler::get_sat_property (src.property[i]));
- for (CORBA::ULong i = 0; i < src.property.length (); ++i)
- retval.add_property (Property_Handler::get_property (src.property[i]));
+ return retval;
+ }
+ };
- return retval;
- }
- };
-
- typedef Sequence_Handler < ImplementationRequirement,
- ::Deployment::ImplementationRequirements,
- ::Deployment::ImplementationRequirement,
- IR_Handler::get_ir > IR_Functor;
-
-
-
- struct MID_Handler
- {
- static void get_mid (const MonolithicImplementationDescription &desc,
- ::Deployment::MonolithicImplementationDescription &toconfig)
- {
- CIAO_TRACE ("MID_Handler::get_mid");
-
- toconfig.nodeExecParameter.length (desc.count_nodeExecParameter ());
- std::for_each (desc.begin_nodeExecParameter (),
- desc.end_nodeExecParameter (),
- Property_Functor (toconfig.nodeExecParameter));
-
- toconfig.componentExecParameter.length (desc.count_componentExecParameter ());
- std::for_each (desc.begin_componentExecParameter (),
- desc.end_componentExecParameter (),
- Property_Functor (toconfig.componentExecParameter));
-
- toconfig.deployRequirement.length (desc.count_deployRequirement ());
- std::for_each (desc.begin_deployRequirement (),
- desc.end_deployRequirement (),
- IR_Functor (toconfig.deployRequirement));
-
- toconfig.primaryArtifact.length (desc.count_primaryArtifact ());
- std::for_each (desc.begin_primaryArtifact (),
- desc.end_primaryArtifact (),
- NIA_Functor (toconfig.primaryArtifact));
- }
-
- static MonolithicImplementationDescription
- get_mid (const ::Deployment::MonolithicImplementationDescription &src)
- {
- CIAO_TRACE ("MID_Handler::get_mid - reverse");
-
- MonolithicImplementationDescription retval;
+ typedef Sequence_Handler < Capability,
+ ::Deployment::Capabilities,
+ ::Deployment::Capability,
+ Capability_Handler::handle_capability > Capability_Functor;
- for (CORBA::ULong i = 0; i < src.nodeExecParameter.length (); ++i)
- retval.add_nodeExecParameter
- (Property_Handler::get_property (src.nodeExecParameter[i]));
-
- for (CORBA::ULong i = 0; i < src.componentExecParameter.length (); ++i)
- retval.add_componentExecParameter
- (Property_Handler::get_property (src.componentExecParameter[i]));
-
- for (CORBA::ULong i = 0; i < src.deployRequirement.length (); ++i)
- retval.add_deployRequirement
- (IR_Handler::get_ir (src.deployRequirement[i]));
-
- for (CORBA::ULong i = 0; i < src.primaryArtifact.length (); ++i)
- retval.add_primaryArtifact
- (NIA_Handler::get_nia (src.primaryArtifact[i]));
-
- return retval;
- }
-
- };
-
- typedef Sequence_Handler < MonolithicImplementationDescription,
- ::Deployment::MonolithicImplementationDescriptions,
- ::Deployment::MonolithicImplementationDescription,
- MID_Handler::get_mid > MID_Functor;
-
- }
+ struct IR_Handler
+ {
+ static void handle_ir (const ImplementationRequirement &desc,
+ ::Deployment::ImplementationRequirement &toconfig)
+ {
+ CIAO_TRACE ("IR_Handler::get_ir");
+
+ if (desc.resourceUsage_p ())
+ {
+ switch (desc.resourceUsage ().integral ())
+ {
+ case ResourceUsageKind::None_l:
+ toconfig.resourceUsage = Deployment::None;
+ break;
+
+ case ResourceUsageKind::InstanceUsesResource_l:
+ toconfig.resourceUsage = Deployment::InstanceUsesResource;
+ break;
+
+ case ResourceUsageKind::ResourceUsesInstance_l:
+ toconfig.resourceUsage = Deployment::ResourceUsesInstance;
+ break;
+
+ case ResourceUsageKind::PortUsesResource_l:
+ toconfig.resourceUsage = Deployment::PortUsesResource;
+ break;
+
+ case ResourceUsageKind::ResourceUsesPort_l:
+ toconfig.resourceUsage = Deployment::ResourceUsesPort;
+ break;
+
+ default:
+ throw Config_Error (desc.name (),
+ "Unknown ResourceUsageKind.");
+ break;
+ }
+ }
+
+ if (desc.resourcePort_p ())
+ toconfig.resourcePort = desc.resourcePort ().c_str ();
+
+ if (desc.componentPort_p ())
+ toconfig.componentPort = desc.componentPort ().c_str ();
+
+ toconfig.resourceType = desc.resourceType ().c_str ();
+ toconfig.name = desc.name ().c_str ();
+
+ std::for_each (desc.begin_property (),
+ desc.end_property (),
+ Property_Functor (toconfig.property ));
+ }
+
+ static ImplementationRequirement
+ get_ir (const ::Deployment::ImplementationRequirement &src)
+ {
+ CIAO_TRACE ("IR_Handler::get_ir - reverse");
+
+ ImplementationRequirement retval (src.resourceType.in (),
+ src.name.in ());
+
+ if (src.resourceUsage.length () == 1)
+ switch (src.resourceUsage[0])
+ {
+ case Deployment::None:
+ retval.resourceUsage (ResourceUsageKind::None);
+ break;
+
+ case Deployment::InstanceUsesResource:
+ retval.resourceUsage (ResourceUsageKind::InstanceUsesResource);
+ break;
+
+ case Deployment::ResourceUsesInstance:
+ retval.resourceUsage (ResourceUsageKind::ResourceUsesInstance);
+ break;
+
+ case Deployment::PortUsesResource:
+ retval.resourceUsage (ResourceUsageKind::PortUsesResource);
+ break;
+
+ case Deployment::ResourceUsesPort:
+ retval.resourceUsage (ResourceUsageKind::ResourceUsesPort);
+ break;
+
+ default:
+ throw Config_Error (src.name.in (),
+ "Unknown ResourceUsageKind.");
+ break;
+ }
+
+ retval.resourcePort (src.resourcePort.in ());
+
+ retval.componentPort (src.componentPort.in ());
+
+ for (CORBA::ULong i = 0; i < src.property.length (); ++i)
+ retval.add_property (Property_Handler::get_property (src.property[i]));
+
+ return retval;
+ }
+ };
+
+ typedef Sequence_Handler < ImplementationRequirement,
+ ::Deployment::ImplementationRequirements,
+ ::Deployment::ImplementationRequirement,
+ IR_Handler::handle_ir > IR_Functor;
+
+ struct MID_Handler
+ {
+ static void handle_mid (const MonolithicImplementationDescription &desc,
+ ::Deployment::MonolithicImplementationDescription &toconfig)
+ {
+ CIAO_TRACE ("MID_Handler::get_mid");
+
+ toconfig.nodeExecParameter.length (desc.count_nodeExecParameter ());
+ std::for_each (desc.begin_nodeExecParameter (),
+ desc.end_nodeExecParameter (),
+ Property_Functor (toconfig.nodeExecParameter));
+
+ toconfig.componentExecParameter.length (desc.count_componentExecParameter ());
+ std::for_each (desc.begin_componentExecParameter (),
+ desc.end_componentExecParameter (),
+ Property_Functor (toconfig.componentExecParameter));
+
+ toconfig.deployRequirement.length (desc.count_deployRequirement ());
+ while (0)
+ {
+ IR_Handler::handle_ir (*desc.begin_deployRequirement (),
+ toconfig.deployRequirement[0]);
+ }
+ std::for_each (desc.begin_deployRequirement (),
+ desc.end_deployRequirement (),
+ IR_Functor (toconfig.deployRequirement));
+
+ toconfig.primaryArtifact.length (desc.count_primaryArtifact ());
+ SEQ_HAND_GCC_BUG_WORKAROUND (NIA_Handler::handle_nia,
+ desc.begin_primaryArtifact (),
+ toconfig.primaryArtifact);
+ std::for_each (desc.begin_primaryArtifact (),
+ desc.end_primaryArtifact (),
+ NIA_Functor (toconfig.primaryArtifact));
+ }
+
+ static MonolithicImplementationDescription
+ get_mid (const ::Deployment::MonolithicImplementationDescription &src)
+ {
+ CIAO_TRACE ("MID_Handler::get_mid - reverse");
+
+ MonolithicImplementationDescription retval;
+
+ for (CORBA::ULong i = 0; i < src.nodeExecParameter.length (); ++i)
+ retval.add_nodeExecParameter
+ (Property_Handler::get_property (src.nodeExecParameter[i]));
+
+ for (CORBA::ULong i = 0; i < src.componentExecParameter.length (); ++i)
+ retval.add_componentExecParameter
+ (Property_Handler::get_property (src.componentExecParameter[i]));
+
+ for (CORBA::ULong i = 0; i < src.deployRequirement.length (); ++i)
+ retval.add_deployRequirement
+ (IR_Handler::get_ir (src.deployRequirement[i]));
+
+ for (CORBA::ULong i = 0; i < src.primaryArtifact.length (); ++i)
+ retval.add_primaryArtifact
+ (NIA_Handler::get_nia (src.primaryArtifact[i]));
+
+ return retval;
+ }
+
+ };
+
+ typedef Sequence_Handler < MonolithicImplementationDescription,
+ ::Deployment::MonolithicImplementationDescriptions,
+ ::Deployment::MonolithicImplementationDescription,
+ MID_Handler::handle_mid > MID_Functor;
+
+
void
CID_Handler::component_impl_descr (
@@ -279,8 +283,8 @@ namespace CIAO
else if (cid->monolithicImpl_p ())
{
toconfig.monolithicImpl.length (1);
- MID_Handler::get_mid (cid->monolithicImpl (),
- toconfig.monolithicImpl[0]);
+ MID_Handler::handle_mid (cid->monolithicImpl (),
+ toconfig.monolithicImpl[0]);
}
else
throw Plan_Error ("ComponentImplementationDescription must have either assemblyImpl or monolithicImpl");
@@ -293,6 +297,9 @@ namespace CIAO
// capability
toconfig.capability.length (cid->count_capability ());
+ SEQ_HAND_GCC_BUG_WORKAROUND (Capability_Handler::handle_capability,
+ cid->begin_capability (),
+ toconfig.capability);
std::for_each (cid->begin_capability (),
cid->end_capability (),
Capability_Functor (toconfig.capability));
diff --git a/TAO/CIAO/tools/Config_Handlers/Package_Handlers/CPD_Handler.cpp b/TAO/CIAO/tools/Config_Handlers/Package_Handlers/CPD_Handler.cpp
index dc3976ce698..f7c37953b97 100644
--- a/TAO/CIAO/tools/Config_Handlers/Package_Handlers/CPD_Handler.cpp
+++ b/TAO/CIAO/tools/Config_Handlers/Package_Handlers/CPD_Handler.cpp
@@ -19,7 +19,7 @@ namespace CIAO
{
struct PCI_Handler
{
- static void get_pci (const PackagedComponentImplementation &desc,
+ static void handle_pci (const PackagedComponentImplementation &desc,
::Deployment::PackagedComponentImplementation &toconfig)
{
CIAO_TRACE ("PCI_Handler::get_pci");
@@ -41,11 +41,11 @@ namespace CIAO
typedef Sequence_Handler < PackagedComponentImplementation,
::Deployment::PackagedComponentImplementations,
::Deployment::PackagedComponentImplementation,
- PCI_Handler::get_pci > PCI_Functor;
+ PCI_Handler::handle_pci > PCI_Functor;
}
void
- CPD_Handler::component_package_descr (const ComponentPackageDescription &desc,
+ CPD_Handler::handle_component_package_descr (const ComponentPackageDescription &desc,
::Deployment::ComponentPackageDescription &toconfig)
{
CIAO_TRACE ("CPD_Handler::component_package_descr");
@@ -83,6 +83,9 @@ namespace CIAO
// Packaged Component Implementations
toconfig.implementation.length ( cpd->count_implementation ());
+ SEQ_HAND_GCC_BUG_WORKAROUND (PCI_Handler::handle_pci,
+ cpd->begin_implementation (),
+ toconfig.implementation);
std::for_each (cpd->begin_implementation (),
cpd->end_implementation (),
PCI_Functor (toconfig.implementation));
@@ -136,7 +139,7 @@ namespace CIAO
{
CIAO_TRACE ("CPD_Handler::resolve_cpd");
if (!XML_HELPER->is_initialized ())
- return false;
+ return 0;
xercesc::DOMDocument* dom =
XML_HELPER->create_dom (uri);
diff --git a/TAO/CIAO/tools/Config_Handlers/Package_Handlers/CPD_Handler.h b/TAO/CIAO/tools/Config_Handlers/Package_Handlers/CPD_Handler.h
index 92b05187fa8..9535d24eef2 100644
--- a/TAO/CIAO/tools/Config_Handlers/Package_Handlers/CPD_Handler.h
+++ b/TAO/CIAO/tools/Config_Handlers/Package_Handlers/CPD_Handler.h
@@ -1,6 +1,6 @@
//================================================
/**
- * @file STD_CPD_Handler.h
+ * @file CPD_Handler.h
*
* $Id$
*
@@ -50,11 +50,11 @@ namespace CIAO
/// Maps the values from the XSC object
/// <ComponentPackageDescription> to the CORBA IDL type
/// <Deployment::ComponentPackageDescription>.
- static void component_package_descr (const ComponentPackageDescription &desc,
+ static void handle_component_package_descr (const ComponentPackageDescription &desc,
::Deployment::ComponentPackageDescription &toconfig);
static ComponentPackageDescription
- component_package_descr (const Deployment::ComponentPackageDescription& src);
+ component_package_descr (const Deployment::ComponentPackageDescription& src);
private:
static ComponentPackageDescription * resolve_cpd (const char *uri);
@@ -63,7 +63,7 @@ namespace CIAO
typedef Sequence_Handler < ComponentPackageDescription,
::Deployment::ComponentPackageDescriptions,
::Deployment::ComponentPackageDescription,
- CPD_Handler::component_package_descr > CPD_Functor;
+ CPD_Handler::handle_component_package_descr > CPD_Functor;
}
diff --git a/TAO/CIAO/tools/Config_Handlers/Package_Handlers/Comp_Intf_Descr_Handler.cpp b/TAO/CIAO/tools/Config_Handlers/Package_Handlers/Comp_Intf_Descr_Handler.cpp
index ea487980046..801519dc987 100644
--- a/TAO/CIAO/tools/Config_Handlers/Package_Handlers/Comp_Intf_Descr_Handler.cpp
+++ b/TAO/CIAO/tools/Config_Handlers/Package_Handlers/Comp_Intf_Descr_Handler.cpp
@@ -16,11 +16,9 @@ namespace CIAO
{
namespace Packaging
{
- namespace
- {
struct Comp_Prop_Handler
{
- static void get_cpd (const ComponentPropertyDescription &desc,
+ static void handle_cpd (const ComponentPropertyDescription &desc,
::Deployment::ComponentPropertyDescription &toconfig)
{
CIAO_TRACE ("Comp_Prop_Handler::get_cpd");
@@ -44,8 +42,8 @@ namespace CIAO
typedef Sequence_Handler < ComponentPropertyDescription,
::Deployment::ComponentPropertyDescriptions,
::Deployment::ComponentPropertyDescription,
- Comp_Prop_Handler::get_cpd > Comp_Prop_Functor;
- }
+ Comp_Prop_Handler::handle_cpd > Comp_Prop_Functor;
+
void
Comp_Intf_Descr_Handler::comp_intf_descr (
@@ -96,6 +94,9 @@ namespace CIAO
CIAO::Config_Handlers::CPD_Functor (toconfig.port));
toconfig.property.length (cid->count_property ());
+ SEQ_HAND_GCC_BUG_WORKAROUND (Comp_Prop_Handler::handle_cpd,
+ cid->begin_property (),
+ toconfig.property);
std::for_each (cid->begin_property (),
cid->end_property (),
Comp_Prop_Functor (toconfig.property));
diff --git a/TAO/CIAO/tools/Config_Handlers/Package_Handlers/IAD_Handler.cpp b/TAO/CIAO/tools/Config_Handlers/Package_Handlers/IAD_Handler.cpp
index f77a5f092f1..c0010429df6 100644
--- a/TAO/CIAO/tools/Config_Handlers/Package_Handlers/IAD_Handler.cpp
+++ b/TAO/CIAO/tools/Config_Handlers/Package_Handlers/IAD_Handler.cpp
@@ -49,6 +49,9 @@ namespace CIAO
String_Seq_Functor (toconfig.location));
toconfig.dependsOn.length (iad->count_dependsOn ());
+ SEQ_HAND_GCC_BUG_WORKAROUND (NIA_Handler::handle_nia,
+ desc.begin_dependsOn (),
+ toconfig.dependsOn);
std::for_each (iad->begin_dependsOn (),
iad->end_dependsOn (),
NIA_Functor (toconfig.dependsOn));
diff --git a/TAO/CIAO/tools/Config_Handlers/Package_Handlers/NIA_Handler.h b/TAO/CIAO/tools/Config_Handlers/Package_Handlers/NIA_Handler.h
index 6ad2767104b..edc5fe7fa6c 100644
--- a/TAO/CIAO/tools/Config_Handlers/Package_Handlers/NIA_Handler.h
+++ b/TAO/CIAO/tools/Config_Handlers/Package_Handlers/NIA_Handler.h
@@ -34,7 +34,7 @@ namespace CIAO
class Packaging_Handlers_Export NIA_Handler
{
public:
- static void get_nia (const NamedImplementationArtifact &desc,
+ static void handle_nia (const NamedImplementationArtifact &desc,
::Deployment::NamedImplementationArtifact &toconfig)
{
toconfig.name = desc.name ().c_str ();
@@ -55,10 +55,11 @@ namespace CIAO
typedef Sequence_Handler < NamedImplementationArtifact,
::Deployment::NamedImplementationArtifacts,
::Deployment::NamedImplementationArtifact,
- NIA_Handler::get_nia > NIA_Functor;
+ NIA_Handler::handle_nia > NIA_Functor;
}
}
}
+#include /**/ "ace/post.h"
#endif /* CIAO_PACKAGING_NIA_HANDLER_H */
diff --git a/TAO/CIAO/tools/Config_Handlers/Package_Handlers/PCD_Handler.cpp b/TAO/CIAO/tools/Config_Handlers/Package_Handlers/PCD_Handler.cpp
index 922c1fac252..675060fd082 100644
--- a/TAO/CIAO/tools/Config_Handlers/Package_Handlers/PCD_Handler.cpp
+++ b/TAO/CIAO/tools/Config_Handlers/Package_Handlers/PCD_Handler.cpp
@@ -1,19 +1,19 @@
// $Id$
#include "tao/AnyTypeCode/AnyTypeCode_methods.h"
+#include "ciao/CIAO_common.h"
+#include "ciao/Packaging_DataC.h"
+#include "Utils/XML_Helper.h"
+#include "Utils/XercesString.h"
+#include "Utils/Exceptions.h"
#include "Package_Handlers/PCD_Handler.h"
#include "Package_Handlers/CPD_Handler.h"
-#include "Basic_Deployment_Data.hpp"
-#include "ciao/Packaging_DataC.h"
#include "Deployment.hpp"
#include "Property_Handler.h"
#include "Req_Handler.h"
-#include "Utils/XercesString.h"
-#include "Utils/Exceptions.h"
-#include <memory>
-#include "ciao/CIAO_common.h"
+#include "Basic_Deployment_Data.hpp"
-#include <xercesc/util/XMLString.hpp>
+#include <memory>
namespace CIAO
{
@@ -25,13 +25,20 @@ namespace CIAO
PCD_Handler::package_config (const ACE_TCHAR *uri,
::Deployment::PackageConfiguration &toconfig)
{
- xercesc::DOMDocument *dom = XML_HELPER->create_dom (uri);
+ const xercesc::DOMDocument *dom = XML_HELPER->create_dom (uri);
+
+ if (dom == 0)
+ {
+ std::string error ("Unable to open file: ");
+ error += uri;
+ throw Parse_Error (error);
+ }
- XStr root = dom->getDocumentElement ()->getTagName ();
+ XStr root = dom->getDocumentElement ()->getTagName ();
if (root == XStr ("Deployment:topLevelPackageDescription"))
{
- TopLevelPackageDescription tpd (topLevelPackageDescription (dom));
+ TopLevelPackageDescription tpd = topLevelPackageDescription (dom);
PCD_Handler::package_config (tpd.package (),
toconfig);
}
@@ -83,8 +90,8 @@ namespace CIAO
if (pcd->basePackage_p ())
{
toconfig.basePackage.length (1);
- CPD_Handler::component_package_descr (pcd->basePackage (),
- toconfig.basePackage [0]);
+ CPD_Handler::handle_component_package_descr (pcd->basePackage (),
+ toconfig.basePackage [0]);
}
// @@ MAJO: Support other elements present here.
diff --git a/TAO/CIAO/tools/Config_Handlers/Package_Handlers/PC_Intf.cpp b/TAO/CIAO/tools/Config_Handlers/Package_Handlers/PC_Intf.cpp
index 334245559fa..e265295d040 100644
--- a/TAO/CIAO/tools/Config_Handlers/Package_Handlers/PC_Intf.cpp
+++ b/TAO/CIAO/tools/Config_Handlers/Package_Handlers/PC_Intf.cpp
@@ -1,11 +1,5 @@
// $Id$
-#if defined (_MSC_VER) && (_MSC_VER < 1300)
-#pragma warning (disable: 4018)
-#pragma warning (disable: 4284)
-#pragma warning (disable: 4146)
-#endif
-
#include "STD_PC_Intf.h"
#include "Utils/XML_Helper.h"
#include "Deployment.hpp"
diff --git a/TAO/CIAO/tools/Config_Handlers/Package_Handlers/PC_Intf.h b/TAO/CIAO/tools/Config_Handlers/Package_Handlers/PC_Intf.h
index d280fb5c655..c15ae0389b9 100644
--- a/TAO/CIAO/tools/Config_Handlers/Package_Handlers/PC_Intf.h
+++ b/TAO/CIAO/tools/Config_Handlers/Package_Handlers/PC_Intf.h
@@ -1,6 +1,6 @@
//==============================================================
/**
- * @file STD_PC_Intf.h
+ * @file PC_Intf.h
*
* $Id$
*
diff --git a/TAO/CIAO/tools/Config_Handlers/Package_Handlers/Package_Handlers.mpc b/TAO/CIAO/tools/Config_Handlers/Package_Handlers/Package_Handlers.mpc
index fce4f459738..e73d5790a70 100644
--- a/TAO/CIAO/tools/Config_Handlers/Package_Handlers/Package_Handlers.mpc
+++ b/TAO/CIAO/tools/Config_Handlers/Package_Handlers/Package_Handlers.mpc
@@ -29,6 +29,10 @@ project (Package_Config_Handlers) : acelib, ciao_deployment_stub, xerces {
PCD_Handler.h
SID_Handler.h
}
+
+ verbatim(gnuace, macros) {
+ override no_hidden_visibility = 1
+ }
}
project (Package_Config_Handlers_Tests) : ciao_component_dnc, ciao_config_handlers, ifr_client {
@@ -40,6 +44,9 @@ project (Package_Config_Handlers_Tests) : ciao_component_dnc, ciao_config_handle
Source_Files {
test.cpp
}
+ verbatim(gnuace, macros) {
+ override no_hidden_visibility = 1
+ }
}
diff --git a/TAO/CIAO/tools/Config_Handlers/Package_Handlers/SID_Handler.cpp b/TAO/CIAO/tools/Config_Handlers/Package_Handlers/SID_Handler.cpp
index 4cca9747789..34eadf9ea32 100644
--- a/TAO/CIAO/tools/Config_Handlers/Package_Handlers/SID_Handler.cpp
+++ b/TAO/CIAO/tools/Config_Handlers/Package_Handlers/SID_Handler.cpp
@@ -19,7 +19,7 @@ namespace CIAO
IDREF_Base<CORBA::ULong> SID_Handler::IDREF;
void
- SID_Handler::sub_comp_inst_descr (const SubcomponentInstantiationDescription &desc,
+ SID_Handler::handle_sub_comp_inst_descr (const SubcomponentInstantiationDescription &desc,
::Deployment::SubcomponentInstantiationDescription &toconfig)
{
CIAO_TRACE ("SID_Handler::sub_comp_inst_descr");
@@ -28,7 +28,7 @@ namespace CIAO
if (desc.basePackage_p ())
{
toconfig.basePackage.length (1);
- CPD_Handler::component_package_descr (desc.basePackage (),
+ CPD_Handler::handle_component_package_descr (desc.basePackage (),
toconfig.basePackage[0]);
}
else if (desc.specializedConfig_p ())
diff --git a/TAO/CIAO/tools/Config_Handlers/Package_Handlers/SID_Handler.h b/TAO/CIAO/tools/Config_Handlers/Package_Handlers/SID_Handler.h
index c166fcd6294..1bcb73e751e 100644
--- a/TAO/CIAO/tools/Config_Handlers/Package_Handlers/SID_Handler.h
+++ b/TAO/CIAO/tools/Config_Handlers/Package_Handlers/SID_Handler.h
@@ -43,7 +43,7 @@ namespace CIAO
}
public:
- static void sub_comp_inst_descr (const SubcomponentInstantiationDescription &desc,
+ static void handle_sub_comp_inst_descr (const SubcomponentInstantiationDescription &desc,
::Deployment::SubcomponentInstantiationDescription &toconfig);
static SubcomponentInstantiationDescription
@@ -61,7 +61,7 @@ namespace CIAO
typedef Sequence_Handler < SubcomponentInstantiationDescription,
::Deployment::SubcomponentInstantiationDescriptions,
::Deployment::SubcomponentInstantiationDescription,
- SID_Handler::sub_comp_inst_descr > SID_Functor;
+ SID_Handler::handle_sub_comp_inst_descr > SID_Functor;
}
}
diff --git a/TAO/CIAO/tools/Config_Handlers/Property_Handler.cpp b/TAO/CIAO/tools/Config_Handlers/Property_Handler.cpp
index 273fe8c8e69..41129007618 100644
--- a/TAO/CIAO/tools/Config_Handlers/Property_Handler.cpp
+++ b/TAO/CIAO/tools/Config_Handlers/Property_Handler.cpp
@@ -19,7 +19,7 @@ namespace CIAO
}
void
- Property_Handler::get_property (
+ Property_Handler::handle_property (
const Property& desc,
Deployment::Property& toconfig)
{
diff --git a/TAO/CIAO/tools/Config_Handlers/Property_Handler.h b/TAO/CIAO/tools/Config_Handlers/Property_Handler.h
index 07044faed8e..5180244465e 100644
--- a/TAO/CIAO/tools/Config_Handlers/Property_Handler.h
+++ b/TAO/CIAO/tools/Config_Handlers/Property_Handler.h
@@ -1,11 +1,11 @@
//================================================
/**
-* @file Property_Handler.h
-*
-* $Id$
-*
-* @author Jules White <jules@dre.vanderbilt.edu>
-*/
+ * @file Property_Handler.h
+ *
+ * $Id$
+ *
+ * @author Jules White <jules@dre.vanderbilt.edu>
+ */
//================================================
#ifndef CIAO_CONFIG_HANDLERS_PROPERTY_HANDLER_H
@@ -22,50 +22,49 @@
namespace Deployment
{
-struct Property;
-class Properties;
+ struct Property;
+ class Properties;
}
namespace CIAO
{
-namespace Config_Handlers
-{
-class Property;
+ namespace Config_Handlers
+ {
+ class Property;
-/*
-* @class Property_Handler
-*
-* @brief Handler class for <CCMComponentPortDescription> types.
-*
-* This class defines handler methods to map values from
-* XSC objects, parsed from the descriptor files, to the
-* corresponding CORBA IDL type for the schema element.
-*
-*/
+ /*
+ * @class Property_Handler
+ *
+ * @brief Handler class for <CCMComponentPortDescription> types.
+ *
+ * This class defines handler methods to map values from
+ * XSC objects, parsed from the descriptor files, to the
+ * corresponding CORBA IDL type for the schema element.
+ *
+ */
-class Config_Handlers_Export Property_Handler
-{
-public:
-Property_Handler (void);
-virtual ~Property_Handler (void);
+ class Config_Handlers_Export Property_Handler
+ {
+ public:
+ Property_Handler (void);
+ virtual ~Property_Handler (void);
-typedef Sequence_Iterator< const ::Deployment::Properties, const ::Deployment::Property > prop_iter;
+ /// This method maps the values from the XSC object
+ /// <CIAO::Config_Handlers::Property> to the CORBA IDL type
+ /// <Deployment::Property>.
+ static void handle_property (const Property& desc,
+ ::Deployment::Property& toconfig);
+ static Property get_property (
+ const ::Deployment::Property& src);
+ };
-/// This method maps the values from the XSC object
-/// <CIAO::Config_Handlers::Property> to the CORBA IDL type
-/// <Deployment::Property>.
-static void get_property (const Property& desc,
-::Deployment::Property& toconfig);
-static Property get_property (
-const ::Deployment::Property& src);
-};
-typedef Sequence_Handler < Property,
-::Deployment::Properties,
-::Deployment::Property,
-Property_Handler::get_property> Property_Functor;
+ typedef Sequence_Handler < Property,
+ ::Deployment::Properties,
+ ::Deployment::Property,
+ Property_Handler::handle_property > Property_Functor;
-}
+ }
}
#include /**/ "ace/post.h"
diff --git a/TAO/CIAO/tools/Config_Handlers/Req_Handler.cpp b/TAO/CIAO/tools/Config_Handlers/Req_Handler.cpp
index 37fd441ac92..c20d5e428f2 100644
--- a/TAO/CIAO/tools/Config_Handlers/Req_Handler.cpp
+++ b/TAO/CIAO/tools/Config_Handlers/Req_Handler.cpp
@@ -18,8 +18,8 @@ namespace CIAO
}
void
- Req_Handler::get_requirement (const Requirement& desc,
- Deployment::Requirement& toconfig)
+ Req_Handler::handle_requirement (const Requirement& desc,
+ Deployment::Requirement& toconfig)
{
CIAO_TRACE("Req_Handler::get_Requirement");
diff --git a/TAO/CIAO/tools/Config_Handlers/Req_Handler.h b/TAO/CIAO/tools/Config_Handlers/Req_Handler.h
index 315eee76579..be35f55e0a8 100644
--- a/TAO/CIAO/tools/Config_Handlers/Req_Handler.h
+++ b/TAO/CIAO/tools/Config_Handlers/Req_Handler.h
@@ -1,11 +1,11 @@
//==============================================================
/**
-* @file Req_Handler.h
-*
-* $Id$
-*
-* @author Jules White <jules@dre.vanderbilt.edu>
-*/
+ * @file Req_Handler.h
+ *
+ * $Id$
+ *
+ * @author Jules White <jules@dre.vanderbilt.edu>
+ */
//================================================================
#ifndef CIAO_CONFIG_HANDLERS_REQ_HANDLER_H
@@ -22,49 +22,49 @@
namespace Deployment
{
-struct Requirement;
-class Requirements;
+ struct Requirement;
+ class Requirements;
}
namespace CIAO
{
-namespace Config_Handlers
-{
-/*
-* @class REQ_Handler
-*
-* @brief Handler class for <Requirement> types.
-*
-* This class defines handler methods to map values from
-* XSC Requirement objects, parsed from
-* the descriptor files, to the corresponding CORBA IDL type.
-*
-*/
+ namespace Config_Handlers
+ {
+ /*
+ * @class REQ_Handler
+ *
+ * @brief Handler class for <Requirement> types.
+ *
+ * This class defines handler methods to map values from
+ * XSC Requirement objects, parsed from
+ * the descriptor files, to the corresponding CORBA IDL type.
+ *
+ */
-class Config_Handlers_Export Req_Handler
-{
-public:
+ class Config_Handlers_Export Req_Handler
+ {
+ public:
-Req_Handler (void);
-virtual ~Req_Handler (void);
+ Req_Handler (void);
+ virtual ~Req_Handler (void);
-///This method takes a <Deployment::Requirement>
-///and maps the values from the passed in XSC
-///Requirement to its members.
-static void get_requirement (const Requirement& desc,
-Deployment::Requirement& toconfig);
-static Requirement
-get_requirement (const Deployment::Requirement& src);
-};
+ ///This method takes a <Deployment::Requirement>
+ ///and maps the values from the passed in XSC
+ ///Requirement to its members.
+ static void handle_requirement (const Requirement& desc,
+ Deployment::Requirement& toconfig);
+ static Requirement
+ get_requirement (const Deployment::Requirement& src);
+ };
-typedef Sequence_Handler < Requirement,
-::Deployment::Requirements,
-::Deployment::Requirement,
-Req_Handler::get_requirement > Requirement_Functor;
+ typedef Sequence_Handler < Requirement,
+ ::Deployment::Requirements,
+ ::Deployment::Requirement,
+ Req_Handler::handle_requirement > Requirement_Functor;
-}
+ }
}
#include /**/ "ace/post.h"
diff --git a/TAO/CIAO/tools/Config_Handlers/SatisfierProperty_Handler.cpp b/TAO/CIAO/tools/Config_Handlers/SatisfierProperty_Handler.cpp
index 0a50d889b0b..31f4d937a49 100644
--- a/TAO/CIAO/tools/Config_Handlers/SatisfierProperty_Handler.cpp
+++ b/TAO/CIAO/tools/Config_Handlers/SatisfierProperty_Handler.cpp
@@ -20,7 +20,7 @@ namespace CIAO
}
void
- SatisfierProperty_Handler::get_sat_property (
+ SatisfierProperty_Handler::handle_sat_property (
const SatisfierProperty& desc,
Deployment::SatisfierProperty& toconfig)
{
diff --git a/TAO/CIAO/tools/Config_Handlers/SatisfierProperty_Handler.h b/TAO/CIAO/tools/Config_Handlers/SatisfierProperty_Handler.h
index 2c2f671cb02..55bf12af241 100644
--- a/TAO/CIAO/tools/Config_Handlers/SatisfierProperty_Handler.h
+++ b/TAO/CIAO/tools/Config_Handlers/SatisfierProperty_Handler.h
@@ -1,11 +1,11 @@
//================================================
/**
-* @file SatisfierProperty_Handler.h
-*
-* $Id$
-*
-* @author Jules White <jules@dre.vanderbilt.edu>
-*/
+ * @file SatisfierProperty_Handler.h
+ *
+ * $Id$
+ *
+ * @author Jules White <jules@dre.vanderbilt.edu>
+ */
//================================================
#ifndef CIAO_CONFIG_HANDLERS_SATIS_PROPERTY_HANDLER_H
@@ -22,49 +22,47 @@
namespace Deployment
{
-struct SatisfierProperty;
-class SatisfierProperties;
+ struct SatisfierProperty;
+ class SatisfierProperties;
}
namespace CIAO
{
-namespace Config_Handlers
-{
-class SatisfierProperty;
-
-/*
-* @class SatisfierProperty_Handler
-*
-* @brief Handler class for <CCMComponentPortDescription> types.
-*
-* This class defines handler methods to map values from
-* XSC objects, parsed from the descriptor files, to the
-* corresponding CORBA IDL type for the schema element.
-*
-*/
+ namespace Config_Handlers
+ {
+ class SatisfierProperty;
-class Config_Handlers_Export SatisfierProperty_Handler
-{
-public:
-SatisfierProperty_Handler (void);
-virtual ~SatisfierProperty_Handler (void);
+ /*
+ * @class SatisfierProperty_Handler
+ *
+ * @brief Handler class for <CCMComponentPortDescription> types.
+ *
+ * This class defines handler methods to map values from
+ * XSC objects, parsed from the descriptor files, to the
+ * corresponding CORBA IDL type for the schema element.
+ *
+ */
-typedef Sequence_Iterator< const ::Deployment::SatisfierProperties, const ::Deployment::SatisfierProperty > sat_prop_iter;
+ class Config_Handlers_Export SatisfierProperty_Handler
+ {
+ public:
+ SatisfierProperty_Handler (void);
+ virtual ~SatisfierProperty_Handler (void);
-/// This method maps the values from the XSC object
-/// <CIAO::Config_Handlers::SatisfierProperty> to the CORBA IDL type
-/// <Deployment::SatisfierProperty>.
-static void get_sat_property (const SatisfierProperty& desc,
-::Deployment::SatisfierProperty& toconfig);
-static SatisfierProperty get_sat_property (const ::Deployment::SatisfierProperty& src);
-};
+ /// This method maps the values from the XSC object
+ /// <CIAO::Config_Handlers::SatisfierProperty> to the CORBA IDL type
+ /// <Deployment::SatisfierProperty>.
+ static void handle_sat_property (const SatisfierProperty& desc,
+ ::Deployment::SatisfierProperty& toconfig);
+ static SatisfierProperty get_sat_property (const ::Deployment::SatisfierProperty& src);
+ };
-typedef Sequence_Handler < SatisfierProperty,
-::Deployment::SatisfierProperties,
-::Deployment::SatisfierProperty,
-SatisfierProperty_Handler::get_sat_property> SatisfierProperty_Functor;
+ typedef Sequence_Handler < SatisfierProperty,
+ ::Deployment::SatisfierProperties,
+ ::Deployment::SatisfierProperty,
+ SatisfierProperty_Handler::handle_sat_property> SatisfierProperty_Functor;
-}
+ }
}
#include /**/ "ace/post.h"
diff --git a/TAO/CIAO/tools/Config_Handlers/Utils/Functors.h b/TAO/CIAO/tools/Config_Handlers/Utils/Functors.h
index 34702cd60d0..19f6a5c9ea4 100644
--- a/TAO/CIAO/tools/Config_Handlers/Utils/Functors.h
+++ b/TAO/CIAO/tools/Config_Handlers/Utils/Functors.h
@@ -17,80 +17,10 @@ namespace CIAO
{
namespace Config_Handlers
{
- template <typename Seq_Type, typename T>
- class Sequence_Iterator :
- public std::iterator <std::forward_iterator_tag, //iterator type
- T, // Type pointed to by the iterator
- CORBA::ULong> // Distance type
- {
- public:
- Sequence_Iterator (void)
- : pos_ (0),
- seq_ (0)
- {
- }
-
- Sequence_Iterator (const Seq_Type &seq, CORBA::ULong pos = 0)
- : pos_ (pos),
- seq_ (&seq)
- {
- }
-
- Sequence_Iterator (const Sequence_Iterator &s)
- {
- *this = s;
- }
-
- Sequence_Iterator& operator= (const Sequence_Iterator &s)
- {
- this->seq_ = s.seq_;
- this->pos_ = s.pos_;
- return *this;
- }
-
- bool operator== (Sequence_Iterator &s)
- {
- return (this->seq_ == s.seq_) && (this->pos_ == s.pos_);
- }
-
- bool operator!= (Sequence_Iterator &s)
- {
- return !(*this == s);
- }
-
- T& operator* (void)
- {
- return (*seq_)[pos_];
- }
-
- T& operator-> (void)
- {
- return *(*this);
- }
-
- // Prefix operator
- Sequence_Iterator& operator++ ()
- {
- ++pos_;
- return *this;
- }
-
- Sequence_Iterator& operator++ (int)
- {
- Sequence_Iterator ans (*this);
- ++(*this);
- return ans;
- }
-
- private:
- CORBA::ULong pos_;
- Seq_Type *seq_;
- };
-
template <typename Source,
typename Dest,
typename Dest_Type,
- void (*Func)(const Source &, Dest_Type &)>
+ void (&Func)(const Source &, Dest_Type &)>
struct Sequence_Handler
{
Sequence_Handler (Dest &dest, CORBA::ULong pos = 0)
@@ -109,6 +39,22 @@ namespace CIAO
CORBA::ULong pos_;
};
+ /*
+ * This is a workaround for a GCC bug that for some reason causes
+ * functions that appear ONLY in a Sequence_Handler typedef to not
+ * be present in the compiled object file.
+ * This bug was first observed in GCC 4.02.
+ *
+ * W: The function we want to be defined
+ * X: First argument to the function
+ * Y: Second argument to the function
+ */
+#define SEQ_HAND_GCC_BUG_WORKAROUND(W, X, Y) \
+ while(0) { \
+ W (*X, Y[0]); \
+ }
+
+
template <typename Dest, typename Dest_Type>
struct String_Seq_Handler
{
diff --git a/TAO/CIAO/tools/Config_Handlers/XMLSchema/Types.hpp b/TAO/CIAO/tools/Config_Handlers/XMLSchema/Types.hpp
index 93c2a003606..a23d7f2cdd9 100644
--- a/TAO/CIAO/tools/Config_Handlers/XMLSchema/Types.hpp
+++ b/TAO/CIAO/tools/Config_Handlers/XMLSchema/Types.hpp
@@ -29,19 +29,9 @@ namespace XMLSchema
typedef XSCRT::FundamentalType<ACE_INT32> int_;
typedef XSCRT::FundamentalType<ACE_UINT32> unsignedInt;
- //@@ VC6
-#if defined (_MSC_VER) && (_MSC_VER < 1300)
-
- typedef XSCRT::FundamentalType<__int64> long_;
- typedef XSCRT::FundamentalType<unsigned __int64> unsignedLong;
-
-#else
-
typedef XSCRT::FundamentalType<ACE_INT64> long_;
typedef XSCRT::FundamentalType<ACE_UINT64> unsignedLong;
-#endif
-
//@@ It would be nice to use some arbitrary-length integer class.
//
typedef long_ decimal;
diff --git a/TAO/CIAO/tools/Config_Handlers/XML_File_Intf.cpp b/TAO/CIAO/tools/Config_Handlers/XML_File_Intf.cpp
index 041b369884a..d7d55058b25 100644
--- a/TAO/CIAO/tools/Config_Handlers/XML_File_Intf.cpp
+++ b/TAO/CIAO/tools/Config_Handlers/XML_File_Intf.cpp
@@ -1,11 +1,5 @@
// $Id$
-#if defined (_MSC_VER) && (_MSC_VER < 1300)
-#pragma warning (disable: 4018)
-#pragma warning (disable: 4284)
-#pragma warning (disable: 4146)
-#endif
-
#include "XML_File_Intf.h"
#include "Utils/XML_Helper.h"
#include "Deployment.hpp"
diff --git a/TAO/CIAO/tools/Config_Handlers/XSCRT/Elements.hpp b/TAO/CIAO/tools/Config_Handlers/XSCRT/Elements.hpp
index 0d84a6bc28a..26dfbc8e695 100644
--- a/TAO/CIAO/tools/Config_Handlers/XSCRT/Elements.hpp
+++ b/TAO/CIAO/tools/Config_Handlers/XSCRT/Elements.hpp
@@ -12,87 +12,6 @@
#include "XSCRT/Parser.hpp"
-#if defined (_MSC_VER) && (_MSC_VER < 1300)
-
-
-// Stuff for broken VC6. Don't like what you see - use better compiler!
-//
-
-
-inline
-std::wistream&
-operator>> (std::wistream& is, __int64& v)
-{
- long t;
- is >> t;
- v = t;
- return is;
-}
-
-inline
-std::wistream&
-operator>> (std::wistream& is, unsigned __int64& v)
-{
- unsigned long t;
- is >> t;
- v = t;
- return is;
-}
-
-inline
-std::wostream&
-operator<< (std::wostream& os, __int64 const& v)
-{
- os << long (v);
- return os;
-}
-
-inline
-std::wostream&
-operator<< (std::wostream& os, unsigned __int64 const& v)
-{
- os << unsigned long (v);
- return os;
-}
-
-inline
-std::istream&
-operator>> (std::istream& is, __int64& v)
-{
- long t;
- is >> t;
- v = t;
- return is;
-}
-
-inline
-std::istream&
-operator>> (std::istream& is, unsigned __int64& v)
-{
- unsigned long t;
- is >> t;
- v = t;
- return is;
-}
-
-inline
-std::ostream&
-operator<< (std::ostream& os, __int64 const& v)
-{
- os << long (v);
- return os;
-}
-
-inline
-std::ostream&
-operator<< (std::ostream& os, unsigned __int64 const& v)
-{
- os << unsigned long (v);
- return os;
-}
-
-#endif
-
namespace XSCRT
{
struct IdentityProvider
diff --git a/TAO/CIAO/tools/Config_Handlers/XSCRT/XML.hpp b/TAO/CIAO/tools/Config_Handlers/XSCRT/XML.hpp
index b12fda738d2..1f11533e2bb 100644
--- a/TAO/CIAO/tools/Config_Handlers/XSCRT/XML.hpp
+++ b/TAO/CIAO/tools/Config_Handlers/XSCRT/XML.hpp
@@ -11,16 +11,6 @@
#include <xercesc/dom/DOM.hpp>
#include <xercesc/util/XMLString.hpp>
-
-//@@ VC6
-#if defined (_MSC_VER) && (_MSC_VER < 1300)
-
-namespace std
-{
- typedef ::size_t size_t;
-}
-#endif
-
namespace XSCRT
{
namespace XML
diff --git a/TAO/CIAO/tools/Config_Handlers/XSCRT/XMLSchema.hpp b/TAO/CIAO/tools/Config_Handlers/XSCRT/XMLSchema.hpp
index 31bad0bc207..6f810782953 100644
--- a/TAO/CIAO/tools/Config_Handlers/XSCRT/XMLSchema.hpp
+++ b/TAO/CIAO/tools/Config_Handlers/XSCRT/XMLSchema.hpp
@@ -21,19 +21,9 @@ namespace XMLSchema
typedef XSCRT::FundamentalType<int> int_;
typedef XSCRT::FundamentalType<unsigned int> unsignedInt;
- //@@ VC6
-#if defined (_MSC_VER) && (_MSC_VER < 1300)
-
- typedef XSCRT::FundamentalType<__int64> long_;
- typedef XSCRT::FundamentalType<unsigned __int64> unsignedLong;
-
-#else
-
typedef XSCRT::FundamentalType<long long> long_;
typedef XSCRT::FundamentalType<unsigned long long> unsignedLong;
-#endif
-
//@@ It would be nice to use some arbitrary-length integer class.
//
typedef long_ decimal;
diff --git a/TAO/CIAO/tools/Config_Handlers/cdp.hpp b/TAO/CIAO/tools/Config_Handlers/cdp.hpp
index 8c8cb56e04f..f6033db9fca 100644
--- a/TAO/CIAO/tools/Config_Handlers/cdp.hpp
+++ b/TAO/CIAO/tools/Config_Handlers/cdp.hpp
@@ -1,13 +1,13 @@
/* $Id$
-* This code was generated by the XML Schema Compiler.
-*
-* Changes made to this code will most likely be overwritten
-* when the handlers are recompiled.
-*
-* If you find errors or feel that there are bugfixes to be made,
-* please contact the current XSC maintainer:
-* Will Otte <wotte@dre.vanderbilt.edu>
-*/
+ * This code was generated by the XML Schema Compiler.
+ *
+ * Changes made to this code will most likely be overwritten
+ * when the handlers are recompiled.
+ *
+ * If you find errors or feel that there are bugfixes to be made,
+ * please contact the current XSC maintainer:
+ * Will Otte <wotte@dre.vanderbilt.edu>
+ */
// Fix for Borland compilers, which seem to have a broken
@@ -25,10 +25,10 @@
//
namespace CIAO
{
-namespace Config_Handlers
-{
-class DeploymentPlan;
-}
+ namespace Config_Handlers
+ {
+ class DeploymentPlan;
+ }
}
#include <memory>
@@ -39,665 +39,665 @@ class DeploymentPlan;
namespace CIAO
{
-namespace Config_Handlers
-{
-class XSC_XML_Handlers_Export DeploymentPlan : public ::XSCRT::Type
-{
-//@@ VC6 anathema
-typedef ::XSCRT::Type Base__;
-
-// label
-//
-public:
-bool label_p () const;
-::XMLSchema::string< ACE_TCHAR > const& label () const;
-void label (::XMLSchema::string< ACE_TCHAR > const& );
-
-protected:
-::std::auto_ptr< ::XMLSchema::string< ACE_TCHAR > > label_;
-
-// UUID
-//
-public:
-bool UUID_p () const;
-::XMLSchema::string< ACE_TCHAR > const& UUID () const;
-void UUID (::XMLSchema::string< ACE_TCHAR > const& );
-
-protected:
-::std::auto_ptr< ::XMLSchema::string< ACE_TCHAR > > UUID_;
-
-// realizes
-//
-public:
-bool realizes_p () const;
-::CIAO::Config_Handlers::ComponentInterfaceDescription const& realizes () const;
-void realizes (::CIAO::Config_Handlers::ComponentInterfaceDescription const& );
-
-protected:
-::std::auto_ptr< ::CIAO::Config_Handlers::ComponentInterfaceDescription > realizes_;
-
-// implementation
-//
-public:
-typedef ::std::list< ::CIAO::Config_Handlers::MonolithicDeploymentDescription >::iterator implementation_iterator;
-typedef ::std::list< ::CIAO::Config_Handlers::MonolithicDeploymentDescription >::const_iterator implementation_const_iterator;
-implementation_iterator begin_implementation ();
-implementation_iterator end_implementation ();
-implementation_const_iterator begin_implementation () const;
-implementation_const_iterator end_implementation () const;
-void add_implementation (::CIAO::Config_Handlers::MonolithicDeploymentDescription const& );
-size_t count_implementation (void) const;
-
-protected:
-::std::list< ::CIAO::Config_Handlers::MonolithicDeploymentDescription > implementation_;
-
-// instance
-//
-public:
-typedef ::std::list< ::CIAO::Config_Handlers::InstanceDeploymentDescription >::iterator instance_iterator;
-typedef ::std::list< ::CIAO::Config_Handlers::InstanceDeploymentDescription >::const_iterator instance_const_iterator;
-instance_iterator begin_instance ();
-instance_iterator end_instance ();
-instance_const_iterator begin_instance () const;
-instance_const_iterator end_instance () const;
-void add_instance (::CIAO::Config_Handlers::InstanceDeploymentDescription const& );
-size_t count_instance (void) const;
-
-protected:
-::std::list< ::CIAO::Config_Handlers::InstanceDeploymentDescription > instance_;
-
-// connection
-//
-public:
-typedef ::std::list< ::CIAO::Config_Handlers::PlanConnectionDescription >::iterator connection_iterator;
-typedef ::std::list< ::CIAO::Config_Handlers::PlanConnectionDescription >::const_iterator connection_const_iterator;
-connection_iterator begin_connection ();
-connection_iterator end_connection ();
-connection_const_iterator begin_connection () const;
-connection_const_iterator end_connection () const;
-void add_connection (::CIAO::Config_Handlers::PlanConnectionDescription const& );
-size_t count_connection (void) const;
-
-protected:
-::std::list< ::CIAO::Config_Handlers::PlanConnectionDescription > connection_;
-
-// dependsOn
-//
-public:
-typedef ::std::list< ::CIAO::Config_Handlers::ImplementationDependency >::iterator dependsOn_iterator;
-typedef ::std::list< ::CIAO::Config_Handlers::ImplementationDependency >::const_iterator dependsOn_const_iterator;
-dependsOn_iterator begin_dependsOn ();
-dependsOn_iterator end_dependsOn ();
-dependsOn_const_iterator begin_dependsOn () const;
-dependsOn_const_iterator end_dependsOn () const;
-void add_dependsOn (::CIAO::Config_Handlers::ImplementationDependency const& );
-size_t count_dependsOn (void) const;
-
-protected:
-::std::list< ::CIAO::Config_Handlers::ImplementationDependency > dependsOn_;
-
-// artifact
-//
-public:
-typedef ::std::list< ::CIAO::Config_Handlers::ArtifactDeploymentDescription >::iterator artifact_iterator;
-typedef ::std::list< ::CIAO::Config_Handlers::ArtifactDeploymentDescription >::const_iterator artifact_const_iterator;
-artifact_iterator begin_artifact ();
-artifact_iterator end_artifact ();
-artifact_const_iterator begin_artifact () const;
-artifact_const_iterator end_artifact () const;
-void add_artifact (::CIAO::Config_Handlers::ArtifactDeploymentDescription const& );
-size_t count_artifact (void) const;
-
-protected:
-::std::list< ::CIAO::Config_Handlers::ArtifactDeploymentDescription > artifact_;
-
-// infoProperty
-//
-public:
-typedef ::std::list< ::CIAO::Config_Handlers::Property >::iterator infoProperty_iterator;
-typedef ::std::list< ::CIAO::Config_Handlers::Property >::const_iterator infoProperty_const_iterator;
-infoProperty_iterator begin_infoProperty ();
-infoProperty_iterator end_infoProperty ();
-infoProperty_const_iterator begin_infoProperty () const;
-infoProperty_const_iterator end_infoProperty () const;
-void add_infoProperty (::CIAO::Config_Handlers::Property const& );
-size_t count_infoProperty (void) const;
-
-protected:
-::std::list< ::CIAO::Config_Handlers::Property > infoProperty_;
-
-public:
-DeploymentPlan ();
-
-DeploymentPlan (::XSCRT::XML::Element< ACE_TCHAR > const&);
-DeploymentPlan (DeploymentPlan const& s);
-
-DeploymentPlan&
-operator= (DeploymentPlan const& s);
-
-private:
-char regulator__;
-};
-}
+ namespace Config_Handlers
+ {
+ class XSC_XML_Handlers_Export DeploymentPlan : public ::XSCRT::Type
+ {
+ //@@ VC6 anathema
+ typedef ::XSCRT::Type Base__;
+
+ // label
+ //
+ public:
+ bool label_p () const;
+ ::XMLSchema::string< ACE_TCHAR > const& label () const;
+ void label (::XMLSchema::string< ACE_TCHAR > const& );
+
+ protected:
+ ::std::auto_ptr< ::XMLSchema::string< ACE_TCHAR > > label_;
+
+ // UUID
+ //
+ public:
+ bool UUID_p () const;
+ ::XMLSchema::string< ACE_TCHAR > const& UUID () const;
+ void UUID (::XMLSchema::string< ACE_TCHAR > const& );
+
+ protected:
+ ::std::auto_ptr< ::XMLSchema::string< ACE_TCHAR > > UUID_;
+
+ // realizes
+ //
+ public:
+ bool realizes_p () const;
+ ::CIAO::Config_Handlers::ComponentInterfaceDescription const& realizes () const;
+ void realizes (::CIAO::Config_Handlers::ComponentInterfaceDescription const& );
+
+ protected:
+ ::std::auto_ptr< ::CIAO::Config_Handlers::ComponentInterfaceDescription > realizes_;
+
+ // implementation
+ //
+ public:
+ typedef ::std::list< ::CIAO::Config_Handlers::MonolithicDeploymentDescription >::iterator implementation_iterator;
+ typedef ::std::list< ::CIAO::Config_Handlers::MonolithicDeploymentDescription >::const_iterator implementation_const_iterator;
+ implementation_iterator begin_implementation ();
+ implementation_iterator end_implementation ();
+ implementation_const_iterator begin_implementation () const;
+ implementation_const_iterator end_implementation () const;
+ void add_implementation (::CIAO::Config_Handlers::MonolithicDeploymentDescription const& );
+ size_t count_implementation (void) const;
+
+ protected:
+ ::std::list< ::CIAO::Config_Handlers::MonolithicDeploymentDescription > implementation_;
+
+ // instance
+ //
+ public:
+ typedef ::std::list< ::CIAO::Config_Handlers::InstanceDeploymentDescription >::iterator instance_iterator;
+ typedef ::std::list< ::CIAO::Config_Handlers::InstanceDeploymentDescription >::const_iterator instance_const_iterator;
+ instance_iterator begin_instance ();
+ instance_iterator end_instance ();
+ instance_const_iterator begin_instance () const;
+ instance_const_iterator end_instance () const;
+ void add_instance (::CIAO::Config_Handlers::InstanceDeploymentDescription const& );
+ size_t count_instance (void) const;
+
+ protected:
+ ::std::list< ::CIAO::Config_Handlers::InstanceDeploymentDescription > instance_;
+
+ // connection
+ //
+ public:
+ typedef ::std::list< ::CIAO::Config_Handlers::PlanConnectionDescription >::iterator connection_iterator;
+ typedef ::std::list< ::CIAO::Config_Handlers::PlanConnectionDescription >::const_iterator connection_const_iterator;
+ connection_iterator begin_connection ();
+ connection_iterator end_connection ();
+ connection_const_iterator begin_connection () const;
+ connection_const_iterator end_connection () const;
+ void add_connection (::CIAO::Config_Handlers::PlanConnectionDescription const& );
+ size_t count_connection (void) const;
+
+ protected:
+ ::std::list< ::CIAO::Config_Handlers::PlanConnectionDescription > connection_;
+
+ // dependsOn
+ //
+ public:
+ typedef ::std::list< ::CIAO::Config_Handlers::ImplementationDependency >::iterator dependsOn_iterator;
+ typedef ::std::list< ::CIAO::Config_Handlers::ImplementationDependency >::const_iterator dependsOn_const_iterator;
+ dependsOn_iterator begin_dependsOn ();
+ dependsOn_iterator end_dependsOn ();
+ dependsOn_const_iterator begin_dependsOn () const;
+ dependsOn_const_iterator end_dependsOn () const;
+ void add_dependsOn (::CIAO::Config_Handlers::ImplementationDependency const& );
+ size_t count_dependsOn (void) const;
+
+ protected:
+ ::std::list< ::CIAO::Config_Handlers::ImplementationDependency > dependsOn_;
+
+ // artifact
+ //
+ public:
+ typedef ::std::list< ::CIAO::Config_Handlers::ArtifactDeploymentDescription >::iterator artifact_iterator;
+ typedef ::std::list< ::CIAO::Config_Handlers::ArtifactDeploymentDescription >::const_iterator artifact_const_iterator;
+ artifact_iterator begin_artifact ();
+ artifact_iterator end_artifact ();
+ artifact_const_iterator begin_artifact () const;
+ artifact_const_iterator end_artifact () const;
+ void add_artifact (::CIAO::Config_Handlers::ArtifactDeploymentDescription const& );
+ size_t count_artifact (void) const;
+
+ protected:
+ ::std::list< ::CIAO::Config_Handlers::ArtifactDeploymentDescription > artifact_;
+
+ // infoProperty
+ //
+ public:
+ typedef ::std::list< ::CIAO::Config_Handlers::Property >::iterator infoProperty_iterator;
+ typedef ::std::list< ::CIAO::Config_Handlers::Property >::const_iterator infoProperty_const_iterator;
+ infoProperty_iterator begin_infoProperty ();
+ infoProperty_iterator end_infoProperty ();
+ infoProperty_const_iterator begin_infoProperty () const;
+ infoProperty_const_iterator end_infoProperty () const;
+ void add_infoProperty (::CIAO::Config_Handlers::Property const& );
+ size_t count_infoProperty (void) const;
+
+ protected:
+ ::std::list< ::CIAO::Config_Handlers::Property > infoProperty_;
+
+ public:
+ DeploymentPlan ();
+
+ DeploymentPlan (::XSCRT::XML::Element< ACE_TCHAR > const&);
+ DeploymentPlan (DeploymentPlan const& s);
+
+ DeploymentPlan&
+ operator= (DeploymentPlan const& s);
+
+ private:
+ char regulator__;
+ };
+ }
}
namespace CIAO
{
-namespace Config_Handlers
-{
-}
+ namespace Config_Handlers
+ {
+ }
}
#include "XMLSchema/Traversal.hpp"
namespace CIAO
{
-namespace Config_Handlers
-{
-namespace Traversal
-{
-struct XSC_XML_Handlers_Export DeploymentPlan : ::XMLSchema::Traversal::Traverser< ::CIAO::Config_Handlers::DeploymentPlan >
-{
-virtual void
-traverse (Type&);
+ namespace Config_Handlers
+ {
+ namespace Traversal
+ {
+ struct XSC_XML_Handlers_Export DeploymentPlan : ::XMLSchema::Traversal::Traverser< ::CIAO::Config_Handlers::DeploymentPlan >
+ {
+ virtual void
+ traverse (Type&);
-virtual void
-traverse (Type const&);
+ virtual void
+ traverse (Type const&);
-virtual void
-pre (Type&);
+ virtual void
+ pre (Type&);
-virtual void
-pre (Type const&);
+ virtual void
+ pre (Type const&);
-virtual void
-label (Type&);
+ virtual void
+ label (Type&);
-virtual void
-label (Type const&);
+ virtual void
+ label (Type const&);
-virtual void
-label_none (Type&);
+ virtual void
+ label_none (Type&);
-virtual void
-label_none (Type const&);
+ virtual void
+ label_none (Type const&);
-virtual void
-UUID (Type&);
+ virtual void
+ UUID (Type&);
-virtual void
-UUID (Type const&);
+ virtual void
+ UUID (Type const&);
-virtual void
-UUID_none (Type&);
+ virtual void
+ UUID_none (Type&);
-virtual void
-UUID_none (Type const&);
+ virtual void
+ UUID_none (Type const&);
-virtual void
-realizes (Type&);
+ virtual void
+ realizes (Type&);
-virtual void
-realizes (Type const&);
+ virtual void
+ realizes (Type const&);
-virtual void
-realizes_none (Type&);
+ virtual void
+ realizes_none (Type&);
-virtual void
-realizes_none (Type const&);
+ virtual void
+ realizes_none (Type const&);
-virtual void
-implementation (Type&);
+ virtual void
+ implementation (Type&);
-virtual void
-implementation (Type const&);
+ virtual void
+ implementation (Type const&);
-virtual void
-implementation_pre (Type&);
+ virtual void
+ implementation_pre (Type&);
-virtual void
-implementation_pre (Type const&);
+ virtual void
+ implementation_pre (Type const&);
-virtual void
-implementation_next (Type&);
+ virtual void
+ implementation_next (Type&);
-virtual void
-implementation_next (Type const&);
+ virtual void
+ implementation_next (Type const&);
-virtual void
-implementation_post (Type&);
+ virtual void
+ implementation_post (Type&);
-virtual void
-implementation_post (Type const&);
+ virtual void
+ implementation_post (Type const&);
-virtual void
-instance (Type&);
+ virtual void
+ instance (Type&);
-virtual void
-instance (Type const&);
+ virtual void
+ instance (Type const&);
-virtual void
-instance_pre (Type&);
+ virtual void
+ instance_pre (Type&);
-virtual void
-instance_pre (Type const&);
+ virtual void
+ instance_pre (Type const&);
-virtual void
-instance_next (Type&);
+ virtual void
+ instance_next (Type&);
-virtual void
-instance_next (Type const&);
+ virtual void
+ instance_next (Type const&);
-virtual void
-instance_post (Type&);
+ virtual void
+ instance_post (Type&);
-virtual void
-instance_post (Type const&);
+ virtual void
+ instance_post (Type const&);
-virtual void
-instance_none (Type&);
+ virtual void
+ instance_none (Type&);
-virtual void
-instance_none (Type const&);
+ virtual void
+ instance_none (Type const&);
-virtual void
-connection (Type&);
+ virtual void
+ connection (Type&);
-virtual void
-connection (Type const&);
+ virtual void
+ connection (Type const&);
-virtual void
-connection_pre (Type&);
+ virtual void
+ connection_pre (Type&);
-virtual void
-connection_pre (Type const&);
+ virtual void
+ connection_pre (Type const&);
-virtual void
-connection_next (Type&);
+ virtual void
+ connection_next (Type&);
-virtual void
-connection_next (Type const&);
+ virtual void
+ connection_next (Type const&);
-virtual void
-connection_post (Type&);
+ virtual void
+ connection_post (Type&);
-virtual void
-connection_post (Type const&);
+ virtual void
+ connection_post (Type const&);
-virtual void
-connection_none (Type&);
+ virtual void
+ connection_none (Type&);
-virtual void
-connection_none (Type const&);
+ virtual void
+ connection_none (Type const&);
-virtual void
-dependsOn (Type&);
+ virtual void
+ dependsOn (Type&);
-virtual void
-dependsOn (Type const&);
+ virtual void
+ dependsOn (Type const&);
-virtual void
-dependsOn_pre (Type&);
+ virtual void
+ dependsOn_pre (Type&);
-virtual void
-dependsOn_pre (Type const&);
+ virtual void
+ dependsOn_pre (Type const&);
-virtual void
-dependsOn_next (Type&);
+ virtual void
+ dependsOn_next (Type&);
-virtual void
-dependsOn_next (Type const&);
+ virtual void
+ dependsOn_next (Type const&);
-virtual void
-dependsOn_post (Type&);
+ virtual void
+ dependsOn_post (Type&);
-virtual void
-dependsOn_post (Type const&);
+ virtual void
+ dependsOn_post (Type const&);
-virtual void
-dependsOn_none (Type&);
+ virtual void
+ dependsOn_none (Type&);
-virtual void
-dependsOn_none (Type const&);
+ virtual void
+ dependsOn_none (Type const&);
-virtual void
-artifact (Type&);
+ virtual void
+ artifact (Type&);
-virtual void
-artifact (Type const&);
+ virtual void
+ artifact (Type const&);
-virtual void
-artifact_pre (Type&);
+ virtual void
+ artifact_pre (Type&);
-virtual void
-artifact_pre (Type const&);
+ virtual void
+ artifact_pre (Type const&);
-virtual void
-artifact_next (Type&);
+ virtual void
+ artifact_next (Type&);
-virtual void
-artifact_next (Type const&);
+ virtual void
+ artifact_next (Type const&);
-virtual void
-artifact_post (Type&);
+ virtual void
+ artifact_post (Type&);
-virtual void
-artifact_post (Type const&);
+ virtual void
+ artifact_post (Type const&);
-virtual void
-artifact_none (Type&);
+ virtual void
+ artifact_none (Type&);
-virtual void
-artifact_none (Type const&);
+ virtual void
+ artifact_none (Type const&);
-virtual void
-infoProperty (Type&);
+ virtual void
+ infoProperty (Type&);
-virtual void
-infoProperty (Type const&);
+ virtual void
+ infoProperty (Type const&);
-virtual void
-infoProperty_pre (Type&);
+ virtual void
+ infoProperty_pre (Type&);
-virtual void
-infoProperty_pre (Type const&);
+ virtual void
+ infoProperty_pre (Type const&);
-virtual void
-infoProperty_next (Type&);
+ virtual void
+ infoProperty_next (Type&);
-virtual void
-infoProperty_next (Type const&);
+ virtual void
+ infoProperty_next (Type const&);
-virtual void
-infoProperty_post (Type&);
+ virtual void
+ infoProperty_post (Type&);
-virtual void
-infoProperty_post (Type const&);
+ virtual void
+ infoProperty_post (Type const&);
-virtual void
-infoProperty_none (Type&);
+ virtual void
+ infoProperty_none (Type&);
-virtual void
-infoProperty_none (Type const&);
+ virtual void
+ infoProperty_none (Type const&);
-virtual void
-post (Type&);
+ virtual void
+ post (Type&);
-virtual void
-post (Type const&);
-};
-}
-}
+ virtual void
+ post (Type const&);
+ };
+ }
+ }
}
#include "XMLSchema/Writer.hpp"
namespace CIAO
{
-namespace Config_Handlers
-{
-namespace Writer
-{
-struct DeploymentPlan : Traversal::DeploymentPlan,
-virtual ::XSCRT::Writer< ACE_TCHAR >
-{
-typedef ::CIAO::Config_Handlers::DeploymentPlan Type;
-DeploymentPlan (::XSCRT::XML::Element< ACE_TCHAR >&);
+ namespace Config_Handlers
+ {
+ namespace Writer
+ {
+ struct DeploymentPlan : Traversal::DeploymentPlan,
+ virtual ::XSCRT::Writer< ACE_TCHAR >
+ {
+ typedef ::CIAO::Config_Handlers::DeploymentPlan Type;
+ DeploymentPlan (::XSCRT::XML::Element< ACE_TCHAR >&);
-virtual void
-traverse (Type &o)
-{
+ virtual void
+ traverse (Type &o)
+ {
-this->traverse (const_cast <Type const &> (o));
-}
+ this->traverse (const_cast <Type const &> (o));
+ }
-virtual void
-traverse (Type const&);
+ virtual void
+ traverse (Type const&);
-virtual void
-label (Type &o)
-{
+ virtual void
+ label (Type &o)
+ {
-this->label (const_cast <Type const &> (o));
-}
+ this->label (const_cast <Type const &> (o));
+ }
-virtual void
-label (Type const&);
+ virtual void
+ label (Type const&);
-virtual void
-UUID (Type &o)
-{
+ virtual void
+ UUID (Type &o)
+ {
-this->UUID (const_cast <Type const &> (o));
-}
+ this->UUID (const_cast <Type const &> (o));
+ }
-virtual void
-UUID (Type const&);
+ virtual void
+ UUID (Type const&);
-virtual void
-realizes (Type &o)
-{
+ virtual void
+ realizes (Type &o)
+ {
-this->realizes (const_cast <Type const &> (o));
-}
+ this->realizes (const_cast <Type const &> (o));
+ }
-virtual void
-realizes (Type const&);
+ virtual void
+ realizes (Type const&);
-virtual void
-implementation_pre (Type &o)
-{
+ virtual void
+ implementation_pre (Type &o)
+ {
-this->implementation_pre (const_cast <Type const &> (o));
-}
+ this->implementation_pre (const_cast <Type const &> (o));
+ }
-virtual void
-implementation_pre (Type const&);
+ virtual void
+ implementation_pre (Type const&);
-virtual void
-implementation_next (Type &o)
-{
+ virtual void
+ implementation_next (Type &o)
+ {
-this->implementation_next (const_cast <Type const &> (o));
-}
+ this->implementation_next (const_cast <Type const &> (o));
+ }
-virtual void
-implementation_next (Type const&);
+ virtual void
+ implementation_next (Type const&);
-virtual void
-implementation_post (Type &o)
-{
+ virtual void
+ implementation_post (Type &o)
+ {
-this->implementation_post (const_cast <Type const &> (o));
-}
+ this->implementation_post (const_cast <Type const &> (o));
+ }
-virtual void
-implementation_post (Type const&);
+ virtual void
+ implementation_post (Type const&);
-virtual void
-instance_pre (Type &o)
-{
+ virtual void
+ instance_pre (Type &o)
+ {
-this->instance_pre (const_cast <Type const &> (o));
-}
+ this->instance_pre (const_cast <Type const &> (o));
+ }
-virtual void
-instance_pre (Type const&);
+ virtual void
+ instance_pre (Type const&);
-virtual void
-instance_next (Type &o)
-{
+ virtual void
+ instance_next (Type &o)
+ {
-this->instance_next (const_cast <Type const &> (o));
-}
+ this->instance_next (const_cast <Type const &> (o));
+ }
-virtual void
-instance_next (Type const&);
+ virtual void
+ instance_next (Type const&);
-virtual void
-instance_post (Type &o)
-{
+ virtual void
+ instance_post (Type &o)
+ {
-this->instance_post (const_cast <Type const &> (o));
-}
+ this->instance_post (const_cast <Type const &> (o));
+ }
-virtual void
-instance_post (Type const&);
+ virtual void
+ instance_post (Type const&);
-virtual void
-connection_pre (Type &o)
-{
+ virtual void
+ connection_pre (Type &o)
+ {
-this->connection_pre (const_cast <Type const &> (o));
-}
+ this->connection_pre (const_cast <Type const &> (o));
+ }
-virtual void
-connection_pre (Type const&);
+ virtual void
+ connection_pre (Type const&);
-virtual void
-connection_next (Type &o)
-{
+ virtual void
+ connection_next (Type &o)
+ {
-this->connection_next (const_cast <Type const &> (o));
-}
+ this->connection_next (const_cast <Type const &> (o));
+ }
-virtual void
-connection_next (Type const&);
+ virtual void
+ connection_next (Type const&);
-virtual void
-connection_post (Type &o)
-{
+ virtual void
+ connection_post (Type &o)
+ {
-this->connection_post (const_cast <Type const &> (o));
-}
+ this->connection_post (const_cast <Type const &> (o));
+ }
-virtual void
-connection_post (Type const&);
+ virtual void
+ connection_post (Type const&);
-virtual void
-dependsOn_pre (Type &o)
-{
+ virtual void
+ dependsOn_pre (Type &o)
+ {
-this->dependsOn_pre (const_cast <Type const &> (o));
-}
+ this->dependsOn_pre (const_cast <Type const &> (o));
+ }
-virtual void
-dependsOn_pre (Type const&);
+ virtual void
+ dependsOn_pre (Type const&);
-virtual void
-dependsOn_next (Type &o)
-{
+ virtual void
+ dependsOn_next (Type &o)
+ {
-this->dependsOn_next (const_cast <Type const &> (o));
-}
+ this->dependsOn_next (const_cast <Type const &> (o));
+ }
-virtual void
-dependsOn_next (Type const&);
+ virtual void
+ dependsOn_next (Type const&);
-virtual void
-dependsOn_post (Type &o)
-{
+ virtual void
+ dependsOn_post (Type &o)
+ {
-this->dependsOn_post (const_cast <Type const &> (o));
-}
+ this->dependsOn_post (const_cast <Type const &> (o));
+ }
-virtual void
-dependsOn_post (Type const&);
+ virtual void
+ dependsOn_post (Type const&);
-virtual void
-artifact_pre (Type &o)
-{
+ virtual void
+ artifact_pre (Type &o)
+ {
-this->artifact_pre (const_cast <Type const &> (o));
-}
+ this->artifact_pre (const_cast <Type const &> (o));
+ }
-virtual void
-artifact_pre (Type const&);
+ virtual void
+ artifact_pre (Type const&);
-virtual void
-artifact_next (Type &o)
-{
+ virtual void
+ artifact_next (Type &o)
+ {
-this->artifact_next (const_cast <Type const &> (o));
-}
+ this->artifact_next (const_cast <Type const &> (o));
+ }
-virtual void
-artifact_next (Type const&);
+ virtual void
+ artifact_next (Type const&);
-virtual void
-artifact_post (Type &o)
-{
+ virtual void
+ artifact_post (Type &o)
+ {
-this->artifact_post (const_cast <Type const &> (o));
-}
+ this->artifact_post (const_cast <Type const &> (o));
+ }
-virtual void
-artifact_post (Type const&);
+ virtual void
+ artifact_post (Type const&);
-virtual void
-infoProperty_pre (Type &o)
-{
+ virtual void
+ infoProperty_pre (Type &o)
+ {
-this->infoProperty_pre (const_cast <Type const &> (o));
-}
+ this->infoProperty_pre (const_cast <Type const &> (o));
+ }
-virtual void
-infoProperty_pre (Type const&);
+ virtual void
+ infoProperty_pre (Type const&);
-virtual void
-infoProperty_next (Type &o)
-{
+ virtual void
+ infoProperty_next (Type &o)
+ {
-this->infoProperty_next (const_cast <Type const &> (o));
-}
+ this->infoProperty_next (const_cast <Type const &> (o));
+ }
-virtual void
-infoProperty_next (Type const&);
+ virtual void
+ infoProperty_next (Type const&);
-virtual void
-infoProperty_post (Type &o)
-{
+ virtual void
+ infoProperty_post (Type &o)
+ {
-this->infoProperty_post (const_cast <Type const &> (o));
-}
+ this->infoProperty_post (const_cast <Type const &> (o));
+ }
-virtual void
-infoProperty_post (Type const&);
+ virtual void
+ infoProperty_post (Type const&);
-protected:
-DeploymentPlan ();
-};
-}
-}
+ protected:
+ DeploymentPlan ();
+ };
+ }
+ }
}
namespace CIAO
{
-namespace Config_Handlers
-{
-}
+ namespace Config_Handlers
+ {
+ }
}
#endif // CDP_HPP
diff --git a/TAO/CIAO/tools/Config_Handlers/toplevel.hpp b/TAO/CIAO/tools/Config_Handlers/toplevel.hpp
index d828adf7ece..09964cff90b 100644
--- a/TAO/CIAO/tools/Config_Handlers/toplevel.hpp
+++ b/TAO/CIAO/tools/Config_Handlers/toplevel.hpp
@@ -1,13 +1,13 @@
/* $Id$
-* This code was generated by the XML Schema Compiler.
-*
-* Changes made to this code will most likely be overwritten
-* when the handlers are recompiled.
-*
-* If you find errors or feel that there are bugfixes to be made,
-* please contact the current XSC maintainer:
-* Will Otte <wotte@dre.vanderbilt.edu>
-*/
+ * This code was generated by the XML Schema Compiler.
+ *
+ * Changes made to this code will most likely be overwritten
+ * when the handlers are recompiled.
+ *
+ * If you find errors or feel that there are bugfixes to be made,
+ * please contact the current XSC maintainer:
+ * Will Otte <wotte@dre.vanderbilt.edu>
+ */
// Fix for Borland compilers, which seem to have a broken
@@ -24,10 +24,10 @@
//
namespace CIAO
{
-namespace Config_Handlers
-{
-class TopLevelPackageDescription;
-}
+ namespace Config_Handlers
+ {
+ class TopLevelPackageDescription;
+ }
}
#include <memory>
@@ -38,130 +38,131 @@ class TopLevelPackageDescription;
namespace CIAO
{
-namespace Config_Handlers
-{
-class XSC_XML_Handlers_Export TopLevelPackageDescription : public ::XSCRT::Type
-{
-//@@ VC6 anathema
-typedef ::XSCRT::Type Base__;
+ namespace Config_Handlers
+ {
+ class XSC_XML_Handlers_Export TopLevelPackageDescription : public ::XSCRT::Type
+ {
+ //@@ VC6 anathema
+ typedef ::XSCRT::Type Base__;
-// package
-//
-public:
-::CIAO::Config_Handlers::PackageConfiguration const& package () const;
-void package (::CIAO::Config_Handlers::PackageConfiguration const& );
-
-protected:
-::std::auto_ptr< ::CIAO::Config_Handlers::PackageConfiguration > package_;
+ // package
+ //
+ public:
+ ::CIAO::Config_Handlers::PackageConfiguration const& package () const;
+ void package (::CIAO::Config_Handlers::PackageConfiguration const& );
-public:
-TopLevelPackageDescription (::CIAO::Config_Handlers::PackageConfiguration const& package__);
+ protected:
+ ::std::auto_ptr< ::CIAO::Config_Handlers::PackageConfiguration > package_;
-TopLevelPackageDescription (::XSCRT::XML::Element< ACE_TCHAR > const&);
-TopLevelPackageDescription (TopLevelPackageDescription const& s);
+ public:
+ TopLevelPackageDescription (::CIAO::Config_Handlers::PackageConfiguration const& package__);
-TopLevelPackageDescription&
-operator= (TopLevelPackageDescription const& s);
+ TopLevelPackageDescription (::XSCRT::XML::Element< ACE_TCHAR > const&);
+ TopLevelPackageDescription (TopLevelPackageDescription const& s);
+
+ ~TopLevelPackageDescription () {};
+ TopLevelPackageDescription&
+ operator= (TopLevelPackageDescription const& s);
-private:
-char regulator__;
-};
-}
+ private:
+ char regulator__;
+ };
+ }
}
namespace CIAO
{
-namespace Config_Handlers
-{
-}
+ namespace Config_Handlers
+ {
+ }
}
#include "XMLSchema/Traversal.hpp"
namespace CIAO
{
-namespace Config_Handlers
-{
-namespace Traversal
-{
-struct XSC_XML_Handlers_Export TopLevelPackageDescription : ::XMLSchema::Traversal::Traverser< ::CIAO::Config_Handlers::TopLevelPackageDescription >
-{
-virtual void
-traverse (Type&);
+ namespace Config_Handlers
+ {
+ namespace Traversal
+ {
+ struct XSC_XML_Handlers_Export TopLevelPackageDescription : ::XMLSchema::Traversal::Traverser< ::CIAO::Config_Handlers::TopLevelPackageDescription >
+ {
+ virtual void
+ traverse (Type&);
-virtual void
-traverse (Type const&);
+ virtual void
+ traverse (Type const&);
-virtual void
-pre (Type&);
+ virtual void
+ pre (Type&);
-virtual void
-pre (Type const&);
+ virtual void
+ pre (Type const&);
-virtual void
-package (Type&);
+ virtual void
+ package (Type&);
-virtual void
-package (Type const&);
+ virtual void
+ package (Type const&);
-virtual void
-post (Type&);
+ virtual void
+ post (Type&);
-virtual void
-post (Type const&);
-};
-}
-}
+ virtual void
+ post (Type const&);
+ };
+ }
+ }
}
#include "XMLSchema/Writer.hpp"
namespace CIAO
{
-namespace Config_Handlers
-{
-namespace Writer
-{
-struct TopLevelPackageDescription : Traversal::TopLevelPackageDescription,
-virtual ::XSCRT::Writer< ACE_TCHAR >
-{
-typedef ::CIAO::Config_Handlers::TopLevelPackageDescription Type;
-TopLevelPackageDescription (::XSCRT::XML::Element< ACE_TCHAR >&);
+ namespace Config_Handlers
+ {
+ namespace Writer
+ {
+ struct TopLevelPackageDescription : Traversal::TopLevelPackageDescription,
+ virtual ::XSCRT::Writer< ACE_TCHAR >
+ {
+ typedef ::CIAO::Config_Handlers::TopLevelPackageDescription Type;
+ TopLevelPackageDescription (::XSCRT::XML::Element< ACE_TCHAR >&);
-virtual void
-traverse (Type &o)
-{
+ virtual void
+ traverse (Type &o)
+ {
-this->traverse (const_cast <Type const &> (o));
-}
+ this->traverse (const_cast <Type const &> (o));
+ }
-virtual void
-traverse (Type const&);
+ virtual void
+ traverse (Type const&);
-virtual void
-package (Type &o)
-{
+ virtual void
+ package (Type &o)
+ {
-this->package (const_cast <Type const &> (o));
-}
+ this->package (const_cast <Type const &> (o));
+ }
-virtual void
-package (Type const&);
+ virtual void
+ package (Type const&);
-protected:
-TopLevelPackageDescription ();
-};
-}
-}
+ protected:
+ TopLevelPackageDescription ();
+ };
+ }
+ }
}
namespace CIAO
{
-namespace Config_Handlers
-{
-}
+ namespace Config_Handlers
+ {
+ }
}
#endif // TOPLEVEL_HPP
diff --git a/TAO/ChangeLog b/TAO/ChangeLog
index 7839a311a36..7b94a5dfd9c 100644
--- a/TAO/ChangeLog
+++ b/TAO/ChangeLog
@@ -1,4 +1,1112 @@
-Fri Mar 31 15:17:51 UTC 2006 Jeff Parsons <j.parsons@vanderbilt.edu>
+Thu Apr 27 15:03:08 UTC 2006 Iliyan Jeliazkov <iliyan@ociweb.com>
+
+ * tests/ORB_Local_Config/Bunch/Test.cpp:
+ * tests/ORB_Local_Config/Limits/Test.cpp:
+ * tests/ORB_Local_Config/Simple/Test.cpp:
+ * tests/ORB_Local_Config/Two_DLL_ORB/Test.cpp:
+
+ Fixed fuzz issues (unmatched ACE_TRACE)
+
+ * tests/ORB_Local_Config/Service_Dependency/Service_Config_DLL.cpp:
+ * tests/ORB_Local_Config/Service_Dependency/Service_Dependency.mpc:
+
+ Modified to change the DLL name to avoid name conflict with the
+ one in ACE_ROOT/tests.
+
+Thu Apr 27 14:20:02 UTC 2006 Phil Mesnier <mesnier_p@ociweb.com>
+
+ * tao/IIOP_Endpoint.cpp:
+ Fixed a recursion problem with the IPv6 endpoint selection.
+
+ * tao/PortableServer/POAManagerFactory.cpp:
+ Cleaned up compiler warnings.
+
+Thu Apr 27 06:55:12 UTC 2006 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tests/ORB_Local_Config/lib/lib.mpc:
+ Added base project, this would at least get our builds running again
+
+Thu Apr 27 03:46:34 UTC 2006 Phil Mesnier <mesnier_p@ociweb.com>
+
+ * tao/EndpointPolicy/Endpoint_Acceptor_Filter.cpp:
+
+ Found the trouble that was crashing the endpoint test. It was
+ nothing wierd with the new sequence code, it was merely an
+ incorrect index variable - i should have been j.
+
+Thu Apr 27 03:05:31 UTC 2006 Phil Mesnier <mesnier_p@ociweb.com>
+
+ * tao/params.cpp:
+
+ One of my patches inadvertently flipped the sense of the
+ share_profiles default from 0 to 1. However, I think that 1
+ should be the default, since it generates more compact IORs. It
+ has been that way for years in the OCI version of TAO, but I am
+ keeping the default 0 here for tradition. This value is
+ overridden by using -ORBUseSharedProfile [0|1] ORB_init option.
+
+Thu Apr 27 02:58:23 UTC 2006 Phil Mesnier <mesnier_p@ociweb.com>
+
+ * tao/EndpointPolicy/Endpoint_Value_Impl.cpp:
+ * tao/EndpointPolicy/Endpoint_Value_Impl.h:
+
+ Added a virtual destructor to this otherwise abstract base
+ class.
+
+Wed Apr 26 21:24:54 UTC 2006 Iliyan Jeliazkov <iliyan@ociweb.com>
+
+ * NEWS:
+
+ Added an entry to the NEWS file.
+
+Wed Apr 26 20:21:49 UTC 2006 Iliyan Jeliazkov <iliyan@ociweb.com>
+
+ The motivation for these changes was to enable support for
+ ORB-local Service Objects. This for instance, makes it possible
+ for differently configured ORBs to coexist within the same
+ proces.
+
+ In order to accomplish this, each orb (core) owns a "Gestalt",
+ i.e. a service object repository instance. There is also a
+ process-wide, or "global" gestalt, which is the default
+ repository where service objects are registered. The latter
+ retains the interface and behavioral compatibility with any
+ existing code. As a consequence of this design choice, any
+ un-named orb(s) will default to using the ubergestalt, which is
+ consistent with the prior behavior.
+
+ * tao/DLL_Parser.cpp:
+
+ Fixed the parse_string() method to use the correct ORB gestalt
+ when looking up a dynamic service object. That resolves a
+ failure in TAO/tests/Object_Loader test.
+
+ * tao/ORB.cpp:
+
+ Relocated some aging comments about having first to instantiate
+ the singleton manager to the correct place (ORB_init). Added a
+ gestalt parameter to the call to open_services. Edited a few
+ lines to fit within the standard length requirement.
+
+ * tao/ORB_Core.h:
+ * tao/ORB_Core.i:
+ * tao/ORB_Core.cpp:
+
+ Added a member and an accessors for the private service gestalt,
+ owned by the core. Replaced the call to methods that use the
+ implicit ubergestalt with ones that specify the gestalt to use
+ for service objects.
+
+ Added an ACE_Service_Config_Guard to make sure the ORB
+ initialization uses the correct repository.
+
+ Updated more references to process_directive() and instance() to
+ use ACE_TCHAR. Updated references to process_directive() to use
+ ACE_TCHAR for consistency.
+
+ Added #if !defined(TAO_AS_STATIC_LIBS)/#endif around code, which
+ is only meaningful when TAO is _not_ statically compiled;
+ Updated the service and DLL symbol names used to load the
+ CodecFactory_Loader, PolicyFactory_Loader and
+ TypeCodeFactory_Loader dynamic services, in the cases where
+ those services are not statically linked and TAO supports
+ dynamic linking. (Thanks Ossama, for pointing that out.) Added
+ code to try and explicitly load an IORInterceptor adapter and
+ Concrete_IORInterceptor_Adapter_Factory, if TAO supports (is
+ built with) dynamic linking;
+
+ Updated the code that loads the IORTable adapter to be exception
+ safe; Edited a few lines to fit within the standard length
+ requirement.
+
+ * tao/Parser_Registry.cpp:
+
+ Updated to explicitly specify the correct gestalt for the ORB.
+
+ * tao/TAO_Internal.h:
+ * tao/TAO_Internal.cpp:
+
+ Refactored the initialization code to separate process-wide
+ aspects of initialization from those having to do with the ORB
+ instance. It is necessary to deal with global initialization
+ because of the large number of use cases, where the first thing
+ a process does is to call ORB_init, and consequently -
+ open_services. There are also cases where a process calls
+ Service_Config::open, initializing the process-wide
+ configuration and only then proceeds to call ORB_init - for
+ example when using Service Configurator to load a DLL that uses
+ an ORB. The close_service is now only responsible for calling
+ close in the ORB's own gestalt, the ACE Object Manager is the
+ one that is clobering the process-wide Service Configuration.
+ Updated to explicitly specify the correct gestalt to be used.
+
+ * tao/default_resource.h:
+ * tao/default_resource.cpp:
+
+ Added the ACE_Dynamic_Service_Dependency member to the default
+ resource factory to expressly maintain the factory's dependance
+ on TAO_Codeset library, because the order of destruction may be
+ reversed in some cases. The member help us keep our access to
+ TAO_Codeset_Manager instances by upping the ref count on
+ TAO_Codeset's DLL. This is far from elegant, but a complete
+ reference counting scheme for the ORB services is a more complex
+ undertaking than what the available resources currently permit.
+
+ * tao/CSD_ThreadPool/CSD_TP_Strategy_Factory.cpp:
+
+ Fixed an (unrelated) issue arising from a call to strcmp() with
+ two different character types - only visible when ACE_USES_WCHAR
+ is in effect.
+
+ * tao/Codeset/Codeset_Manager_i.h:
+ * tao/Codeset/Codeset_Manager_i.cpp:
+
+ (minor) Added void as argument to the ctor and dtor.
+
+ * tao/PI/ORBInitializer_Registry_Impl.h:
+ * tao/PI/ORBInitializer_Registry_Impl.cpp:
+
+ Implemented an init() method, which registers all the static
+ services, usually taken for granted with the loading of
+ TAO_PI. Previously, static initializers were used, however the
+ dependent static services were being registered only globally,
+ which broke the ORBs that needed ORB-local services.
+
+ * tao/PI/PI.h:
+ * tao/PI/PI.cpp:
+ * tao/PI/PolicyFactory_Loader.h:
+ * tao/PI/PolicyFactory_Loader.cpp:
+
+ Removed the static initializers code and made it part of the
+ dynamic service's init method. See the comment above.
+
+ * tao/PortableServer/Root_POA.cpp:
+
+ Explicitly specified the gestalt to be used for registering
+ dynamic services.
+
+ * tests/DLL_ORB/Test_Client_Module.cpp:
+ * tests/DLL_ORB/Test_Server_Module.cpp:
+
+ Provided an ID for the client and server's ORB. In the future,
+ an option may be devised so that the user can specify if they
+ want any ORB to use its own gestalt, even if it does not have an
+ ID. The reverse would be to force all ORBs to use the global SR,
+ even if they have an ID. Fixed a a SEGV upon process
+ termination. The first thing a client process does in its main()
+ is to load a dynamic service - Test_Client_Module, using a call
+ to ACE_Service_Config::process_directive(). The service does
+ call ORB_init(), which causes the population of the SR with a
+ number of static and dynamic SOs. At process termination now
+ however, any services registered following the ORB_init () call
+ are destroyed first and will be unavailable when the
+ Test_Client_Module is finalized. Like the Resource Factory, for
+ example.
+
+ The solution is to provide and ORB id for any ORB, which will
+ loaded as part of a dynamic service. Since the service gestalt
+ is tied to the ORB id, this will cause the new ORBs to create
+ and manage the lifetime of their own Service Repositories. The
+ ORB_init() will be invoked in the context of each distinct SR
+ and any SO an ORB needs will go there. At process termination,
+ the Test_Client_Module will be finalized, which will clobber the
+ ORB's SR and any SO registered there.
+
+ * tests/ORB_Local_Config/ORB_Local_Config.mwc:
+ * tests/ORB_Local_Config/README:
+ * tests/ORB_Local_Config/run_tests_all.pl:
+
+ Added tests and examples of the functionality affected by the
+ introduction of the multiple private (per-ORB) service
+ configuration repositories.
+
+ * tests/ORB_Local_Config/lib/Service_Configuration_Per_ORB.h:
+ * tests/ORB_Local_Config/lib/Service_Configuration_Per_ORB.cpp:
+ * tests/ORB_Local_Config/lib/lib.mpc:
+
+ Common test code.
+
+ * tests/ORB_Local_Config/Bunch/Bunch.mpc:
+ * tests/ORB_Local_Config/Bunch/Service_Config_Test.UTF-16.conf:
+ * tests/ORB_Local_Config/Bunch/Service_Config_Test.UTF-16.conf.xml:
+ * tests/ORB_Local_Config/Bunch/Service_Config_Test.WCHAR_T.conf:
+ * tests/ORB_Local_Config/Bunch/Service_Config_Test.WCHAR_T.conf.xml:
+ * tests/ORB_Local_Config/Bunch/Service_Config_Test.conf:
+ * tests/ORB_Local_Config/Bunch/Service_Config_Test.conf.xml:
+ * tests/ORB_Local_Config/Bunch/Test.cpp:
+ * tests/ORB_Local_Config/Bunch/run_test.pl:
+
+ A collection of miscellaneous tests for compatibility of the new
+ interfaces with the old; Processing of the command-line
+ directives; Loading dynamic services in a local repository;
+ Loading the ORBInitializer_Registry locally; Test the helper
+ components used to implement the temporary substitution of the
+ repository currently used as "global" for the sake of
+ registering static services, which are dependent on a dynamic
+ service;
+
+ * tests/ORB_Local_Config/Limits/Limits.mpc:
+ * tests/ORB_Local_Config/Limits/Test.cpp:
+ * tests/ORB_Local_Config/Limits/run_test.pl:
+
+ Testing the size limits of a gestalt.
+
+ * tests/ORB_Local_Config/Separation/Separation.mpc:
+ * tests/ORB_Local_Config/Separation/Test.cpp:
+ * tests/ORB_Local_Config/Separation/run_test.pl:
+
+ Services registered with separate repositories must remain
+ separate and inaccessible through anyone but the gestalt they
+ were registered with.
+
+ * tests/ORB_Local_Config/Service_Dependency/Service_Config_DLL.h:
+ * tests/ORB_Local_Config/Service_Dependency/Service_Config_DLL.cpp:
+ * tests/ORB_Local_Config/Service_Dependency/Service_Config_DLL_Export.h:
+ * tests/ORB_Local_Config/Service_Dependency/Service_Dependency.mpc:
+ * tests/ORB_Local_Config/Service_Dependency/Test.cpp:
+ * tests/ORB_Local_Config/Service_Dependency/run_test.pl:
+
+ Tests the working of the ACE_Dynamic_Service_Dependency class
+
+ * tests/ORB_Local_Config/Shared/Shared.mpc:
+ * tests/ORB_Local_Config/Shared/Test.cpp:
+ * tests/ORB_Local_Config/Shared/run_test.pl:
+
+ Test that the default repository is available through any
+ Service Gestalt, created with its default ctor.
+
+ * tests/ORB_Local_Config/Simple/Simple.mpc:
+ * tests/ORB_Local_Config/Simple/Test.cpp:
+ * tests/ORB_Local_Config/Simple/run_test.pl:
+
+ * tests/ORB_Local_Config/Two_DLL_ORB/ORB_DLL.h:
+ * tests/ORB_Local_Config/Two_DLL_ORB/ORB_DLL.cpp:
+ * tests/ORB_Local_Config/Two_DLL_ORB/ORB_DLL_Export.h:
+ * tests/ORB_Local_Config/Two_DLL_ORB/Service_Config_ORB_Test.conf:
+ * tests/ORB_Local_Config/Two_DLL_ORB/Service_Config_ORB_Test2.conf:
+ * tests/ORB_Local_Config/Two_DLL_ORB/Test.idl:
+ * tests/ORB_Local_Config/Two_DLL_ORB/Test.cpp:
+ * tests/ORB_Local_Config/Two_DLL_ORB/Test_i.h:
+ * tests/ORB_Local_Config/Two_DLL_ORB/Test_i.cpp:
+ * tests/ORB_Local_Config/Two_DLL_ORB/Two_DLL_ORB.mpc:
+ * tests/ORB_Local_Config/Two_DLL_ORB/client.cpp:
+ * tests/ORB_Local_Config/Two_DLL_ORB/run_test.pl:
+ * tests/ORB_Local_Config/Two_DLL_ORB/server.cpp:
+
+ Testing the loading a dynamic service, which initializes its own
+ ORB. The test is a variant of the Hello test with the twist that
+ both the client and the server are service objects, loaded by
+ the Service Configuration mechanism.
+
+Wed Apr 26 20:09:33 UTC 2006 Phil Mesnier <mesnier_p@ociweb.com>
+
+ * tao/EndpointPolicy/EndpointPolicyC.h:
+ * tao/EndpointPolicy/EndpointPolicyC.cpp:
+
+ Fixed fuzz errors.
+
+ * tao/EndpointPolicy/EndpointPolicyC.inl:
+
+ Removed this file.
+
+Wed Apr 26 19:44:36 UTC 2006 J.T. Conklin <jtc@acorntoolworks.com>
+
+ * tao/Makefile.am:
+
+ Regenerated.
+
+ * tao/EndpointPolicy.mpc:
+
+ Added Pkgconfig_Files definition.
+
+ * tao/EndpointPolicy/TAO_EndpointPolicy.pc.in:
+
+ New file, pkg-config *.pc template for TAO_EndpointPolicy
+ library.
+
+Wed Apr 26 19:08:12 UTC 2006 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tests/OBV/Simple/Client_i.h:
+ Fixed casing of include
+
+Wed Apr 26 19:13:02 UTC 2006 Phil Mesnier <mesnier_p@ociweb.com>
+
+ * tao/IIOP_Connection_Handler.cpp:
+ * tao/ORB_Core.cpp:
+ * tao/params.h:
+ * tao/params.i:
+ * tao/params.cpp:
+
+ This change was of OCI by David.Gibbs@igindex.co.uk. He had
+ previously requested the addition of support for SO_KEEPALIVE
+ and as a result we found that the framework existed for
+ communicating a value of SO_DONTROUTE, so it was decided that we
+ go ahead and add the feature. I consider this change provisional
+ in that it isn't strictly required and so if someone strongly
+ objects to its existence it can be pulled. Otherwise it is
+ simply completing what someone else had started a while ago by
+ adding configuration values for socket options to IIOP protocol
+ properties definition.
+
+Wed Apr 26 18:47:23 UTC 2006 Phil Mesnier <mesnier_p@ociweb.com>
+
+ * tao/ORB_Core.cpp:
+ * tao/ORB_Core.h:
+
+ Add an alternate connection timeout hook. This is necessary for
+ users of the Optimized Connect Endpoint Selector with its
+ timeout while also using CORBA messaging and the Connection
+ Timeout policy. Both of these connection timeouts are
+ dynamically loaded and one would override the other. This change
+ allows both to be loaded, and if both are initialized to nonzero
+ values, the lesser of the two timeouts is used. This results
+ from a bug originally reported to OCI by friedhelm.wolf@homag.de.
+
+ * tao/Strategies/OC_Endpoint_Selector_Loader.cpp:
+ * tao/Strategies/OC_Endpoint_Selector_Loader.h:
+
+ Cleaned up the initializer to be more consistent with others.
+
+ * tao/Strategies/Optimized_Connection_Endpoint_Selector.cpp:
+
+ Fixed wihtespace in debug output.
+
+Wed Apr 26 16:42:45 UTC 2006 Phil Mesnier <mesnier_p@ociweb.com>
+
+ * docs/Options.html:
+
+ Adding text for the new commandline options used to control the
+ parallel connect feature.
+
+ * tao/Blocked_Connect_Strategy.h:
+ * tao/Blocked_Connect_Strategy.cpp:
+ * tao/CORBALOC_Parser.cpp:
+ * tao/Client_Strategy_Factory.h:
+ * tao/Client_Strategy_Factory.cpp:
+ * tao/Connect_Strategy.h:
+ * tao/Connect_Strategy.cpp:
+ * tao/Endpoint.h:
+ * tao/Endpoint.cpp:
+ * tao/IIOP_Connection_Handler.h:
+ * tao/IIOP_Connection_Handler.cpp:
+ * tao/IIOP_Connector.h:
+ * tao/IIOP_Connector.cpp:
+ * tao/IIOP_Endpoint.h:
+ * tao/IIOP_Endpoint.cpp:
+ * tao/IIOP_Profile.h:
+ * tao/IIOP_Profile.cpp:
+ * tao/Invocation_Endpoint_Selectors.h:
+ * tao/Invocation_Endpoint_Selectors.cpp:
+ * tao/LF_CH_Event.h:
+ * tao/LF_Connect_Strategy.h:
+ * tao/LF_Connect_Strategy.cpp:
+ * tao/LF_Event.h:
+ * tao/LF_Multi_Event.h:
+ * tao/LF_Multi_Event.cpp:
+ * tao/MProfile.h:
+ * tao/MProfile.i:
+ * tao/MProfile.cpp:
+ * tao/ORB_Core.cpp:
+ * tao/Profile.h:
+ * tao/Profile.cpp:
+ * tao/Profile_Transport_Resolver.h:
+ * tao/Profile_Transport_Resolver.cpp:
+ * tao/Reactive_Connect_Strategy.h:
+ * tao/Reactive_Connect_Strategy.cpp:
+ * tao/Transport.cpp:
+ * tao/Transport_Connector.h:
+ * tao/Transport_Connector.cpp:
+ * tao/Transport_Descriptor_Interface.h:
+ * tao/Transport_Descriptor_Interface.inl:
+ * tao/Transport_Descriptor_Interface.cpp:
+ * tao/default_client.h:
+ * tao/default_client.cpp:
+ * tao/params.h:
+ * tao/params.i:
+ * tao/params.cpp:
+ * tao/tao.mpc:
+
+ These changes support a new technique for active connection
+ establishment when presented with a profile containing multiple
+ possible endpoints. This commit resolves bugzilla bug #2485.
+
+ The technique in question is "parallel connects" meaning
+ attempting to connect to many endpoints simultaniously. It was
+ conceived as a way to deal with timeouts when the Invocation
+ Endpoint Selector would first try to connect to one or more
+ unreachable endpoints. If those endpoints were defined as IP
+ addresses (not hostnames) or as resolvable hostnames that
+ pointed to unreachable IP addresses, the connection
+ establishment would take potentially several minutes to time out
+ and eventually encounter a reachable endpoint. In the case of
+ shared profiles (those using TAG_ALTERNATE_IIOP_ENDPOINT) this
+ delay impacts every single invocation.
+
+ This parallel connect feature (also referred to somewhat
+ inacurately as a strategy) avoids this by supplying all the
+ endpoints in a profile to the connector and letting it first
+ test to see if any are already cached and available, and if not,
+ to open connections to each and wait for a winner. When the
+ first connection completes, any pending connections are
+ terminated.
+
+ In order to minimize the use of pending connections, an iterator
+ traverses the list of endpoints creating new connections and
+ also checking any existing connections for completion. If the
+ first endpoint happens to be reachable and the server responds
+ quickly enough, the client may not open any more connections.
+
+ If the server does not respond immediately, a wait strategy is
+ entered. This wait strategy may be Reactive or Leader/Follower
+ based. In either case, a specal "multi event" type is used to
+ allow a single thread to wait on one of many connectors, and
+ then to clean up those that didn't finish in time. The parallel
+ connect feature is also available using blocking connects, but
+ the only advantage there is in checking the cache for all
+ endpoints in the profile, there is no performance gain during
+ actual connection establishment.
+
+ The parallel connect strategy differs from another endpoint
+ selection optimization, available in
+ tao/Strategies/Optimized_Connection_Endpoint_Selector.*. That
+ strategy works by examining all profiles simultaniously, this
+ feature still treats separate profiles separately. This profile
+ separation is necessary to support Load Balancing and Fault
+ Tolerence. Also, this feature requires additional support to be
+ built into protocol specific connectors (IIOP is currently the
+ only protocol supporting parallel connects) whereas the other
+ feature works regardless of the protocol.
+
+ As this is a new feature, it is disabled by default. Use the
+ -ORBUseParallelConnects option to enable its use. A second
+ option, -ORBParallelConnectDelay, is used to introduce a small
+ delay between the opening of new potential connections if the
+ server is particularly busy. This is useful to minimize the
+ impact on a busy server if more than one of the available
+ endpoints is reachable. Also, because this feature only focuses
+ on one profile at a time, the server must be run with
+ -ORBUseSharedProfiles enabled (it is disabled by default).
+
+ * tests/Parallel_Connect_Strategy/Parallel_Connect_Strategy.mpc:
+ * tests/Parallel_Connect_Strategy/README:
+ * tests/Parallel_Connect_Strategy/Test.idl:
+ * tests/Parallel_Connect_Strategy/Test_i.h:
+ * tests/Parallel_Connect_Strategy/Test_i.cpp:
+ * tests/Parallel_Connect_Strategy/blocked.conf:
+ * tests/Parallel_Connect_Strategy/client.cpp:
+ * tests/Parallel_Connect_Strategy/reactive.conf:
+ * tests/Parallel_Connect_Strategy/run_test.pl:
+ * tests/Parallel_Connect_Strategy/server.cpp:
+
+ This is a new test for the parallel connect feature. It works by
+ having the server open two endpoints, one aliased to something
+ unreachable. The client then uses different wait strategies to
+ make invocations on the server and records the time for
+ each. These tests also include counter-examples in which
+ parallel connects are not used, and these take several minutes
+ to run. On my Linux machine the timeout period is about 3
+ minutes which causes the overall test to take about 9 minutes to
+ run.
+
+Wed Apr 26 16:30:56 UTC 2006 Phil Mesnier <mesnier_p@ociweb.com>
+
+ * tao/PortableServer/POAManagerFactory.cpp:
+
+ Correct a bug found by the Borland compiler.
+
+Wed Apr 26 13:47:28 UTC 2006 Phil Mesnier <mesnier_p@ociweb.com>
+
+ * tao/EndpointPolicy.mpc:
+ * tao/EndpointPolicy/EndpointPolicy.h:
+ * tao/EndpointPolicy/EndpointPolicy.pidl:
+ * tao/EndpointPolicy/EndpointPolicy.cpp:
+ * tao/EndpointPolicy/EndpointPolicyA.h:
+ * tao/EndpointPolicy/EndpointPolicyA.cpp:
+ * tao/EndpointPolicy/EndpointPolicyC.h:
+ * tao/EndpointPolicy/EndpointPolicyC.inl:
+ * tao/EndpointPolicy/EndpointPolicyC.cpp:
+ * tao/EndpointPolicy/EndpointPolicyType.pidl:
+ * tao/EndpointPolicy/EndpointPolicyTypeA.h:
+ * tao/EndpointPolicy/EndpointPolicyTypeA.cpp:
+ * tao/EndpointPolicy/EndpointPolicyTypeC.h:
+ * tao/EndpointPolicy/EndpointPolicyTypeC.cpp:
+ * tao/EndpointPolicy/EndpointPolicy_Export.h:
+ * tao/EndpointPolicy/EndpointPolicy_Factory.h:
+ * tao/EndpointPolicy/EndpointPolicy_Factory.cpp:
+ * tao/EndpointPolicy/EndpointPolicy_ORBInitializer.h:
+ * tao/EndpointPolicy/EndpointPolicy_ORBInitializer.cpp:
+ * tao/EndpointPolicy/EndpointPolicy_i.h:
+ * tao/EndpointPolicy/EndpointPolicy_i.cpp:
+ * tao/EndpointPolicy/Endpoint_Acceptor_Filter.h:
+ * tao/EndpointPolicy/Endpoint_Acceptor_Filter.cpp:
+ * tao/EndpointPolicy/Endpoint_Acceptor_Filter_Factory.h:
+ * tao/EndpointPolicy/Endpoint_Acceptor_Filter_Factory.cpp:
+ * tao/EndpointPolicy/Endpoint_Value_Impl.h:
+ * tao/EndpointPolicy/IIOPEndpointValue.pidl:
+ * tao/EndpointPolicy/IIOPEndpointValueA.h:
+ * tao/EndpointPolicy/IIOPEndpointValueA.cpp:
+ * tao/EndpointPolicy/IIOPEndpointValueC.h:
+ * tao/EndpointPolicy/IIOPEndpointValueC.cpp:
+ * tao/EndpointPolicy/IIOPEndpointValue_i.h:
+ * tao/EndpointPolicy/IIOPEndpointValue_i.cpp:
+
+ The EndpointPolicy is a new, TAO-specific policy that is applied
+ to POAManagers via the POAManagerFactory. This commit resolves
+ Bugzilla bug #2484.
+
+ The Endpoint policy acts as a filter for constraining the final
+ endpoints or profiles listed in an IOR when it is created by a
+ POA associated with the POAManager containing the policy. The
+ EndpointPolicy value is a sequence, allow multiple endpoints to
+ be published.
+
+ The way this works is that the ORB is initialized with all the
+ -ORBEndpoint options it needs to provide access to all the
+ objects it will serve. Then POAManagers are created with
+ Endpoint policies that contain only the endpoints that are to be
+ used for its subset of objects. For instance, the ORB could
+ define one endpoint for insecure, internal-use-only objects, and
+ another for secure internet-facing objects. Using the Endpoint
+ Policy these different objects would only get one or the other
+ endpoint. Mechanically what happens is that first all Acceptors
+ are queried to construct an MProfile, then the resulting
+ profiles/endpoints are compared to entries in the policy, those
+ not matching are eliminated. It is possible that an endpoint
+ policy will exclude all the profiles, which would result in an
+ exception being raised at object reference construction time.
+
+ Endpoints are matched in their final form. This means that if an
+ IIOP Endpoint makes use of the hostname_in_ior attribute, that
+ is the name the policy will use to match.
+
+ Endpoint values are protocol specific. A value for IIOP is
+ provided, but new values must be defined to support other
+ protocols. The Endpoint value is a local object. New protocol
+ specific values do not have to be added to the
+ TAO_EndpointPolicy library, but they must specialize
+ EndpointPolicy::ValueBase and the implementation must derive
+ from TAO_Endpoint_Value_Impl.
+
+ * tao/IIOP_Endpoint.h:
+ * tao/IIOP_Endpoint.cpp:
+ * tao/IIOP_Profile.h:
+ * tao/IIOP_Profile.cpp:
+ * tao/Profile.h:
+ * tao/Profile.cpp:
+
+ The profile contains the base endpoint as an attribute. This
+ caused a problem for the endpoint removal scheme mentioned
+ above. If a profile contains two or more endpoints, and the base
+ happens to be the one to be eliminated as a result of the
+ endpoint comparison, the only thing that could be done is to
+ copy the contents of the first alternate into the base, then
+ eliminate the duplicate.
+
+ * tao/orbconf.h:
+
+ Added a tag for the new policy.
+
+ * tests/POA/EndpointPolicy/EndpointPolicy.mpc:
+ * tests/POA/EndpointPolicy/Hello.h:
+ * tests/POA/EndpointPolicy/Hello.cpp:
+ * tests/POA/EndpointPolicy/README:
+ * tests/POA/EndpointPolicy/Test.idl:
+ * tests/POA/EndpointPolicy/client.cpp:
+ * tests/POA/EndpointPolicy/run_test.pl:
+ * tests/POA/EndpointPolicy/server.cpp:
+ * tests/POA/README:
+
+ A new test case for the endpoint policy. This test currently
+ fails due to an unresolved interaction with the sequence
+ code. The error appears to be related to memory corruption, but
+ the cause has not yet been determined. The error only manifests
+ when the multiple profiles portion of the test is being
+ run. This is where an unmodified IOR would contain two profiles,
+ each with one endpoint. The problem does not occur when a single
+ profile has two endpoints.
+
+Wed Apr 26 14:04:12 UTC 2006 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tests/Smart_Proxies/client.cpp:
+ * tests/Smart_Proxies/Benchmark/client.cpp:
+ * tests/Smart_Proxies/dtor/client.cpp:
+ * tests/Smart_Proxies/Policy/client.cpp:
+ Removed remarks about the KAI compiler, more compilers do
+ give these warnings and support for the KAI compilers
+ has been removed
+
+Wed Apr 26 13:29:44 UTC 2006 Phil Mesnier <mesnier_p@ociweb.com>
+
+ * orbsvcs/examples/ORT/Server_IORInterceptor.h:
+ * orbsvcs/examples/ORT/Server_IORInterceptor.cpp:
+
+ * orbsvcs/orbsvcs/LoadBalancing/LB_IORInterceptor.h:
+ * orbsvcs/orbsvcs/LoadBalancing/LB_IORInterceptor.cpp:
+
+ * orbsvcs/orbsvcs/PortableGroup/GOA.h:
+ * orbsvcs/orbsvcs/PortableGroup/GOA.cpp:
+ * orbsvcs/orbsvcs/PortableGroup/PG_Servant_Dispatcher.h:
+ * orbsvcs/orbsvcs/PortableGroup/PG_Servant_Dispatcher.cpp:
+
+ * tao/AnyTypeCode/PI_ForwardA.h:
+
+ * tao/CSD_Framework/CSD_Default_Servant_Dispatcher.h:
+ * tao/CSD_Framework/CSD_Default_Servant_Dispatcher.cpp:
+ * tao/CSD_Framework/CSD_POA.h:
+ * tao/CSD_Framework/CSD_POA.cpp:
+
+ * tao/IORInterceptor/IORInfo.h:
+ * tao/IORInterceptor/IORInfo.cpp:
+ * tao/IORInterceptor/IORInfoC.h:
+ * tao/IORInterceptor/IORInterceptorC.h:
+ * tao/IORInterceptor/IORInterceptor_Adapter_Impl.h:
+ * tao/IORInterceptor/IORInterceptor_Adapter_Impl.cpp:
+
+ * tao/IORInterceptor_Adapter.h:
+ * tao/PI_Forward.pidl:
+ * tao/PI_ForwardC.h:
+
+ * tao/RTPortableServer/RT_POA.h:
+ * tao/RTPortableServer/RT_POA.cpp:
+ * tao/RTPortableServer/RT_Servant_Dispatcher.h:
+ * tao/RTPortableServer/RT_Servant_Dispatcher.cpp:
+
+ * tests/ORT/ORT_test_IORInterceptor.h:
+ * tests/ORT/ORT_test_IORInterceptor.cpp:
+
+ * tests/Portable_Interceptors/IORInterceptor/FOO_IORInterceptor.h:
+ * tests/Portable_Interceptors/IORInterceptor/FOO_IORInterceptor.cpp:
+
+ These are more changes related to the POAManagerFactory. They
+ are coupled with my 13:10:59 utc checkin.
+
+Wed Apr 26 13:10:59 UTC 2006 Phil Mesnier <mesnier_p@ociweb.com>
+
+ * tao/PortableServer/Acceptor_Filter_Factory.h:
+ * tao/PortableServer/Acceptor_Filter_Factory.cpp:
+ * tao/PortableServer/Default_Acceptor_Filter.h:
+ * tao/PortableServer/Default_Servant_Dispatcher.h:
+ * tao/PortableServer/Default_Servant_Dispatcher.cpp:
+ * tao/PortableServer/Object_Adapter.h:
+ * tao/PortableServer/Object_Adapter.cpp:
+ * tao/PortableServer/POAManager.h:
+ * tao/PortableServer/POAManager.i:
+ * tao/PortableServer/POAManager.pidl:
+ * tao/PortableServer/POAManager.cpp:
+ * tao/PortableServer/POAManagerC.h:
+ * tao/PortableServer/POAManagerFactory.h:
+ * tao/PortableServer/POAManagerFactory.cpp:
+ * tao/PortableServer/POAManagerFactory.pidl:
+ * tao/PortableServer/POAManagerFactoryC.h:
+ * tao/PortableServer/POAManagerFactoryC.cpp:
+ * tao/PortableServer/PortableServer.h:
+ * tao/PortableServer/PortableServer.pidl:
+ * tao/PortableServer/PortableServerC.h:
+ * tao/PortableServer/Regular_POA.h:
+ * tao/PortableServer/Regular_POA.cpp:
+ * tao/PortableServer/Root_POA.h:
+ * tao/PortableServer/Root_POA.cpp:
+ * tao/PortableServer/Servant_Dispatcher.h:
+
+ These files are new/updated to support the POAManagerFactory,
+ which was added to the CORBA 3.0.2 specification. The PMF is
+ used to allow for the explicit creation of POA Managers which
+ can then be supplied to POAs during POA creation. POA Managers
+ may now also carry policies which will influence all POAs
+ associated with it. This work builds on the effort originally
+ started by Johnny Willemsen back in the pre-1.4.8 era. This
+ commit resolves Bugzilla bug #1785.
+
+ * tests/POA/POAManagerFactory/POAManagerFactory.cpp:
+ * tests/POA/POAManagerFactory/POAManagerFactory.mpc:
+ * tests/POA/POAManagerFactory/run_test.pl:
+
+ This is a new test for the POAManagerFactory.
+
+Wed Apr 26 13:01:48 UTC 2006 Phil Mesnier <mesnier_p@ociweb.com>
+
+ * tao/Valuetype/AbstractBase.cpp:
+ * tao/Valuetype/AbstractBase.h:
+ The _tao_marshal_v method is supposed to be const.
+
+Wed Apr 26 13:01:12 UTC 2006 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tests/POA/Bug_2511_Regression/*:
+ Added new regression for bug 2511. Thanks to Martin Cornelius
+ <Martin at Cornelius at smiths-heimann dot com> for creating
+ this regression
+
+Wed Apr 26 12:20:51 UTC 2006 Phil Mesnier <mesnier_p@ociweb.com>
+
+ * tests/AMI/ami_test.idl:
+ * tests/AMI/ami_test_i.cpp:
+ * tests/AMI/simple_client.cpp:
+ Reverting earlier test changes. They were causing problems on
+ some platforms and I don't have a clear enough memory of the
+ original motivation for the change.
+
+Wed Apr 26 11:46:12 UTC 2006 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * orbsvcs/tests/AVStreams/Pluggable/ftp.cpp:
+ * orbsvcs/tests/AVStreams/Multicast/ftp.cpp:
+ Fixed a bug in these tests, in the test code for element 0 of
+ a string sequence was set and after that the length was set to 1.
+ The setting of 0 is possible because the OMG doesn't define
+ exceptions for this so it is allowed, then setting the length to
+ 1 does reinitialize element 0 so that we don't get old values.
+ This was not done with the old sequences, then just the old
+ value was returned and things worked then.
+
+Wed Apr 26 11:21:57 UTC 2006 Phil Mesnier <mesnier_p@ociweb.com>
+
+ * tao/Valuetype/ValueBase.cpp:
+
+ Fix for errant removal of throw, this corrects the OBV/Factory
+ test.
+
+Wed Apr 26 10:41:12 UTC 2006 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tao/Unbounded_Sequence_CDR_T.h:
+ Added missing include of SystemException
+
+Wed Apr 26 10:03:12 UTC 2006 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tests/OBV/Simple/*:
+ Added very simple OBV test
+
+Wed Apr 26 09:53:12 UTC 2006 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tests/Portable_Interceptors/Bug_2510_Regression:
+ New regression test, thanks to Martin Cornelius
+ <Martin at Cornelius at smiths-heimann dot com> for creating
+ this test. This bug is not fixed yet.
+
+Wed Apr 26 09:44:12 UTC 2006 Kees van Marle <kvmarle@remedy.nl>
+
+ * tao/Bounded_Sequence_CDR_T.h:
+ * tao/Unbounded_Sequence_CDR_T.h:
+ Check in all marshal_sequence methods if we aren't trying to
+ marshal a nill sequence, this can happen when the user doesn't
+ initialize an out argument. In that case we throw a BAD_PARAM
+ exception as described in the C++ spec. This fixes bugzilla bug
+ 1676.
+
+Wed Apr 26 08:42:12 UTC 2006 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tao/ObjRefTemplate/ObjectReferenceTemplateC.h:
+ * tao/ObjRefTemplate/Default_ORTC.h:
+ * tao/Messaging/ExceptionHolderC.h:
+ Include the Valuetype_Adapter_Factory_Impl.h so that the
+ Valuetype library gets linked in a static build, this is
+ already updated earlier in the IDL compiler
+
+Wed Apr 26 08:17:12 UTC 2006 Kees van Marle <kvmarle@remedy.nl>
+
+ * tests/Bug_1676_Regression/client.cpp:
+ Extended this test to explicitly test for BAD_PARAM exception
+ when the server not initializes an out argument
+
+Wed Apr 26 07:24:12 UTC 2006 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * orbsvcs/orbsvcs/Trader/Interpreter_Utils.h:
+ Removed invalid template export
+
+Wed Apr 26 03:46:16 UTC 2006 Phil Mesnier <mesnier_p@ociweb.com>
+
+ * tao/Valuetype/AbstractBase.cpp:
+
+ Fixed scoreboard detected warning.
+
+Tue Apr 25 19:24:48 UTC 2006 Phil Mesnier <mesnier_p@ociweb.com>
+
+ * TAO_IDL/be/be_visitor_valuetype/valuetype_cs.cpp:
+
+ Missed a patch from the earlier commit.
+
+Tue Apr 25 19:09:08 UTC 2006 Phil Mesnier <mesnier_p@ociweb.com>
+
+ * orbsvcs/examples/ORT/Server_IORInterceptor.h:
+ * orbsvcs/examples/ORT/Server_IORInterceptor.cpp:
+
+ * orbsvcs/orbsvcs/LoadBalancing/LB_IORInterceptor.h:
+ * orbsvcs/orbsvcs/LoadBalancing/LB_IORInterceptor.cpp:
+
+ * orbsvcs/orbsvcs/PortableGroup/GOA.h:
+ * orbsvcs/orbsvcs/PortableGroup/GOA.cpp:
+ * orbsvcs/orbsvcs/PortableGroup/PG_Servant_Dispatcher.h:
+ * orbsvcs/orbsvcs/PortableGroup/PG_Servant_Dispatcher.cpp:
+
+ * tao/AnyTypeCode/PI_ForwardA.h:
+
+ * tao/CSD_Framework/CSD_Default_Servant_Dispatcher.h:
+ * tao/CSD_Framework/CSD_Default_Servant_Dispatcher.cpp:
+ * tao/CSD_Framework/CSD_POA.h:
+ * tao/CSD_Framework/CSD_POA.cpp:
+
+ * tao/IIOP_Endpoint.h:
+ * tao/IIOP_Endpoint.cpp:
+ * tao/IIOP_Profile.h:
+ * tao/IIOP_Profile.cpp:
+
+ * tao/IORInterceptor/IORInfo.h:
+ * tao/IORInterceptor/IORInfo.cpp:
+ * tao/IORInterceptor/IORInfoC.h:
+ * tao/IORInterceptor/IORInterceptorC.h:
+ * tao/IORInterceptor/IORInterceptor_Adapter_Impl.h:
+ * tao/IORInterceptor/IORInterceptor_Adapter_Impl.cpp:
+
+ * tao/IORInterceptor_Adapter.h:
+ * tao/PI_Forward.pidl:
+ * tao/PI_ForwardC.h:
+
+ * tao/PortableServer/Default_Acceptor_Filter.h:
+ * tao/PortableServer/Default_Servant_Dispatcher.h:
+ * tao/PortableServer/Default_Servant_Dispatcher.cpp:
+ * tao/PortableServer/Object_Adapter.h:
+ * tao/PortableServer/Object_Adapter.cpp:
+ * tao/PortableServer/POAManager.h:
+ * tao/PortableServer/POAManager.i:
+ * tao/PortableServer/POAManager.cpp:
+ * tao/PortableServer/POAManager.pidl:
+ * tao/PortableServer/POAManagerC.h:
+ * tao/PortableServer/PortableServer.h:
+ * tao/PortableServer/PortableServer.pidl:
+ * tao/PortableServer/PortableServerC.h:
+ * tao/PortableServer/Regular_POA.h:
+ * tao/PortableServer/Regular_POA.cpp:
+ * tao/PortableServer/Root_POA.h:
+ * tao/PortableServer/Root_POA.cpp:
+ * tao/PortableServer/Servant_Dispatcher.h:
+
+ * tao/Profile.h:
+ * tao/Profile.cpp:
+
+ * tao/RTPortableServer/RT_POA.h:
+ * tao/RTPortableServer/RT_POA.cpp:
+ * tao/RTPortableServer/RT_Servant_Dispatcher.h:
+ * tao/RTPortableServer/RT_Servant_Dispatcher.cpp:
+
+ * tao/orbconf.h:
+ * tao/params.cpp:
+
+ * tests/ORT/ORT_test_IORInterceptor.h:
+ * tests/ORT/ORT_test_IORInterceptor.cpp:
+
+ * tests/POA/EndpointPolicy/EndpointPolicy.mpc:
+ * tests/POA/EndpointPolicy/Hello.h:
+ * tests/POA/EndpointPolicy/Hello.cpp:
+ * tests/POA/EndpointPolicy/README:
+ * tests/POA/EndpointPolicy/Test.idl:
+ * tests/POA/EndpointPolicy/client.cpp:
+ * tests/POA/EndpointPolicy/run_test.pl:
+ * tests/POA/EndpointPolicy/server.cpp:
+
+ * tests/POA/POAManagerFactory/POAManagerFactory.cpp:
+ * tests/POA/POAManagerFactory/POAManagerFactory.mpc:
+ * tests/POA/POAManagerFactory/run_test.pl:
+
+ * tests/POA/README:
+
+ * tests/Portable_Interceptors/IORInterceptor/FOO_IORInterceptor.h:
+ * tests/Portable_Interceptors/IORInterceptor/FOO_IORInterceptor.cpp:
+
+Tue Apr 25 17:38:34 UTC 2006 Phil Mesnier <mesnier_p@ociweb.com>
+
+ * TAO_IDL/be/be_visitor_valuebox/valuebox_ch.cpp:
+ * TAO_IDL/be/be_visitor_valuebox/valuebox_ci.cpp:
+ * TAO_IDL/be/be_visitor_valuetype/valuetype_ch.cpp:
+ * TAO_IDL/be/be_visitor_valuetype/valuetype_cs.cpp:
+ * tao/Messaging/ExceptionHolderC.h:
+ * tao/Messaging/ExceptionHolderC.cpp:
+ * tao/ObjRefTemplate/Default_ORTC.h:
+ * tao/ObjRefTemplate/Default_ORTC.cpp:
+ * tao/ObjRefTemplate/ObjectReferenceTemplateC.h:
+ * tao/ObjRefTemplate/ObjectReferenceTemplateC.cpp:
+ * tao/Valuetype/AbstractBase.h:
+ * tao/Valuetype/AbstractBase.cpp:
+ * tao/Valuetype/StringValueC.h:
+ * tao/Valuetype/StringValueC.inl:
+ * tao/Valuetype/ValueBase.h:
+ * tao/Valuetype/ValueBase.cpp:
+
+ These are further valuetype changes that are related to Bugzilla
+ #2162. The problem is that TAO assumes that a valuetype's
+ typecode is always encoded as 0x7FFFFF02 <repID> but that is not
+ compliant with the spec. It is also valid to encode a valuetype
+ typecode as 0x7FFFFF00 which indicates that the actual type of
+ the value matches the formal type for the argument for which the
+ value is a parameter. TAO already had most of the hooks in
+ place to support this, but was missing a key bit of
+ functionality. This patch adds that functionality, the ability
+ to test that the formal type matches the actual type when
+ marshaling values.
+
+ Valuetypes encoded this way are substantially more efficient, if
+ the type can be implied then there is no need to carry the
+ actual type id. Unfortunately to do so blindly would break
+ backwards compatibility with all previous versions of TAO.
+ For the time being, the effective code to cause TAO to marshal
+ values using the more efficient typecode is disabled using a new
+ compile-time flag, TAO_HAS_OPTIMIMIZED_VALUETYPE_MARSHALING,
+ which must be defined to give TAO the opportunity to use this
+ new technique. THIS FLAG BREAKS BACKWARDS COMPATIBILITY. It is
+ not a violation of the spec to always encode the valuetype's
+ type ID when marshaling, so TAO can continue being backwards
+ compatible and not be in violation of the spec. The only
+ violation comes when failing to unmarshal a value which is using
+ an implied type ID.
+
+ I would prefer to not have a compiler flag to guard the use of
+ optimized marshaling, but I don't know any other way to do it.
+ At the point where the decision is made, there is no reference
+ to an ORB Core so there is no easy way to set a dynamic option
+ that could be used to selectively control this optimization.
+
+Tue Apr 25 15:14:13 UTC 2006 Phil Mesnier <mesnier_p@ociweb.com>
+
+ Merging in truncatable valuetype support. This work was done on
+ an OCI controlled patch then brought in via patch. The premise
+ is to support the "truncatable" keyword for valuetypes as
+ defined in sections 3.9.1.3, 5.2.5.3 and 15.3.4.1 of the CORBA
+ 3.0.3 specification. Practically, this means supporting the
+ marshaling of typecode lists and chunked values. Chunked values
+ requires the retention of state, namely nesting level, during
+ the marshaling. This was handled by creating a new ChunkInfo
+ type that is created on the stack during the marshaling of a
+ valuetype and is passed through all the intermediate marshal
+ methods. This commit resolves Bugzilla #2483
+
+ * TAO_IDL/be/be_visitor_valuebox/cdr_op_ch.cpp:
+ * TAO_IDL/be/be_visitor_valuebox/cdr_op_cs.cpp:
+ * TAO_IDL/be/be_visitor_valuebox/valuebox_ch.cpp:
+ * TAO_IDL/be/be_visitor_valuebox/valuebox_cs.cpp:
+
+ Valueboxes by definition cannot be made truncatable, but they
+ derive from the same valuebase, thus they must support the same
+ signature for creating a list of repository ids. Otherwise these
+ are whitespace only changes.
+
+ * TAO_IDL/be/be_visitor_valuetype/cdr_op_ch.cpp:
+ * TAO_IDL/be/be_visitor_valuetype/cdr_op_cs.cpp:
+ * TAO_IDL/be/be_visitor_valuetype/marshal_cs.cpp:
+ * TAO_IDL/be/be_visitor_valuetype/valuetype_ch.cpp:
+ * TAO_IDL/be/be_visitor_valuetype/valuetype_ci.cpp:
+ * TAO_IDL/be/be_visitor_valuetype/valuetype_cs.cpp:
+ * TAO_IDL/be/be_visitor_valuetype/valuetype_obv_ch.cpp:
+ * TAO_IDL/be/be_visitor_valuetype/valuetype_obv_cs.cpp:
+
+ These are changes for generating code that manages the chunkinfo
+ data as it passes through the value members.
+
+ * TAO_IDL/be/be_visitor_valuetype_fwd/cdr_op_ch.cpp:
+
+ Whitespace changes.
+
+ * TAO_IDL/fe/y.tab.cpp:
+ * TAO_IDL/fe/idl.yy:
+
+ Removed the warning about support for truncatables.
+
+ * tao/AnyTypeCode/skip.cpp:
+
+ Fixed the type for the valuetag.
+
+ * tao/Messaging/ExceptionHolderC.h:
+ * tao/Messaging/ExceptionHolderC.cpp:
+ * tao/ObjRefTemplate/Default_ORTC.h:
+ * tao/ObjRefTemplate/Default_ORTC.cpp:
+ * tao/ObjRefTemplate/ObjectReferenceTemplateC.h:
+ * tao/ObjRefTemplate/ObjectReferenceTemplateC.cpp:
+
+ These are the changes required by the truncatable support that
+ would ordinarily be generated by the IDL compiler.
+
+ * tao/Valuetype/AbstractBase.h:
+ * tao/Valuetype/AbstractBase.cpp:
+ * tao/Valuetype/StringValueC.h:
+ * tao/Valuetype/StringValueC.cpp:
+ * tao/Valuetype/ValueBase.h:
+ * tao/Valuetype/ValueBase.inl:
+ * tao/Valuetype/ValueBase.cpp:
+ * tao/Valuetype/Value_CORBA_methods.h:
+
+ The changes for StringValue and AbstractBase are the same as the
+ generated code. The changes in ValueBase are those common to all
+ value types, used to determine how to marshal values if the
+ truncatable keyword was defined or not. This also includes the
+ definintion of the new ChunkInfo type.
+
+ * tests/AMI/ami_test.idl:
+ * tests/AMI/ami_test_i.cpp:
+ * tests/AMI/simple_client.cpp:
+
+ Changes test misc. fixes for support of wchar data in exceptions.
+
+ * tests/OBV/Truncatable/OBV_Truncatable.mpc:
+ * tests/OBV/Truncatable/README:
+ * tests/OBV/Truncatable/Truncatable.idl:
+ * tests/OBV/Truncatable/TruncatableS_impl.h:
+ * tests/OBV/Truncatable/TruncatableS_impl.cpp:
+ * tests/OBV/Truncatable/client.cpp:
+ * tests/OBV/Truncatable/run_test.pl:
+ * tests/OBV/Truncatable/server.cpp:
+
+ A new test specific to validating the truncatable valuetypes.
+ Note this test is also added to the ace/bin/tao_orb_tests.lst.
+
+ * tests/Param_Test/svc.conf:
+
+ Remove the explicit override of the wchar codeset for the
+
+Tue Apr 25 14:25:12 UTC 2006 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ Reverted this change below, this change broke this test
+
+ Fri Apr 21 08:11:12 UTC 2006 Johnny Willemsen <jwillemsen@remedy.nl>
+ * orbsvcs/tests/Trading/TTest.idl:
+ Use the CORBA predefined sequence types
+
+Tue Apr 25 12:20:12 UTC 2006 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tests/Sequence_Unit_Tests/Sequence_Unit_Tests.mpc:
+ Added missing unbouded array unit test
+
+Tue Apr 25 11:40:12 UTC 2006 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * orbsvcs/orbsvcs/Trader/Constraint_Visitors.cpp
+ * orbsvcs/orbsvcs/Trader/Interpreter_Utils.{h,cpp}:
+ * orbsvcs/orbsvcs/Trader/Offer_Database.{h,cpp}:
+ * orbsvcs/orbsvcs/Trader/Service_Type_Repository.{h,cpp}:
+ * orbsvcs/orbsvcs/Trader/Trader.h
+ * orbsvcs/orbsvcs/Trader/Trader_Constraint_Visitors.cpp
+ * orbsvcs/orbsvcs/Trader/Trader_Interfaces.{h,cpp}:
+ * orbsvcs/orbsvcs/Trader/Trader_Utils.{h,cpp}:
+ Fixed duplicate symbols when linking with vc7/vc8. The trading
+ service used the TAO_String_Hash_Key class to store strings
+ in hash maps, this class is derived from CORBA::String_var which
+ has been refactored to a template. This causes problems with
+ vc7/vc8 because the base template is exported from multiple
+ libraries. This has been resolved by usign CORBA::String_var
+ in the hash map and deliver an ACE_Hash, ACE_Equal_To and
+ ACE_Less_Then template specialization. This solves now the
+ link problems, the runtime issue that appeared after the
+ sequence merge has not been fixed yet. Also see bugzilla bug
+ 2520 for more info.
+
+Tue Apr 25 08:46:12 UTC 2006 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tao/ORB.cpp:
+ Removed runtime check of the sizes of the basic data types. We
+ now always use bool for CORBA::Boolean independent of the size
+ of bool, see also bugzilla 2515
+
+Tue Apr 25 06:37:12 UTC 2006 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tao/Object.{h,cpp}:
+ Made the signature of the static marshal method the same in the
+ definition and the implementation.
+
+Mon Apr 24 19:05:12 UTC 2006 Johnny Willemsen <jwillemsen@remedy.nl>
* tests/IDL_Test/included.idl:
* tests/IDL_Test/including.idl:
@@ -121,6 +1229,349 @@ Thu Mar 30 03:30:00 UTC 2006 Frank Rehberger <frehberger@prismtech.com>
orb_core->reinitialize_object (this), to optimize for colocal
case.
+ * TAO_IDL/Makefile.am:
+ * docs/Makefile.am:
+ * docs/tutorials/Makefile.am:
+ * docs/tutorials/Quoter/Makefile.am:
+ * docs/tutorials/Quoter/AMI/Makefile.am:
+ * docs/tutorials/Quoter/Event_Service/Makefile.am:
+ * docs/tutorials/Quoter/Naming_Service/Makefile.am:
+ * docs/tutorials/Quoter/On_Demand_Activation/Makefile.am:
+ * docs/tutorials/Quoter/RT_Event_Service/Makefile.am:
+ * docs/tutorials/Quoter/Simple/Makefile.am:
+ * docs/tutorials/Quoter/Simple/Client/Makefile.am:
+ * docs/tutorials/Quoter/Simple/Impl-Repo/Makefile.am:
+ * docs/tutorials/Quoter/Simple/ImprovedServer/Makefile.am:
+ * docs/tutorials/Quoter/Simple/Persistent/Makefile.am:
+ * docs/tutorials/Quoter/Simple/Server/Makefile.am:
+ * docs/tutorials/Quoter/idl/Makefile.am:
+ * examples/Makefile.am:
+ * examples/AMH/Makefile.am:
+ * examples/AMH/Sink_Server/Makefile.am:
+ * examples/AMI/Makefile.am:
+ * examples/AMI/FL_Callback/Makefile.am:
+ * examples/Advanced/Makefile.am:
+ * examples/Advanced/ch_3/Makefile.am:
+ * examples/Buffered_AMI/Makefile.am:
+ * examples/Buffered_Oneways/Makefile.am:
+ * examples/CSD_Strategy/Makefile.am:
+ * examples/CSD_Strategy/ThreadPool/Makefile.am:
+ * examples/CSD_Strategy/ThreadPool2/Makefile.am:
+ * examples/CSD_Strategy/ThreadPool3/Makefile.am:
+ * examples/CSD_Strategy/ThreadPool4/Makefile.am:
+ * examples/CSD_Strategy/ThreadPool5/Makefile.am:
+ * examples/CSD_Strategy/ThreadPool6/Makefile.am:
+ * examples/Callback_Quoter/Makefile.am:
+ * examples/Content_Server/Makefile.am:
+ * examples/Content_Server/AMI_Iterator/Makefile.am:
+ * examples/Content_Server/AMI_Observer/Makefile.am:
+ * examples/Content_Server/SMI_Iterator/Makefile.am:
+ * examples/Event_Comm/Makefile.am:
+ * examples/Kokyu_dsrt_schedulers/Makefile.am:
+ * examples/Kokyu_dsrt_schedulers/fp_example/Makefile.am:
+ * examples/Kokyu_dsrt_schedulers/mif_example/Makefile.am:
+ * examples/Kokyu_dsrt_schedulers/muf_example/Makefile.am:
+ * examples/Load_Balancing/Makefile.am:
+ * examples/Load_Balancing_persistent/Makefile.am:
+ * examples/Logging/Makefile.am:
+ * examples/OBV/Makefile.am:
+ * examples/OBV/Typed_Events/Makefile.am:
+ * examples/POA/Makefile.am:
+ * examples/POA/Adapter_Activator/Makefile.am:
+ * examples/POA/DSI/Makefile.am:
+ * examples/POA/Default_Servant/Makefile.am:
+ * examples/POA/Explicit_Activation/Makefile.am:
+ * examples/POA/Explicit_Activation/Alt_Resources/Makefile.am:
+ * examples/POA/FindPOA/Makefile.am:
+ * examples/POA/Forwarding/Makefile.am:
+ * examples/POA/Generic_Servant/Makefile.am:
+ * examples/POA/Loader/Makefile.am:
+ * examples/POA/NewPOA/Makefile.am:
+ * examples/POA/On_Demand_Activation/Makefile.am:
+ * examples/POA/On_Demand_Loading/Makefile.am:
+ * examples/POA/POA_BiDir/Makefile.am:
+ * examples/POA/Reference_Counted_Servant/Makefile.am:
+ * examples/POA/RootPOA/Makefile.am:
+ * examples/POA/TIE/Makefile.am:
+ * examples/Persistent_Grid/Makefile.am:
+ * examples/PluggableUDP/Makefile.am:
+ * examples/PluggableUDP/tests/Makefile.am:
+ * examples/PluggableUDP/tests/Basic/Makefile.am:
+ * examples/PluggableUDP/tests/Performance/Makefile.am:
+ * examples/PluggableUDP/tests/SimplePerformance/Makefile.am:
+ * examples/Quoter/Makefile.am:
+ * examples/RTCORBA/Makefile.am:
+ * examples/RTCORBA/Activity/Makefile.am:
+ * examples/RTScheduling/Makefile.am:
+ * examples/RTScheduling/Fixed_Priority_Scheduler/Makefile.am:
+ * examples/RTScheduling/MIF_Scheduler/Makefile.am:
+ * examples/Simple/Makefile.am:
+ * examples/Simple/bank/Makefile.am:
+ * examples/Simple/chat/Makefile.am:
+ * examples/Simple/echo/Makefile.am:
+ * examples/Simple/grid/Makefile.am:
+ * examples/Simple/time/Makefile.am:
+ * examples/Simple/time-date/Makefile.am:
+ * examples/Simulator/Makefile.am:
+ * examples/Simulator/Event_Supplier/Makefile.am:
+ * examples/TypeCode_Creation/Makefile.am:
+ * examples/ior_corbaloc/Makefile.am:
+ * examples/mfc/Makefile.am:
+ * interop-tests/Makefile.am:
+ * interop-tests/wchar/Makefile.am:
+ * orbsvcs/Makefile.am:
+ * orbsvcs/Concurrency_Service/Makefile.am:
+ * orbsvcs/CosEvent_Service/Makefile.am:
+ * orbsvcs/Dump_Schedule/Makefile.am:
+ * orbsvcs/Event_Service/Makefile.am:
+ * orbsvcs/FTRT_Event_Service/Makefile.am:
+ * orbsvcs/FTRT_Event_Service/Event_Service/Makefile.am:
+ * orbsvcs/FTRT_Event_Service/Factory_Service/Makefile.am:
+ * orbsvcs/FTRT_Event_Service/Gateway_Service/Makefile.am:
+ * orbsvcs/FT_ReplicationManager/Makefile.am:
+ * orbsvcs/Fault_Detector/Makefile.am:
+ * orbsvcs/Fault_Notifier/Makefile.am:
+ * orbsvcs/IFR_Service/Makefile.am:
+ * orbsvcs/ImplRepo_Service/Makefile.am:
+ * orbsvcs/LoadBalancer/Makefile.am:
+ * orbsvcs/Logging_Service/Makefile.am:
+ * orbsvcs/Logging_Service/Basic_Logging_Service/Makefile.am:
+ * orbsvcs/Logging_Service/Event_Logging_Service/Makefile.am:
+ * orbsvcs/Logging_Service/Notify_Logging_Service/Makefile.am:
+ * orbsvcs/Logging_Service/RTEvent_Logging_Service/Makefile.am:
+ * orbsvcs/Naming_Service/Makefile.am:
+ * orbsvcs/Notify_Service/Makefile.am:
+ * orbsvcs/Scheduling_Service/Makefile.am:
+ * orbsvcs/TAO_Service/Makefile.am:
+ * orbsvcs/Time_Service/Makefile.am:
+ * orbsvcs/Trading_Service/Makefile.am:
+ * orbsvcs/examples/Makefile.am:
+ * orbsvcs/examples/CosEC/Makefile.am:
+ * orbsvcs/examples/CosEC/Factory/Makefile.am:
+ * orbsvcs/examples/CosEC/RtEC_Based/Makefile.am:
+ * orbsvcs/examples/CosEC/RtEC_Based/bin/Makefile.am:
+ * orbsvcs/examples/CosEC/RtEC_Based/lib/Makefile.am:
+ * orbsvcs/examples/CosEC/RtEC_Based/tests/Makefile.am:
+ * orbsvcs/examples/CosEC/RtEC_Based/tests/Basic/Makefile.am:
+ * orbsvcs/examples/CosEC/RtEC_Based/tests/Multiple/Makefile.am:
+ * orbsvcs/examples/CosEC/Simple/Makefile.am:
+ * orbsvcs/examples/CosEC/TypedSimple/Makefile.am:
+ * orbsvcs/examples/FaultTolerance/Makefile.am:
+ * orbsvcs/examples/FaultTolerance/RolyPoly/Makefile.am:
+ * orbsvcs/examples/ImR/Makefile.am:
+ * orbsvcs/examples/ImR/Advanced/Makefile.am:
+ * orbsvcs/examples/ImR/Combined_Service/Makefile.am:
+ * orbsvcs/examples/LoadBalancing/Makefile.am:
+ * orbsvcs/examples/Log/Makefile.am:
+ * orbsvcs/examples/Log/Basic/Makefile.am:
+ * orbsvcs/examples/Log/Event/Makefile.am:
+ * orbsvcs/examples/Log/Notify/Makefile.am:
+ * orbsvcs/examples/Log/RTEvent/Makefile.am:
+ * orbsvcs/examples/Notify/Makefile.am:
+ * orbsvcs/examples/Notify/Federation/Makefile.am:
+ * orbsvcs/examples/Notify/Federation/Agent/Makefile.am:
+ * orbsvcs/examples/Notify/Federation/Gate/Makefile.am:
+ * orbsvcs/examples/Notify/Federation/SpaceCraft/Makefile.am:
+ * orbsvcs/examples/Notify/Filter/Makefile.am:
+ * orbsvcs/examples/Notify/Lanes/Makefile.am:
+ * orbsvcs/examples/Notify/Subscribe/Makefile.am:
+ * orbsvcs/examples/Notify/ThreadPool/Makefile.am:
+ * orbsvcs/examples/ORT/Makefile.am:
+ * orbsvcs/examples/RtEC/Makefile.am:
+ * orbsvcs/examples/RtEC/IIOPGateway/Makefile.am:
+ * orbsvcs/examples/RtEC/Kokyu/Makefile.am:
+ * orbsvcs/examples/RtEC/MCast/Makefile.am:
+ * orbsvcs/examples/RtEC/Schedule/Makefile.am:
+ * orbsvcs/examples/RtEC/Simple/Makefile.am:
+ * orbsvcs/examples/Security/Makefile.am:
+ * orbsvcs/examples/Security/Send_File/Makefile.am:
+ * orbsvcs/orbsvcs/Makefile.am:
+ * orbsvcs/performance-tests/Makefile.am:
+ * orbsvcs/performance-tests/LoadBalancing/Makefile.am:
+ * orbsvcs/performance-tests/LoadBalancing/LBPerf/Makefile.am:
+ * orbsvcs/performance-tests/LoadBalancing/LBPerf/RPS/Makefile.am:
+ * orbsvcs/performance-tests/RTEvent/Makefile.am:
+ * orbsvcs/performance-tests/RTEvent/Colocated_Roundtrip/Makefile.am:
+ * orbsvcs/performance-tests/RTEvent/Federated_Roundtrip/Makefile.am:
+ * orbsvcs/performance-tests/RTEvent/RTCORBA_Baseline/Makefile.am:
+ * orbsvcs/performance-tests/RTEvent/RTCORBA_Callback/Makefile.am:
+ * orbsvcs/performance-tests/RTEvent/Roundtrip/Makefile.am:
+ * orbsvcs/performance-tests/RTEvent/TCP_Baseline/Makefile.am:
+ * orbsvcs/performance-tests/RTEvent/lib/Makefile.am:
+ * orbsvcs/tests/Makefile.am:
+ * orbsvcs/tests/AVStreams/Makefile.am:
+ * orbsvcs/tests/AVStreams/Asynch_Three_Stage/Makefile.am:
+ * orbsvcs/tests/AVStreams/Bidirectional_Flows/Makefile.am:
+ * orbsvcs/tests/AVStreams/Component_Switching/Makefile.am:
+ * orbsvcs/tests/AVStreams/Full_Profile/Makefile.am:
+ * orbsvcs/tests/AVStreams/Latency/Makefile.am:
+ * orbsvcs/tests/AVStreams/Modify_QoS/Makefile.am:
+ * orbsvcs/tests/AVStreams/Multicast/Makefile.am:
+ * orbsvcs/tests/AVStreams/Multicast_Full_Profile/Makefile.am:
+ * orbsvcs/tests/AVStreams/Multiple_Flows/Makefile.am:
+ * orbsvcs/tests/AVStreams/Pluggable/Makefile.am:
+ * orbsvcs/tests/AVStreams/Pluggable_Flow_Protocol/Makefile.am:
+ * orbsvcs/tests/AVStreams/Simple_Three_Stage/Makefile.am:
+ * orbsvcs/tests/AVStreams/Simple_Two_Stage/Makefile.am:
+ * orbsvcs/tests/AVStreams/Simple_Two_Stage_With_QoS/Makefile.am:
+ * orbsvcs/tests/BiDir_CORBALOC/Makefile.am:
+ * orbsvcs/tests/Bug_1334_Regression/Makefile.am:
+ * orbsvcs/tests/Bug_1393_Regression/Makefile.am:
+ * orbsvcs/tests/Bug_1395_Regression/Makefile.am:
+ * orbsvcs/tests/Bug_1630_Regression/Makefile.am:
+ * orbsvcs/tests/Bug_2074_Regression/Makefile.am:
+ * orbsvcs/tests/Bug_2137_Regression/Makefile.am:
+ * orbsvcs/tests/Bug_2247_Regression/Makefile.am:
+ * orbsvcs/tests/Bug_2248_Regression/Makefile.am:
+ * orbsvcs/tests/Bug_2285_Regression/Makefile.am:
+ * orbsvcs/tests/Bug_2287_Regression/Makefile.am:
+ * orbsvcs/tests/Bug_2316_Regression/Makefile.am:
+ * orbsvcs/tests/Concurrency/Makefile.am:
+ * orbsvcs/tests/CosEvent/Makefile.am:
+ * orbsvcs/tests/CosEvent/Basic/Makefile.am:
+ * orbsvcs/tests/CosEvent/lib/Makefile.am:
+ * orbsvcs/tests/EC_Custom_Marshal/Makefile.am:
+ * orbsvcs/tests/EC_MT_Mcast/Makefile.am:
+ * orbsvcs/tests/EC_Mcast/Makefile.am:
+ * orbsvcs/tests/EC_Multiple/Makefile.am:
+ * orbsvcs/tests/EC_Throughput/Makefile.am:
+ * orbsvcs/tests/Event/Makefile.am:
+ * orbsvcs/tests/Event/Basic/Makefile.am:
+ * orbsvcs/tests/Event/Mcast/Makefile.am:
+ * orbsvcs/tests/Event/Mcast/Common/Makefile.am:
+ * orbsvcs/tests/Event/Mcast/Complex/Makefile.am:
+ * orbsvcs/tests/Event/Mcast/Simple/Makefile.am:
+ * orbsvcs/tests/Event/Mcast/Two_Way/Makefile.am:
+ * orbsvcs/tests/Event/Performance/Makefile.am:
+ * orbsvcs/tests/Event/lib/Makefile.am:
+ * orbsvcs/tests/FT_App/Makefile.am:
+ * orbsvcs/tests/FaultTolerance/Makefile.am:
+ * orbsvcs/tests/FaultTolerance/GroupRef_Manipulation/Makefile.am:
+ * orbsvcs/tests/FaultTolerance/IOGR/Makefile.am:
+ * orbsvcs/tests/FaultTolerance/IOGRManipulation/Makefile.am:
+ * orbsvcs/tests/FtRtEvent/Makefile.am:
+ * orbsvcs/tests/HTIOP/Makefile.am:
+ * orbsvcs/tests/HTIOP/AMI/Makefile.am:
+ * orbsvcs/tests/HTIOP/BiDirectional/Makefile.am:
+ * orbsvcs/tests/HTIOP/Hello/Makefile.am:
+ * orbsvcs/tests/IOR_MCast/Makefile.am:
+ * orbsvcs/tests/ImplRepo/Makefile.am:
+ * orbsvcs/tests/ImplRepo/NameService/Makefile.am:
+ * orbsvcs/tests/ImplRepo/scale/Makefile.am:
+ * orbsvcs/tests/InterfaceRepo/Makefile.am:
+ * orbsvcs/tests/InterfaceRepo/Application_Test/Makefile.am:
+ * orbsvcs/tests/InterfaceRepo/IDL3_Test/Makefile.am:
+ * orbsvcs/tests/InterfaceRepo/IFR_Inheritance_Test/Makefile.am:
+ * orbsvcs/tests/InterfaceRepo/IFR_Test/Makefile.am:
+ * orbsvcs/tests/InterfaceRepo/Latency_Test/Makefile.am:
+ * orbsvcs/tests/InterfaceRepo/Persistence_Test/Makefile.am:
+ * orbsvcs/tests/Interoperable_Naming/Makefile.am:
+ * orbsvcs/tests/LoadBalancing/Makefile.am:
+ * orbsvcs/tests/LoadBalancing/GenericFactory/Makefile.am:
+ * orbsvcs/tests/LoadBalancing/GenericFactory/Application_Controlled/Makefile.am:
+ * orbsvcs/tests/LoadBalancing/GenericFactory/Infrastructure_Controlled/Makefile.am:
+ * orbsvcs/tests/LoadBalancing/GenericFactory/Manage_Object_Group/Makefile.am:
+ * orbsvcs/tests/LoadBalancing/LoadMonitor/Makefile.am:
+ * orbsvcs/tests/LoadBalancing/LoadMonitor/CPU/Makefile.am:
+ * orbsvcs/tests/Log/Makefile.am:
+ * orbsvcs/tests/Log/Basic_Log_Test/Makefile.am:
+ * orbsvcs/tests/Miop/Makefile.am:
+ * orbsvcs/tests/Miop/McastHello/Makefile.am:
+ * orbsvcs/tests/Notify/Makefile.am:
+ * orbsvcs/tests/Notify/Basic/Makefile.am:
+ * orbsvcs/tests/Notify/Blocking/Makefile.am:
+ * orbsvcs/tests/Notify/Destroy/Makefile.am:
+ * orbsvcs/tests/Notify/Discarding/Makefile.am:
+ * orbsvcs/tests/Notify/Driver/Makefile.am:
+ * orbsvcs/tests/Notify/MT_Dispatching/Makefile.am:
+ * orbsvcs/tests/Notify/Ordering/Makefile.am:
+ * orbsvcs/tests/Notify/PluggableTopology/Makefile.am:
+ * orbsvcs/tests/Notify/RT_lib/Makefile.am:
+ * orbsvcs/tests/Notify/Reconnecting/Makefile.am:
+ * orbsvcs/tests/Notify/Sequence_Multi_ETCL_Filter/Makefile.am:
+ * orbsvcs/tests/Notify/Sequence_Multi_Filter/Makefile.am:
+ * orbsvcs/tests/Notify/Structured_Filter/Makefile.am:
+ * orbsvcs/tests/Notify/Structured_Multi_Filter/Makefile.am:
+ * orbsvcs/tests/Notify/Test_Filter/Makefile.am:
+ * orbsvcs/tests/Notify/XML_Persistence/Makefile.am:
+ * orbsvcs/tests/Notify/lib/Makefile.am:
+ * orbsvcs/tests/Notify/performance-tests/Makefile.am:
+ * orbsvcs/tests/Notify/performance-tests/Filter/Makefile.am:
+ * orbsvcs/tests/Notify/performance-tests/RedGreen/Makefile.am:
+ * orbsvcs/tests/Notify/performance-tests/Throughput/Makefile.am:
+ * orbsvcs/tests/Property/Makefile.am:
+ * orbsvcs/tests/Redundant_Naming/Makefile.am:
+ * orbsvcs/tests/Sched/Makefile.am:
+ * orbsvcs/tests/Sched_Conf/Makefile.am:
+ * orbsvcs/tests/Security/Makefile.am:
+ * orbsvcs/tests/Security/BiDirectional/Makefile.am:
+ * orbsvcs/tests/Security/Big_Request/Makefile.am:
+ * orbsvcs/tests/Security/Callback/Makefile.am:
+ * orbsvcs/tests/Security/Crash_Test/Makefile.am:
+ * orbsvcs/tests/Security/MT_IIOP_SSL/Makefile.am:
+ * orbsvcs/tests/Security/MT_SSLIOP/Makefile.am:
+ * orbsvcs/tests/Security/Secure_Invocation/Makefile.am:
+ * orbsvcs/tests/Security/ssliop_corbaloc/Makefile.am:
+ * orbsvcs/tests/Simple_Naming/Makefile.am:
+ * orbsvcs/tests/Time/Makefile.am:
+ * orbsvcs/tests/Trading/Makefile.am:
+ * orbsvcs/tests/ior_corbaname/Makefile.am:
+ * orbsvcs/tests/tests_svc_loader/Makefile.am:
+ * performance-tests/Makefile.am:
+ * performance-tests/Anyop/Makefile.am:
+ * performance-tests/CSD_Strategy/Makefile.am:
+ * performance-tests/CSD_Strategy/TestApps/Makefile.am:
+ * performance-tests/CSD_Strategy/TestInf/Makefile.am:
+ * performance-tests/CSD_Strategy/TestServant/Makefile.am:
+ * performance-tests/Callback/Makefile.am:
+ * performance-tests/Cubit/Makefile.am:
+ * performance-tests/Cubit/TAO/Makefile.am:
+ * performance-tests/Cubit/TAO/DII_Cubit/Makefile.am:
+ * performance-tests/Cubit/TAO/IDL_Cubit/Makefile.am:
+ * performance-tests/Cubit/TAO/MT_Cubit/Makefile.am:
+ * performance-tests/Latency/Makefile.am:
+ * performance-tests/Latency/AMH_Single_Threaded/Makefile.am:
+ * performance-tests/Latency/AMI/Makefile.am:
+ * performance-tests/Latency/Collocation/Makefile.am:
+ * performance-tests/Latency/DII/Makefile.am:
+ * performance-tests/Latency/DSI/Makefile.am:
+ * performance-tests/Latency/Deferred/Makefile.am:
+ * performance-tests/Latency/Single_Threaded/Makefile.am:
+ * performance-tests/Latency/Thread_Per_Connection/Makefile.am:
+ * performance-tests/Latency/Thread_Pool/Makefile.am:
+ * performance-tests/Memory/Makefile.am:
+ * performance-tests/Memory/IORsize/Makefile.am:
+ * performance-tests/Memory/Single_Threaded/Makefile.am:
+ * performance-tests/POA/Makefile.am:
+ * performance-tests/POA/Create_Reference/Makefile.am:
+ * performance-tests/POA/Demux/Makefile.am:
+ * performance-tests/POA/Implicit_Activation/Makefile.am:
+ * performance-tests/POA/Object_Creation_And_Registration/Makefile.am:
+ * performance-tests/Pluggable/Makefile.am:
+ * performance-tests/Protocols/Makefile.am:
+ * performance-tests/RTCorba/Makefile.am:
+ * performance-tests/RTCorba/Multiple_Endpoints/Makefile.am:
+ * performance-tests/RTCorba/Multiple_Endpoints/Common/Makefile.am:
+ * performance-tests/RTCorba/Multiple_Endpoints/Orb_Per_Priority/Makefile.am:
+ * performance-tests/RTCorba/Multiple_Endpoints/Single_Endpoint/Makefile.am:
+ * performance-tests/RTCorba/Oneways/Makefile.am:
+ * performance-tests/RTCorba/Oneways/Reliable/Makefile.am:
+ * performance-tests/RTCorba/Thread_Pool/Makefile.am:
+ * performance-tests/Sequence_Latency/Makefile.am:
+ * performance-tests/Sequence_Latency/AMH_Single_Threaded/Makefile.am:
+ * performance-tests/Sequence_Latency/AMI/Makefile.am:
+ * performance-tests/Sequence_Latency/DII/Makefile.am:
+ * performance-tests/Sequence_Latency/DSI/Makefile.am:
+ * performance-tests/Sequence_Latency/Deferred/Makefile.am:
+ * performance-tests/Sequence_Latency/Single_Threaded/Makefile.am:
+ * performance-tests/Sequence_Latency/Thread_Per_Connection/Makefile.am:
+ * performance-tests/Sequence_Latency/Thread_Pool/Makefile.am:
+ * performance-tests/Throughput/Makefile.am:
+ * tao/Makefile.am:
+ * utils/Makefile.am:
+ * utils/catior/Makefile.am:
+ * utils/nslist/Makefile.am:
+
* tests/Permanent_Forward/StubTest.cpp: Removed code at end of
test, which caused error messages even if the test run thru all
test-cases successfully.
diff --git a/TAO/NEWS b/TAO/NEWS
index d542bb7f205..190cb8cceb3 100644
--- a/TAO/NEWS
+++ b/TAO/NEWS
@@ -26,6 +26,10 @@ PLANNED MAJOR CHANGES TARGETED FOR TAO-1.5.2
USER VISIBLE CHANGES BETWEEN TAO-1.5.1 and TAO-1.5.2
====================================================
+. Allow different ORB instances to use a different sets of Service
+ Objects in their own Service REpository instances. This resolves
+ bugzilla #2486.
+
. Integrate new sequence implementation made by Carlos O'Ryan. This
also includes a rework of the TAO_String_Managers and CORBA::(W)String
implementations.
diff --git a/TAO/TAO_IDL/be/be_visitor_valuebox/cdr_op_ch.cpp b/TAO/TAO_IDL/be/be_visitor_valuebox/cdr_op_ch.cpp
index 29e474db40b..cd35ccf737b 100644
--- a/TAO/TAO_IDL/be/be_visitor_valuebox/cdr_op_ch.cpp
+++ b/TAO/TAO_IDL/be/be_visitor_valuebox/cdr_op_ch.cpp
@@ -19,8 +19,8 @@
//
// ============================================================================
-ACE_RCSID (be_visitor_valuebox,
- cdr_op_ch,
+ACE_RCSID (be_visitor_valuebox,
+ cdr_op_ch,
"$Id$")
be_visitor_valuebox_cdr_op_ch::be_visitor_valuebox_cdr_op_ch (
@@ -64,4 +64,3 @@ be_visitor_valuebox_cdr_op_ch::visit_valuebox (be_valuebox *node)
node->cli_hdr_cdr_op_gen (1);
return 0;
}
-
diff --git a/TAO/TAO_IDL/be/be_visitor_valuebox/cdr_op_cs.cpp b/TAO/TAO_IDL/be/be_visitor_valuebox/cdr_op_cs.cpp
index 3b4856930e5..42b42489d69 100644
--- a/TAO/TAO_IDL/be/be_visitor_valuebox/cdr_op_cs.cpp
+++ b/TAO/TAO_IDL/be/be_visitor_valuebox/cdr_op_cs.cpp
@@ -52,13 +52,13 @@ be_visitor_valuebox_cdr_op_cs::visit_valuebox (be_valuebox *node)
<< "// " << __FILE__ << ":" << __LINE__ << be_nl << be_nl;
*os << be_global->core_versioning_begin () << be_nl;
-
+
// Set the sub state as generating code for the output operator.
this->ctx_->sub_state(TAO_CodeGen::TAO_CDR_OUTPUT);
*os << "::CORBA::Boolean" << be_nl
<< "operator<< (" << be_idt << be_idt_nl
- << "TAO_OutputCDR &strm," << be_nl
+ << "TAO_OutputCDR &strm, " << be_nl
<< "const " << node->full_name ()
<< " *_tao_valuebox" << be_uidt_nl
<< ")" << be_uidt_nl
diff --git a/TAO/TAO_IDL/be/be_visitor_valuebox/valuebox_ch.cpp b/TAO/TAO_IDL/be/be_visitor_valuebox/valuebox_ch.cpp
index c0f28c78a64..b8a025efc2b 100644
--- a/TAO/TAO_IDL/be/be_visitor_valuebox/valuebox_ch.cpp
+++ b/TAO/TAO_IDL/be/be_visitor_valuebox/valuebox_ch.cpp
@@ -89,6 +89,9 @@ be_visitor_valuebox_ch::visit_valuebox (be_valuebox *node)
*os << "virtual const char* "
<< "_tao_obv_repository_id (void) const;"
<< be_nl << be_nl
+ << "virtual void "
+ << "_tao_obv_truncatable_repo_ids (Repository_Id_List &) const;"
+ << be_nl << be_nl
<< "static const char* "
<< "_tao_obv_static_repository_id (void);" << be_nl << be_nl;
@@ -125,6 +128,8 @@ be_visitor_valuebox_ch::visit_valuebox (be_valuebox *node)
<< "_tao_marshal_v (TAO_OutputCDR &) const;" << be_nl;
*os << "virtual ::CORBA::Boolean "
<< "_tao_unmarshal_v (TAO_InputCDR &);" << be_nl;
+ *os << "virtual ::CORBA::Boolean "
+ << "_tao_match_formal_type (ptrdiff_t ) const;" << be_nl;
// Private unimplemented default assignment operator
*os << be_uidt_nl << "private:" << be_idt_nl;
diff --git a/TAO/TAO_IDL/be/be_visitor_valuebox/valuebox_ci.cpp b/TAO/TAO_IDL/be/be_visitor_valuebox/valuebox_ci.cpp
index 4acc14aaca8..3f8fc95b0d1 100644
--- a/TAO/TAO_IDL/be/be_visitor_valuebox/valuebox_ci.cpp
+++ b/TAO/TAO_IDL/be/be_visitor_valuebox/valuebox_ci.cpp
@@ -65,6 +65,16 @@ be_visitor_valuebox_ci::visit_valuebox (be_valuebox *node)
<< "return \"" << node->repoID () << "\";" << be_uidt_nl
<< "}" << be_nl << be_nl;
+ // _tao_match_formal_type method. Generated because ValueBase interface
+ // requires it. Since value boxes do not support inheritence, this can
+ // simply return true.
+ *os << "ACE_INLINE ::CORBA::Boolean " << be_nl
+ << node->name ()
+ << "::_tao_match_formal_type (ptrdiff_t ) const" << be_nl
+ << "{" << be_idt_nl
+ << "return true;" << be_uidt_nl
+ << "}" << be_nl << be_nl;
+
// Indicate that code is already generated for this node.
node->cli_inline_gen (true);
diff --git a/TAO/TAO_IDL/be/be_visitor_valuebox/valuebox_cs.cpp b/TAO/TAO_IDL/be/be_visitor_valuebox/valuebox_cs.cpp
index 6a66cc503ee..91218d66de0 100644
--- a/TAO/TAO_IDL/be/be_visitor_valuebox/valuebox_cs.cpp
+++ b/TAO/TAO_IDL/be/be_visitor_valuebox/valuebox_cs.cpp
@@ -122,6 +122,12 @@ be_visitor_valuebox_cs::visit_valuebox (be_valuebox *node)
<< "return this->_tao_obv_static_repository_id ();" << be_uidt_nl
<< "}" << be_nl << be_nl;
+ *os << "void" << be_nl
+ << node->name () << "::_tao_obv_truncatable_repo_ids (Repository_Id_List& ids) const" << be_nl
+ << "{" << be_idt_nl
+ << "ids.push_back (this->_tao_obv_static_repository_id ());" << be_uidt_nl
+ << "}" << be_nl << be_nl;
+
AST_Type * at = node->boxed_type()->unaliased_type();
be_type *bt = be_type::narrow_from_decl (at);
bool is_array = false;
diff --git a/TAO/TAO_IDL/be/be_visitor_valuetype/cdr_op_ch.cpp b/TAO/TAO_IDL/be/be_visitor_valuetype/cdr_op_ch.cpp
index df4f4fa224f..2cfe3923843 100644
--- a/TAO/TAO_IDL/be/be_visitor_valuetype/cdr_op_ch.cpp
+++ b/TAO/TAO_IDL/be/be_visitor_valuetype/cdr_op_ch.cpp
@@ -20,8 +20,8 @@
//
// ============================================================================
-ACE_RCSID (be_visitor_valuetype,
- cdr_op_ch,
+ACE_RCSID (be_visitor_valuetype,
+ cdr_op_ch,
"$Id$")
be_visitor_valuetype_cdr_op_ch::be_visitor_valuetype_cdr_op_ch (
@@ -52,7 +52,7 @@ be_visitor_valuetype_cdr_op_ch::visit_valuetype (be_valuetype *node)
ACE_ERROR_RETURN ((LM_ERROR,
"(%N:%l) be_visitor_valuetype_cdr_op_ch::"
"visit_valuetype - "
- "codegen for helper functions failed\n"),
+ "codegen for helper functions failed\n"),
-1);
}
@@ -61,7 +61,7 @@ be_visitor_valuetype_cdr_op_ch::visit_valuetype (be_valuetype *node)
<< "// " << __FILE__ << ":" << __LINE__ << be_nl << be_nl;
*os << be_global->core_versioning_begin () << be_nl;
-
+
*os << be_global->stub_export_macro () << " "
<< "::CORBA::Boolean operator<< (TAO_OutputCDR &, const "
<< node->full_name () << " *);" << be_nl;
@@ -71,7 +71,7 @@ be_visitor_valuetype_cdr_op_ch::visit_valuetype (be_valuetype *node)
<< node->full_name () << " *&);";
*os << be_global->core_versioning_end () << be_nl;
-
+
// Set the substate as generating code for the types defined in our scope.
this->ctx_->sub_state (TAO_CodeGen::TAO_CDR_SCOPE);
@@ -80,7 +80,7 @@ be_visitor_valuetype_cdr_op_ch::visit_valuetype (be_valuetype *node)
ACE_ERROR_RETURN ((LM_ERROR,
"(%N:%l) be_visitor_valuetype_cdr_op_ch::"
"visit_valuetype - "
- "codegen for scope failed\n"),
+ "codegen for scope failed\n"),
-1);
}
@@ -101,5 +101,3 @@ be_visitor_valuetype_cdr_op_ch::visit_eventtype (be_eventtype *node)
{
return this->visit_valuetype (node);
}
-
-
diff --git a/TAO/TAO_IDL/be/be_visitor_valuetype/cdr_op_cs.cpp b/TAO/TAO_IDL/be/be_visitor_valuetype/cdr_op_cs.cpp
index 8e41015613f..1b7ac0be4b3 100644
--- a/TAO/TAO_IDL/be/be_visitor_valuetype/cdr_op_cs.cpp
+++ b/TAO/TAO_IDL/be/be_visitor_valuetype/cdr_op_cs.cpp
@@ -73,13 +73,13 @@ be_visitor_valuetype_cdr_op_cs::visit_valuetype (be_valuetype *node)
<< "// " << __FILE__ << ":" << __LINE__ << be_nl << be_nl;
*os << be_global->core_versioning_begin () << be_nl;
-
+
// Set the sub state as generating code for the output operator.
this->ctx_->sub_state(TAO_CodeGen::TAO_CDR_OUTPUT);
*os << "::CORBA::Boolean" << be_nl
<< "operator<< (" << be_idt << be_idt_nl
- << "TAO_OutputCDR &strm," << be_nl
+ << "TAO_OutputCDR &strm, " << be_nl
<< "const " << node->full_name ()
<< " *_tao_valuetype" << be_uidt_nl
<< ")" << be_uidt_nl
diff --git a/TAO/TAO_IDL/be/be_visitor_valuetype/marshal_cs.cpp b/TAO/TAO_IDL/be/be_visitor_valuetype/marshal_cs.cpp
index 3632cdef765..ffeabdd4bb5 100644
--- a/TAO/TAO_IDL/be/be_visitor_valuetype/marshal_cs.cpp
+++ b/TAO/TAO_IDL/be/be_visitor_valuetype/marshal_cs.cpp
@@ -58,18 +58,29 @@ be_visitor_valuetype_marshal_cs::visit_valuetype (be_valuetype *node)
*os << "strm";
}
+ *os << ", TAO_ChunkInfo&";
+ // If the valuetype has no fields, and no stateful inherit,
+ // the chunking helper arg is unused.
+ if (inh != 0 || node->data_members_count () > 0)
+ {
+ *os << "ci";
+ }
+
*os << ") const" << be_nl
<< "{" << be_idt_nl;
if (inh)
{
+ *os << "if (! ci.start_chunk (strm))" << be_idt_nl;
+ *os << "return false;" << be_uidt_nl << be_nl;
+
if (inh->opt_accessor ())
{
*os << "if (!this->";
this->class_name (inh, os);
- *os << "::_tao_marshal_state (strm))" << be_idt_nl
+ *os << "::_tao_marshal_state (strm, ci))" << be_idt_nl
<< "{" << be_idt_nl
<< "return false;" << be_uidt_nl
<< "}" << be_uidt_nl << be_nl;
@@ -79,7 +90,7 @@ be_visitor_valuetype_marshal_cs::visit_valuetype (be_valuetype *node)
{
*os << "if (! this->_tao_marshal__"
<< inh->flat_name ()
- << " (strm))" << be_idt_nl
+ << " (strm, ci))" << be_idt_nl
<< "{" << be_idt_nl
<< "return false;" << be_uidt_nl
<< "}" << be_uidt_nl << be_nl;
@@ -90,15 +101,32 @@ be_visitor_valuetype_marshal_cs::visit_valuetype (be_valuetype *node)
be_visitor_valuetype_field_cdr_decl field_out_cdr (&new_ctx);
field_out_cdr.visit_scope (node);
- *os << "return (" << be_idt << be_idt_nl;
+ if (node->data_members_count () > 0)
+ {
+ *os << "if (! ci.start_chunk (strm))" << be_idt_nl;
+ *os << "return false;" << be_uidt_nl << be_nl;
+ *os << "CORBA::Boolean ret = " << be_idt << be_idt_nl;
// All we have to do is to visit the scope and generate code.
this->gen_fields (node,
*this->ctx_);
- *os << be_uidt_nl
- << ");" << be_uidt << be_uidt_nl
- << "}" << be_nl << be_nl;
+ *os << ";" << be_uidt << be_uidt_nl;
+
+ *os << "if ( ! ret) " << be_idt_nl;
+ *os << "return false; " << be_uidt_nl << be_nl;
+ *os << "if (! ci.end_chunk (strm))" << be_idt_nl;
+ *os << "return false;" << be_uidt_nl << be_nl;
+ }
+
+ if (inh)
+ {
+ *os << "if (! ci.end_chunk (strm))" << be_idt_nl;
+ *os << "return false;" << be_uidt_nl << be_nl;
+ }
+
+ *os << "return true;" << be_uidt_nl;
+ *os << "}" << be_nl << be_nl;
// Set the substate as generating code for the input operator.
this->ctx_->sub_state (TAO_CodeGen::TAO_CDR_INPUT);
@@ -116,18 +144,29 @@ be_visitor_valuetype_marshal_cs::visit_valuetype (be_valuetype *node)
*os << "strm";
}
+ *os << ", TAO_ChunkInfo&";
+ // If the valuetype has no fields, and no stateful inherit,
+ // the chunking helper arg is unused.
+ if (inh != 0 || node->data_members_count () > 0)
+ {
+ *os << "ci";
+ }
+
*os << ")" << be_nl
<< "{" << be_idt_nl;
if (inh)
{
+ *os << "if (! ci.handle_chunking (strm))" << be_idt_nl;
+ *os << "return false;" << be_uidt_nl << be_nl;
+
if (inh->opt_accessor ())
{
*os << "if (!this->";
this->class_name (inh, os);
- *os << "::_tao_unmarshal_state (strm))" << be_idt_nl
+ *os << "::_tao_unmarshal_state (strm, ci))" << be_idt_nl
<< "{" << be_idt_nl
<< "return false;" << be_uidt_nl
<< "}" << be_uidt_nl << be_nl;
@@ -136,7 +175,7 @@ be_visitor_valuetype_marshal_cs::visit_valuetype (be_valuetype *node)
{
*os << "if (! this->_tao_unmarshal__"
<< inh->flat_name ()
- << " (strm))" << be_idt_nl
+ << " (strm, ci))" << be_idt_nl
<< "{" << be_idt_nl
<< "return false;" << be_uidt_nl
<< "}" << be_uidt_nl << be_nl;
@@ -146,15 +185,37 @@ be_visitor_valuetype_marshal_cs::visit_valuetype (be_valuetype *node)
be_visitor_valuetype_field_cdr_decl field_in_cdr (&new_ctx);
field_in_cdr.visit_scope (node);
- *os << "return (" << be_idt_nl;
+ if (node->data_members_count () > 0)
+ {
+ *os << "if (! ci.handle_chunking (strm))" << be_idt_nl;
+ *os << "return false;" << be_uidt_nl << be_nl;
+ *os << "CORBA::Boolean ret = " << be_idt << be_idt_nl;
// All we have to do is to visit the scope and generate code.
this->gen_fields (node,
*this->ctx_);
- *os << be_uidt_nl
- << ");" << be_uidt << be_uidt_nl
- << "}";
+ *os << ";" << be_uidt << be_uidt_nl;
+
+ *os << "if ( ! ret) " << be_idt_nl;
+ *os << "return false; " << be_uidt_nl << be_nl;
+ *os << "if (this->require_truncation_)" << be_idt_nl;
+ *os << "return ci.skip_chunks (strm);" << be_uidt_nl << be_nl;
+ *os << "else" << be_idt_nl;
+ *os << "return ci.handle_chunking (strm);" << be_uidt_nl << be_nl;
+ }
+ else
+ *os << "return true;";
+ *os << be_uidt_nl << "}" << be_nl << be_nl;
+
+ *os << "void" << be_nl;
+
+ this->class_name (node, os);
+
+ *os << "::truncation_hook (void)" << be_nl
+ << "{" << be_idt_nl
+ << "this->require_truncation_ = true;" << be_uidt_nl
+ << "}" << be_nl << be_nl;
return 0;
}
diff --git a/TAO/TAO_IDL/be/be_visitor_valuetype/valuetype_ch.cpp b/TAO/TAO_IDL/be/be_visitor_valuetype/valuetype_ch.cpp
index 1ceb6962140..650257a2ba5 100644
--- a/TAO/TAO_IDL/be/be_visitor_valuetype/valuetype_ch.cpp
+++ b/TAO/TAO_IDL/be/be_visitor_valuetype/valuetype_ch.cpp
@@ -204,6 +204,9 @@ be_visitor_valuetype_ch::visit_valuetype (be_valuetype *node)
<< "virtual const char* "
<< "_tao_obv_repository_id (void) const;"
<< be_nl << be_nl
+ << "virtual void "
+ << "_tao_obv_truncatable_repo_ids (Repository_Id_List &) const;"
+ << be_nl << be_nl
<< "static const char* "
<< "_tao_obv_static_repository_id (void);" << be_nl << be_nl;
@@ -274,6 +277,8 @@ be_visitor_valuetype_ch::visit_valuetype (be_valuetype *node)
<< "_tao_marshal_v (TAO_OutputCDR &) const;" << be_nl;
*os << "virtual ::CORBA::Boolean "
<< "_tao_unmarshal_v (TAO_InputCDR &);" << be_nl;
+ *os << "virtual ::CORBA::Boolean "
+ << "_tao_match_formal_type (ptrdiff_t ) const;" << be_nl;
}
// Private member:
@@ -304,7 +309,9 @@ be_visitor_valuetype_ch::visit_valuetype (be_valuetype *node)
*os << "::CORBA::Boolean "
<< "_tao_marshal_state (TAO_OutputCDR &) const;" << be_nl
<< "::CORBA::Boolean "
- << "_tao_unmarshal_state (TAO_InputCDR &);"
+ << "_tao_unmarshal_state (TAO_InputCDR &);" << be_nl
+ << "virtual void "
+ << "truncation_hook (void);"
<< be_uidt_nl << be_nl;
*os << "private:" << be_idt_nl;
@@ -320,21 +327,21 @@ be_visitor_valuetype_ch::visit_valuetype (be_valuetype *node)
{
*os << "virtual ::CORBA::Boolean" << be_nl
<< "_tao_marshal__" << node->flat_name ()
- << " (TAO_OutputCDR &) const;"
+ << " (TAO_OutputCDR &, TAO_ChunkInfo &) const;"
<< be_nl << be_nl;
*os << "virtual ::CORBA::Boolean" << be_nl
<< "_tao_unmarshal__" << node->flat_name ()
- << " (TAO_InputCDR &);";
+ << " (TAO_InputCDR &, TAO_ChunkInfo &);";
}
else
{
*os << "virtual ::CORBA::Boolean" << be_nl
<< "_tao_marshal__" << node->flat_name ()
- << " (TAO_OutputCDR &) const = 0;"
+ << " (TAO_OutputCDR &, TAO_ChunkInfo &) const = 0;"
<< be_nl << be_nl;
*os << "virtual ::CORBA::Boolean" << be_nl
<< "_tao_unmarshal__" << node->flat_name ()
- << " (TAO_InputCDR &) = 0;";
+ << " (TAO_InputCDR &, TAO_ChunkInfo &) = 0;";
}
}
}
@@ -534,4 +541,3 @@ be_visitor_valuetype_ch::gen_supported_ops (be_interface *,
return 0;
}
-
diff --git a/TAO/TAO_IDL/be/be_visitor_valuetype/valuetype_ci.cpp b/TAO/TAO_IDL/be/be_visitor_valuetype/valuetype_ci.cpp
index 9d1532b259c..eed0287f2ff 100644
--- a/TAO/TAO_IDL/be/be_visitor_valuetype/valuetype_ci.cpp
+++ b/TAO/TAO_IDL/be/be_visitor_valuetype/valuetype_ci.cpp
@@ -19,8 +19,8 @@
//
// ============================================================================
-ACE_RCSID (be_visitor_valuetype,
- valuetype_ci,
+ACE_RCSID (be_visitor_valuetype,
+ valuetype_ci,
"$Id$")
// **************************************************
@@ -56,8 +56,17 @@ be_visitor_valuetype_ci::visit_valuetype (be_valuetype *node)
<< "// " << __FILE__ << ":" << __LINE__ << be_nl << be_nl;
*os << "ACE_INLINE" << be_nl;
- *os << node->name () << "::" << node->local_name () << " (void)" << be_nl
- << "{}" << be_nl << be_nl;
+ *os << node->name () << "::" << node->local_name () << " (void)" << be_nl;
+
+ if (node->truncatable())
+ {
+ *os << "{" << be_idt_nl
+ << "this->is_truncatable_ = true;" << be_uidt_nl
+ << "}" << be_nl << be_nl;
+ }
+ else
+ *os << "{}" << be_nl << be_nl;
+
*os << "ACE_INLINE const char* " << be_nl
<< node->name () << "::_tao_obv_static_repository_id ()" << be_nl
@@ -70,7 +79,7 @@ be_visitor_valuetype_ci::visit_valuetype (be_valuetype *node)
ACE_ERROR_RETURN ((LM_ERROR,
"(%N:%l) be_visitor_valuetype_ci::"
"visit_valuetype - "
- "codegen for scope failed\n"),
+ "codegen for scope failed\n"),
-1);
}
@@ -83,7 +92,7 @@ be_visitor_valuetype_ci::visit_valuetype (be_valuetype *node)
ACE_ERROR_RETURN ((LM_ERROR,
"(%N:%l) be_visitor_valuetype_ci::"
"visit_valuetype - "
- "failed to generate _init construct.\n"),
+ "failed to generate _init construct.\n"),
-1);
}
@@ -111,7 +120,7 @@ be_visitor_valuetype_ci::visit_field (be_field *node)
ACE_ERROR_RETURN ((LM_ERROR,
"(%N:%l) be_visitor_valuetype_ci::"
"visit_field - "
- "visit_field failed\n"),
+ "visit_field failed\n"),
-1);
}
}
diff --git a/TAO/TAO_IDL/be/be_visitor_valuetype/valuetype_cs.cpp b/TAO/TAO_IDL/be/be_visitor_valuetype/valuetype_cs.cpp
index db8e1cfbccc..6d2c4cf2e96 100644
--- a/TAO/TAO_IDL/be/be_visitor_valuetype/valuetype_cs.cpp
+++ b/TAO/TAO_IDL/be/be_visitor_valuetype/valuetype_cs.cpp
@@ -113,6 +113,20 @@ be_visitor_valuetype_cs::visit_valuetype (be_valuetype *node)
<< "return this->_tao_obv_static_repository_id ();" << be_uidt_nl
<< "}" << be_nl << be_nl;
+ *os << "void" << be_nl
+ << node->name () << "::_tao_obv_truncatable_repo_ids (Repository_Id_List& ids) const" << be_nl
+ << "{" << be_idt_nl
+ << "ids.push_back (this->_tao_obv_static_repository_id ());";
+
+ if (node->truncatable ())
+ {
+ *os << be_nl;
+ *os << node->inherits_concrete ()->name () << "::_tao_obv_truncatable_repo_ids (ids);" << be_uidt_nl;
+ *os << "}" << be_nl << be_nl;
+ }
+ else
+ *os << be_uidt_nl << "}" << be_nl << be_nl;
+
if (be_global->any_support ())
{
*os << "void" << be_nl
@@ -143,10 +157,12 @@ be_visitor_valuetype_cs::visit_valuetype (be_valuetype *node)
if (!node->is_abstract () && !is_an_amh_exception_holder)
{
// The virtual _tao_marshal_v method.
- *os << "::CORBA::Boolean " << node->name ()
- << "::_tao_marshal_v (TAO_OutputCDR & strm) const"
- << be_nl
+ *os << "::CORBA::Boolean " << be_nl
+ << node->name ()
+ << "::_tao_marshal_v (TAO_OutputCDR & strm) const" << be_nl
<< "{" << be_idt_nl
+ << "TAO_ChunkInfo ci(this->is_truncatable_ || this->chunking_);"
+ << be_nl
<< "return ";
if (node->opt_accessor ())
@@ -156,21 +172,24 @@ be_visitor_valuetype_cs::visit_valuetype (be_valuetype *node)
*os << scope->name () << "::"
<< node->local_name ()
- << "::_tao_marshal_state (strm);" << be_uidt_nl;
+ << "::_tao_marshal_state (strm, ci);" << be_uidt_nl;
}
else
{
*os << "this->_tao_marshal__" << node->flat_name ()
- << " (strm);" << be_uidt_nl;
+ << " (strm, ci);" << be_uidt_nl;
}
*os << "}" << be_nl << be_nl;
// The virtual _tao_unmarshal_v method.
- *os << "::CORBA::Boolean " << node->name ()
+ *os << "::CORBA::Boolean " << be_nl
+ << node->name ()
<< "::_tao_unmarshal_v (TAO_InputCDR & strm)"
<< be_nl
<< "{" << be_idt_nl
+ << "TAO_ChunkInfo ci(this->is_truncatable_ || this->chunking_ ,1);"
+ << be_nl
<< "return ";
if (node->opt_accessor ())
@@ -180,15 +199,25 @@ be_visitor_valuetype_cs::visit_valuetype (be_valuetype *node)
*os << scope->name () << "::"
<< node->local_name ()
- <<"::_tao_unmarshal_state (strm);" << be_uidt_nl;
+ <<"::_tao_unmarshal_state (strm,ci);" << be_uidt_nl;
}
else
{
*os << "this->_tao_unmarshal__" << node->flat_name ()
- << " (strm);" << be_uidt_nl;
+ << " (strm,ci);" << be_uidt_nl;
}
*os << "}" << be_nl << be_nl;
+
+ *os << "::CORBA::Boolean " << be_nl
+ << node->name ()
+ << "::_tao_match_formal_type (ptrdiff_t formal_type_id) const"
+ << be_nl
+ << "{" << be_idt_nl
+ << "return formal_type_id == reinterpret_cast<ptrdiff_t> ("
+ << node->name() << "::_downcast);" << be_uidt_nl
+ << "}" << be_nl << be_nl;
+
}
else if (is_an_amh_exception_holder)
{
@@ -213,19 +242,28 @@ be_visitor_valuetype_cs::visit_valuetype (be_valuetype *node)
<< "return true;" << be_uidt_nl
<< "}" << be_nl << be_nl;
+ // The virtual _tao_match_formal_type method.
+ *os << "::CORBA::Boolean " << be_nl
+ << node->name ()
+ << "::_tao_match_formal_type (ptrdiff_t ) const"
+ << be_nl
+ << "{" << be_idt_nl
+ << "return 0;"<< be_uidt_nl
+ << "}" << be_nl << be_nl;
+
if (!node->opt_accessor () && !node->is_abstract ())
{
*os << "::CORBA::Boolean" << be_nl
<< node->name () << "::_tao_marshal__" << node->flat_name ()
- << " (TAO_OutputCDR &) const" << be_nl
+ << " (TAO_OutputCDR &, TAO_ChunkInfo&) const" << be_nl
<< "{" << be_idt_nl
<< "return true;" << be_uidt_nl
<< "}" << be_nl << be_nl;
*os << "::CORBA::Boolean" << be_nl
<< node->name () << "::_tao_unmarshal__" << node->flat_name ()
- << " (TAO_InputCDR &)" << be_nl
+ << " (TAO_InputCDR &, TAO_ChunkInfo&)" << be_nl
<< "{" << be_idt_nl
<< "return true;" << be_uidt_nl
<< "}" << be_nl << be_nl;
@@ -241,35 +279,20 @@ be_visitor_valuetype_cs::visit_valuetype (be_valuetype *node)
<< ")" << be_uidt_nl
<< "{" << be_idt_nl
<< "::CORBA::ValueBase *base = 0;" << be_nl
- << "::CORBA::ValueFactory_var factory;" << be_nl
<< "::CORBA::Boolean retval =" << be_idt_nl
<< "::CORBA::ValueBase::_tao_unmarshal_pre (" << be_idt << be_idt_nl
<< "strm," << be_nl
- << "factory.out ()," << be_nl
<< "base," << be_nl
<< node->local_name () << "::_tao_obv_static_repository_id ()" << be_uidt_nl
<< ");" << be_uidt << be_uidt_nl << be_nl
- << "if (retval == false)" << be_idt_nl
- << "{" << be_idt_nl
- << "return false;" << be_uidt_nl
- << "}" << be_uidt_nl << be_nl
- << "if (factory.in () != 0)" << be_idt_nl
- << "{" << be_idt_nl
- << "base = factory->create_for_unmarshal ();" << be_nl << be_nl
- << "if (base == 0)" << be_idt_nl
- << "{" << be_idt_nl
- << "return false; // %! except.?" << be_uidt_nl
- << "}" << be_uidt_nl << be_nl
- << "retval = base->_tao_unmarshal_v (strm);" << be_nl << be_nl
- << "if (retval == false)" << be_idt_nl
- << "{" << be_idt_nl
- << "return false;" << be_uidt_nl
- << "}" << be_uidt << be_uidt_nl
- << "}" << be_uidt_nl << be_nl
+ << "if (!retval)" << be_idt_nl
+ << "return false;" << be_uidt_nl << be_nl
+ << "if (base != 0 && ! base->_tao_unmarshal_v (strm))" << be_idt_nl
+ << "return false;" << be_uidt_nl << be_nl
<< "// Now base must be null or point to the unmarshaled object." << be_nl
<< "// Align the pointer to the right subobject." << be_nl
<< "new_object = " << node->local_name () << "::_downcast (base);" << be_nl
- << "return retval;" << be_uidt_nl
+ << "return true;" << be_uidt_nl
<< "}";
// If we inherit from CORBA::Object and/or CORBA::AbstractBase
diff --git a/TAO/TAO_IDL/be/be_visitor_valuetype/valuetype_obv_ch.cpp b/TAO/TAO_IDL/be/be_visitor_valuetype/valuetype_obv_ch.cpp
index 843711ebdb3..3a04f825b06 100644
--- a/TAO/TAO_IDL/be/be_visitor_valuetype/valuetype_obv_ch.cpp
+++ b/TAO/TAO_IDL/be/be_visitor_valuetype/valuetype_obv_ch.cpp
@@ -174,9 +174,9 @@ be_visitor_valuetype_obv_ch::visit_valuetype (be_valuetype *node)
{
this->begin_public ();
}
-
+
*os << be_nl;
-
+
// Default constructor.
if (! node->is_nested ())
{
@@ -184,19 +184,19 @@ be_visitor_valuetype_obv_ch::visit_valuetype (be_valuetype *node)
}
*os << node->local_name () << " (void);";
-
+
// Initializing constructor.
if (node->has_member ())
{
*os << be_nl;
-
+
if (! node->is_nested ())
{
*os << "OBV_";
}
-
+
*os << node->local_name () << " (" << be_idt << be_idt;
-
+
unsigned long index = 0;
this->gen_obv_init_constructor_args (node, index);
@@ -221,16 +221,20 @@ be_visitor_valuetype_obv_ch::visit_valuetype (be_valuetype *node)
*os << "virtual ::CORBA::Boolean" << be_nl
<< "_tao_marshal__" << node->flat_name ()
- << " (TAO_OutputCDR &) const;" << be_nl << be_nl;
+ << " (TAO_OutputCDR &, TAO_ChunkInfo &) const;" << be_nl << be_nl;
*os << "virtual ::CORBA::Boolean" << be_nl
<< "_tao_unmarshal__" << node->flat_name ()
- << " (TAO_InputCDR &);" << be_nl << be_nl;
+ << " (TAO_InputCDR &, TAO_ChunkInfo &);" << be_nl << be_nl;
*os << "::CORBA::Boolean "
- << "_tao_marshal_state (TAO_OutputCDR &) const;" << be_nl
+ << "_tao_marshal_state (TAO_OutputCDR &, TAO_ChunkInfo &) const;"
+ << be_nl
<< "::CORBA::Boolean "
- << "_tao_unmarshal_state (TAO_InputCDR &);"
+ << "_tao_unmarshal_state (TAO_InputCDR &, TAO_ChunkInfo &);"
+ << be_nl
+ << "virtual void "
+ << "truncation_hook (void);"
<< be_uidt_nl << be_nl;
*os << "private:" << be_idt;
@@ -238,8 +242,9 @@ be_visitor_valuetype_obv_ch::visit_valuetype (be_valuetype *node)
this->gen_pd (node);
}
- *os << be_uidt_nl;
- *os << "};";
+ *os << be_nl
+ << "CORBA::Boolean require_truncation_;" << be_uidt_nl
+ << "};";
os->gen_endif ();
}
@@ -287,13 +292,13 @@ void
be_visitor_valuetype_obv_ch::begin_public (void)
{
AST_Decl::NodeType nt = this->ctx_->node ()->node_type ();
-
+
// These types are skipped in the OBV class.
if (nt == AST_Decl::NT_attr || nt == AST_Decl::NT_op)
{
return;
}
-
+
TAO_OutStream *os = this->ctx_->stream ();
*os << be_uidt_nl << be_nl
<< "public:" << be_idt;
diff --git a/TAO/TAO_IDL/be/be_visitor_valuetype/valuetype_obv_cs.cpp b/TAO/TAO_IDL/be/be_visitor_valuetype/valuetype_obv_cs.cpp
index 9a77076dcfd..b5123ed6be4 100644
--- a/TAO/TAO_IDL/be/be_visitor_valuetype/valuetype_obv_cs.cpp
+++ b/TAO/TAO_IDL/be/be_visitor_valuetype/valuetype_obv_cs.cpp
@@ -65,7 +65,8 @@ be_visitor_valuetype_obv_cs::visit_valuetype (be_valuetype *node)
*os << "OBV_";
}
- *os << node->local_name () << " (void)" << be_nl
+ *os << node->local_name () << " (void)" << be_nl;
+ *os << ": require_truncation_ (false)" << be_nl
<< "{}" << be_nl << be_nl;
// Initializing constructor.
@@ -85,6 +86,7 @@ be_visitor_valuetype_obv_cs::visit_valuetype (be_valuetype *node)
*os << be_uidt_nl
<< ")" << be_uidt << be_uidt_nl
+ << ": require_truncation_ (false)" << be_nl
<< "{" << be_idt;
this->gen_obv_init_constructor_inits (node);
@@ -112,17 +114,17 @@ be_visitor_valuetype_obv_cs::visit_valuetype (be_valuetype *node)
*os << be_nl << be_nl << "::CORBA::Boolean" << be_nl
<< node->full_obv_skel_name ()
<< "::_tao_marshal__" << node->flat_name ()
- << " (TAO_OutputCDR &strm) const" << be_nl
+ << " (TAO_OutputCDR &strm, TAO_ChunkInfo& ci) const" << be_nl
<< "{" << be_idt_nl
- << "return _tao_marshal_state (strm);" << be_uidt_nl
+ << "return _tao_marshal_state (strm, ci);" << be_uidt_nl
<< "}" << be_nl << be_nl;
*os << "::CORBA::Boolean" << be_nl
<< node->full_obv_skel_name ()
<< "::_tao_unmarshal__" << node->flat_name ()
- << " (TAO_InputCDR &strm)" << be_nl
+ << " (TAO_InputCDR &strm, TAO_ChunkInfo& ci)" << be_nl
<< "{" << be_idt_nl
- << "return _tao_unmarshal_state (strm);" << be_uidt_nl
+ << "return _tao_unmarshal_state (strm, ci);" << be_uidt_nl
<< "}";
if (this->visit_scope (node) == -1)
@@ -201,7 +203,7 @@ be_visitor_valuetype_obv_cs::gen_obv_init_base_constructor_args (
be_valuetype::narrow_from_decl (parent);
this->gen_obv_init_base_constructor_args (be_parent, index);
}
-
+
for (UTL_ScopeActiveIterator si (node, UTL_Scope::IK_decls);
!si.is_done ();
si.next())
@@ -209,14 +211,14 @@ be_visitor_valuetype_obv_cs::gen_obv_init_base_constructor_args (
// be_attribute doesn't inherit from be_field (unlike the
// AST_* counterparts, so this screens attributes and operations.
be_field *f = be_field::narrow_from_decl (si.item ());
-
+
if (f == 0)
{
continue;
}
-
+
*os << (index++ != 0 ? "," : "") << be_nl
- << "_tao_init_" << f->local_name ();
+ << "_tao_init_" << f->local_name ();
}
}
@@ -234,24 +236,22 @@ be_visitor_valuetype_obv_cs::gen_obv_init_constructor_inits (
be_valuetype *be_parent = be_valuetype::narrow_from_decl (parent);
this->gen_obv_init_constructor_inits (be_parent);
}
-
+
for (UTL_ScopeActiveIterator si (node, UTL_Scope::IK_decls);
!si.is_done ();
si.next())
{
be_field *f = be_field::narrow_from_decl (si.item ());
-
+
// be_attribute doesn't inherit from be_field (unlike the
// AST_* counterparts, so this screens attributes and operations.
if (f == 0)
{
continue;
}
-
+
*os << be_nl
<< f->local_name () << " (_tao_init_" << f->local_name ()
<< ");";
}
}
-
-
diff --git a/TAO/TAO_IDL/be/be_visitor_valuetype_fwd/cdr_op_ch.cpp b/TAO/TAO_IDL/be/be_visitor_valuetype_fwd/cdr_op_ch.cpp
index cb45192558c..8c19388a325 100644
--- a/TAO/TAO_IDL/be/be_visitor_valuetype_fwd/cdr_op_ch.cpp
+++ b/TAO/TAO_IDL/be/be_visitor_valuetype_fwd/cdr_op_ch.cpp
@@ -21,8 +21,8 @@
//
// ================================================================
-ACE_RCSID (be_visitor_valuetype_fwd,
- cdr_op_ch,
+ACE_RCSID (be_visitor_valuetype_fwd,
+ cdr_op_ch,
"$Id$")
be_visitor_valuetype_fwd_cdr_op_ch::be_visitor_valuetype_fwd_cdr_op_ch (
@@ -61,7 +61,7 @@ be_visitor_valuetype_fwd_cdr_op_ch::visit_valuetype_fwd (
TAO_OutStream *os = this->ctx_->stream ();
- be_valuetype *fvd =
+ be_valuetype *fvd =
be_valuetype::narrow_from_decl (node->full_definition ());
if (fvd->gen_helper_header () == -1)
@@ -69,7 +69,7 @@ be_visitor_valuetype_fwd_cdr_op_ch::visit_valuetype_fwd (
ACE_ERROR_RETURN ((LM_ERROR,
"(%N:%l) be_visitor_valuetype_fwd_cdr_op_ch::"
"visit_valuetype_fwd - "
- "codegen for helper functions failed\n"),
+ "codegen for helper functions failed\n"),
-1);
}
@@ -87,7 +87,7 @@ be_visitor_valuetype_fwd_cdr_op_ch::visit_valuetype_fwd (
*os << be_global->stub_export_macro ()
<< " ::CORBA::Boolean operator>> (TAO_InputCDR &, "
<< node->full_name () << " *&);" << be_nl;
-
+
*os << be_global->core_versioning_end () << be_nl;
node->cli_hdr_cdr_op_gen (true);
@@ -101,4 +101,3 @@ be_visitor_valuetype_fwd_cdr_op_ch::visit_eventtype_fwd (be_eventtype_fwd *node)
{
return this->visit_valuetype_fwd (node);
}
-
diff --git a/TAO/TAO_IDL/fe/fe_lookup.cpp b/TAO/TAO_IDL/fe/fe_lookup.cpp
index 2adb243ee60..d8cdc9349c4 100644
--- a/TAO/TAO_IDL/fe/fe_lookup.cpp
+++ b/TAO/TAO_IDL/fe/fe_lookup.cpp
@@ -3,14 +3,41 @@
#include "fe_private.h"
#include "ace/OS_NS_string.h"
-/* starting time is 2:40:07 */
/* C++ code produced by gperf version 2.8 (ACE version) */
-/* Command-line: /project/adaptive/ACE_wrappers/build/SunOS5.5/bin/gperf -M -J -c -C -D -E -T -f 0 -a -o -t -p -K keyword_ -L C++ -Z TAO_IDL_CPP_Keyword_Table -N lookup -k1,2,$ fe/keywords.dat */
+/* Command-line: /lhome/cjohn/dev/DOC/ACE_wrappers_w/build/d1o0/bin/gperf -M -J -c -C -D -E -T -f 0 -a -o -t -p -K keyword_ -L C++ -Z TAO_IDL_CPP_Keyword_Table -N lookup -k1,2,$ fe/keywords.dat */
unsigned int
TAO_IDL_CPP_Keyword_Table::hash (const char *str, unsigned int len)
{
static const unsigned char asso_values[] =
{
+#if defined (ACE_MVS)
+ 252, 252, 252, 252, 252, 252, 252, 252, 252, 252,
+ 252, 252, 252, 252, 252, 252, 252, 252, 252, 252,
+ 252, 252, 252, 252, 252, 252, 252, 252, 252, 252,
+ 252, 252, 252, 252, 252, 252, 252, 252, 252, 252,
+ 252, 252, 252, 252, 252, 252, 252, 252, 252, 252,
+ 252, 252, 252, 252, 252, 252, 252, 252, 252, 252,
+ 252, 252, 252, 252, 252, 252, 252, 252, 252, 252,
+ 252, 252, 252, 252, 252, 252, 252, 252, 252, 252,
+ 252, 252, 252, 252, 252, 252, 252, 252, 252, 252,
+ 252, 252, 252, 252, 252, 252, 252, 252, 252, 252,
+ 252, 252, 252, 252, 252, 252, 252, 252, 252, 252,
+ 252, 252, 252, 252, 252, 252, 252, 252, 252, 252,
+ 252, 252, 252, 252, 252, 252, 252, 252, 252, 15,
+ 35, 65, 0, 0, 35, 5, 0, 60, 252, 252,
+ 252, 252, 252, 252, 252, 252, 0, 30, 0, 5,
+ 5, 20, 50, 40, 252, 252, 252, 252, 252, 252,
+ 252, 252, 20, 110, 0, 45, 35, 95, 55, 252,
+ 252, 252, 252, 252, 252, 252, 252, 252, 252, 252,
+ 252, 252, 252, 252, 252, 252, 252, 252, 252, 252,
+ 252, 252, 252, 252, 252, 252, 252, 252, 252, 252,
+ 252, 252, 252, 252, 252, 252, 252, 252, 252, 252,
+ 252, 252, 252, 252, 252, 252, 252, 252, 252, 252,
+ 252, 252, 252, 252, 252, 252, 252, 252, 252, 252,
+ 252, 252, 252, 252, 252, 252, 252, 252, 252, 252,
+ 252, 252, 252, 252, 252, 252, 252, 252, 252, 252,
+ 252, 252, 252, 252, 252, 252,
+#else
252, 252, 252, 252, 252, 252, 252, 252, 252, 252,
252, 252, 252, 252, 252, 252, 252, 252, 252, 252,
252, 252, 252, 252, 252, 252, 252, 252, 252, 252,
@@ -24,11 +51,12 @@ TAO_IDL_CPP_Keyword_Table::hash (const char *str, unsigned int len)
0, 0, 35, 5, 0, 60, 252, 0, 30, 0,
5, 5, 20, 50, 40, 20, 110, 0, 45, 35,
95, 55, 252, 252, 252, 252, 252, 252,
+#endif /* ACE_MVS */
};
return len + asso_values[(int) str[1]] + asso_values[(int) str[0]] + asso_values[(int) str[len - 1]];
}
-const TAO_IDL_CPP_Keyword_Entry *
+const struct TAO_IDL_CPP_Keyword_Entry *
TAO_IDL_CPP_Keyword_Table::lookup (const char *str, unsigned int len)
{
enum
@@ -39,12 +67,13 @@ TAO_IDL_CPP_Keyword_Table::lookup (const char *str, unsigned int len)
MIN_HASH_VALUE = 6,
MAX_HASH_VALUE = 251,
HASH_VALUE_RANGE = 246,
- DUPLICATES = 0
+ DUPLICATES = 0,
+ WORDLIST_SIZE = 80
};
- static const TAO_IDL_CPP_Keyword_Entry wordlist[] =
+ static const struct TAO_IDL_CPP_Keyword_Entry wordlist[] =
{
- {"",0}, {"",0}, {"",0}, {"",0}, {"",0}, {"",0},
+ {"",0},{"",0},{"",0},{"",0},{"",0},{"",0},
{"delete", "_cxx_delete"},
{"mutable", "_cxx_mutable"},
{"",0},
@@ -55,33 +84,33 @@ TAO_IDL_CPP_Keyword_Table::lookup (const char *str, unsigned int len)
{"unsigned", "_cxx_unsigned"},
{"",0},
{"union", "_cxx_union"},
- {"",0}, {"",0}, {"",0},
+ {"",0},{"",0},{"",0},
{"goto", "_cxx_goto"},
- {"",0}, {"",0}, {"",0},
+ {"",0},{"",0},{"",0},
{"and", "_cxx_and"},
{"auto", "_cxx_auto"},
- {"",0}, {"",0}, {"",0}, {"",0},
+ {"",0},{"",0},{"",0},{"",0},
{"namespace", "_cxx_namespace"},
{"using", "_cxx_using"},
- {"",0}, {"",0}, {"",0},
+ {"",0},{"",0},{"",0},
{"else", "_cxx_else"},
- {"",0}, {"",0}, {"",0},
+ {"",0},{"",0},{"",0},
{"asm", "_cxx_asm"},
{"",0},
{"while", "_cxx_while"},
- {"",0}, {"",0},
+ {"",0},{"",0},
{"new", "_cxx_new"},
{"long", "_cxx_long"},
- {"",0}, {"",0}, {"",0}, {"",0}, {"",0}, {"",0},
+ {"",0},{"",0},{"",0},{"",0},{"",0},{"",0},
{"return", "_cxx_return"},
- {"",0}, {"",0},
+ {"",0},{"",0},
{"void", "_cxx_void"},
{"false", "_cxx_false"},
- {"",0}, {"",0},
+ {"",0},{"",0},
{"volatile", "_cxx_volatile"},
- {"",0}, {"",0},
+ {"",0},{"",0},
{"switch", "_cxx_switch"},
- {"",0}, {"",0}, {"",0}, {"",0},
+ {"",0},{"",0},{"",0},{"",0},
{"not_eq", "_cxx_not_eq"},
{"private", "_cxx_private"},
{"",0},
@@ -105,17 +134,17 @@ TAO_IDL_CPP_Keyword_Table::lookup (const char *str, unsigned int len)
{"signed", "_cxx_signed"},
{"or", "_cxx_or"},
{"register", "_cxx_register"},
- {"",0}, {"",0},
+ {"",0},{"",0},
{"public", "_cxx_public"},
- {"",0}, {"",0}, {"",0}, {"",0}, {"",0}, {"",0}, {"",0}, {"",0},
+ {"",0},{"",0},{"",0},{"",0},{"",0},{"",0},{"",0},{"",0},
{"or_eq", "_cxx_or_eq"},
{"bitand", "_cxx_bitand"},
- {"",0}, {"",0}, {"",0},
+ {"",0},{"",0},{"",0},
{"compl", "_cxx_compl"},
{"extern", "_cxx_extern"},
- {"",0}, {"",0},
+ {"",0},{"",0},
{"char", "_cxx_char"},
- {"",0}, {"",0}, {"",0}, {"",0}, {"",0}, {"",0}, {"",0},
+ {"",0},{"",0},{"",0},{"",0},{"",0},{"",0},{"",0},
{"default", "_cxx_default"},
{"template", "_cxx_template"},
{"",0},
@@ -123,55 +152,55 @@ TAO_IDL_CPP_Keyword_Table::lookup (const char *str, unsigned int len)
{"sizeof", "_cxx_sizeof"},
{"",0},
{"not", "_cxx_not"},
- {"",0}, {"",0}, {"",0}, {"",0}, {"",0}, {"",0}, {"",0}, {"",0},
+ {"",0},{"",0},{"",0},{"",0},{"",0},{"",0},{"",0},{"",0},
{"if", "_cxx_if"},
{"",0},
{"this", "_cxx_this"},
{"short", "_cxx_short"},
- {"",0}, {"",0}, {"",0}, {"",0},
+ {"",0},{"",0},{"",0},{"",0},
{"bitor", "_cxx_bitor"},
{"",0},
{"virtual", "_cxx_virtual"},
{"xor", "_cxx_xor"},
- {"",0}, {"",0}, {"",0}, {"",0}, {"",0}, {"",0},
+ {"",0},{"",0},{"",0},{"",0},{"",0},{"",0},
{"throw", "_cxx_throw"},
- {"",0}, {"",0}, {"",0},
+ {"",0},{"",0},{"",0},
{"true", "_cxx_true"},
{"",0},
{"xor_eq", "_cxx_xor_eq"},
- {"",0}, {"",0}, {"",0}, {"",0}, {"",0}, {"",0}, {"",0}, {"",0}, {"",0},
+ {"",0},{"",0},{"",0},{"",0},{"",0},{"",0},{"",0},{"",0},{"",0},
{"reinterpret_cast", "_cxx_reinterpret_cast"},
- {"",0}, {"",0}, {"",0}, {"",0},
+ {"",0},{"",0},{"",0},{"",0},
{"typeid", "_cxx_typeid"},
{"",0},
{"typename", "_cxx_typename"},
- {"",0}, {"",0}, {"",0},
+ {"",0},{"",0},{"",0},
{"dynamic_cast", "_cxx_dynamic_cast"},
{"int", "_cxx_int"},
{"",0},
{"float", "_cxx_float"},
- {"",0}, {"",0}, {"",0}, {"",0},
+ {"",0},{"",0},{"",0},{"",0},
{"const", "_cxx_const"},
- {"",0}, {"",0}, {"",0}, {"",0},
+ {"",0},{"",0},{"",0},{"",0},
{"const_cast", "_cxx_const_cast"},
- {"",0}, {"",0}, {"",0}, {"",0}, {"",0}, {"",0}, {"",0}, {"",0}, {"",0},
+ {"",0},{"",0},{"",0},{"",0},{"",0},{"",0},{"",0},{"",0},{"",0},
{"",0},
{"static", "_cxx_static"},
- {"",0}, {"",0}, {"",0}, {"",0}, {"",0},
+ {"",0},{"",0},{"",0},{"",0},{"",0},
{"typedef", "_cxx_typedef"},
{"try", "_cxx_try"},
- {"",0}, {"",0},
+ {"",0},{"",0},
{"export", "_cxx_export"},
{"",0},
{"explicit", "_cxx_explicit"},
- {"",0}, {"",0}, {"",0},
+ {"",0},{"",0},{"",0},
{"wchar_t", "_cxx_wchar_t"},
- {"",0}, {"",0}, {"",0}, {"",0}, {"",0}, {"",0}, {"",0}, {"",0}, {"",0},
- {"",0}, {"",0}, {"",0}, {"",0}, {"",0}, {"",0}, {"",0}, {"",0}, {"",0},
- {"",0}, {"",0}, {"",0}, {"",0}, {"",0}, {"",0}, {"",0}, {"",0}, {"",0},
+ {"",0},{"",0},{"",0},{"",0},{"",0},{"",0},{"",0},{"",0},{"",0},
+ {"",0},{"",0},{"",0},{"",0},{"",0},{"",0},{"",0},{"",0},{"",0},
+ {"",0},{"",0},{"",0},{"",0},{"",0},{"",0},{"",0},{"",0},{"",0},
{"",0},
{"struct", "_cxx_struct"},
- {"",0}, {"",0}, {"",0}, {"",0},
+ {"",0},{"",0},{"",0},{"",0},
{"static_cast", "_cxx_static_cast"},
};
@@ -181,15 +210,11 @@ TAO_IDL_CPP_Keyword_Table::lookup (const char *str, unsigned int len)
if (key <= MAX_HASH_VALUE && key >= MIN_HASH_VALUE)
{
- if (len == static_cast<unsigned int> (ACE_OS::strlen (wordlist[key].keyword_)))
- {
- const char *s = wordlist[key].keyword_;
+ const char *s = wordlist[key].keyword_;
- if (*str == *s && !ACE_OS::strncmp (str + 1, s + 1, len - 1))
- return &wordlist[key];
- }
+ if (len == static_cast<unsigned int> (ACE_OS::strlen (s)) && *str == *s && !ACE_OS::strncmp (str + 1, s + 1, len - 1))
+ return &wordlist[key];
}
}
return 0;
}
-/* ending time is 2:40:07 */
diff --git a/TAO/TAO_IDL/fe/idl.yy b/TAO/TAO_IDL/fe/idl.yy
index 46eb5e1ac98..6f313270540 100644
--- a/TAO/TAO_IDL/fe/idl.yy
+++ b/TAO/TAO_IDL/fe/idl.yy
@@ -847,17 +847,6 @@ value_header :
{
// value_header : value_decl inheritance_spec
idl_global->set_parse_state (IDL_GlobalData::PS_InheritSpecSeen);
-
- if ($2 != 0 && $2->truncatable ())
- {
- ACE_DEBUG ((LM_DEBUG,
- ACE_TEXT ("warning in %s line %d\n"),
- idl_global->filename ()->get_string (),
- idl_global->lineno ()));
- ACE_DEBUG ((LM_DEBUG,
- ACE_TEXT ("truncatable modifier not supported ")
- ACE_TEXT ("and is ignored\n")));
- }
}
supports_spec
{
@@ -5185,17 +5174,6 @@ event_rest_of_header :
{
// event_rest_of_header : inheritance_spec
idl_global->set_parse_state (IDL_GlobalData::PS_InheritSpecSeen);
-
- if ($1 != 0 && $1->truncatable ())
- {
- ACE_DEBUG ((LM_DEBUG,
- ACE_TEXT ("warning in %s line %d\n"),
- idl_global->filename ()->get_string (),
- idl_global->lineno ()));
- ACE_DEBUG ((LM_DEBUG,
- ACE_TEXT ("truncatable modifier not supported ")
- ACE_TEXT ("and is ignored\n")));
- }
}
supports_spec
{
diff --git a/TAO/TAO_IDL/fe/y.tab.cpp b/TAO/TAO_IDL/fe/y.tab.cpp
index d39fc8c66e0..6acb820bfa3 100644
--- a/TAO/TAO_IDL/fe/y.tab.cpp
+++ b/TAO/TAO_IDL/fe/y.tab.cpp
@@ -2708,17 +2708,6 @@ tao_yyreduce:
{
// value_header : value_decl inheritance_spec
idl_global->set_parse_state (IDL_GlobalData::PS_InheritSpecSeen);
-
- if (tao_yyvsp[0].nlval != 0 && tao_yyvsp[0].nlval->truncatable ())
- {
- ACE_DEBUG ((LM_DEBUG,
- ACE_TEXT ("warning in %s line %d\n"),
- idl_global->filename ()->get_string (),
- idl_global->lineno ()));
- ACE_DEBUG ((LM_DEBUG,
- ACE_TEXT ("truncatable modifier not supported ")
- ACE_TEXT ("and is ignored\n")));
- }
}
break;
@@ -7477,16 +7466,6 @@ tao_yyreduce:
// event_rest_of_header : inheritance_spec
idl_global->set_parse_state (IDL_GlobalData::PS_InheritSpecSeen);
- if (tao_yyvsp[0].nlval != 0 && tao_yyvsp[0].nlval->truncatable ())
- {
- ACE_DEBUG ((LM_DEBUG,
- ACE_TEXT ("warning in %s line %d\n"),
- idl_global->filename ()->get_string (),
- idl_global->lineno ()));
- ACE_DEBUG ((LM_DEBUG,
- ACE_TEXT ("truncatable modifier not supported ")
- ACE_TEXT ("and is ignored\n")));
- }
}
break;
@@ -7851,4 +7830,3 @@ tao_yyerror (const char *msg)
"%s\n",
msg));
}
-
diff --git a/TAO/docs/Options.html b/TAO/docs/Options.html
index c5151b03d56..22197133429 100644
--- a/TAO/docs/Options.html
+++ b/TAO/docs/Options.html
@@ -531,11 +531,18 @@ is <code>0</code>. This option is disabled (<code>0</code>) by default.</td>
Note: If none of the preferred interfaces apply to an outgoing connection
then they will not be enforced. For this option to have
any effect, therefore, the connection through a legal preferred interface must fail.
- </tr>
+ </tr>
<tr>
<td><code>-ORBKeepalive</code> <em>boolean (0|1)</em></td>
- <td><a name="-ORBKeepalive"></a>This option allows users to
- specify that the SO_KEEPALIVE option is set on TCP sockets.
+ <td><a name="-ORBKeepalive"></a>This option allows users to specify
+ that the SO_KEEPALIVE option is set on TCP sockets used by IIOP.
+ The default is <code>0</code> (false).
+ </td>
+ </tr>
+ <tr>
+ <td><code>-ORBDontRoute</code> <em>boolean (0|1)</em></td>
+ <td><a name="-ORBDontRoute"></a>This option allows users to specify
+ that the SO_DONTROUTE option is set on TCP sockets used by IIOP.
The default is <code>0</code> (false).
</td>
</tr>
@@ -694,6 +701,16 @@ listen endpoints should be encoded into IORs when <code>-ORBUseIMR</code>
is set. The default is true. </td>
</tr>
<tr>
+ <td><code>-ORBUseParallelConnects</code> <em>boolean (0|1)</em></td>
+ <td><a name="-ORBUseParallelConnects"></a>This option allows users to
+ specify the ORB attempt to connect simultaniously to all endpoints
+ listed in profiles, rather than stepping through individual endpoints,
+ trying and possibly failing, before moving on to the next. For this
+ feature to work, the server must be using shared profiles.
+ The default is <code>0</code> (false).
+ </td>
+ </tr>
+ <tr>
<td><code>-ORBUseSharedProfile</code> <em>boolean (0|1)</em></td>
<td><a name="-ORBUseSharedProfile"></a>
This option allows multiple implicit or explicit endpoints to be
@@ -707,6 +724,18 @@ is set. The default is true. </td>
</td>
</tr>
<tr>
+ <td><code>-ORBParallelConnectDelay</code> <em>unsigned long msec</em></td>
+ <td><a name="-ORBParallelConnectDelay"></a>When using parallel
+ connection attempts, this option defines the number of milliseconds to
+ delay when polling previously started connection attempts. If a server
+ is likely to be busy, this client side option will help avoid creating
+ redundant connections that must be accepted, only to be closed a moment
+ later. However, if the first reachable endpoint is far down the list,
+ this option will increase the delay before that endpoint is reached.
+ The default is <code>0</code>.
+ </td>
+ </tr>
+ <tr>
<td><code>-ORBPreferIPV6Interfaces</code> <em>boolean (0|1)</em></td>
<td><a name="-ORBPreferIPV6Interfaces"></a>
If option is <CODE>1</CODE> (true) it directs the default
diff --git a/TAO/orbsvcs/examples/ORT/Server_IORInterceptor.cpp b/TAO/orbsvcs/examples/ORT/Server_IORInterceptor.cpp
index 4fc119dfc39..2cd8117b443 100644
--- a/TAO/orbsvcs/examples/ORT/Server_IORInterceptor.cpp
+++ b/TAO/orbsvcs/examples/ORT/Server_IORInterceptor.cpp
@@ -68,7 +68,7 @@ Server_IORInterceptor::components_established (
void
Server_IORInterceptor::adapter_manager_state_changed (
- PortableInterceptor::AdapterManagerId,
+ const char *,
PortableInterceptor::AdapterState
ACE_ENV_ARG_DECL_NOT_USED)
ACE_THROW_SPEC ((CORBA::SystemException))
diff --git a/TAO/orbsvcs/examples/ORT/Server_IORInterceptor.h b/TAO/orbsvcs/examples/ORT/Server_IORInterceptor.h
index a77551ad136..da243325d05 100644
--- a/TAO/orbsvcs/examples/ORT/Server_IORInterceptor.h
+++ b/TAO/orbsvcs/examples/ORT/Server_IORInterceptor.h
@@ -55,7 +55,7 @@ public:
ACE_THROW_SPEC ((CORBA::SystemException));
virtual void adapter_manager_state_changed (
- PortableInterceptor::AdapterManagerId id,
+ const char * id,
PortableInterceptor::AdapterState state
ACE_ENV_ARG_DECL_WITH_DEFAULTS)
ACE_THROW_SPEC ((CORBA::SystemException));
diff --git a/TAO/orbsvcs/orbsvcs/LoadBalancing/LB_IORInterceptor.cpp b/TAO/orbsvcs/orbsvcs/LoadBalancing/LB_IORInterceptor.cpp
index 6af1cad1b42..3f555d17a5c 100644
--- a/TAO/orbsvcs/orbsvcs/LoadBalancing/LB_IORInterceptor.cpp
+++ b/TAO/orbsvcs/orbsvcs/LoadBalancing/LB_IORInterceptor.cpp
@@ -95,7 +95,7 @@ TAO_LB_IORInterceptor::components_established (
void
TAO_LB_IORInterceptor::adapter_manager_state_changed (
- PortableInterceptor::AdapterManagerId,
+ const char *,
PortableInterceptor::AdapterState state
ACE_ENV_ARG_DECL)
ACE_THROW_SPEC ((CORBA::SystemException))
diff --git a/TAO/orbsvcs/orbsvcs/LoadBalancing/LB_IORInterceptor.h b/TAO/orbsvcs/orbsvcs/LoadBalancing/LB_IORInterceptor.h
index ca4b6f7ea01..6b93c951912 100644
--- a/TAO/orbsvcs/orbsvcs/LoadBalancing/LB_IORInterceptor.h
+++ b/TAO/orbsvcs/orbsvcs/LoadBalancing/LB_IORInterceptor.h
@@ -92,7 +92,7 @@ public:
ACE_THROW_SPEC ((CORBA::SystemException));
virtual void adapter_manager_state_changed (
- PortableInterceptor::AdapterManagerId id,
+ const char * id,
PortableInterceptor::AdapterState state
ACE_ENV_ARG_DECL_WITH_DEFAULTS)
ACE_THROW_SPEC ((
diff --git a/TAO/orbsvcs/orbsvcs/PortableGroup/GOA.cpp b/TAO/orbsvcs/orbsvcs/PortableGroup/GOA.cpp
index 829ca0cdef9..804e235f797 100644
--- a/TAO/orbsvcs/orbsvcs/PortableGroup/GOA.cpp
+++ b/TAO/orbsvcs/orbsvcs/PortableGroup/GOA.cpp
@@ -38,8 +38,8 @@ TAO_GOA::create_id_for_reference (CORBA::Object_ptr the_ref
ACE_ENV_ARG_PARAMETER);
ACE_CHECK_RETURN (0);
- PortableServer::ObjectId_var obj_id = this->reference_to_id (obj_ref.in ()
- ACE_ENV_ARG_PARAMETER);
+ PortableServer::ObjectId_var obj_id =
+ this->reference_to_id (obj_ref.in () ACE_ENV_ARG_PARAMETER);
ACE_CHECK_RETURN (0);
// Associate the object reference with the group reference.
@@ -102,23 +102,23 @@ TAO_GOA::disassociate_reference_with_id (CORBA::Object_ptr ref,
TAO_GOA::TAO_GOA (const TAO_Root_POA::String &name,
- TAO_POA_Manager &poa_manager,
- const TAO_POA_Policy_Set &policies,
- TAO_Root_POA *parent,
- ACE_Lock &lock,
- TAO_SYNCH_MUTEX &thread_lock,
- TAO_ORB_Core &orb_core,
- TAO_Object_Adapter *object_adapter
- ACE_ENV_ARG_DECL)
+ PortableServer::POAManager_ptr poa_manager,
+ const TAO_POA_Policy_Set &policies,
+ TAO_Root_POA *parent,
+ ACE_Lock &lock,
+ TAO_SYNCH_MUTEX &thread_lock,
+ TAO_ORB_Core &orb_core,
+ TAO_Object_Adapter *object_adapter
+ ACE_ENV_ARG_DECL)
: TAO_Regular_POA (name,
- poa_manager,
- policies,
- parent,
- lock,
- thread_lock,
- orb_core,
- object_adapter
- ACE_ENV_ARG_PARAMETER)
+ poa_manager,
+ policies,
+ parent,
+ lock,
+ thread_lock,
+ orb_core,
+ object_adapter
+ ACE_ENV_ARG_PARAMETER)
{
}
@@ -128,27 +128,27 @@ TAO_GOA::~TAO_GOA (void)
TAO_Root_POA *
TAO_GOA::new_POA (const String &name,
- TAO_POA_Manager &poa_manager,
- const TAO_POA_Policy_Set &policies,
- TAO_Root_POA *parent,
- ACE_Lock &lock,
- TAO_SYNCH_MUTEX &thread_lock,
- TAO_ORB_Core &orb_core,
- TAO_Object_Adapter *object_adapter
- ACE_ENV_ARG_DECL)
+ PortableServer::POAManager_ptr poa_manager,
+ const TAO_POA_Policy_Set &policies,
+ TAO_Root_POA *parent,
+ ACE_Lock &lock,
+ TAO_SYNCH_MUTEX &thread_lock,
+ TAO_ORB_Core &orb_core,
+ TAO_Object_Adapter *object_adapter
+ ACE_ENV_ARG_DECL)
{
TAO_GOA *poa = 0;
ACE_NEW_THROW_EX (poa,
TAO_GOA (name,
- poa_manager,
- policies,
- parent,
- lock,
- thread_lock,
- orb_core,
- object_adapter
- ACE_ENV_ARG_PARAMETER),
+ poa_manager,
+ policies,
+ parent,
+ lock,
+ thread_lock,
+ orb_core,
+ object_adapter
+ ACE_ENV_ARG_PARAMETER),
CORBA::NO_MEMORY ());
ACE_CHECK_RETURN (0);
diff --git a/TAO/orbsvcs/orbsvcs/PortableGroup/GOA.h b/TAO/orbsvcs/orbsvcs/PortableGroup/GOA.h
index 12af8d574a5..d5bbdeb04dd 100644
--- a/TAO/orbsvcs/orbsvcs/PortableGroup/GOA.h
+++ b/TAO/orbsvcs/orbsvcs/PortableGroup/GOA.h
@@ -264,7 +264,7 @@ public:
// End standard POA interface methods.
TAO_GOA (const String &name,
- TAO_POA_Manager &poa_manager,
+ PortableServer::POAManager_ptr poa_manager,
const TAO_POA_Policy_Set &policies,
TAO_Root_POA *parent,
ACE_Lock &lock,
@@ -282,7 +282,7 @@ protected:
/// Template method for creating new POA's of this type.
virtual TAO_Root_POA *new_POA (const String &name,
- TAO_POA_Manager &poa_manager,
+ PortableServer::POAManager_ptr poa_manager,
const TAO_POA_Policy_Set &policies,
TAO_Root_POA *parent,
ACE_Lock &lock,
diff --git a/TAO/orbsvcs/orbsvcs/PortableGroup/PG_Servant_Dispatcher.cpp b/TAO/orbsvcs/orbsvcs/PortableGroup/PG_Servant_Dispatcher.cpp
index 1c2b3a94b21..4b3504795e2 100644
--- a/TAO/orbsvcs/orbsvcs/PortableGroup/PG_Servant_Dispatcher.cpp
+++ b/TAO/orbsvcs/orbsvcs/PortableGroup/PG_Servant_Dispatcher.cpp
@@ -15,7 +15,7 @@ TAO_PG_Servant_Dispatcher::~TAO_PG_Servant_Dispatcher (void)
TAO_Root_POA *
TAO_PG_Servant_Dispatcher::create_Root_POA (const ACE_CString &name,
- TAO_POA_Manager &poa_manager,
+ PortableServer::POAManager_ptr poa_manager,
const TAO_POA_Policy_Set &policies,
ACE_Lock &lock,
TAO_SYNCH_MUTEX &thread_lock,
diff --git a/TAO/orbsvcs/orbsvcs/PortableGroup/PG_Servant_Dispatcher.h b/TAO/orbsvcs/orbsvcs/PortableGroup/PG_Servant_Dispatcher.h
index c8c80d87a7f..a5718c240cc 100644
--- a/TAO/orbsvcs/orbsvcs/PortableGroup/PG_Servant_Dispatcher.h
+++ b/TAO/orbsvcs/orbsvcs/PortableGroup/PG_Servant_Dispatcher.h
@@ -57,7 +57,7 @@ public:
/// Factory method for creating new POA's.
TAO_Root_POA *create_Root_POA (const ACE_CString &name,
- TAO_POA_Manager &poa_manager,
+ PortableServer::POAManager_ptr poa_manager,
const TAO_POA_Policy_Set &policies,
ACE_Lock &lock,
TAO_SYNCH_MUTEX &thread_lock,
diff --git a/TAO/orbsvcs/orbsvcs/Trader/Constraint_Visitors.cpp b/TAO/orbsvcs/orbsvcs/Trader/Constraint_Visitors.cpp
index edb16fd97b9..74b6cb25967 100644
--- a/TAO/orbsvcs/orbsvcs/Trader/Constraint_Visitors.cpp
+++ b/TAO/orbsvcs/orbsvcs/Trader/Constraint_Visitors.cpp
@@ -243,7 +243,7 @@ visit_exist (TAO_Unary_Constraint* unary_exist)
{
TAO_Property_Constraint* operand =
(TAO_Property_Constraint*) unary_exist->operand ();
- TAO_String_Hash_Key property_name ((const char*) operand->name ());
+ CORBA::String_var property_name ((const char*) operand->name ());
// Determine if a property is defined on this offer.
@@ -1151,7 +1151,7 @@ TAO_Constraint_Validator::extract_type (TAO_Constraint* expr,
if (type == TAO_IDENT)
{
TAO_Property_Constraint* prop = (TAO_Property_Constraint*) expr;
- TAO_String_Hash_Key prop_name (prop->name ());
+ CORBA::String_var prop_name (prop->name ());
if (this->type_map_.find (prop_name, return_value) == 0)
type = TAO_Literal_Constraint::comparable_type (return_value);
diff --git a/TAO/orbsvcs/orbsvcs/Trader/Interpreter_Utils.cpp b/TAO/orbsvcs/orbsvcs/Trader/Interpreter_Utils.cpp
index 8ee0351020a..993d47ad0e0 100644
--- a/TAO/orbsvcs/orbsvcs/Trader/Interpreter_Utils.cpp
+++ b/TAO/orbsvcs/orbsvcs/Trader/Interpreter_Utils.cpp
@@ -1,53 +1,9 @@
// $Id$
#include "orbsvcs/Trader/Interpreter_Utils.h"
-#include "ace/ACE.h"
-#include "ace/OS_NS_string.h"
TAO_BEGIN_VERSIONED_NAMESPACE_DECL
-// = Methods to deal with ACE_Hash_Map_Manager.
-
-TAO_String_Hash_Key::TAO_String_Hash_Key (void)
-{
-}
-
-TAO_String_Hash_Key::TAO_String_Hash_Key (char * name)
- : CORBA::String_var (name)
-{
-}
-
-TAO_String_Hash_Key::TAO_String_Hash_Key (const char * name)
- : CORBA::String_var (name)
-{
-}
-
-TAO_String_Hash_Key::TAO_String_Hash_Key (const CORBA::String_var &src)
- : CORBA::String_var (src)
-{
-}
-
-bool
-TAO_String_Hash_Key::operator == (const TAO_String_Hash_Key &hash_key) const
-{
- return ACE_OS::strcmp (this->in (), hash_key.in ()) == 0;
-}
-
-bool
-operator < (const TAO_String_Hash_Key &left,
- const TAO_String_Hash_Key &right)
-{
- return ACE_OS::strcmp (left.in (), right.in ()) < 0;
-}
-
-
-u_long
-TAO_String_Hash_Key::hash (void) const
-{
- u_long ret = ACE::hash_pjw (this->in ());
- return ret;
-}
-
// TAO_Sequence_Extracter_Base
CORBA::TCKind
diff --git a/TAO/orbsvcs/orbsvcs/Trader/Interpreter_Utils.h b/TAO/orbsvcs/orbsvcs/Trader/Interpreter_Utils.h
index bd076791149..e59fa4a10ab 100644
--- a/TAO/orbsvcs/orbsvcs/Trader/Interpreter_Utils.h
+++ b/TAO/orbsvcs/orbsvcs/Trader/Interpreter_Utils.h
@@ -15,6 +15,9 @@
#include "ace/Hash_Map_Manager.h"
#include "ace/Null_Mutex.h"
+#include "ace/Functor.h"
+#include "ace/ACE.h"
+#include "ace/OS_NS_string.h"
#include "tao/AnyTypeCode/TypeCode.h"
#include "tao/CORBA_String.h"
@@ -24,53 +27,49 @@
TAO_BEGIN_VERSIONED_NAMESPACE_DECL
-// = Classes to deal with the ACE_Hash_Map_Manager.
-
-/**
- * Key for the Hash Table. The EXT_ID of the
- * ACE_Hash_Map_Manager.
- */
-class TAO_Trading_Serv_Export TAO_String_Hash_Key : public CORBA::String_var
+template<>
+class TAO_Trading_Serv_Export ACE_Hash<CORBA::String_var>
{
public:
- // = Initialization and termination methods.
- TAO_String_Hash_Key (void);
- // Default constructor.
-
- TAO_String_Hash_Key (char * name);
- // Constructor from a const string.
-
- TAO_String_Hash_Key (const char * name);
- // Constructor from a const string.
-
- TAO_String_Hash_Key (const CORBA::String_var &hash_key);
- // Copy constructor.
-
- bool operator == (const TAO_String_Hash_Key &hash_key) const;
- // The operator for hash binding and "find"ing.
-
- friend bool operator < (const TAO_String_Hash_Key &left,
- const TAO_String_Hash_Key &right);
- // The operator for hash binding and "find"ing.
+ unsigned long operator () (const CORBA::String_var& string) const
+ {
+ unsigned long ret = ACE::hash_pjw (string.in ());
+ return ret;
+ }
+};
- u_long hash (void) const;
- // The function that computes a hash value.
+template<>
+class TAO_Trading_Serv_Export ACE_Less_Than<CORBA::String_var>
+{
+public:
+ int operator () (const CORBA::String_var &lhs,
+ const CORBA::String_var &rhs) const
+ {
+ return ACE_OS::strcmp (lhs.in (), rhs.in ()) < 0;
+ }
};
-#if defined ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION_EXPORT
- template class TAO_Trading_Serv_Export TAO::String_var <char>;
-#endif /* ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION_EXPORT */
+template<>
+class TAO_Trading_Serv_Export ACE_Equal_To<CORBA::String_var>
+{
+public:
+ int operator () (const CORBA::String_var &lhs,
+ const CORBA::String_var &rhs) const
+ {
+ return ACE_OS::strcmp (lhs.in (), rhs.in ()) == 0;
+ }
+};
-typedef ACE_Hash_Map_Manager_Ex<TAO_String_Hash_Key,
+typedef ACE_Hash_Map_Manager_Ex<CORBA::String_var,
int,
- ACE_Hash<TAO_String_Hash_Key>,
- ACE_Equal_To<TAO_String_Hash_Key>,
+ ACE_Hash<CORBA::String_var>,
+ ACE_Equal_To<CORBA::String_var>,
ACE_Null_Mutex>
TAO_Lookup_Table;
-typedef ACE_Hash_Map_Manager_Ex<TAO_String_Hash_Key,
+typedef ACE_Hash_Map_Manager_Ex<CORBA::String_var,
CORBA::TypeCode_ptr,
- ACE_Hash<TAO_String_Hash_Key>,
- ACE_Equal_To<TAO_String_Hash_Key>,
+ ACE_Hash<CORBA::String_var>,
+ ACE_Equal_To<CORBA::String_var>,
ACE_Null_Mutex>
TAO_Typecode_Table;
diff --git a/TAO/orbsvcs/orbsvcs/Trader/Offer_Database.cpp b/TAO/orbsvcs/orbsvcs/Trader/Offer_Database.cpp
index 367f7b9a9c5..9401c5366c0 100644
--- a/TAO/orbsvcs/orbsvcs/Trader/Offer_Database.cpp
+++ b/TAO/orbsvcs/orbsvcs/Trader/Offer_Database.cpp
@@ -52,7 +52,7 @@ insert_offer (const char* type, CosTrading::Offer* offer)
{
CosTrading::OfferId return_value = 0;
ACE_TYPENAME Offer_Database::ENTRY* database_entry = 0;
- TAO_String_Hash_Key service_type (type);
+ CORBA::String_var service_type (type);
ACE_READ_GUARD_RETURN (LOCK_TYPE, ace_mon, this->db_lock_, 0);
@@ -102,7 +102,7 @@ remove_offer (const char* type, CORBA::ULong id)
int return_value = -1;
ACE_TYPENAME Offer_Database::ENTRY* db_entry = 0;
- TAO_String_Hash_Key service_type (type);
+ CORBA::String_var service_type (type);
if (this->offer_db_.find (service_type, db_entry) == 0)
{
@@ -220,7 +220,7 @@ lookup_offer (const char* type, CORBA::ULong id)
CosTrading::Offer* return_value = 0;
ACE_TYPENAME Offer_Database::ENTRY* db_entry = 0;
- TAO_String_Hash_Key service_type (type);
+ CORBA::String_var service_type (type);
if (this->offer_db_.find (service_type, db_entry) == 0)
{
@@ -325,7 +325,7 @@ TAO_Service_Offer_Iterator (const char* type,
offer_iter_ (0),
type_ (type)
{
- TAO_String_Hash_Key service_type (type);
+ CORBA::String_var service_type (type);
if (this->stm_.db_lock_.acquire_read () == -1)
return;
diff --git a/TAO/orbsvcs/orbsvcs/Trader/Offer_Database.h b/TAO/orbsvcs/orbsvcs/Trader/Offer_Database.h
index b7ad154a2ef..3087ea49d94 100644
--- a/TAO/orbsvcs/orbsvcs/Trader/Offer_Database.h
+++ b/TAO/orbsvcs/orbsvcs/Trader/Offer_Database.h
@@ -102,10 +102,10 @@ public:
typedef ACE_Hash_Map_Manager_Ex
<
- TAO_String_Hash_Key,
+ CORBA::String_var,
Offer_Map_Entry*,
- ACE_Hash<TAO_String_Hash_Key>,
- ACE_Equal_To<TAO_String_Hash_Key>,
+ ACE_Hash<CORBA::String_var>,
+ ACE_Equal_To<CORBA::String_var>,
ACE_Null_Mutex
>
Offer_Database;
diff --git a/TAO/orbsvcs/orbsvcs/Trader/Service_Type_Repository.cpp b/TAO/orbsvcs/orbsvcs/Trader/Service_Type_Repository.cpp
index f596627fda1..106cc5e3045 100644
--- a/TAO/orbsvcs/orbsvcs/Trader/Service_Type_Repository.cpp
+++ b/TAO/orbsvcs/orbsvcs/Trader/Service_Type_Repository.cpp
@@ -101,7 +101,7 @@ add_type (const char *name,
this->incarnation_);
// Check if the service type already exists.
- TAO_String_Hash_Key type_name (name);
+ CORBA::String_var type_name (name);
if (this->type_map_.find (type_name) == 0)
ACE_THROW_RETURN (CosTradingRepos::ServiceTypeRepository::ServiceTypeExists (),
this->incarnation_);
@@ -259,7 +259,7 @@ describe_type (const char * name
ACE_CHECK_RETURN (0);
// Make sure the type exists.
- TAO_String_Hash_Key type_name (name);
+ CORBA::String_var type_name (name);
Service_Type_Map::ENTRY *type_entry = 0;
if (this->type_map_.find (type_name,
type_entry) == -1)
@@ -304,7 +304,7 @@ fully_describe_type (const char *name
ACE_CHECK_RETURN (0);
// Make sure the type exists.
- TAO_String_Hash_Key type_name (name);
+ CORBA::String_var type_name (name);
Service_Type_Map::ENTRY *type_entry = 0;
if (this->type_map_.find (type_name,
type_entry) == -1)
@@ -349,7 +349,7 @@ mask_type (const char *name
ACE_WRITE_GUARD_THROW_EX (ACE_Lock, ace_mon, *this->lock_, CORBA::INTERNAL ());
// Make sure the type exists.
- TAO_String_Hash_Key type_name (name);
+ CORBA::String_var type_name (name);
Service_Type_Map::ENTRY *type_entry = 0;
if (this->type_map_.find (type_name,
type_entry) != -1)
@@ -380,7 +380,7 @@ unmask_type (const char *name
ACE_WRITE_GUARD_THROW_EX (ACE_Lock, ace_mon, *this->lock_, CORBA::INTERNAL ());
// Make sure the type exists.
- TAO_String_Hash_Key type_name (name);
+ CORBA::String_var type_name (name);
Service_Type_Map::ENTRY *type_entry = 0;
if (this->type_map_.find (type_name,
type_entry) != -1)
@@ -419,7 +419,7 @@ fully_describe_type_i (const CosTradingRepos::ServiceTypeRepository::TypeStruct
Service_Type_Map::ENTRY *type_entry = 0;
iterator.next (next_type_name);
- TAO_String_Hash_Key hash_key (const_cast<const char *> (*next_type_name));
+ CORBA::String_var hash_key (const_cast<const char *> (*next_type_name));
this->type_map_.find (hash_key,
type_entry);
@@ -450,7 +450,7 @@ fully_describe_type_i (const CosTradingRepos::ServiceTypeRepository::TypeStruct
Service_Type_Map::ENTRY *type_entry = 0;
iterator.next (next_type_name);
- TAO_String_Hash_Key hash_key (const_cast<const char *> (*next_type_name));
+ CORBA::String_var hash_key (const_cast<const char *> (*next_type_name));
this->type_map_.find (hash_key,
type_entry);
@@ -481,7 +481,7 @@ collect_inheritance_hierarchy (const CosTradingRepos::ServiceTypeRepository::Typ
i--)
{
Service_Type_Map::ENTRY *next_type_entry = 0;
- TAO_String_Hash_Key next_type_name (type_struct.super_types[i]);
+ CORBA::String_var next_type_name (type_struct.super_types[i]);
if (this->type_map_.find (next_type_name, next_type_entry) != -1)
{
@@ -515,7 +515,7 @@ validate_properties (Prop_Map &prop_map,
ACE_THROW (CosTrading::IllegalPropertyName (n));
else
{
- TAO_String_Hash_Key prop_name (n);
+ CORBA::String_var prop_name (n);
CosTradingRepos::ServiceTypeRepository::PropStruct *prop_val =
const_cast<CosTradingRepos::ServiceTypeRepository::PropStruct *> (&props[i]);
@@ -546,7 +546,7 @@ validate_supertypes (Service_Type_Map &super_map,
ACE_THROW (CosTrading::IllegalServiceType (type));
else
{
- TAO_String_Hash_Key hash_type (type);
+ CORBA::String_var hash_type (type);
Service_Type_Map::ENTRY *type_entry = 0;
if (this->type_map_.find (hash_type,
@@ -576,7 +576,7 @@ validate_inheritance (Prop_Map &prop_map,
i++)
{
Service_Type_Map::ENTRY *super_type_entry = 0;
- TAO_String_Hash_Key super_type (super_types[i]);
+ CORBA::String_var super_type (super_types[i]);
CosTradingRepos::ServiceTypeRepository::ServiceTypeNameSeq place_holder;
CosTradingRepos::ServiceTypeRepository::PropStructSeq super_props;
@@ -597,7 +597,7 @@ validate_inheritance (Prop_Map &prop_map,
j++)
{
Prop_Map::ENTRY *existing_prop = 0;
- TAO_String_Hash_Key prop_name (super_props[j].name);
+ CORBA::String_var prop_name (super_props[j].name);
if (prop_map.bind (prop_name,
&super_props[j],
@@ -688,7 +688,7 @@ update_type_map (const char *name,
psbuf,
1);
*/
- TAO_String_Hash_Key type_name (name);
+ CORBA::String_var type_name (name);
this->type_map_.bind (type_name, type);
}
diff --git a/TAO/orbsvcs/orbsvcs/Trader/Service_Type_Repository.h b/TAO/orbsvcs/orbsvcs/Trader/Service_Type_Repository.h
index 013061face7..4f5b959b216 100644
--- a/TAO/orbsvcs/orbsvcs/Trader/Service_Type_Repository.h
+++ b/TAO/orbsvcs/orbsvcs/Trader/Service_Type_Repository.h
@@ -232,24 +232,24 @@ private:
CORBA::Boolean has_subtypes_;
};
- typedef ACE_Hash_Map_Manager_Ex <TAO_String_Hash_Key,
+ typedef ACE_Hash_Map_Manager_Ex <CORBA::String_var,
CosTradingRepos::ServiceTypeRepository::PropStruct *,
- ACE_Hash<TAO_String_Hash_Key>,
- ACE_Equal_To<TAO_String_Hash_Key>,
+ ACE_Hash<CORBA::String_var>,
+ ACE_Equal_To<CORBA::String_var>,
ACE_Null_Mutex>
Prop_Map;
- typedef ACE_Hash_Map_Manager_Ex <TAO_String_Hash_Key,
+ typedef ACE_Hash_Map_Manager_Ex <CORBA::String_var,
Type_Info *,
- ACE_Hash<TAO_String_Hash_Key>,
- ACE_Equal_To<TAO_String_Hash_Key>,
+ ACE_Hash<CORBA::String_var>,
+ ACE_Equal_To<CORBA::String_var>,
ACE_Null_Mutex>
Service_Type_Map;
- typedef ACE_Hash_Map_Iterator_Ex<TAO_String_Hash_Key,
+ typedef ACE_Hash_Map_Iterator_Ex<CORBA::String_var,
Type_Info *,
- ACE_Hash<TAO_String_Hash_Key>,
- ACE_Equal_To<TAO_String_Hash_Key>,
+ ACE_Hash<CORBA::String_var>,
+ ACE_Equal_To<CORBA::String_var>,
ACE_Null_Mutex>
Service_Type_Map_Iterator;
diff --git a/TAO/orbsvcs/orbsvcs/Trader/Trader.h b/TAO/orbsvcs/orbsvcs/Trader/Trader.h
index 33206bd58fb..61b18d38c72 100644
--- a/TAO/orbsvcs/orbsvcs/Trader/Trader.h
+++ b/TAO/orbsvcs/orbsvcs/Trader/Trader.h
@@ -498,7 +498,7 @@ protected:
// hard time with it like that when compiling TAO_Service_Offer_Iterator.
typedef ACE_Hash_Map_Manager_Ex<CORBA::ULong, CosTrading::Offer*, ACE_Hash<CORBA::ULong>, ACE_Equal_To<CORBA::ULong>, ACE_Null_Mutex> TAO_Offer_Map;
-typedef ACE_Unbounded_Set<TAO_String_Hash_Key> TAO_String_Set;
+typedef ACE_Unbounded_Set<CORBA::String_var> TAO_String_Set;
typedef ACE_Unbounded_Queue<char*> TAO_String_Queue;
// = Helpful operators.
diff --git a/TAO/orbsvcs/orbsvcs/Trader/Trader_Constraint_Visitors.cpp b/TAO/orbsvcs/orbsvcs/Trader/Trader_Constraint_Visitors.cpp
index 89c0ec8e1e5..818934b10bb 100644
--- a/TAO/orbsvcs/orbsvcs/Trader/Trader_Constraint_Visitors.cpp
+++ b/TAO/orbsvcs/orbsvcs/Trader/Trader_Constraint_Visitors.cpp
@@ -16,7 +16,7 @@ TAO_Trader_Constraint_Evaluator (CosTrading::Offer* offer,
// Create a map of property names to their values.
for (int i = 0; i < length; i++)
{
- TAO_String_Hash_Key name = (const char*) offer->properties[i].name;
+ CORBA::String_var name = (const char*) offer->properties[i].name;
this->props_.bind (name, i);
}
}
@@ -27,7 +27,7 @@ visit_property (TAO_Property_Constraint* literal)
{
int return_value = -1, prop_index = 0;
// Handle case where property is not, in fact, mapped to a value
- TAO_String_Hash_Key prop_name ((const char*) literal->name ());
+ CORBA::String_var prop_name ((const char*) literal->name ());
if (this->props_.find (prop_name, prop_index) == 0)
{
@@ -71,7 +71,7 @@ TAO_Trader_Constraint_Validator
CORBA::TypeCode_ptr corba_type =
CORBA::TypeCode::_duplicate (prop_seq[i].value_type.in ());
- TAO_String_Hash_Key prop_name_str = (const char*) prop_seq[i].name;
+ CORBA::String_var prop_name_str = (const char*) prop_seq[i].name;
this->type_map_.bind (prop_name_str, corba_type);
}
}
diff --git a/TAO/orbsvcs/orbsvcs/Trader/Trader_Interfaces.cpp b/TAO/orbsvcs/orbsvcs/Trader/Trader_Interfaces.cpp
index fbc7e07777b..6ddef432010 100644
--- a/TAO/orbsvcs/orbsvcs/Trader/Trader_Interfaces.cpp
+++ b/TAO/orbsvcs/orbsvcs/Trader/Trader_Interfaces.cpp
@@ -1686,7 +1686,7 @@ add_link (const char *name,
ACE_THROW (CosTrading::Link::IllegalLinkName (name));
// Ensure this isn't a duplicate link name.
- TAO_String_Hash_Key link_name (name);
+ CORBA::String_var link_name (name);
if (this->links_.find (link_name) == 0)
ACE_THROW (CosTrading::Link::DuplicateLinkName (name));
@@ -1736,7 +1736,7 @@ remove_link (const char *name
ACE_THROW (CosTrading::Link::IllegalLinkName (name));
// Ensure this isn't a duplicate link name.
- TAO_String_Hash_Key link_name (name);
+ CORBA::String_var link_name (name);
if (this->links_.find (link_name) == -1)
ACE_THROW (CosTrading::Link::UnknownLinkName (name));
@@ -1758,7 +1758,7 @@ TAO_Link<TRADER_LOCK_TYPE,MAP_LOCK_TYPE>::describe_link (const char *name
// Ensure this isn't a duplicate link name.
ACE_TYPENAME Links::ENTRY* link_entry = 0;
- TAO_String_Hash_Key link_name (name);
+ CORBA::String_var link_name (name);
if (this->links_.find (link_name, link_entry) == -1)
ACE_THROW_RETURN (CosTrading::Link::UnknownLinkName (name),
0);
@@ -1827,7 +1827,7 @@ modify_link (const char *name,
// Ensure this isn't a duplicate link name.
ACE_TYPENAME Links::ENTRY* link_entry = 0;
- TAO_String_Hash_Key link_name (name);
+ CORBA::String_var link_name (name);
if (this->links_.find (link_name, link_entry) == -1)
ACE_THROW (CosTrading::Link::UnknownLinkName (name));
diff --git a/TAO/orbsvcs/orbsvcs/Trader/Trader_Interfaces.h b/TAO/orbsvcs/orbsvcs/Trader/Trader_Interfaces.h
index 6c86c7a4840..2b1db71d3bc 100644
--- a/TAO/orbsvcs/orbsvcs/Trader/Trader_Interfaces.h
+++ b/TAO/orbsvcs/orbsvcs/Trader/Trader_Interfaces.h
@@ -921,10 +921,10 @@ private:
typedef ACE_Hash_Map_Manager_Ex
<
- TAO_String_Hash_Key,
+ CORBA::String_var,
CosTrading::Link::LinkInfo,
- ACE_Hash<TAO_String_Hash_Key>,
- ACE_Equal_To<TAO_String_Hash_Key>,
+ ACE_Hash<CORBA::String_var>,
+ ACE_Equal_To<CORBA::String_var>,
MAP_LOCK_TYPE
>
Links;
diff --git a/TAO/orbsvcs/orbsvcs/Trader/Trader_Utils.cpp b/TAO/orbsvcs/orbsvcs/Trader/Trader_Utils.cpp
index afd9e8a8b7b..585519e1ec8 100644
--- a/TAO/orbsvcs/orbsvcs/Trader/Trader_Utils.cpp
+++ b/TAO/orbsvcs/orbsvcs/Trader/Trader_Utils.cpp
@@ -7,6 +7,13 @@ ACE_RCSID(Trader, Trader_Utils, "$Id$")
TAO_BEGIN_VERSIONED_NAMESPACE_DECL
+bool
+operator== (CORBA::String_var const & lhs,
+ CORBA::String_var const & rhs)
+{
+ return (ACE_OS::strcmp (lhs.in (), rhs.in ()) == 0);
+}
+
TAO_Policy_Creator::TAO_Policy_Creator (int num_policies)
: policies_ (num_policies),
num_policies_ (0)
@@ -348,7 +355,7 @@ TAO_Property_Evaluator_By_Name (const CosTrading::PropertySeq& properties
if (! TAO_Trader_Base::is_valid_property_name (prop.name))
ACE_THROW (CosTrading::IllegalPropertyName (prop.name));
- TAO_String_Hash_Key prop_name = prop.name.in ();
+ CORBA::String_var prop_name = prop.name.in ();
if (this->table_.bind (prop_name, i))
ACE_THROW (CosTrading::DuplicatePropertyName (prop.name));
}
@@ -363,7 +370,7 @@ TAO_Property_Evaluator_By_Name(CosTrading::Offer& offer,
for (int i = 0; i < length; i++)
{
- TAO_String_Hash_Key prop_name = (const char*) this->props_[i].name;
+ CORBA::String_var prop_name = (const char*) this->props_[i].name;
this->table_.bind (prop_name, i);
}
}
@@ -374,7 +381,7 @@ is_dynamic_property(const char* property_name)
{
int predicate = 0;
int index = 0;
- TAO_String_Hash_Key prop_name (property_name);
+ CORBA::String_var prop_name (property_name);
// If the property name is in the map, delegate evaluation to our
// superclass. Otherwise, throw an exception.
@@ -391,7 +398,7 @@ TAO_Property_Evaluator_By_Name::property_value (const char* property_name
{
int index = 0;
CORBA::Any* prop_value = 0;
- TAO_String_Hash_Key prop_name (property_name);
+ CORBA::String_var prop_name (property_name);
// If the property name is in the map, delegate evaluation to our
// superclass. Otherwise, throw an exception.
@@ -410,7 +417,7 @@ CORBA::TypeCode_ptr
TAO_Property_Evaluator_By_Name::property_type (const char* property_name)
{
int index = 0;
- TAO_String_Hash_Key prop_name (property_name);
+ CORBA::String_var prop_name (property_name);
CORBA::TypeCode_ptr prop_type = CORBA::TypeCode::_nil();
// If the property name is in the map, delegate evaluation to our
@@ -426,7 +433,7 @@ TAO_Property_Evaluator_By_Name::get_property (const char* property_name)
{
int index = 0;
CosTrading::Property* property = 0;
- TAO_String_Hash_Key prop_name (property_name);
+ CORBA::String_var prop_name (property_name);
if (this->table_.find (prop_name, index) == 0)
property = (CosTrading::Property *) &this->props_[index];
@@ -1050,7 +1057,7 @@ TAO_Offer_Modifier (const char* type_name,
// Create a mapping of property names to their types.
for (i = 0; i < pstructs_length; i++)
{
- TAO_String_Hash_Key prop_name = pstructs[i].name.in ();
+ CORBA::String_var prop_name = pstructs[i].name.in ();
CORBA::TypeCode_ptr type_code =
CORBA::TypeCode::_duplicate (pstructs[i].value_type.in ());
this->prop_types_.bind (prop_name, type_code);
@@ -1064,13 +1071,13 @@ TAO_Offer_Modifier (const char* type_name,
if (pstructs[i].mode ==
CosTradingRepos::ServiceTypeRepository::PROP_MANDATORY)
{
- TAO_String_Hash_Key prop_name (pname);
+ CORBA::String_var prop_name (pname);
this->mandatory_.insert (prop_name);
}
else if (pstructs[i].mode ==
CosTradingRepos::ServiceTypeRepository::PROP_READONLY)
{
- TAO_String_Hash_Key prop_name (pname);
+ CORBA::String_var prop_name (pname);
this->readonly_.insert (prop_name);
}
}
@@ -1078,7 +1085,7 @@ TAO_Offer_Modifier (const char* type_name,
// Insert the indices of the offer properties into a map.
for (i = 0; i < props_length; i++)
{
- TAO_String_Hash_Key prop_name =
+ CORBA::String_var prop_name =
static_cast<const char*> (prop_seq[i].name);
this->props_.bind (prop_name, &prop_seq[i]);
}
@@ -1116,7 +1123,7 @@ delete_properties (const CosTrading::PropertyNameSeq& deletes
ACE_THROW (CosTrading::IllegalPropertyName (dname));
else
{
- TAO_String_Hash_Key prop_name (dname);
+ CORBA::String_var prop_name (dname);
if (this->mandatory_.find (prop_name) == 0)
ACE_THROW (CosTrading::Register::MandatoryProperty (this->type_, dname));
else if (delete_me.insert (prop_name) == 1)
@@ -1129,7 +1136,7 @@ delete_properties (const CosTrading::PropertyNameSeq& deletes
// Delete those properties from the offer.
for (i = 0; i < length; i++)
{
- TAO_String_Hash_Key prop_name =
+ CORBA::String_var prop_name =
static_cast<const char *> (deletes[i]);
this->props_.unbind (prop_name);
}
@@ -1156,7 +1163,7 @@ merge_properties (const CosTrading::PropertySeq& modifies
const char* mname = modifies[i].name;
if (TAO_Trader_Base::is_valid_property_name (mname))
{
- TAO_String_Hash_Key prop_name (mname);
+ CORBA::String_var prop_name (mname);
if (this->readonly_.find (prop_name) == 0)
{
// Can't assign a dynamic property to a property with
@@ -1213,7 +1220,7 @@ TAO_Offer_Modifier::affect_change (const CosTrading::PropertySeq& modifies)
for (i = 0; i < merge_length; i++)
{
Property_Table::ENTRY* entry = 0;
- TAO_String_Hash_Key prop_name = modifies[i].name.in ();
+ CORBA::String_var prop_name = modifies[i].name.in ();
CosTrading::Property* prop =
const_cast<CosTrading::Property*> (&modifies[i]);
@@ -1237,7 +1244,7 @@ TAO_Offer_Modifier::affect_change (const CosTrading::PropertySeq& modifies)
{
CosTrading::Property* prop_value = 0;
const char* name = this->offer_->properties[i].name;
- TAO_String_Hash_Key prop_name (name);
+ CORBA::String_var prop_name (name);
if (this->props_.unbind (prop_name, prop_value) == 0)
prop_seq[num_modified++] = *prop_value;
}
@@ -1246,7 +1253,7 @@ TAO_Offer_Modifier::affect_change (const CosTrading::PropertySeq& modifies)
{
CosTrading::Property* prop_value = 0;
const char* name = modifies[i].name;
- TAO_String_Hash_Key prop_name (name);
+ CORBA::String_var prop_name (name);
if (this->props_.unbind (prop_name, prop_value) == 0)
prop_seq[num_modified++] = *prop_value;
}
@@ -1282,7 +1289,7 @@ TAO_Offer_Filter::TAO_Offer_Filter (TAO_Policies& policies
if (exact_type_match == 1)
{
- TAO_String_Hash_Key exact_match
+ CORBA::String_var exact_match
(TAO_Policies::POLICY_NAMES[TAO_Policies::EXACT_TYPE_MATCH]);
this->limits_.insert (exact_match);
}
@@ -1303,7 +1310,7 @@ configure_type (CosTradingRepos::ServiceTypeRepository::TypeStruct* type_struct)
if (mode == CosTradingRepos::ServiceTypeRepository::PROP_MANDATORY_READONLY ||
mode == CosTradingRepos::ServiceTypeRepository::PROP_READONLY)
{
- TAO_String_Hash_Key prop_name ((const char*) prop_seq[i].name);
+ CORBA::String_var prop_name ((const char*) prop_seq[i].name);
this->not_mod_props_.insert (prop_name);
}
}
@@ -1312,9 +1319,9 @@ configure_type (CosTradingRepos::ServiceTypeRepository::TypeStruct* type_struct)
CORBA::Boolean
TAO_Offer_Filter::ok_to_consider (CosTrading::Offer* offer)
{
- TAO_String_Hash_Key use_mods =
+ CORBA::String_var use_mods =
TAO_Policies::POLICY_NAMES[TAO_Policies::USE_MODIFIABLE_PROPERTIES];
- TAO_String_Hash_Key use_dyns =
+ CORBA::String_var use_dyns =
TAO_Policies::POLICY_NAMES[TAO_Policies::USE_DYNAMIC_PROPERTIES];
CORBA::Boolean return_value = 1;
TAO_Property_Evaluator prop_eval (*offer);
@@ -1333,7 +1340,7 @@ TAO_Offer_Filter::ok_to_consider (CosTrading::Offer* offer)
{
// Determine if this property name is found in the set
// of modifiable properties for the type being considered.
- TAO_String_Hash_Key prop_name ((const char*) offer->properties[i].name);
+ CORBA::String_var prop_name ((const char*) offer->properties[i].name);
if (this->not_mod_props_.find (prop_name) == -1)
{
this->limits_.insert (use_mods);
@@ -1363,7 +1370,7 @@ TAO_Offer_Filter::ok_to_consider (CosTrading::Offer* offer)
this->search_card_--;
if (this->search_card_ == 0)
{
- TAO_String_Hash_Key search_card =
+ CORBA::String_var search_card =
TAO_Policies::POLICY_NAMES[TAO_Policies::SEARCH_CARD];
this->limits_.insert (search_card);
}
@@ -1386,14 +1393,14 @@ TAO_Offer_Filter::matched_offer (void)
if (this->match_card_ == 0)
{
- TAO_String_Hash_Key match_card =
+ CORBA::String_var match_card =
TAO_Policies::POLICY_NAMES[TAO_Policies::MATCH_CARD];
this->limits_.insert (match_card);
}
if (this->return_card_ == 0)
{
- TAO_String_Hash_Key return_card =
+ CORBA::String_var return_card =
TAO_Policies::POLICY_NAMES[TAO_Policies::MATCH_CARD];
this->limits_.insert (return_card);
}
@@ -1423,7 +1430,7 @@ TAO_Offer_Filter::limits_applied (void)
! p_iter.done ();
p_iter.advance ())
{
- TAO_String_Hash_Key* policy_name_ptr = 0;
+ CORBA::String_var* policy_name_ptr = 0;
p_iter.next (policy_name_ptr);
temp[i++] = CORBA::string_dup (policy_name_ptr->in ());
}
@@ -1451,7 +1458,7 @@ TAO_Property_Filter (const SPECIFIED_PROPS& desired_props
// Check for errors or duplicates
if (TAO_Trader_Base::is_valid_property_name (pname))
{
- TAO_String_Hash_Key prop_name (pname);
+ CORBA::String_var prop_name (pname);
if (this->props_.insert (prop_name) == 1)
ACE_THROW (CosTrading::DuplicatePropertyName (pname));
}
@@ -1497,7 +1504,7 @@ TAO_Property_Filter::filter_offer (CosTrading::Offer* source,
else
{
const char* p_name = s_props[i].name;
- TAO_String_Hash_Key prop_name (p_name);
+ CORBA::String_var prop_name (p_name);
// Save those property that match.
if (this->props_.find (prop_name) == 0)
diff --git a/TAO/orbsvcs/orbsvcs/Trader/Trader_Utils.h b/TAO/orbsvcs/orbsvcs/Trader/Trader_Utils.h
index a79c30f8136..70b5717dde7 100644
--- a/TAO/orbsvcs/orbsvcs/Trader/Trader_Utils.h
+++ b/TAO/orbsvcs/orbsvcs/Trader/Trader_Utils.h
@@ -621,10 +621,10 @@ private:
TAO_Offer_Modifier (const TAO_Offer_Modifier&);
TAO_Offer_Modifier& operator= (const TAO_Offer_Modifier&);
- typedef ACE_Hash_Map_Manager_Ex <TAO_String_Hash_Key,
+ typedef ACE_Hash_Map_Manager_Ex <CORBA::String_var,
CosTrading::Property *,
- ACE_Hash<TAO_String_Hash_Key>,
- ACE_Equal_To<TAO_String_Hash_Key>,
+ ACE_Hash<CORBA::String_var>,
+ ACE_Equal_To<CORBA::String_var>,
ACE_Null_Mutex>
Property_Table;
@@ -639,7 +639,8 @@ private:
/// The set of readonly and mandatory property names in the offer's
/// type.
- TAO_String_Set readonly_, mandatory_;
+ TAO_String_Set readonly_;
+ TAO_String_Set mandatory_;
/// A reference to the offer undergoing change.
CosTrading::Offer* offer_;
diff --git a/TAO/orbsvcs/tests/AVStreams/Multicast/ftp.cpp b/TAO/orbsvcs/tests/AVStreams/Multicast/ftp.cpp
index 69b09769a0a..07d956ef648 100644
--- a/TAO/orbsvcs/tests/AVStreams/Multicast/ftp.cpp
+++ b/TAO/orbsvcs/tests/AVStreams/Multicast/ftp.cpp
@@ -281,8 +281,8 @@ Client::run (void)
flow_protocol_str,
this->protocol_,
&addr);
- flow_spec [0] = entry.entry_to_string ();
flow_spec.length (1);
+ flow_spec [0] = entry.entry_to_string ();
ACE_DEBUG ((LM_DEBUG, "(%N,%l) Flowspec: %s\n", entry.entry_to_string() ));
AVStreams::MMDevice_var client_mmdevice
diff --git a/TAO/orbsvcs/tests/AVStreams/Pluggable/ftp.cpp b/TAO/orbsvcs/tests/AVStreams/Pluggable/ftp.cpp
index 4639308b102..7aac2982793 100644
--- a/TAO/orbsvcs/tests/AVStreams/Pluggable/ftp.cpp
+++ b/TAO/orbsvcs/tests/AVStreams/Pluggable/ftp.cpp
@@ -265,8 +265,8 @@ Client::init (int argc,
entry.set_peer_addr (peer_addr);
AVStreams::flowSpec flow_spec (1);
- flow_spec [0] = CORBA::string_dup (entry.entry_to_string ());
flow_spec.length (1);
+ flow_spec [0] = CORBA::string_dup (entry.entry_to_string ());
AVStreams::MMDevice_var client_mmdevice =
this->client_mmdevice_._this (ACE_ENV_SINGLE_ARG_PARAMETER);
diff --git a/TAO/orbsvcs/tests/Trading/TTest.idl b/TAO/orbsvcs/tests/Trading/TTest.idl
index 756f057e266..d518aa1b58f 100644
--- a/TAO/orbsvcs/tests/Trading/TTest.idl
+++ b/TAO/orbsvcs/tests/Trading/TTest.idl
@@ -7,9 +7,9 @@ module TAO_Trader_Test
interface Remote_Output
{
- void confirm ();
// Ensure that the object reference returned from the query actually
// works.
+ void confirm ();
};
interface Plotter : Remote_Output
@@ -29,15 +29,14 @@ interface PostScript_Printer : Remote_Output
};
// Sequences used to test sequence type equivalence in the trader.
-typedef CORBA::ShortSeq ShortSeq;
-typedef CORBA::UShortSeq UShortSeq;
-typedef CORBA::LongSeq LongSeq;
-typedef CORBA::ULongSeq ULongSeq;
-typedef CORBA::BooleanSeq BooleanSeq;
-typedef CORBA::FloatSeq FloatSeq;
-typedef CORBA::DoubleSeq DoubleSeq;
-typedef CORBA::StringSeq StringSeq;
-
+typedef sequence<short> ShortSeq;
+typedef sequence<unsigned short> UShortSeq;
+typedef sequence<long> LongSeq;
+typedef sequence<unsigned long> ULongSeq;
+typedef sequence<boolean> BooleanSeq;
+typedef sequence<float> FloatSeq;
+typedef sequence<double> DoubleSeq;
+typedef sequence<string> StringSeq;
};
diff --git a/TAO/performance-tests/AMI_Latency/Roundtrip.cpp b/TAO/performance-tests/AMI_Latency/Roundtrip.cpp
deleted file mode 100644
index c9e68d98406..00000000000
--- a/TAO/performance-tests/AMI_Latency/Roundtrip.cpp
+++ /dev/null
@@ -1,26 +0,0 @@
-//
-// $Id$
-//
-#include "Roundtrip.h"
-
-ACE_RCSID(AMI_Latency, Roundtrip, "$Id$")
-
-Roundtrip::Roundtrip (CORBA::ORB_ptr orb)
- : orb_ (CORBA::ORB::_duplicate (orb))
-{
-}
-
-Test::Timestamp
-Roundtrip::test_method (Test::Timestamp send_time
- ACE_ENV_ARG_DECL_NOT_USED)
- ACE_THROW_SPEC ((CORBA::SystemException))
-{
- return send_time;
-}
-
-void
-Roundtrip::shutdown (ACE_ENV_SINGLE_ARG_DECL)
- ACE_THROW_SPEC ((CORBA::SystemException))
-{
- this->orb_->shutdown (0 ACE_ENV_ARG_PARAMETER);
-}
diff --git a/TAO/performance-tests/AMI_Latency/Roundtrip.h b/TAO/performance-tests/AMI_Latency/Roundtrip.h
deleted file mode 100644
index 6474b130a24..00000000000
--- a/TAO/performance-tests/AMI_Latency/Roundtrip.h
+++ /dev/null
@@ -1,46 +0,0 @@
-//
-// $Id$
-//
-
-#ifndef ROUNDTRIP_H
-#define ROUNDTRIP_H
-#include /**/ "ace/pre.h"
-
-#include "TestS.h"
-
-#if defined (_MSC_VER)
-# if (_MSC_VER >= 1200)
-# pragma warning(push)
-# endif /* _MSC_VER >= 1200 */
-# pragma warning (disable:4250)
-#endif /* _MSC_VER */
-
-/// Implement the Test::Roundtrip interface
-class Roundtrip
- : public virtual POA_Test::Roundtrip
- , public virtual PortableServer::RefCountServantBase
-{
-public:
- /// Constructor
- Roundtrip (CORBA::ORB_ptr orb);
-
- // = The skeleton methods
- virtual Test::Timestamp test_method (Test::Timestamp send_time
- ACE_ENV_ARG_DECL)
- ACE_THROW_SPEC ((CORBA::SystemException));
-
- virtual void shutdown (ACE_ENV_SINGLE_ARG_DECL)
- ACE_THROW_SPEC ((CORBA::SystemException));
-
-private:
- /// Use an ORB reference to conver strings to objects and shutdown
- /// the application.
- CORBA::ORB_var orb_;
-};
-
-#if defined(_MSC_VER) && (_MSC_VER >= 1200)
-# pragma warning(pop)
-#endif /* _MSC_VER */
-
-#include /**/ "ace/post.h"
-#endif /* ROUNDTRIP_H */
diff --git a/TAO/performance-tests/AMI_Latency/Roundtrip_Handler.cpp b/TAO/performance-tests/AMI_Latency/Roundtrip_Handler.cpp
deleted file mode 100644
index 5f0061601e4..00000000000
--- a/TAO/performance-tests/AMI_Latency/Roundtrip_Handler.cpp
+++ /dev/null
@@ -1,75 +0,0 @@
-//
-// $Id$
-//
-#include "Roundtrip_Handler.h"
-
-ACE_RCSID(AMI_Latency, Roundtrip, "$Id$")
-
-Roundtrip_Handler::Roundtrip_Handler (int expected_callbacks)
- : pending_callbacks_ (expected_callbacks)
-{
-}
-
-int
-Roundtrip_Handler::pending_callbacks (void) const
-{
- return this->pending_callbacks_;
-}
-
-void
-Roundtrip_Handler::dump_results (ACE_UINT32 gsf)
-{
- this->latency_stats_.dump_results ("AMI Latency", gsf);
-}
-
-void
-Roundtrip_Handler::test_method (Test::Timestamp send_time
- ACE_ENV_ARG_DECL_NOT_USED)
- ACE_THROW_SPEC ((CORBA::SystemException))
-{
- this->pending_callbacks_--;
-
- ACE_hrtime_t now = ACE_OS::gethrtime ();
- this->latency_stats_.sample (now - send_time);
-}
-
-void
-Roundtrip_Handler::test_method_excep (Test::AMI_RoundtripExceptionHolder *holder
- ACE_ENV_ARG_DECL)
- ACE_THROW_SPEC ((CORBA::SystemException))
-{
- ACE_TRY
- {
- this->pending_callbacks_--;
- holder->raise_test_method (ACE_ENV_SINGLE_ARG_PARAMETER);
- ACE_TRY_CHECK;
- }
- ACE_CATCHANY
- {
- ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION, "test_method:");
- }
- ACE_ENDTRY;
-}
-
-void
-Roundtrip_Handler::shutdown (ACE_ENV_SINGLE_ARG_DECL_NOT_USED)
- ACE_THROW_SPEC ((CORBA::SystemException))
-{
-}
-
-void
-Roundtrip_Handler::shutdown_excep (Test::AMI_RoundtripExceptionHolder *holder
- ACE_ENV_ARG_DECL)
- ACE_THROW_SPEC ((CORBA::SystemException))
-{
- ACE_TRY
- {
- holder->raise_shutdown (ACE_ENV_SINGLE_ARG_PARAMETER);
- ACE_TRY_CHECK;
- }
- ACE_CATCHANY
- {
- ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION, "shutdown:");
- }
- ACE_ENDTRY;
-}
diff --git a/TAO/performance-tests/AMI_Latency/Roundtrip_Handler.h b/TAO/performance-tests/AMI_Latency/Roundtrip_Handler.h
deleted file mode 100644
index fca18bf989f..00000000000
--- a/TAO/performance-tests/AMI_Latency/Roundtrip_Handler.h
+++ /dev/null
@@ -1,61 +0,0 @@
-//
-// $Id$
-//
-
-#ifndef ROUNDTRIP_HANDLER_H
-#define ROUNDTRIP_HANDLER_H
-#include /**/ "ace/pre.h"
-
-#include "TestS.h"
-#include "ace/Basic_Stats.h"
-
-#if defined (_MSC_VER)
-# if (_MSC_VER >= 1200)
-# pragma warning(push)
-# endif /* _MSC_VER >= 1200 */
-# pragma warning (disable:4250)
-#endif /* _MSC_VER */
-
-/// Implement the Test::Roundtrip interface
-class Roundtrip_Handler
- : public virtual POA_Test::AMI_RoundtripHandler
- , public virtual PortableServer::RefCountServantBase
-{
-public:
- /// Constructor
- Roundtrip_Handler (int expected_callbacks);
-
- /// Return the number of pending callbacks
- int pending_callbacks (void) const;
-
- /// Dump the results
- void dump_results (ACE_UINT32 gsf);
-
- // = The skeleton methods
- virtual void test_method (Test::Timestamp send_time
- ACE_ENV_ARG_DECL)
- ACE_THROW_SPEC ((CORBA::SystemException));
- virtual void test_method_excep (Test::AMI_RoundtripExceptionHolder *holder
- ACE_ENV_ARG_DECL)
- ACE_THROW_SPEC ((CORBA::SystemException));
-
- virtual void shutdown (ACE_ENV_SINGLE_ARG_DECL)
- ACE_THROW_SPEC ((CORBA::SystemException));
- virtual void shutdown_excep (Test::AMI_RoundtripExceptionHolder *holder
- ACE_ENV_ARG_DECL)
- ACE_THROW_SPEC ((CORBA::SystemException));
-
-private:
- /// The number of callbacks not received yet
- int pending_callbacks_;
-
- /// Collect the latency results
- ACE_Basic_Stats latency_stats_;
-};
-
-#if defined(_MSC_VER) && (_MSC_VER >= 1200)
-# pragma warning(pop)
-#endif /* _MSC_VER */
-
-#include /**/ "ace/post.h"
-#endif /* ROUNDTRIP_H */
diff --git a/TAO/performance-tests/AMI_Latency/Server_Task.cpp b/TAO/performance-tests/AMI_Latency/Server_Task.cpp
deleted file mode 100644
index 6df92f32a3f..00000000000
--- a/TAO/performance-tests/AMI_Latency/Server_Task.cpp
+++ /dev/null
@@ -1,24 +0,0 @@
-//
-// $Id$
-//
-#include "Server_Task.h"
-
-ACE_RCSID(AMI_Latency, Server_Task, "$Id$")
-
-Server_Task::Server_Task (CORBA::ORB_ptr orb)
- : orb_ (CORBA::ORB::_duplicate (orb))
-{
-}
-
-int
-Server_Task::svc (void)
-{
- ACE_DECLARE_NEW_CORBA_ENV;
- ACE_TRY
- {
- this->orb_->run (ACE_ENV_SINGLE_ARG_PARAMETER);
- ACE_TRY_CHECK;
- }
- ACE_CATCHANY {} ACE_ENDTRY;
- return 0;
-}
diff --git a/TAO/performance-tests/AMI_Latency/client.cpp b/TAO/performance-tests/AMI_Latency/client.cpp
deleted file mode 100644
index 0d396c4b67b..00000000000
--- a/TAO/performance-tests/AMI_Latency/client.cpp
+++ /dev/null
@@ -1,185 +0,0 @@
-// $Id$
-
-#include "Roundtrip_Handler.h"
-#include "tao/debug.h"
-#include "ace/Get_Opt.h"
-#include "ace/High_Res_Timer.h"
-#include "ace/Sched_Params.h"
-#include "ace/Stats.h"
-
-ACE_RCSID(AMI_Latency, client, "$Id$")
-
-const char *ior = "file://test.ior";
-
-ACE_hrtime_t throughput_base;
-
-int niterations = 1000;
-
-int
-parse_args (int argc, char *argv[])
-{
- ACE_Get_Opt get_opts (argc, argv, "k:i:");
- int c;
-
- while ((c = get_opts ()) != -1)
- switch (c)
- {
- case 'k':
- ior = get_opts.opt_arg ();
- break;
-
- case 'i':
- niterations = ACE_OS::atoi (get_opts.opt_arg ());
- break;
-
- case '?':
- default:
- ACE_ERROR_RETURN ((LM_ERROR,
- "usage: %s "
- "-k <ior> "
- "-i <niterations> "
- "-p <period (msecs)> "
- "-b <burst size> "
- "\n",
- argv [0]),
- -1);
- }
- // Indicates sucessful parsing of the command line
- return 0;
-}
-
-int
-main (int argc, char *argv[])
-{
- int priority =
- (ACE_Sched_Params::priority_min (ACE_SCHED_FIFO)
- + ACE_Sched_Params::priority_max (ACE_SCHED_FIFO)) / 2;
- // Enable FIFO scheduling, e.g., RT scheduling class on Solaris.
-
- if (ACE_OS::sched_params (ACE_Sched_Params (ACE_SCHED_FIFO,
- priority,
- ACE_SCOPE_PROCESS)) != 0)
- {
- if (ACE_OS::last_error () == EPERM)
- {
- ACE_DEBUG ((LM_DEBUG,
- "server (%P|%t): user is not superuser, "
- "test runs in time-shared class\n"));
- }
- else
- ACE_ERROR ((LM_ERROR,
- "server (%P|%t): sched_params failed\n"));
- }
-
- ACE_TRY_NEW_ENV
- {
- CORBA::ORB_var orb =
- CORBA::ORB_init (argc, argv, "" ACE_ENV_ARG_PARAMETER);
- ACE_TRY_CHECK;
-
- CORBA::Object_var poa_object =
- orb->resolve_initial_references("RootPOA" ACE_ENV_ARG_PARAMETER);
- ACE_TRY_CHECK;
-
- if (CORBA::is_nil (poa_object.in ()))
- ACE_ERROR_RETURN ((LM_ERROR,
- " (%P|%t) Unable to initialize the POA.\n"),
- 1);
-
- PortableServer::POA_var root_poa =
- PortableServer::POA::_narrow (poa_object.in () ACE_ENV_ARG_PARAMETER);
- ACE_TRY_CHECK;
-
- PortableServer::POAManager_var poa_manager =
- root_poa->the_POAManager (ACE_ENV_SINGLE_ARG_PARAMETER);
- ACE_TRY_CHECK;
-
- if (parse_args (argc, argv) != 0)
- return 1;
-
- CORBA::Object_var object =
- orb->string_to_object (ior ACE_ENV_ARG_PARAMETER);
- ACE_TRY_CHECK;
-
- Test::Roundtrip_var roundtrip =
- Test::Roundtrip::_narrow (object.in () ACE_ENV_ARG_PARAMETER);
- ACE_TRY_CHECK;
-
- if (CORBA::is_nil (roundtrip.in ()))
- ACE_ERROR_RETURN ((LM_ERROR,
- "Nil Test::Roundtrip reference <%s>\n",
- ior),
- 1);
-
- for (int j = 0; j < 100; ++j)
- {
- ACE_hrtime_t start = 0;
- (void) roundtrip->test_method (start ACE_ENV_ARG_PARAMETER);
- ACE_TRY_CHECK;
- }
-
- Roundtrip_Handler *roundtrip_handler_impl;
- ACE_NEW_RETURN (roundtrip_handler_impl,
- Roundtrip_Handler (niterations),
- 1);
- PortableServer::ServantBase_var owner_transfer(roundtrip_handler_impl);
-
- Test::AMI_RoundtripHandler_var roundtrip_handler =
- roundtrip_handler_impl->_this (ACE_ENV_SINGLE_ARG_PARAMETER);
- ACE_TRY_CHECK;
-
- poa_manager->activate (ACE_ENV_SINGLE_ARG_PARAMETER);
- ACE_TRY_CHECK;
-
- ACE_hrtime_t test_start = ACE_OS::gethrtime ();
-
- for (int i = 0; i != niterations; ++i)
- {
- // Invoke asynchronous operation....
- roundtrip->sendc_test_method (roundtrip_handler.in (),
- ACE_OS::gethrtime ()
- ACE_ENV_ARG_PARAMETER);
- if (orb->work_pending (ACE_ENV_SINGLE_ARG_PARAMETER))
- orb->perform_work (ACE_ENV_SINGLE_ARG_PARAMETER);
-
- ACE_TRY_CHECK;
- }
-
- ACE_Time_Value tv (0, 2000);
-
- while (roundtrip_handler_impl->pending_callbacks ())
- {
- orb->perform_work (tv ACE_ENV_ARG_PARAMETER);
- ACE_TRY_CHECK;
- }
-
- ACE_hrtime_t test_end = ACE_OS::gethrtime ();
-
- ACE_DEBUG ((LM_DEBUG, "High resolution timer calibration...."));
- ACE_UINT32 gsf = ACE_High_Res_Timer::global_scale_factor ();
- ACE_DEBUG ((LM_DEBUG, "done\n"));
-
- roundtrip_handler_impl->dump_results (gsf);
-
- ACE_Throughput_Stats::dump_throughput ("Total", gsf,
- test_end - test_start,
- niterations);
-
- roundtrip->shutdown (ACE_ENV_SINGLE_ARG_PARAMETER);
- ACE_TRY_CHECK;
-
- root_poa->destroy (1, 1 ACE_ENV_ARG_PARAMETER);
- ACE_TRY_CHECK;
-
- orb->destroy (ACE_ENV_SINGLE_ARG_PARAMETER);
- ACE_TRY_CHECK;
- }
- ACE_CATCHANY
- {
- ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION, "Exception caught: ");
- return 1;
- }
- ACE_ENDTRY;
-
- return 0;
-}
diff --git a/TAO/performance-tests/AMI_Latency/server.cpp b/TAO/performance-tests/AMI_Latency/server.cpp
deleted file mode 100644
index 74498dc13e0..00000000000
--- a/TAO/performance-tests/AMI_Latency/server.cpp
+++ /dev/null
@@ -1,155 +0,0 @@
-// $Id$
-
-#include "Roundtrip.h"
-#include "Server_Task.h"
-#include "ace/Get_Opt.h"
-#include "ace/Sched_Params.h"
-
-#include "tao/Strategies/advanced_resource.h"
-
-ACE_RCSID(AMI_Latency, server, "$Id$")
-
-const char *ior_output_file = "test.ior";
-int nthreads = 4;
-
-int
-parse_args (int argc, char *argv[])
-{
- ACE_Get_Opt get_opts (argc, argv, "o:n:");
- int c;
-
- while ((c = get_opts ()) != -1)
- switch (c)
- {
- case 'o':
- ior_output_file = get_opts.opt_arg ();
- break;
-
- case 'n':
- nthreads = ACE_OS::atoi (get_opts.opt_arg ());
- break;
-
- case '?':
- default:
- ACE_ERROR_RETURN ((LM_ERROR,
- "usage: %s "
- "-o <iorfile> "
- "-n <nthreads> "
- "\n",
- argv [0]),
- -1);
- }
- // Indicates sucessful parsing of the command line
- return 0;
-}
-
-int
-main (int argc, char *argv[])
-{
- int priority =
- (ACE_Sched_Params::priority_min (ACE_SCHED_FIFO)
- + ACE_Sched_Params::priority_max (ACE_SCHED_FIFO)) / 2;
-
- priority = ACE_Sched_Params::next_priority (ACE_SCHED_FIFO,
- priority);
-
- priority = ACE_Sched_Params::next_priority (ACE_SCHED_FIFO,
- priority);
-
- // Enable FIFO scheduling, e.g., RT scheduling class on Solaris.
- if (ACE_OS::sched_params (ACE_Sched_Params (ACE_SCHED_FIFO,
- priority,
- ACE_SCOPE_PROCESS)) != 0)
- {
- if (ACE_OS::last_error () == EPERM)
- {
- ACE_DEBUG ((LM_DEBUG,
- "server (%P|%t): user is not superuser, "
- "test runs in time-shared class\n"));
- }
- else
- ACE_ERROR ((LM_ERROR,
- "server (%P|%t): sched_params failed\n"));
- }
-
- ACE_TRY_NEW_ENV
- {
- CORBA::ORB_var orb =
- CORBA::ORB_init (argc, argv, "" ACE_ENV_ARG_PARAMETER);
- ACE_TRY_CHECK;
-
- CORBA::Object_var poa_object =
- orb->resolve_initial_references("RootPOA" ACE_ENV_ARG_PARAMETER);
- ACE_TRY_CHECK;
-
- if (CORBA::is_nil (poa_object.in ()))
- ACE_ERROR_RETURN ((LM_ERROR,
- " (%P|%t) Unable to initialize the POA.\n"),
- 1);
-
- PortableServer::POA_var root_poa =
- PortableServer::POA::_narrow (poa_object.in () ACE_ENV_ARG_PARAMETER);
- ACE_TRY_CHECK;
-
- PortableServer::POAManager_var poa_manager =
- root_poa->the_POAManager (ACE_ENV_SINGLE_ARG_PARAMETER);
- ACE_TRY_CHECK;
-
- if (parse_args (argc, argv) != 0)
- return 1;
-
- Roundtrip *roundtrip_impl;
- ACE_NEW_RETURN (roundtrip_impl,
- Roundtrip (orb.in ()),
- 1);
- PortableServer::ServantBase_var owner_transfer(roundtrip_impl);
-
- Test::Roundtrip_var roundtrip =
- roundtrip_impl->_this (ACE_ENV_SINGLE_ARG_PARAMETER);
- ACE_TRY_CHECK;
-
- CORBA::String_var ior =
- orb->object_to_string (roundtrip.in () ACE_ENV_ARG_PARAMETER);
- ACE_TRY_CHECK;
-
- // If the ior_output_file exists, output the ior to it
- FILE *output_file= ACE_OS::fopen (ior_output_file, "w");
- if (output_file == 0)
- ACE_ERROR_RETURN ((LM_ERROR,
- "Cannot open output file for writing IOR: %s",
- ior_output_file),
- 1);
- ACE_OS::fprintf (output_file, "%s", ior.in ());
- ACE_OS::fclose (output_file);
-
- poa_manager->activate (ACE_ENV_SINGLE_ARG_PARAMETER);
- ACE_TRY_CHECK;
-
- Server_Task server_task (orb.in ());
- if (server_task.activate (THR_NEW_LWP | THR_JOINABLE,
- nthreads) != 0)
- ACE_ERROR_RETURN ((LM_ERROR,
- "Cannot activate server threads\n"),
- 1);
-
- server_task.thr_mgr ()->wait ();
-
- ACE_DEBUG ((LM_DEBUG, "event loop finished\n"));
-
- ACE_DEBUG ((LM_DEBUG, "(%P|%t) server - event loop finished\n"));
-
- root_poa->destroy (1, 1 ACE_ENV_ARG_PARAMETER);
- ACE_TRY_CHECK;
-
- orb->destroy (ACE_ENV_SINGLE_ARG_PARAMETER);
- ACE_TRY_CHECK;
- }
- ACE_CATCHANY
- {
- ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION, "Exception caught:");
- return 1;
- }
- ACE_ENDTRY;
-
- return 0;
-}
diff --git a/TAO/performance-tests/DII_Latency/Roundtrip.cpp b/TAO/performance-tests/DII_Latency/Roundtrip.cpp
deleted file mode 100644
index df15cd65d8a..00000000000
--- a/TAO/performance-tests/DII_Latency/Roundtrip.cpp
+++ /dev/null
@@ -1,26 +0,0 @@
-//
-// $Id$
-//
-#include "Roundtrip.h"
-
-ACE_RCSID(DII_Latency, Roundtrip, "$Id$")
-
-Roundtrip::Roundtrip (CORBA::ORB_ptr orb)
- : orb_ (CORBA::ORB::_duplicate (orb))
-{
-}
-
-Test::Timestamp
-Roundtrip::test_method (Test::Timestamp send_time
- ACE_ENV_ARG_DECL_NOT_USED)
- ACE_THROW_SPEC ((CORBA::SystemException))
-{
- return send_time;
-}
-
-void
-Roundtrip::shutdown (ACE_ENV_SINGLE_ARG_DECL)
- ACE_THROW_SPEC ((CORBA::SystemException))
-{
- this->orb_->shutdown (0 ACE_ENV_ARG_PARAMETER);
-}
diff --git a/TAO/performance-tests/DII_Latency/Roundtrip.h b/TAO/performance-tests/DII_Latency/Roundtrip.h
deleted file mode 100644
index 6474b130a24..00000000000
--- a/TAO/performance-tests/DII_Latency/Roundtrip.h
+++ /dev/null
@@ -1,46 +0,0 @@
-//
-// $Id$
-//
-
-#ifndef ROUNDTRIP_H
-#define ROUNDTRIP_H
-#include /**/ "ace/pre.h"
-
-#include "TestS.h"
-
-#if defined (_MSC_VER)
-# if (_MSC_VER >= 1200)
-# pragma warning(push)
-# endif /* _MSC_VER >= 1200 */
-# pragma warning (disable:4250)
-#endif /* _MSC_VER */
-
-/// Implement the Test::Roundtrip interface
-class Roundtrip
- : public virtual POA_Test::Roundtrip
- , public virtual PortableServer::RefCountServantBase
-{
-public:
- /// Constructor
- Roundtrip (CORBA::ORB_ptr orb);
-
- // = The skeleton methods
- virtual Test::Timestamp test_method (Test::Timestamp send_time
- ACE_ENV_ARG_DECL)
- ACE_THROW_SPEC ((CORBA::SystemException));
-
- virtual void shutdown (ACE_ENV_SINGLE_ARG_DECL)
- ACE_THROW_SPEC ((CORBA::SystemException));
-
-private:
- /// Use an ORB reference to conver strings to objects and shutdown
- /// the application.
- CORBA::ORB_var orb_;
-};
-
-#if defined(_MSC_VER) && (_MSC_VER >= 1200)
-# pragma warning(pop)
-#endif /* _MSC_VER */
-
-#include /**/ "ace/post.h"
-#endif /* ROUNDTRIP_H */
diff --git a/TAO/performance-tests/DII_Latency/client.cpp b/TAO/performance-tests/DII_Latency/client.cpp
deleted file mode 100644
index 57935526269..00000000000
--- a/TAO/performance-tests/DII_Latency/client.cpp
+++ /dev/null
@@ -1,178 +0,0 @@
-// $Id$
-
-#include "ace/Get_Opt.h"
-#include "ace/High_Res_Timer.h"
-#include "ace/Sched_Params.h"
-#include "ace/Stats.h"
-#include "ace/Sample_History.h"
-
-#include "tao/Strategies/advanced_resource.h"
-#include "tao/DynamicInterface/Request.h"
-
-ACE_RCSID(DII_Latency, client, "$Id$")
-
-const char *ior = "file://test.ior";
-int niterations = 100;
-int do_dump_history = 0;
-int do_shutdown = 1;
-
-int
-parse_args (int argc, char *argv[])
-{
- ACE_Get_Opt get_opts (argc, argv, "hxk:i:");
- int c;
-
- while ((c = get_opts ()) != -1)
- switch (c)
- {
- case 'h':
- do_dump_history = 1;
- break;
-
- case 'x':
- do_shutdown = 0;
- break;
-
- case 'k':
- ior = get_opts.opt_arg ();
- break;
-
- case 'i':
- niterations = ACE_OS::atoi (get_opts.opt_arg ());
- break;
-
- case '?':
- default:
- ACE_ERROR_RETURN ((LM_ERROR,
- "usage: %s "
- "-k <ior> "
- "-i <niterations> "
- "-x (disable shutdown) "
- "\n",
- argv [0]),
- -1);
- }
- // Indicates sucessful parsing of the command line
- return 0;
-}
-
-int
-main (int argc, char *argv[])
-{
- int priority =
- (ACE_Sched_Params::priority_min (ACE_SCHED_FIFO)
- + ACE_Sched_Params::priority_max (ACE_SCHED_FIFO)) / 2;
- // Enable FIFO scheduling, e.g., RT scheduling class on Solaris.
-
- if (ACE_OS::sched_params (ACE_Sched_Params (ACE_SCHED_FIFO,
- priority,
- ACE_SCOPE_PROCESS)) != 0)
- {
- if (ACE_OS::last_error () == EPERM)
- {
- ACE_DEBUG ((LM_DEBUG,
- "client (%P|%t): user is not superuser, "
- "test runs in time-shared class\n"));
- }
- else
- ACE_ERROR ((LM_ERROR,
- "client (%P|%t): sched_params failed\n"));
- }
-
- ACE_TRY_NEW_ENV
- {
- CORBA::ORB_var orb =
- CORBA::ORB_init (argc, argv, "" ACE_ENV_ARG_PARAMETER);
- ACE_TRY_CHECK;
-
- if (parse_args (argc, argv) != 0)
- return 1;
-
- CORBA::Object_var object =
- orb->string_to_object (ior ACE_ENV_ARG_PARAMETER);
- ACE_TRY_CHECK;
-
- if (CORBA::is_nil (object.in ()))
- {
- ACE_ERROR_RETURN ((LM_ERROR,
- "Nil CORBA::Object reference <%s>\n",
- ior),
- 1);
- }
-
- for (int j = 0; j < 100; ++j)
- {
- CORBA::Request_var request =
- object->_request ("test_method" ACE_ENV_ARG_PARAMETER);
- ACE_TRY_CHECK;
-
- CORBA::ULongLong dummy = 0;
- request->add_in_arg("send_time") <<= dummy;
-
- request->set_return_type (CORBA::_tc_ulonglong);
- request->invoke (ACE_ENV_SINGLE_ARG_PARAMETER);
- ACE_TRY_CHECK;
- }
-
- ACE_Sample_History history (niterations);
-
- ACE_hrtime_t test_start = ACE_OS::gethrtime ();
- for (int i = 0; i < niterations; ++i)
- {
- CORBA::ULongLong start = ACE_OS::gethrtime ();
-
- CORBA::Request_var request =
- object->_request ("test_method" ACE_ENV_ARG_PARAMETER);
- ACE_TRY_CHECK;
-
- request->add_in_arg("send_time") <<= start;
-
- request->set_return_type (CORBA::_tc_ulonglong);
- request->invoke (ACE_ENV_SINGLE_ARG_PARAMETER);
- ACE_TRY_CHECK;
-
- ACE_hrtime_t now = ACE_OS::gethrtime ();
- history.sample (now - start);
- }
-
- ACE_hrtime_t test_end = ACE_OS::gethrtime ();
-
- ACE_DEBUG ((LM_DEBUG, "test finished\n"));
-
- ACE_DEBUG ((LM_DEBUG, "High resolution timer calibration...."));
- ACE_UINT32 gsf = ACE_High_Res_Timer::global_scale_factor ();
- ACE_DEBUG ((LM_DEBUG, "done\n"));
-
- if (do_dump_history)
- {
- history.dump_samples ("HISTORY", gsf);
- }
-
- ACE_Basic_Stats stats;
- history.collect_basic_stats (stats);
- stats.dump_results ("Total", gsf);
-
- ACE_Throughput_Stats::dump_throughput ("Total", gsf,
- test_end - test_start,
- stats.samples_count ());
-
- if (do_shutdown)
- {
- CORBA::Request_var request =
- object->_request ("shutdown" ACE_ENV_ARG_PARAMETER);
- ACE_TRY_CHECK;
-
- request->invoke (ACE_ENV_SINGLE_ARG_PARAMETER);
- ACE_TRY_CHECK;
-
- }
- }
- ACE_CATCHANY
- {
- ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION, "Exception caught:");
- return 1;
- }
- ACE_ENDTRY;
-
- return 0;
-}
diff --git a/TAO/performance-tests/DII_Latency/server.cpp b/TAO/performance-tests/DII_Latency/server.cpp
deleted file mode 100644
index e96f0ff595a..00000000000
--- a/TAO/performance-tests/DII_Latency/server.cpp
+++ /dev/null
@@ -1,136 +0,0 @@
-// $Id$
-
-#include "Roundtrip.h"
-#include "ace/Get_Opt.h"
-#include "ace/Sched_Params.h"
-
-#include "tao/Strategies/advanced_resource.h"
-
-ACE_RCSID(Single_Threaded_Latency, server, "$Id$")
-
-const char *ior_output_file = "test.ior";
-
-int
-parse_args (int argc, char *argv[])
-{
- ACE_Get_Opt get_opts (argc, argv, "o:");
- int c;
-
- while ((c = get_opts ()) != -1)
- switch (c)
- {
- case 'o':
- ior_output_file = get_opts.opt_arg ();
- break;
-
- case '?':
- default:
- ACE_ERROR_RETURN ((LM_ERROR,
- "usage: %s "
- "-o <iorfile>"
- "\n",
- argv [0]),
- -1);
- }
- // Indicates sucessful parsing of the command line
- return 0;
-}
-
-int
-main (int argc, char *argv[])
-{
- int priority =
- (ACE_Sched_Params::priority_min (ACE_SCHED_FIFO)
- + ACE_Sched_Params::priority_max (ACE_SCHED_FIFO)) / 2;
- priority = ACE_Sched_Params::next_priority (ACE_SCHED_FIFO,
- priority);
- // Enable FIFO scheduling, e.g., RT scheduling class on Solaris.
-
- if (ACE_OS::sched_params (ACE_Sched_Params (ACE_SCHED_FIFO,
- priority,
- ACE_SCOPE_PROCESS)) != 0)
- {
- if (ACE_OS::last_error () == EPERM)
- {
- ACE_DEBUG ((LM_DEBUG,
- "server (%P|%t): user is not superuser, "
- "test runs in time-shared class\n"));
- }
- else
- ACE_ERROR ((LM_ERROR,
- "server (%P|%t): sched_params failed\n"));
- }
-
- ACE_TRY_NEW_ENV
- {
- CORBA::ORB_var orb =
- CORBA::ORB_init (argc, argv, "" ACE_ENV_ARG_PARAMETER);
- ACE_TRY_CHECK;
-
- CORBA::Object_var poa_object =
- orb->resolve_initial_references("RootPOA" ACE_ENV_ARG_PARAMETER);
- ACE_TRY_CHECK;
-
- if (CORBA::is_nil (poa_object.in ()))
- ACE_ERROR_RETURN ((LM_ERROR,
- " (%P|%t) Unable to initialize the POA.\n"),
- 1);
-
- PortableServer::POA_var root_poa =
- PortableServer::POA::_narrow (poa_object.in () ACE_ENV_ARG_PARAMETER);
- ACE_TRY_CHECK;
-
- PortableServer::POAManager_var poa_manager =
- root_poa->the_POAManager (ACE_ENV_SINGLE_ARG_PARAMETER);
- ACE_TRY_CHECK;
-
- if (parse_args (argc, argv) != 0)
- return 1;
-
- Roundtrip *roundtrip_impl;
- ACE_NEW_RETURN (roundtrip_impl,
- Roundtrip (orb.in ()),
- 1);
- PortableServer::ServantBase_var owner_transfer(roundtrip_impl);
-
- Test::Roundtrip_var roundtrip =
- roundtrip_impl->_this (ACE_ENV_SINGLE_ARG_PARAMETER);
- ACE_TRY_CHECK;
-
- CORBA::String_var ior =
- orb->object_to_string (roundtrip.in () ACE_ENV_ARG_PARAMETER);
- ACE_TRY_CHECK;
-
- // If the ior_output_file exists, output the ior to it
- FILE *output_file= ACE_OS::fopen (ior_output_file, "w");
- if (output_file == 0)
- ACE_ERROR_RETURN ((LM_ERROR,
- "Cannot open output file for writing IOR: %s",
- ior_output_file),
- 1);
- ACE_OS::fprintf (output_file, "%s", ior.in ());
- ACE_OS::fclose (output_file);
-
- poa_manager->activate (ACE_ENV_SINGLE_ARG_PARAMETER);
- ACE_TRY_CHECK;
-
- orb->run (ACE_ENV_SINGLE_ARG_PARAMETER);
- ACE_TRY_CHECK;
-
- ACE_DEBUG ((LM_DEBUG, "(%P|%t) server - event loop finished\n"));
-
- root_poa->destroy (1, 1 ACE_ENV_ARG_PARAMETER);
- ACE_TRY_CHECK;
-
- orb->destroy (ACE_ENV_SINGLE_ARG_PARAMETER);
- ACE_TRY_CHECK;
- }
- ACE_CATCHANY
- {
- ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION, "Exception caught:");
- return 1;
- }
- ACE_ENDTRY;
-
- return 0;
-}
diff --git a/TAO/performance-tests/DSI_Latency/Roundtrip.cpp b/TAO/performance-tests/DSI_Latency/Roundtrip.cpp
deleted file mode 100644
index 6de5cfe047a..00000000000
--- a/TAO/performance-tests/DSI_Latency/Roundtrip.cpp
+++ /dev/null
@@ -1,97 +0,0 @@
-//
-// $Id$
-//
-#include "Roundtrip.h"
-#include "tao/DynamicInterface/Server_Request.h"
-
-ACE_RCSID(Single_Threaded_Latency, Roundtrip, "$Id$")
-
-Roundtrip::Roundtrip (CORBA::ORB_ptr orb)
- : orb_ (CORBA::ORB::_duplicate (orb))
-{
-}
-
-void
-Roundtrip::invoke (CORBA::ServerRequest_ptr request
- ACE_ENV_ARG_DECL)
-{
- if (ACE_OS::strcmp ("shutdown", request->operation ()) == 0)
- {
- this->orb_->shutdown (0 ACE_ENV_ARG_PARAMETER);
- ACE_CHECK;
-
- return;
- }
-
- else if (ACE_OS::strcmp ("_is_a", request->operation ()) == 0)
- {
- CORBA::NVList_ptr list;
- this->orb_->create_list (0, list ACE_ENV_ARG_PARAMETER);
- ACE_CHECK;
-
- CORBA::Any type_id (CORBA::_tc_string);
- list->add_value ("type_id", type_id, CORBA::ARG_IN
- ACE_ENV_ARG_PARAMETER);
- ACE_CHECK;
-
- request->arguments (list ACE_ENV_ARG_PARAMETER);
- ACE_CHECK;
-
- CORBA::NamedValue_ptr nv = list->item (0 ACE_ENV_ARG_PARAMETER);
- ACE_CHECK;
-
- const char *arg;
- *(nv->value ()) >>= arg;
-
- CORBA::Boolean type_matches = 0;
- if (ACE_OS::strcmp (arg, "IDL:Test/Roundtrip:1.0") == 0
- || ACE_OS::strcmp (arg, "IDL:omg.org/CORBA/Object:1.0") == 0
- || ACE_OS::strcmp (arg, "") == 0)
- type_matches = 1;
-
- CORBA::Any result;
- result <<= CORBA::Any::from_boolean (type_matches);
-
- request->set_result (result ACE_ENV_ARG_PARAMETER);
- ACE_CHECK;
-
- return;
- }
-
- else if (ACE_OS::strcmp ("test_method", request->operation ()) == 0)
- {
- CORBA::NVList_ptr list;
- this->orb_->create_list (0, list ACE_ENV_ARG_PARAMETER);
- ACE_CHECK;
-
- CORBA::Any send_time (CORBA::_tc_ulonglong);
- list->add_value ("send_time", send_time, CORBA::ARG_IN
- ACE_ENV_ARG_PARAMETER);
- ACE_CHECK;
-
- request->arguments (list ACE_ENV_ARG_PARAMETER);
- ACE_CHECK;
-
- CORBA::NamedValue_ptr nv = list->item (0 ACE_ENV_ARG_PARAMETER);
- ACE_CHECK;
-
- request->set_result (*(nv->value ()) ACE_ENV_ARG_PARAMETER);
- ACE_CHECK;
-
- return;
- }
-
- CORBA::Any bad_operation;
- CORBA::BAD_OPERATION exception;
- bad_operation <<= exception;
- request->set_exception (bad_operation ACE_ENV_ARG_PARAMETER);
- ACE_CHECK;
-}
-
-CORBA::RepositoryId
-Roundtrip::_primary_interface (const PortableServer::ObjectId &,
- PortableServer::POA_ptr
- ACE_ENV_ARG_DECL_NOT_USED)
-{
- return CORBA::string_dup ("IDL:Test/Roundtrip:1.0");
-}
diff --git a/TAO/performance-tests/DSI_Latency/Roundtrip.h b/TAO/performance-tests/DSI_Latency/Roundtrip.h
deleted file mode 100644
index b57cedc6f2d..00000000000
--- a/TAO/performance-tests/DSI_Latency/Roundtrip.h
+++ /dev/null
@@ -1,48 +0,0 @@
-//
-// $Id$
-//
-
-#ifndef ROUNDTRIP_H
-#define ROUNDTRIP_H
-#include /**/ "ace/pre.h"
-
-#include "tao/DynamicInterface/Dynamic_Implementation.h"
-#include "tao/PortableServer/PortableServer.h"
-#include "tao/corba.h"
-
-#if defined (_MSC_VER)
-# if (_MSC_VER >= 1200)
-# pragma warning(push)
-# endif /* _MSC_VER >= 1200 */
-# pragma warning (disable:4250)
-#endif /* _MSC_VER */
-
-/// Implement the Test::Roundtrip interface
-class Roundtrip
- : public virtual PortableServer::DynamicImplementation
- , public virtual PortableServer::RefCountServantBase
-{
-public:
- /// Constructor
- Roundtrip (CORBA::ORB_ptr orb);
-
- // = The DSI methods
- virtual void invoke (CORBA::ServerRequest_ptr request
- ACE_ENV_ARG_DECL);
- virtual CORBA::RepositoryId _primary_interface (
- const PortableServer::ObjectId &oid,
- PortableServer::POA_ptr poa
- ACE_ENV_ARG_DECL);
-
-private:
- /// Use an ORB reference to conver strings to objects and shutdown
- /// the application.
- CORBA::ORB_var orb_;
-};
-
-#if defined(_MSC_VER) && (_MSC_VER >= 1200)
-# pragma warning(pop)
-#endif /* _MSC_VER */
-
-#include /**/ "ace/post.h"
-#endif /* ROUNDTRIP_H */
diff --git a/TAO/performance-tests/DSI_Latency/client.cpp b/TAO/performance-tests/DSI_Latency/client.cpp
deleted file mode 100644
index 2a264e91b43..00000000000
--- a/TAO/performance-tests/DSI_Latency/client.cpp
+++ /dev/null
@@ -1,163 +0,0 @@
-// $Id$
-
-#include "TestC.h"
-#include "ace/Get_Opt.h"
-#include "ace/High_Res_Timer.h"
-#include "ace/Sched_Params.h"
-#include "ace/Stats.h"
-#include "ace/Sample_History.h"
-
-#include "tao/Strategies/advanced_resource.h"
-
-ACE_RCSID(DSI_Latency, client, "$Id$")
-
-const char *ior = "file://test.ior";
-int niterations = 100;
-int do_dump_history = 0;
-int do_shutdown = 1;
-
-int
-parse_args (int argc, char *argv[])
-{
- ACE_Get_Opt get_opts (argc, argv, "hxk:i:");
- int c;
-
- while ((c = get_opts ()) != -1)
- switch (c)
- {
- case 'h':
- do_dump_history = 1;
- break;
-
- case 'x':
- do_shutdown = 0;
- break;
-
- case 'k':
- ior = get_opts.opt_arg ();
- break;
-
- case 'i':
- niterations = ACE_OS::atoi (get_opts.opt_arg ());
- break;
-
- case '?':
- default:
- ACE_ERROR_RETURN ((LM_ERROR,
- "usage: %s "
- "-k <ior> "
- "-i <niterations> "
- "-x (disable shutdown) "
- "\n",
- argv [0]),
- -1);
- }
- // Indicates sucessful parsing of the command line
- return 0;
-}
-
-int
-main (int argc, char *argv[])
-{
- int priority =
- (ACE_Sched_Params::priority_min (ACE_SCHED_FIFO)
- + ACE_Sched_Params::priority_max (ACE_SCHED_FIFO)) / 2;
- // Enable FIFO scheduling, e.g., RT scheduling class on Solaris.
-
- if (ACE_OS::sched_params (ACE_Sched_Params (ACE_SCHED_FIFO,
- priority,
- ACE_SCOPE_PROCESS)) != 0)
- {
- if (ACE_OS::last_error () == EPERM)
- {
- ACE_DEBUG ((LM_DEBUG,
- "client (%P|%t): user is not superuser, "
- "test runs in time-shared class\n"));
- }
- else
- ACE_ERROR ((LM_ERROR,
- "client (%P|%t): sched_params failed\n"));
- }
-
- ACE_TRY_NEW_ENV
- {
- CORBA::ORB_var orb =
- CORBA::ORB_init (argc, argv, "" ACE_ENV_ARG_PARAMETER);
- ACE_TRY_CHECK;
-
- if (parse_args (argc, argv) != 0)
- return 1;
-
- CORBA::Object_var object =
- orb->string_to_object (ior ACE_ENV_ARG_PARAMETER);
- ACE_TRY_CHECK;
-
- Test::Roundtrip_var roundtrip =
- Test::Roundtrip::_narrow (object.in () ACE_ENV_ARG_PARAMETER);
- ACE_TRY_CHECK;
-
- if (CORBA::is_nil (roundtrip.in ()))
- {
- ACE_ERROR_RETURN ((LM_ERROR,
- "Nil Test::Roundtrip reference <%s>\n",
- ior),
- 1);
- }
-
- for (int j = 0; j < 100; ++j)
- {
- ACE_hrtime_t start = 0;
- (void) roundtrip->test_method (start ACE_ENV_ARG_PARAMETER);
- ACE_TRY_CHECK;
- }
-
- ACE_Sample_History history (niterations);
-
- ACE_hrtime_t test_start = ACE_OS::gethrtime ();
- for (int i = 0; i < niterations; ++i)
- {
- ACE_hrtime_t start = ACE_OS::gethrtime ();
-
- (void) roundtrip->test_method (start ACE_ENV_ARG_PARAMETER);
- ACE_TRY_CHECK;
-
- ACE_hrtime_t now = ACE_OS::gethrtime ();
- history.sample (now - start);
- }
-
- ACE_hrtime_t test_end = ACE_OS::gethrtime ();
-
- ACE_DEBUG ((LM_DEBUG, "test finished\n"));
-
- ACE_DEBUG ((LM_DEBUG, "High resolution timer calibration...."));
- ACE_UINT32 gsf = ACE_High_Res_Timer::global_scale_factor ();
- ACE_DEBUG ((LM_DEBUG, "done\n"));
-
- if (do_dump_history)
- {
- history.dump_samples ("HISTORY", gsf);
- }
-
- ACE_Basic_Stats stats;
- history.collect_basic_stats (stats);
- stats.dump_results ("Total", gsf);
-
- ACE_Throughput_Stats::dump_throughput ("Total", gsf,
- test_end - test_start,
- stats.samples_count ());
-
- if (do_shutdown)
- {
- roundtrip->shutdown (ACE_ENV_SINGLE_ARG_PARAMETER);
- ACE_TRY_CHECK;
- }
- }
- ACE_CATCHANY
- {
- ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION, "Exception caught:");
- return 1;
- }
- ACE_ENDTRY;
-
- return 0;
-}
diff --git a/TAO/performance-tests/DSI_Latency/server.cpp b/TAO/performance-tests/DSI_Latency/server.cpp
deleted file mode 100644
index ebc70ade1d7..00000000000
--- a/TAO/performance-tests/DSI_Latency/server.cpp
+++ /dev/null
@@ -1,142 +0,0 @@
-// $Id$
-
-#include "Roundtrip.h"
-#include "ace/Get_Opt.h"
-#include "ace/Sched_Params.h"
-
-#include "tao/Strategies/advanced_resource.h"
-
-ACE_RCSID(DSI_Latency, server, "$Id$")
-
-const char *ior_output_file = "test.ior";
-
-int
-parse_args (int argc, char *argv[])
-{
- ACE_Get_Opt get_opts (argc, argv, "o:");
- int c;
-
- while ((c = get_opts ()) != -1)
- switch (c)
- {
- case 'o':
- ior_output_file = get_opts.opt_arg ();
- break;
-
- case '?':
- default:
- ACE_ERROR_RETURN ((LM_ERROR,
- "usage: %s "
- "-o <iorfile>"
- "\n",
- argv [0]),
- -1);
- }
- // Indicates sucessful parsing of the command line
- return 0;
-}
-
-int
-main (int argc, char *argv[])
-{
- int priority =
- (ACE_Sched_Params::priority_min (ACE_SCHED_FIFO)
- + ACE_Sched_Params::priority_max (ACE_SCHED_FIFO)) / 2;
- priority = ACE_Sched_Params::next_priority (ACE_SCHED_FIFO,
- priority);
- // Enable FIFO scheduling, e.g., RT scheduling class on Solaris.
-
- if (ACE_OS::sched_params (ACE_Sched_Params (ACE_SCHED_FIFO,
- priority,
- ACE_SCOPE_PROCESS)) != 0)
- {
- if (ACE_OS::last_error () == EPERM)
- {
- ACE_DEBUG ((LM_DEBUG,
- "server (%P|%t): user is not superuser, "
- "test runs in time-shared class\n"));
- }
- else
- ACE_ERROR ((LM_ERROR,
- "server (%P|%t): sched_params failed\n"));
- }
-
- ACE_TRY_NEW_ENV
- {
- CORBA::ORB_var orb =
- CORBA::ORB_init (argc, argv, "" ACE_ENV_ARG_PARAMETER);
- ACE_TRY_CHECK;
-
- CORBA::Object_var poa_object =
- orb->resolve_initial_references("RootPOA" ACE_ENV_ARG_PARAMETER);
- ACE_TRY_CHECK;
-
- if (CORBA::is_nil (poa_object.in ()))
- ACE_ERROR_RETURN ((LM_ERROR,
- " (%P|%t) Unable to initialize the POA.\n"),
- 1);
-
- PortableServer::POA_var root_poa =
- PortableServer::POA::_narrow (poa_object.in () ACE_ENV_ARG_PARAMETER);
- ACE_TRY_CHECK;
-
- PortableServer::POAManager_var poa_manager =
- root_poa->the_POAManager (ACE_ENV_SINGLE_ARG_PARAMETER);
- ACE_TRY_CHECK;
-
- if (parse_args (argc, argv) != 0)
- return 1;
-
- Roundtrip *roundtrip_impl;
- ACE_NEW_RETURN (roundtrip_impl,
- Roundtrip (orb.in ()),
- 1);
- PortableServer::ServantBase_var owner_transfer(roundtrip_impl);
-
- PortableServer::ObjectId_var oid =
- root_poa->activate_object (roundtrip_impl
- ACE_ENV_ARG_PARAMETER);
- ACE_TRY_CHECK;
-
- CORBA::Object_var roundtrip =
- root_poa->id_to_reference (oid.in ()
- ACE_ENV_ARG_PARAMETER);
- ACE_TRY_CHECK;
-
- CORBA::String_var ior =
- orb->object_to_string (roundtrip.in () ACE_ENV_ARG_PARAMETER);
- ACE_TRY_CHECK;
-
- // If the ior_output_file exists, output the ior to it
- FILE *output_file= ACE_OS::fopen (ior_output_file, "w");
- if (output_file == 0)
- ACE_ERROR_RETURN ((LM_ERROR,
- "Cannot open output file for writing IOR: %s",
- ior_output_file),
- 1);
- ACE_OS::fprintf (output_file, "%s", ior.in ());
- ACE_OS::fclose (output_file);
-
- poa_manager->activate (ACE_ENV_SINGLE_ARG_PARAMETER);
- ACE_TRY_CHECK;
-
- orb->run (ACE_ENV_SINGLE_ARG_PARAMETER);
- ACE_TRY_CHECK;
-
- ACE_DEBUG ((LM_DEBUG, "(%P|%t) server - event loop finished\n"));
-
- root_poa->destroy (1, 1 ACE_ENV_ARG_PARAMETER);
- ACE_TRY_CHECK;
-
- orb->destroy (ACE_ENV_SINGLE_ARG_PARAMETER);
- ACE_TRY_CHECK;
- }
- ACE_CATCHANY
- {
- ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION, "Exception caught:");
- return 1;
- }
- ACE_ENDTRY;
-
- return 0;
-}
diff --git a/TAO/performance-tests/Deferred_Latency/Roundtrip.cpp b/TAO/performance-tests/Deferred_Latency/Roundtrip.cpp
deleted file mode 100644
index 72f83576b44..00000000000
--- a/TAO/performance-tests/Deferred_Latency/Roundtrip.cpp
+++ /dev/null
@@ -1,26 +0,0 @@
-//
-// $Id$
-//
-#include "Roundtrip.h"
-
-ACE_RCSID(Single_Threaded_Latency, Roundtrip, "$Id$")
-
-Roundtrip::Roundtrip (CORBA::ORB_ptr orb)
- : orb_ (CORBA::ORB::_duplicate (orb))
-{
-}
-
-Test::Timestamp
-Roundtrip::test_method (Test::Timestamp send_time
- ACE_ENV_ARG_DECL_NOT_USED)
- ACE_THROW_SPEC ((CORBA::SystemException))
-{
- return send_time;
-}
-
-void
-Roundtrip::shutdown (ACE_ENV_SINGLE_ARG_DECL)
- ACE_THROW_SPEC ((CORBA::SystemException))
-{
- this->orb_->shutdown (0 ACE_ENV_ARG_PARAMETER);
-}
diff --git a/TAO/performance-tests/Deferred_Latency/Roundtrip.h b/TAO/performance-tests/Deferred_Latency/Roundtrip.h
deleted file mode 100644
index 6474b130a24..00000000000
--- a/TAO/performance-tests/Deferred_Latency/Roundtrip.h
+++ /dev/null
@@ -1,46 +0,0 @@
-//
-// $Id$
-//
-
-#ifndef ROUNDTRIP_H
-#define ROUNDTRIP_H
-#include /**/ "ace/pre.h"
-
-#include "TestS.h"
-
-#if defined (_MSC_VER)
-# if (_MSC_VER >= 1200)
-# pragma warning(push)
-# endif /* _MSC_VER >= 1200 */
-# pragma warning (disable:4250)
-#endif /* _MSC_VER */
-
-/// Implement the Test::Roundtrip interface
-class Roundtrip
- : public virtual POA_Test::Roundtrip
- , public virtual PortableServer::RefCountServantBase
-{
-public:
- /// Constructor
- Roundtrip (CORBA::ORB_ptr orb);
-
- // = The skeleton methods
- virtual Test::Timestamp test_method (Test::Timestamp send_time
- ACE_ENV_ARG_DECL)
- ACE_THROW_SPEC ((CORBA::SystemException));
-
- virtual void shutdown (ACE_ENV_SINGLE_ARG_DECL)
- ACE_THROW_SPEC ((CORBA::SystemException));
-
-private:
- /// Use an ORB reference to conver strings to objects and shutdown
- /// the application.
- CORBA::ORB_var orb_;
-};
-
-#if defined(_MSC_VER) && (_MSC_VER >= 1200)
-# pragma warning(pop)
-#endif /* _MSC_VER */
-
-#include /**/ "ace/post.h"
-#endif /* ROUNDTRIP_H */
diff --git a/TAO/performance-tests/Deferred_Latency/client.cpp b/TAO/performance-tests/Deferred_Latency/client.cpp
deleted file mode 100644
index 8aa94d94172..00000000000
--- a/TAO/performance-tests/Deferred_Latency/client.cpp
+++ /dev/null
@@ -1,203 +0,0 @@
-// $Id$
-
-#include "TestC.h"
-
-#include "tao/DynamicInterface/Request.h"
-
-#include "tao/Strategies/advanced_resource.h"
-
-#include "ace/Get_Opt.h"
-#include "ace/Sched_Params.h"
-#include "ace/High_Res_Timer.h"
-#include "ace/Sched_Params.h"
-#include "ace/Stats.h"
-#include "ace/Sample_History.h"
-
-ACE_RCSID(Deferred_Latency, client, "$Id$")
-
-const char *ior = "file://test.ior";
-int niterations = 1000;
-int burst = 10;
-int do_shutdown = 1;
-int do_dump_history = 0;
-
-int
-parse_args (int argc, char *argv[])
-{
- ACE_Get_Opt get_opts (argc, argv, "hxk:i:b:");
- int c;
-
- while ((c = get_opts ()) != -1)
- switch (c)
- {
- case 'h':
- do_dump_history = 1;
- break;
-
- case 'x':
- do_shutdown = 0;
- break;
-
- case 'k':
- ior = get_opts.opt_arg ();
- break;
-
- case 'i':
- niterations = ACE_OS::atoi (get_opts.opt_arg ());
- break;
-
- case 'b':
- burst = ACE_OS::atoi (get_opts.opt_arg ());
- break;
-
- case '?':
- default:
- ACE_ERROR_RETURN ((LM_ERROR,
- "usage: %s "
- "-k <ior> "
- "-i <niterations> "
- "-b <burst> "
- "-x (disable shutdown) "
- "-h (dump history) "
- "\n",
- argv [0]),
- -1);
- }
- // Indicates sucessful parsing of the command line
- return 0;
-}
-
-int
-main (int argc, char *argv[])
-{
- int priority =
- (ACE_Sched_Params::priority_min (ACE_SCHED_FIFO)
- + ACE_Sched_Params::priority_max (ACE_SCHED_FIFO)) / 2;
- // Enable FIFO scheduling, e.g., RT scheduling class on Solaris.
-
- if (ACE_OS::sched_params (ACE_Sched_Params (ACE_SCHED_FIFO,
- priority,
- ACE_SCOPE_PROCESS)) != 0)
- {
- if (ACE_OS::last_error () == EPERM)
- {
- ACE_DEBUG ((LM_DEBUG,
- "client (%P|%t): user is not superuser, "
- "test runs in time-shared class\n"));
- }
- else
- ACE_ERROR ((LM_ERROR,
- "client (%P|%t): sched_params failed\n"));
- }
-
- ACE_TRY_NEW_ENV
- {
- CORBA::ORB_var orb =
- CORBA::ORB_init (argc, argv, "" ACE_ENV_ARG_PARAMETER);
- ACE_TRY_CHECK;
-
- if (parse_args (argc, argv) != 0)
- return 1;
-
- CORBA::Object_var object =
- orb->string_to_object (ior ACE_ENV_ARG_PARAMETER);
- ACE_TRY_CHECK;
-
- Test::Roundtrip_var roundtrip =
- Test::Roundtrip::_narrow (object.in () ACE_ENV_ARG_PARAMETER);
- ACE_TRY_CHECK;
-
- if (CORBA::is_nil (roundtrip.in ()))
- {
- ACE_ERROR_RETURN ((LM_ERROR,
- "Nil Test::Roundtrip reference <%s>\n",
- ior),
- 1);
- }
-
- for (int j = 0; j < 100; ++j)
- {
- ACE_hrtime_t start = 0;
- (void) roundtrip->test_method (start ACE_ENV_ARG_PARAMETER);
- ACE_TRY_CHECK;
- }
-
- ACE_Sample_History history (niterations);
-
- ACE_hrtime_t test_start = ACE_OS::gethrtime ();
-
- CORBA::Request_var *request;
- ACE_NEW_RETURN (request, CORBA::Request_var[burst], 1);
-
- for (int i = 0; i < niterations; ++i)
- {
- int j;
-
- for (j = 0; j != burst; ++j)
- {
- CORBA::ULongLong start = ACE_OS::gethrtime ();
-
- request[j] =
- roundtrip->_request ("test_method"
- ACE_ENV_ARG_PARAMETER);
- ACE_TRY_CHECK;
-
- request[j]->add_in_arg () <<= start;
- request[j]->set_return_type (CORBA::_tc_ulonglong);
-
- request[j]->send_deferred (ACE_ENV_SINGLE_ARG_PARAMETER);
- ACE_TRY_CHECK;
- }
-
- for (j = 0; j != burst; ++j)
- {
- request[j]->get_response (ACE_ENV_SINGLE_ARG_PARAMETER);
- ACE_TRY_CHECK;
-
- CORBA::ULongLong retval;
- if ((request[j]->return_value () >>= retval) == 1)
- {
- ACE_hrtime_t now = ACE_OS::gethrtime ();
- history.sample (now - retval);
- }
- }
- }
- delete[] request;
-
- ACE_hrtime_t test_end = ACE_OS::gethrtime ();
-
- ACE_DEBUG ((LM_DEBUG, "test finished\n"));
-
- ACE_DEBUG ((LM_DEBUG, "High resolution timer calibration...."));
- ACE_UINT32 gsf = ACE_High_Res_Timer::global_scale_factor ();
- ACE_DEBUG ((LM_DEBUG, "done\n"));
-
- if (do_dump_history)
- {
- history.dump_samples ("HISTORY", gsf);
- }
-
- ACE_Basic_Stats stats;
- history.collect_basic_stats (stats);
- stats.dump_results ("Total", gsf);
-
- ACE_Throughput_Stats::dump_throughput ("Total", gsf,
- test_end - test_start,
- stats.samples_count ());
-
- if (do_shutdown)
- {
- roundtrip->shutdown (ACE_ENV_SINGLE_ARG_PARAMETER);
- ACE_TRY_CHECK;
- }
- }
- ACE_CATCHANY
- {
- ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION,
- "Caught exception:");
- return 1;
- }
- ACE_ENDTRY;
-
- return 0;
-}
diff --git a/TAO/performance-tests/Deferred_Latency/server.cpp b/TAO/performance-tests/Deferred_Latency/server.cpp
deleted file mode 100644
index e96f0ff595a..00000000000
--- a/TAO/performance-tests/Deferred_Latency/server.cpp
+++ /dev/null
@@ -1,136 +0,0 @@
-// $Id$
-
-#include "Roundtrip.h"
-#include "ace/Get_Opt.h"
-#include "ace/Sched_Params.h"
-
-#include "tao/Strategies/advanced_resource.h"
-
-ACE_RCSID(Single_Threaded_Latency, server, "$Id$")
-
-const char *ior_output_file = "test.ior";
-
-int
-parse_args (int argc, char *argv[])
-{
- ACE_Get_Opt get_opts (argc, argv, "o:");
- int c;
-
- while ((c = get_opts ()) != -1)
- switch (c)
- {
- case 'o':
- ior_output_file = get_opts.opt_arg ();
- break;
-
- case '?':
- default:
- ACE_ERROR_RETURN ((LM_ERROR,
- "usage: %s "
- "-o <iorfile>"
- "\n",
- argv [0]),
- -1);
- }
- // Indicates sucessful parsing of the command line
- return 0;
-}
-
-int
-main (int argc, char *argv[])
-{
- int priority =
- (ACE_Sched_Params::priority_min (ACE_SCHED_FIFO)
- + ACE_Sched_Params::priority_max (ACE_SCHED_FIFO)) / 2;
- priority = ACE_Sched_Params::next_priority (ACE_SCHED_FIFO,
- priority);
- // Enable FIFO scheduling, e.g., RT scheduling class on Solaris.
-
- if (ACE_OS::sched_params (ACE_Sched_Params (ACE_SCHED_FIFO,
- priority,
- ACE_SCOPE_PROCESS)) != 0)
- {
- if (ACE_OS::last_error () == EPERM)
- {
- ACE_DEBUG ((LM_DEBUG,
- "server (%P|%t): user is not superuser, "
- "test runs in time-shared class\n"));
- }
- else
- ACE_ERROR ((LM_ERROR,
- "server (%P|%t): sched_params failed\n"));
- }
-
- ACE_TRY_NEW_ENV
- {
- CORBA::ORB_var orb =
- CORBA::ORB_init (argc, argv, "" ACE_ENV_ARG_PARAMETER);
- ACE_TRY_CHECK;
-
- CORBA::Object_var poa_object =
- orb->resolve_initial_references("RootPOA" ACE_ENV_ARG_PARAMETER);
- ACE_TRY_CHECK;
-
- if (CORBA::is_nil (poa_object.in ()))
- ACE_ERROR_RETURN ((LM_ERROR,
- " (%P|%t) Unable to initialize the POA.\n"),
- 1);
-
- PortableServer::POA_var root_poa =
- PortableServer::POA::_narrow (poa_object.in () ACE_ENV_ARG_PARAMETER);
- ACE_TRY_CHECK;
-
- PortableServer::POAManager_var poa_manager =
- root_poa->the_POAManager (ACE_ENV_SINGLE_ARG_PARAMETER);
- ACE_TRY_CHECK;
-
- if (parse_args (argc, argv) != 0)
- return 1;
-
- Roundtrip *roundtrip_impl;
- ACE_NEW_RETURN (roundtrip_impl,
- Roundtrip (orb.in ()),
- 1);
- PortableServer::ServantBase_var owner_transfer(roundtrip_impl);
-
- Test::Roundtrip_var roundtrip =
- roundtrip_impl->_this (ACE_ENV_SINGLE_ARG_PARAMETER);
- ACE_TRY_CHECK;
-
- CORBA::String_var ior =
- orb->object_to_string (roundtrip.in () ACE_ENV_ARG_PARAMETER);
- ACE_TRY_CHECK;
-
- // If the ior_output_file exists, output the ior to it
- FILE *output_file= ACE_OS::fopen (ior_output_file, "w");
- if (output_file == 0)
- ACE_ERROR_RETURN ((LM_ERROR,
- "Cannot open output file for writing IOR: %s",
- ior_output_file),
- 1);
- ACE_OS::fprintf (output_file, "%s", ior.in ());
- ACE_OS::fclose (output_file);
-
- poa_manager->activate (ACE_ENV_SINGLE_ARG_PARAMETER);
- ACE_TRY_CHECK;
-
- orb->run (ACE_ENV_SINGLE_ARG_PARAMETER);
- ACE_TRY_CHECK;
-
- ACE_DEBUG ((LM_DEBUG, "(%P|%t) server - event loop finished\n"));
-
- root_poa->destroy (1, 1 ACE_ENV_ARG_PARAMETER);
- ACE_TRY_CHECK;
-
- orb->destroy (ACE_ENV_SINGLE_ARG_PARAMETER);
- ACE_TRY_CHECK;
- }
- ACE_CATCHANY
- {
- ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION, "Exception caught:");
- return 1;
- }
- ACE_ENDTRY;
-
- return 0;
-}
diff --git a/TAO/performance-tests/RTCorba/Multiple_Endpoints/Endpoint_Per_Priority/Makefile b/TAO/performance-tests/RTCorba/Multiple_Endpoints/Endpoint_Per_Priority/Makefile
deleted file mode 100644
index 6abeb8554f4..00000000000
--- a/TAO/performance-tests/RTCorba/Multiple_Endpoints/Endpoint_Per_Priority/Makefile
+++ /dev/null
@@ -1,616 +0,0 @@
-#----------------------------------------------------------------------------
-#
-# $Id$
-#
-#----------------------------------------------------------------------------
-
-#----------------------------------------------------------------------------
-# Local macros
-#----------------------------------------------------------------------------
-
-ifndef TAO_ROOT
- TAO_ROOT = $(ACE_ROOT)/TAO
-endif # ! TAO_ROOT
-
-LDLIBS = -lRTCORBA_Common -lTAO_Strategies -lTAO_PortableServer -lTAO
-
-BIN_UNCHECKED = server client
-
-CLIENT_OBJS = client.o
-SERVER_OBJS = server.o
-
-BUILD = $(BIN)
-VLDLIBS = $(LDLIBS:%=%$(VAR))
-VBIN = $(BIN:%=%$(VAR))
-SRC=$(CLIENT_OBJS:.o=.cpp) $(SERVER_OBJS:.o=.cpp)
-CPPFLAGS += -I../Common
-
-#----------------------------------------------------------------------------
-# Include macros and targets
-#----------------------------------------------------------------------------
-
-include $(ACE_ROOT)/include/makeinclude/wrapper_macros.GNU
-include $(ACE_ROOT)/include/makeinclude/macros.GNU
-include $(TAO_ROOT)/rules.tao.GNU
-
-ifeq ($(rt_corba),1)
- ifeq ($(minimum_corba),0)
- BIN=$(BIN_UNCHECKED)
- endif # minimum_corba
-endif # rt_corba
-
-include $(ACE_ROOT)/include/makeinclude/rules.common.GNU
-include $(ACE_ROOT)/include/makeinclude/rules.nonested.GNU
-include $(ACE_ROOT)/include/makeinclude/rules.local.GNU
-include $(TAO_ROOT)/taoconfig.mk
-
-#----------------------------------------------------------------------------
-# Local targets
-#----------------------------------------------------------------------------
-
-server: $(addprefix $(VDIR),$(SERVER_OBJS))
- $(LINK.cc) $(LDFLAGS) -o $@ $^ $(VLDLIBS) $(POSTLINK)
-
-client: $(addprefix $(VDIR),$(CLIENT_OBJS))
- $(LINK.cc) $(LDFLAGS) -o $@ $^ $(VLDLIBS) $(POSTLINK)
-
-realclean: clean
-
-# DO NOT DELETE THIS LINE -- g++dep uses it.
-# DO NOT PUT ANYTHING AFTER THIS LINE, IT WILL GO AWAY.
-
-
-.obj/client.o .obj/client.o .obj/client.o .obj/client.o: client.cpp ../Common/testC.h \
- $(TAO_ROOT)/tao/corba.h \
- $(ACE_ROOT)/ace/pre.h \
- $(ACE_ROOT)/ace/post.h \
- $(ACE_ROOT)/ace/ACE_export.h \
- $(ACE_ROOT)/ace/svc_export.h \
- $(ACE_ROOT)/ace/ace_wchar.h \
- $(ACE_ROOT)/ace/ace_wchar.inl \
- $(ACE_ROOT)/ace/OS_Errno.h \
- $(ACE_ROOT)/ace/OS_Export.h \
- $(ACE_ROOT)/ace/OS_Errno.inl \
- $(TAO_ROOT)/tao/corbafwd.h \
- $(ACE_ROOT)/ace/CDR_Base.h \
- $(ACE_ROOT)/ace/Basic_Types.h \
- $(ACE_ROOT)/ace/Basic_Types.i \
- $(ACE_ROOT)/ace/Message_Block.h \
- $(ACE_ROOT)/ace/ACE.h \
- $(ACE_ROOT)/ace/OS.h \
- $(ACE_ROOT)/ace/OS_Dirent.h \
- $(ACE_ROOT)/ace/OS_Dirent.inl \
- $(ACE_ROOT)/ace/OS_String.h \
- $(ACE_ROOT)/ace/OS_String.inl \
- $(ACE_ROOT)/ace/OS_Memory.h \
- $(ACE_ROOT)/ace/OS_Memory.inl \
- $(ACE_ROOT)/ace/OS_TLI.h \
- $(ACE_ROOT)/ace/OS_TLI.inl \
- $(ACE_ROOT)/ace/Min_Max.h \
- $(ACE_ROOT)/ace/streams.h \
- $(ACE_ROOT)/ace/Trace.h \
- $(ACE_ROOT)/ace/OS.i \
- $(ACE_ROOT)/ace/Flag_Manip.h \
- $(ACE_ROOT)/ace/Flag_Manip.i \
- $(ACE_ROOT)/ace/Handle_Ops.h \
- $(ACE_ROOT)/ace/Handle_Ops.i \
- $(ACE_ROOT)/ace/Lib_Find.h \
- $(ACE_ROOT)/ace/Lib_Find.i \
- $(ACE_ROOT)/ace/Init_ACE.h \
- $(ACE_ROOT)/ace/Init_ACE.i \
- $(ACE_ROOT)/ace/Sock_Connect.h \
- $(ACE_ROOT)/ace/Sock_Connect.i \
- $(ACE_ROOT)/ace/ACE.i \
- $(ACE_ROOT)/ace/Malloc.h \
- $(ACE_ROOT)/ace/Log_Msg.h \
- $(ACE_ROOT)/ace/Log_Record.h \
- $(ACE_ROOT)/ace/Log_Priority.h \
- $(ACE_ROOT)/ace/Log_Record.i \
- $(ACE_ROOT)/ace/OS_Log_Msg_Attributes.h \
- $(ACE_ROOT)/ace/OS_Log_Msg_Attributes.inl \
- $(ACE_ROOT)/ace/Malloc.i \
- $(ACE_ROOT)/ace/Malloc_T.h \
- $(ACE_ROOT)/ace/Synch.h \
- $(ACE_ROOT)/ace/Synch.i \
- $(ACE_ROOT)/ace/Synch_T.h \
- $(ACE_ROOT)/ace/Synch_T.i \
- $(ACE_ROOT)/ace/Thread.h \
- $(ACE_ROOT)/ace/Thread_Adapter.h \
- $(ACE_ROOT)/ace/Base_Thread_Adapter.h \
- $(ACE_ROOT)/ace/Base_Thread_Adapter.inl \
- $(ACE_ROOT)/ace/Thread_Adapter.inl \
- $(ACE_ROOT)/ace/Thread.i \
- $(ACE_ROOT)/ace/Atomic_Op.i \
- $(ACE_ROOT)/ace/Synch_T.cpp \
- $(ACE_ROOT)/ace/Malloc_Allocator.h \
- $(ACE_ROOT)/ace/Malloc_Base.h \
- $(ACE_ROOT)/ace/Malloc_Allocator.i \
- $(ACE_ROOT)/ace/Free_List.h \
- $(ACE_ROOT)/ace/Free_List.i \
- $(ACE_ROOT)/ace/Free_List.cpp \
- $(ACE_ROOT)/ace/Malloc_T.i \
- $(ACE_ROOT)/ace/Malloc_T.cpp \
- $(ACE_ROOT)/ace/Memory_Pool.h \
- $(ACE_ROOT)/ace/Event_Handler.h \
- $(ACE_ROOT)/ace/Event_Handler.i \
- $(ACE_ROOT)/ace/Signal.h \
- $(ACE_ROOT)/ace/Signal.i \
- $(ACE_ROOT)/ace/Mem_Map.h \
- $(ACE_ROOT)/ace/Mem_Map.i \
- $(ACE_ROOT)/ace/SV_Semaphore_Complex.h \
- $(ACE_ROOT)/ace/SV_Semaphore_Simple.h \
- $(ACE_ROOT)/ace/SV_Semaphore_Simple.i \
- $(ACE_ROOT)/ace/SV_Semaphore_Complex.i \
- $(ACE_ROOT)/ace/Unbounded_Set.h \
- $(ACE_ROOT)/ace/Node.h \
- $(ACE_ROOT)/ace/Node.cpp \
- $(ACE_ROOT)/ace/Unbounded_Set.inl \
- $(ACE_ROOT)/ace/Unbounded_Set.cpp \
- $(ACE_ROOT)/ace/Memory_Pool.i \
- $(ACE_ROOT)/ace/Message_Block.i \
- $(ACE_ROOT)/ace/Message_Block_T.h \
- $(ACE_ROOT)/ace/Message_Block_T.i \
- $(ACE_ROOT)/ace/Message_Block_T.cpp \
- $(ACE_ROOT)/ace/CDR_Base.inl \
- $(TAO_ROOT)/tao/try_macros.h \
- $(TAO_ROOT)/tao/orbconf.h \
- $(ACE_ROOT)/ace/CORBA_macros.h \
- $(TAO_ROOT)/tao/varbase.h \
- $(TAO_ROOT)/tao/TAO_Export.h \
- $(TAO_ROOT)/tao/corbafwd.i \
- $(TAO_ROOT)/tao/Typecode.h \
- $(TAO_ROOT)/tao/Exception.h \
- $(ACE_ROOT)/ace/SString.h \
- $(ACE_ROOT)/ace/SString.i \
- $(TAO_ROOT)/tao/Exception.i \
- $(TAO_ROOT)/tao/Typecode.i \
- $(TAO_ROOT)/tao/Any.h \
- $(TAO_ROOT)/tao/CDR.h \
- $(ACE_ROOT)/ace/CDR_Stream.h \
- $(ACE_ROOT)/ace/CDR_Stream.i \
- $(TAO_ROOT)/tao/CDR.i \
- $(TAO_ROOT)/tao/Environment.h \
- $(TAO_ROOT)/tao/Environment.i \
- $(TAO_ROOT)/tao/Object.h \
- $(TAO_ROOT)/tao/Object_Proxy_Broker.h \
- $(TAO_ROOT)/tao/Object_Proxy_Impl.h \
- $(TAO_ROOT)/tao/Object.i \
- $(TAO_ROOT)/tao/Any.i \
- $(TAO_ROOT)/tao/NVList.h \
- $(ACE_ROOT)/ace/Unbounded_Queue.h \
- $(ACE_ROOT)/ace/Unbounded_Queue.inl \
- $(ACE_ROOT)/ace/Unbounded_Queue.cpp \
- $(TAO_ROOT)/tao/NVList.i \
- $(TAO_ROOT)/tao/LocalObject.h \
- $(TAO_ROOT)/tao/LocalObject.i \
- $(TAO_ROOT)/tao/Principal.h \
- $(TAO_ROOT)/tao/OctetSeqC.h \
- $(TAO_ROOT)/tao/Sequence.h \
- $(TAO_ROOT)/tao/Managed_Types.h \
- $(TAO_ROOT)/tao/Managed_Types.i \
- $(TAO_ROOT)/tao/Sequence.i \
- $(TAO_ROOT)/tao/Sequence_T.h \
- $(TAO_ROOT)/tao/Sequence_T.i \
- $(TAO_ROOT)/tao/Sequence_T.cpp \
- $(TAO_ROOT)/tao/OctetSeqC.i \
- $(TAO_ROOT)/tao/Principal.i \
- $(TAO_ROOT)/tao/ORB.h \
- $(TAO_ROOT)/tao/Services.h \
- $(TAO_ROOT)/tao/Services.i \
- $(TAO_ROOT)/tao/CORBA_String.h \
- $(TAO_ROOT)/tao/CORBA_String.inl \
- $(TAO_ROOT)/tao/PolicyC.h \
- $(TAO_ROOT)/tao/Encodable.h \
- $(TAO_ROOT)/tao/Remote_Object_Proxy_Impl.h \
- $(TAO_ROOT)/tao/CurrentC.h \
- $(TAO_ROOT)/tao/CurrentC.i \
- $(TAO_ROOT)/tao/PolicyC.i \
- $(TAO_ROOT)/tao/ORB.i \
- $(TAO_ROOT)/tao/BoundsC.h \
- $(TAO_ROOT)/tao/BoundsC.i \
- $(TAO_ROOT)/tao/ValueBase.h \
- $(TAO_ROOT)/tao/ValueBase.i \
- $(TAO_ROOT)/tao/ValueFactory.h \
- $(TAO_ROOT)/tao/ValueFactory.i \
- $(TAO_ROOT)/tao/DomainC.h \
- $(TAO_ROOT)/tao/DomainC.i \
- $(TAO_ROOT)/tao/WrongTransactionC.h \
- $(TAO_ROOT)/tao/Object_KeyC.h \
- $(TAO_ROOT)/tao/Object_KeyC.i \
- $(TAO_ROOT)/tao/ObjectIDList.h \
- $(TAO_ROOT)/tao/ObjectIDList.i \
- $(TAO_ROOT)/tao/StringSeqC.h \
- $(TAO_ROOT)/tao/StringSeqC.i \
- $(TAO_ROOT)/tao/PortableInterceptorC.h \
- $(TAO_ROOT)/tao/DynamicC.h \
- $(TAO_ROOT)/tao/DynamicC.i \
- $(TAO_ROOT)/tao/MessagingC.h \
- $(TAO_ROOT)/tao/TimeBaseC.h \
- $(TAO_ROOT)/tao/SmartProxies/Smart_Proxies.h \
- $(TAO_ROOT)/tao/SmartProxies/smartproxies_export.h \
- $(TAO_ROOT)/tao/TAO_Singleton.h \
- $(TAO_ROOT)/tao/TAO_Singleton.inl \
- $(TAO_ROOT)/tao/TAO_Singleton.cpp \
- $(ACE_ROOT)/ace/Object_Manager.h \
- $(ACE_ROOT)/ace/Object_Manager.i \
- $(ACE_ROOT)/ace/Managed_Object.h \
- $(ACE_ROOT)/ace/Managed_Object.i \
- $(ACE_ROOT)/ace/Managed_Object.cpp \
- $(TAO_ROOT)/tao/TAO_Singleton_Manager.h \
- $(TAO_ROOT)/tao/TAO_Singleton_Manager.inl \
- $(TAO_ROOT)/tao/SmartProxies/Smart_Proxies.inl \
- $(TAO_ROOT)/tao/TimeBaseC.i \
- $(TAO_ROOT)/tao/IOPC.h \
- $(TAO_ROOT)/tao/IOPC.i \
- $(TAO_ROOT)/tao/PollableC.h \
- $(TAO_ROOT)/tao/PollableC.i \
- $(TAO_ROOT)/tao/MessagingC.i \
- $(TAO_ROOT)/tao/PortableInterceptorC.i \
- ../Common/rtcorba_common_export.h ../Common/testC.i \
- $(TAO_ROOT)/tao/TAOC.h \
- $(TAO_ROOT)/tao/TAOC.i \
- $(ACE_ROOT)/ace/Get_Opt.h \
- $(ACE_ROOT)/ace/Get_Opt.i \
- $(ACE_ROOT)/ace/Task.h \
- $(ACE_ROOT)/ace/Service_Object.h \
- $(ACE_ROOT)/ace/Shared_Object.h \
- $(ACE_ROOT)/ace/Shared_Object.i \
- $(ACE_ROOT)/ace/Service_Object.i \
- $(ACE_ROOT)/ace/Thread_Manager.h \
- $(ACE_ROOT)/ace/Containers.h \
- $(ACE_ROOT)/ace/Containers.i \
- $(ACE_ROOT)/ace/Containers_T.h \
- $(ACE_ROOT)/ace/Array_Base.h \
- $(ACE_ROOT)/ace/Array_Base.inl \
- $(ACE_ROOT)/ace/Array_Base.cpp \
- $(ACE_ROOT)/ace/Containers_T.i \
- $(ACE_ROOT)/ace/Containers_T.cpp \
- $(ACE_ROOT)/ace/Singleton.h \
- $(ACE_ROOT)/ace/Singleton.i \
- $(ACE_ROOT)/ace/Singleton.cpp \
- $(ACE_ROOT)/ace/Thread_Manager.i \
- $(ACE_ROOT)/ace/Task.i \
- $(ACE_ROOT)/ace/Task_T.h \
- $(ACE_ROOT)/ace/Message_Queue.h \
- $(ACE_ROOT)/ace/IO_Cntl_Msg.h \
- $(ACE_ROOT)/ace/Message_Queue_T.h \
- $(ACE_ROOT)/ace/Message_Queue_T.i \
- $(ACE_ROOT)/ace/Message_Queue_T.cpp \
- $(ACE_ROOT)/ace/Strategies.h \
- $(ACE_ROOT)/ace/Strategies_T.h \
- $(ACE_ROOT)/ace/Service_Config.h \
- $(ACE_ROOT)/ace/Service_Config.i \
- $(ACE_ROOT)/ace/Reactor.h \
- $(ACE_ROOT)/ace/Handle_Set.h \
- $(ACE_ROOT)/ace/Handle_Set.i \
- $(ACE_ROOT)/ace/Timer_Queue.h \
- $(ACE_ROOT)/ace/Timer_Queue_T.h \
- $(ACE_ROOT)/ace/Test_and_Set.h \
- $(ACE_ROOT)/ace/Test_and_Set.i \
- $(ACE_ROOT)/ace/Test_and_Set.cpp \
- $(ACE_ROOT)/ace/Timer_Queue_T.i \
- $(ACE_ROOT)/ace/Timer_Queue_T.cpp \
- $(ACE_ROOT)/ace/Reactor.i \
- $(ACE_ROOT)/ace/Reactor_Impl.h \
- $(ACE_ROOT)/ace/Svc_Conf_Tokens.h \
- $(ACE_ROOT)/ace/Synch_Options.h \
- $(ACE_ROOT)/ace/Synch_Options.i \
- $(ACE_ROOT)/ace/Hash_Map_Manager.h \
- $(ACE_ROOT)/ace/Functor.h \
- $(ACE_ROOT)/ace/Functor.i \
- $(ACE_ROOT)/ace/Functor_T.h \
- $(ACE_ROOT)/ace/Functor_T.i \
- $(ACE_ROOT)/ace/Functor_T.cpp \
- $(ACE_ROOT)/ace/Hash_Map_Manager_T.h \
- $(ACE_ROOT)/ace/Hash_Map_Manager_T.i \
- $(ACE_ROOT)/ace/Hash_Map_Manager_T.cpp \
- $(ACE_ROOT)/ace/Strategies_T.i \
- $(ACE_ROOT)/ace/Strategies_T.cpp \
- $(ACE_ROOT)/ace/Service_Repository.h \
- $(ACE_ROOT)/ace/Service_Types.h \
- $(ACE_ROOT)/ace/Service_Types.i \
- $(ACE_ROOT)/ace/Service_Repository.i \
- $(ACE_ROOT)/ace/WFMO_Reactor.h \
- $(ACE_ROOT)/ace/Process_Mutex.h \
- $(ACE_ROOT)/ace/Process_Mutex.inl \
- $(ACE_ROOT)/ace/WFMO_Reactor.i \
- $(ACE_ROOT)/ace/Strategies.i \
- $(ACE_ROOT)/ace/Message_Queue.i \
- $(ACE_ROOT)/ace/Task_T.i \
- $(ACE_ROOT)/ace/Task_T.cpp \
- $(ACE_ROOT)/ace/Module.h \
- $(ACE_ROOT)/ace/Module.i \
- $(ACE_ROOT)/ace/Module.cpp \
- $(ACE_ROOT)/ace/Stream_Modules.h \
- $(ACE_ROOT)/ace/Stream_Modules.cpp \
- $(ACE_ROOT)/ace/Stats.h \
- $(ACE_ROOT)/ace/Basic_Stats.h \
- $(ACE_ROOT)/ace/Basic_Stats.inl \
- $(ACE_ROOT)/ace/Stats.i \
- $(ACE_ROOT)/ace/High_Res_Timer.h \
- $(ACE_ROOT)/ace/High_Res_Timer.i \
- $(ACE_ROOT)/ace/Sched_Params.h \
- $(ACE_ROOT)/ace/Sched_Params.i
-
-.obj/server.o .obj/server.o .obj/server.o .obj/server.o: server.cpp ../Common/test_i.h ../Common/testS.h \
- ../Common/testC.h \
- $(TAO_ROOT)/tao/corba.h \
- $(ACE_ROOT)/ace/pre.h \
- $(ACE_ROOT)/ace/post.h \
- $(ACE_ROOT)/ace/ACE_export.h \
- $(ACE_ROOT)/ace/svc_export.h \
- $(ACE_ROOT)/ace/ace_wchar.h \
- $(ACE_ROOT)/ace/ace_wchar.inl \
- $(ACE_ROOT)/ace/OS_Errno.h \
- $(ACE_ROOT)/ace/OS_Export.h \
- $(ACE_ROOT)/ace/OS_Errno.inl \
- $(TAO_ROOT)/tao/corbafwd.h \
- $(ACE_ROOT)/ace/CDR_Base.h \
- $(ACE_ROOT)/ace/Basic_Types.h \
- $(ACE_ROOT)/ace/Basic_Types.i \
- $(ACE_ROOT)/ace/Message_Block.h \
- $(ACE_ROOT)/ace/ACE.h \
- $(ACE_ROOT)/ace/OS.h \
- $(ACE_ROOT)/ace/OS_Dirent.h \
- $(ACE_ROOT)/ace/OS_Dirent.inl \
- $(ACE_ROOT)/ace/OS_String.h \
- $(ACE_ROOT)/ace/OS_String.inl \
- $(ACE_ROOT)/ace/OS_Memory.h \
- $(ACE_ROOT)/ace/OS_Memory.inl \
- $(ACE_ROOT)/ace/OS_TLI.h \
- $(ACE_ROOT)/ace/OS_TLI.inl \
- $(ACE_ROOT)/ace/Min_Max.h \
- $(ACE_ROOT)/ace/streams.h \
- $(ACE_ROOT)/ace/Trace.h \
- $(ACE_ROOT)/ace/OS.i \
- $(ACE_ROOT)/ace/Flag_Manip.h \
- $(ACE_ROOT)/ace/Flag_Manip.i \
- $(ACE_ROOT)/ace/Handle_Ops.h \
- $(ACE_ROOT)/ace/Handle_Ops.i \
- $(ACE_ROOT)/ace/Lib_Find.h \
- $(ACE_ROOT)/ace/Lib_Find.i \
- $(ACE_ROOT)/ace/Init_ACE.h \
- $(ACE_ROOT)/ace/Init_ACE.i \
- $(ACE_ROOT)/ace/Sock_Connect.h \
- $(ACE_ROOT)/ace/Sock_Connect.i \
- $(ACE_ROOT)/ace/ACE.i \
- $(ACE_ROOT)/ace/Malloc.h \
- $(ACE_ROOT)/ace/Log_Msg.h \
- $(ACE_ROOT)/ace/Log_Record.h \
- $(ACE_ROOT)/ace/Log_Priority.h \
- $(ACE_ROOT)/ace/Log_Record.i \
- $(ACE_ROOT)/ace/OS_Log_Msg_Attributes.h \
- $(ACE_ROOT)/ace/OS_Log_Msg_Attributes.inl \
- $(ACE_ROOT)/ace/Malloc.i \
- $(ACE_ROOT)/ace/Malloc_T.h \
- $(ACE_ROOT)/ace/Synch.h \
- $(ACE_ROOT)/ace/Synch.i \
- $(ACE_ROOT)/ace/Synch_T.h \
- $(ACE_ROOT)/ace/Synch_T.i \
- $(ACE_ROOT)/ace/Thread.h \
- $(ACE_ROOT)/ace/Thread_Adapter.h \
- $(ACE_ROOT)/ace/Base_Thread_Adapter.h \
- $(ACE_ROOT)/ace/Base_Thread_Adapter.inl \
- $(ACE_ROOT)/ace/Thread_Adapter.inl \
- $(ACE_ROOT)/ace/Thread.i \
- $(ACE_ROOT)/ace/Atomic_Op.i \
- $(ACE_ROOT)/ace/Synch_T.cpp \
- $(ACE_ROOT)/ace/Malloc_Allocator.h \
- $(ACE_ROOT)/ace/Malloc_Base.h \
- $(ACE_ROOT)/ace/Malloc_Allocator.i \
- $(ACE_ROOT)/ace/Free_List.h \
- $(ACE_ROOT)/ace/Free_List.i \
- $(ACE_ROOT)/ace/Free_List.cpp \
- $(ACE_ROOT)/ace/Malloc_T.i \
- $(ACE_ROOT)/ace/Malloc_T.cpp \
- $(ACE_ROOT)/ace/Memory_Pool.h \
- $(ACE_ROOT)/ace/Event_Handler.h \
- $(ACE_ROOT)/ace/Event_Handler.i \
- $(ACE_ROOT)/ace/Signal.h \
- $(ACE_ROOT)/ace/Signal.i \
- $(ACE_ROOT)/ace/Mem_Map.h \
- $(ACE_ROOT)/ace/Mem_Map.i \
- $(ACE_ROOT)/ace/SV_Semaphore_Complex.h \
- $(ACE_ROOT)/ace/SV_Semaphore_Simple.h \
- $(ACE_ROOT)/ace/SV_Semaphore_Simple.i \
- $(ACE_ROOT)/ace/SV_Semaphore_Complex.i \
- $(ACE_ROOT)/ace/Unbounded_Set.h \
- $(ACE_ROOT)/ace/Node.h \
- $(ACE_ROOT)/ace/Node.cpp \
- $(ACE_ROOT)/ace/Unbounded_Set.inl \
- $(ACE_ROOT)/ace/Unbounded_Set.cpp \
- $(ACE_ROOT)/ace/Memory_Pool.i \
- $(ACE_ROOT)/ace/Message_Block.i \
- $(ACE_ROOT)/ace/Message_Block_T.h \
- $(ACE_ROOT)/ace/Message_Block_T.i \
- $(ACE_ROOT)/ace/Message_Block_T.cpp \
- $(ACE_ROOT)/ace/CDR_Base.inl \
- $(TAO_ROOT)/tao/try_macros.h \
- $(TAO_ROOT)/tao/orbconf.h \
- $(ACE_ROOT)/ace/CORBA_macros.h \
- $(TAO_ROOT)/tao/varbase.h \
- $(TAO_ROOT)/tao/TAO_Export.h \
- $(TAO_ROOT)/tao/corbafwd.i \
- $(TAO_ROOT)/tao/Typecode.h \
- $(TAO_ROOT)/tao/Exception.h \
- $(ACE_ROOT)/ace/SString.h \
- $(ACE_ROOT)/ace/SString.i \
- $(TAO_ROOT)/tao/Exception.i \
- $(TAO_ROOT)/tao/Typecode.i \
- $(TAO_ROOT)/tao/Any.h \
- $(TAO_ROOT)/tao/CDR.h \
- $(ACE_ROOT)/ace/CDR_Stream.h \
- $(ACE_ROOT)/ace/CDR_Stream.i \
- $(TAO_ROOT)/tao/CDR.i \
- $(TAO_ROOT)/tao/Environment.h \
- $(TAO_ROOT)/tao/Environment.i \
- $(TAO_ROOT)/tao/Object.h \
- $(TAO_ROOT)/tao/Object_Proxy_Broker.h \
- $(TAO_ROOT)/tao/Object_Proxy_Impl.h \
- $(TAO_ROOT)/tao/Object.i \
- $(TAO_ROOT)/tao/Any.i \
- $(TAO_ROOT)/tao/NVList.h \
- $(ACE_ROOT)/ace/Unbounded_Queue.h \
- $(ACE_ROOT)/ace/Unbounded_Queue.inl \
- $(ACE_ROOT)/ace/Unbounded_Queue.cpp \
- $(TAO_ROOT)/tao/NVList.i \
- $(TAO_ROOT)/tao/LocalObject.h \
- $(TAO_ROOT)/tao/LocalObject.i \
- $(TAO_ROOT)/tao/Principal.h \
- $(TAO_ROOT)/tao/OctetSeqC.h \
- $(TAO_ROOT)/tao/Sequence.h \
- $(TAO_ROOT)/tao/Managed_Types.h \
- $(TAO_ROOT)/tao/Managed_Types.i \
- $(TAO_ROOT)/tao/Sequence.i \
- $(TAO_ROOT)/tao/Sequence_T.h \
- $(TAO_ROOT)/tao/Sequence_T.i \
- $(TAO_ROOT)/tao/Sequence_T.cpp \
- $(TAO_ROOT)/tao/OctetSeqC.i \
- $(TAO_ROOT)/tao/Principal.i \
- $(TAO_ROOT)/tao/ORB.h \
- $(TAO_ROOT)/tao/Services.h \
- $(TAO_ROOT)/tao/Services.i \
- $(TAO_ROOT)/tao/CORBA_String.h \
- $(TAO_ROOT)/tao/CORBA_String.inl \
- $(TAO_ROOT)/tao/PolicyC.h \
- $(TAO_ROOT)/tao/Encodable.h \
- $(TAO_ROOT)/tao/Remote_Object_Proxy_Impl.h \
- $(TAO_ROOT)/tao/CurrentC.h \
- $(TAO_ROOT)/tao/CurrentC.i \
- $(TAO_ROOT)/tao/PolicyC.i \
- $(TAO_ROOT)/tao/ORB.i \
- $(TAO_ROOT)/tao/BoundsC.h \
- $(TAO_ROOT)/tao/BoundsC.i \
- $(TAO_ROOT)/tao/ValueBase.h \
- $(TAO_ROOT)/tao/ValueBase.i \
- $(TAO_ROOT)/tao/ValueFactory.h \
- $(TAO_ROOT)/tao/ValueFactory.i \
- $(TAO_ROOT)/tao/DomainC.h \
- $(TAO_ROOT)/tao/DomainC.i \
- $(TAO_ROOT)/tao/WrongTransactionC.h \
- $(TAO_ROOT)/tao/Object_KeyC.h \
- $(TAO_ROOT)/tao/Object_KeyC.i \
- $(TAO_ROOT)/tao/ObjectIDList.h \
- $(TAO_ROOT)/tao/ObjectIDList.i \
- $(TAO_ROOT)/tao/StringSeqC.h \
- $(TAO_ROOT)/tao/StringSeqC.i \
- $(TAO_ROOT)/tao/PortableInterceptorC.h \
- $(TAO_ROOT)/tao/DynamicC.h \
- $(TAO_ROOT)/tao/DynamicC.i \
- $(TAO_ROOT)/tao/MessagingC.h \
- $(TAO_ROOT)/tao/TimeBaseC.h \
- $(TAO_ROOT)/tao/SmartProxies/Smart_Proxies.h \
- $(TAO_ROOT)/tao/SmartProxies/smartproxies_export.h \
- $(TAO_ROOT)/tao/TAO_Singleton.h \
- $(TAO_ROOT)/tao/TAO_Singleton.inl \
- $(TAO_ROOT)/tao/TAO_Singleton.cpp \
- $(ACE_ROOT)/ace/Object_Manager.h \
- $(ACE_ROOT)/ace/Object_Manager.i \
- $(ACE_ROOT)/ace/Managed_Object.h \
- $(ACE_ROOT)/ace/Managed_Object.i \
- $(ACE_ROOT)/ace/Managed_Object.cpp \
- $(TAO_ROOT)/tao/TAO_Singleton_Manager.h \
- $(TAO_ROOT)/tao/TAO_Singleton_Manager.inl \
- $(TAO_ROOT)/tao/SmartProxies/Smart_Proxies.inl \
- $(TAO_ROOT)/tao/TimeBaseC.i \
- $(TAO_ROOT)/tao/IOPC.h \
- $(TAO_ROOT)/tao/IOPC.i \
- $(TAO_ROOT)/tao/PollableC.h \
- $(TAO_ROOT)/tao/PollableC.i \
- $(TAO_ROOT)/tao/MessagingC.i \
- $(TAO_ROOT)/tao/PortableInterceptorC.i \
- ../Common/rtcorba_common_export.h ../Common/testC.i \
- $(TAO_ROOT)/tao/PortableServer/PortableServer.h \
- $(TAO_ROOT)/tao/PortableServer/portableserver_export.h \
- $(TAO_ROOT)/tao/PortableServer/PortableServerC.h \
- $(TAO_ROOT)/tao/PortableServer/PortableServerC.i \
- $(TAO_ROOT)/tao/PortableServer/Servant_Base.h \
- $(TAO_ROOT)/tao/Abstract_Servant_Base.h \
- $(TAO_ROOT)/tao/PortableServer/Servant_Base.i \
- $(TAO_ROOT)/tao/PortableServer/Collocated_Object.h \
- $(TAO_ROOT)/tao/PortableServer/Collocated_Object.i \
- $(TAO_ROOT)/tao/PortableServer/ThruPOA_Object_Proxy_Impl.h \
- $(TAO_ROOT)/tao/PortableServer/Direct_Object_Proxy_Impl.h \
- ../Common/testS_T.h ../Common/testS_T.i ../Common/testS_T.cpp \
- ../Common/testS.i ../Common/test_i.i \
- $(TAO_ROOT)/tao/RTCORBA/Pool_Per_Endpoint.h \
- $(TAO_ROOT)/tao/RTCORBA/rtcorba_export.h \
- $(ACE_ROOT)/ace/Task.h \
- $(ACE_ROOT)/ace/Service_Object.h \
- $(ACE_ROOT)/ace/Shared_Object.h \
- $(ACE_ROOT)/ace/Shared_Object.i \
- $(ACE_ROOT)/ace/Service_Object.i \
- $(ACE_ROOT)/ace/Thread_Manager.h \
- $(ACE_ROOT)/ace/Containers.h \
- $(ACE_ROOT)/ace/Containers.i \
- $(ACE_ROOT)/ace/Containers_T.h \
- $(ACE_ROOT)/ace/Array_Base.h \
- $(ACE_ROOT)/ace/Array_Base.inl \
- $(ACE_ROOT)/ace/Array_Base.cpp \
- $(ACE_ROOT)/ace/Containers_T.i \
- $(ACE_ROOT)/ace/Containers_T.cpp \
- $(ACE_ROOT)/ace/Singleton.h \
- $(ACE_ROOT)/ace/Singleton.i \
- $(ACE_ROOT)/ace/Singleton.cpp \
- $(ACE_ROOT)/ace/Thread_Manager.i \
- $(ACE_ROOT)/ace/Task.i \
- $(ACE_ROOT)/ace/Task_T.h \
- $(ACE_ROOT)/ace/Message_Queue.h \
- $(ACE_ROOT)/ace/IO_Cntl_Msg.h \
- $(ACE_ROOT)/ace/Message_Queue_T.h \
- $(ACE_ROOT)/ace/Message_Queue_T.i \
- $(ACE_ROOT)/ace/Message_Queue_T.cpp \
- $(ACE_ROOT)/ace/Strategies.h \
- $(ACE_ROOT)/ace/Strategies_T.h \
- $(ACE_ROOT)/ace/Service_Config.h \
- $(ACE_ROOT)/ace/Service_Config.i \
- $(ACE_ROOT)/ace/Reactor.h \
- $(ACE_ROOT)/ace/Handle_Set.h \
- $(ACE_ROOT)/ace/Handle_Set.i \
- $(ACE_ROOT)/ace/Timer_Queue.h \
- $(ACE_ROOT)/ace/Timer_Queue_T.h \
- $(ACE_ROOT)/ace/Test_and_Set.h \
- $(ACE_ROOT)/ace/Test_and_Set.i \
- $(ACE_ROOT)/ace/Test_and_Set.cpp \
- $(ACE_ROOT)/ace/Timer_Queue_T.i \
- $(ACE_ROOT)/ace/Timer_Queue_T.cpp \
- $(ACE_ROOT)/ace/Reactor.i \
- $(ACE_ROOT)/ace/Reactor_Impl.h \
- $(ACE_ROOT)/ace/Svc_Conf_Tokens.h \
- $(ACE_ROOT)/ace/Synch_Options.h \
- $(ACE_ROOT)/ace/Synch_Options.i \
- $(ACE_ROOT)/ace/Hash_Map_Manager.h \
- $(ACE_ROOT)/ace/Functor.h \
- $(ACE_ROOT)/ace/Functor.i \
- $(ACE_ROOT)/ace/Functor_T.h \
- $(ACE_ROOT)/ace/Functor_T.i \
- $(ACE_ROOT)/ace/Functor_T.cpp \
- $(ACE_ROOT)/ace/Hash_Map_Manager_T.h \
- $(ACE_ROOT)/ace/Hash_Map_Manager_T.i \
- $(ACE_ROOT)/ace/Hash_Map_Manager_T.cpp \
- $(ACE_ROOT)/ace/Strategies_T.i \
- $(ACE_ROOT)/ace/Strategies_T.cpp \
- $(ACE_ROOT)/ace/Service_Repository.h \
- $(ACE_ROOT)/ace/Service_Types.h \
- $(ACE_ROOT)/ace/Service_Types.i \
- $(ACE_ROOT)/ace/Service_Repository.i \
- $(ACE_ROOT)/ace/WFMO_Reactor.h \
- $(ACE_ROOT)/ace/Process_Mutex.h \
- $(ACE_ROOT)/ace/Process_Mutex.inl \
- $(ACE_ROOT)/ace/WFMO_Reactor.i \
- $(ACE_ROOT)/ace/Strategies.i \
- $(ACE_ROOT)/ace/Message_Queue.i \
- $(ACE_ROOT)/ace/Task_T.i \
- $(ACE_ROOT)/ace/Task_T.cpp \
- $(ACE_ROOT)/ace/Module.h \
- $(ACE_ROOT)/ace/Module.i \
- $(ACE_ROOT)/ace/Module.cpp \
- $(ACE_ROOT)/ace/Stream_Modules.h \
- $(ACE_ROOT)/ace/Stream_Modules.cpp \
- $(TAO_ROOT)/tao/RTCORBA/Pool_Per_Endpoint.i \
- $(ACE_ROOT)/ace/Get_Opt.h \
- $(ACE_ROOT)/ace/Get_Opt.i \
- $(ACE_ROOT)/ace/Sched_Params.h \
- $(ACE_ROOT)/ace/Sched_Params.i
-
-# IF YOU PUT ANYTHING HERE IT WILL GO AWAY
diff --git a/TAO/performance-tests/Single_Threaded_Latency/Roundtrip.cpp b/TAO/performance-tests/Single_Threaded_Latency/Roundtrip.cpp
deleted file mode 100644
index 72f83576b44..00000000000
--- a/TAO/performance-tests/Single_Threaded_Latency/Roundtrip.cpp
+++ /dev/null
@@ -1,26 +0,0 @@
-//
-// $Id$
-//
-#include "Roundtrip.h"
-
-ACE_RCSID(Single_Threaded_Latency, Roundtrip, "$Id$")
-
-Roundtrip::Roundtrip (CORBA::ORB_ptr orb)
- : orb_ (CORBA::ORB::_duplicate (orb))
-{
-}
-
-Test::Timestamp
-Roundtrip::test_method (Test::Timestamp send_time
- ACE_ENV_ARG_DECL_NOT_USED)
- ACE_THROW_SPEC ((CORBA::SystemException))
-{
- return send_time;
-}
-
-void
-Roundtrip::shutdown (ACE_ENV_SINGLE_ARG_DECL)
- ACE_THROW_SPEC ((CORBA::SystemException))
-{
- this->orb_->shutdown (0 ACE_ENV_ARG_PARAMETER);
-}
diff --git a/TAO/performance-tests/Single_Threaded_Latency/Roundtrip.h b/TAO/performance-tests/Single_Threaded_Latency/Roundtrip.h
deleted file mode 100644
index 6474b130a24..00000000000
--- a/TAO/performance-tests/Single_Threaded_Latency/Roundtrip.h
+++ /dev/null
@@ -1,46 +0,0 @@
-//
-// $Id$
-//
-
-#ifndef ROUNDTRIP_H
-#define ROUNDTRIP_H
-#include /**/ "ace/pre.h"
-
-#include "TestS.h"
-
-#if defined (_MSC_VER)
-# if (_MSC_VER >= 1200)
-# pragma warning(push)
-# endif /* _MSC_VER >= 1200 */
-# pragma warning (disable:4250)
-#endif /* _MSC_VER */
-
-/// Implement the Test::Roundtrip interface
-class Roundtrip
- : public virtual POA_Test::Roundtrip
- , public virtual PortableServer::RefCountServantBase
-{
-public:
- /// Constructor
- Roundtrip (CORBA::ORB_ptr orb);
-
- // = The skeleton methods
- virtual Test::Timestamp test_method (Test::Timestamp send_time
- ACE_ENV_ARG_DECL)
- ACE_THROW_SPEC ((CORBA::SystemException));
-
- virtual void shutdown (ACE_ENV_SINGLE_ARG_DECL)
- ACE_THROW_SPEC ((CORBA::SystemException));
-
-private:
- /// Use an ORB reference to conver strings to objects and shutdown
- /// the application.
- CORBA::ORB_var orb_;
-};
-
-#if defined(_MSC_VER) && (_MSC_VER >= 1200)
-# pragma warning(pop)
-#endif /* _MSC_VER */
-
-#include /**/ "ace/post.h"
-#endif /* ROUNDTRIP_H */
diff --git a/TAO/performance-tests/Single_Threaded_Latency/client.cpp b/TAO/performance-tests/Single_Threaded_Latency/client.cpp
deleted file mode 100644
index 2d841b9909d..00000000000
--- a/TAO/performance-tests/Single_Threaded_Latency/client.cpp
+++ /dev/null
@@ -1,164 +0,0 @@
-// $Id$
-
-#include "TestC.h"
-#include "ace/Get_Opt.h"
-#include "ace/High_Res_Timer.h"
-#include "ace/Sched_Params.h"
-#include "ace/Stats.h"
-#include "ace/Sample_History.h"
-
-#include "tao/Strategies/advanced_resource.h"
-
-ACE_RCSID(Single_Threaded_Latency, client, "$Id$")
-
-const char *ior = "file://test.ior";
-int niterations = 100;
-int do_dump_history = 0;
-int do_shutdown = 1;
-
-int
-parse_args (int argc, char *argv[])
-{
- ACE_Get_Opt get_opts (argc, argv, "hxk:i:");
- int c;
-
- while ((c = get_opts ()) != -1)
- switch (c)
- {
- case 'h':
- do_dump_history = 1;
- break;
-
- case 'x':
- do_shutdown = 0;
- break;
-
- case 'k':
- ior = get_opts.opt_arg ();
- break;
-
- case 'i':
- niterations = ACE_OS::atoi (get_opts.opt_arg ());
- break;
-
- case '?':
- default:
- ACE_ERROR_RETURN ((LM_ERROR,
- "usage: %s "
- "-k <ior> "
- "-i <niterations> "
- "-x (disable shutdown) "
- "-h (dump history) "
- "\n",
- argv [0]),
- -1);
- }
- // Indicates sucessful parsing of the command line
- return 0;
-}
-
-int
-main (int argc, char *argv[])
-{
- int priority =
- (ACE_Sched_Params::priority_min (ACE_SCHED_FIFO)
- + ACE_Sched_Params::priority_max (ACE_SCHED_FIFO)) / 2;
- // Enable FIFO scheduling, e.g., RT scheduling class on Solaris.
-
- if (ACE_OS::sched_params (ACE_Sched_Params (ACE_SCHED_FIFO,
- priority,
- ACE_SCOPE_PROCESS)) != 0)
- {
- if (ACE_OS::last_error () == EPERM)
- {
- ACE_DEBUG ((LM_DEBUG,
- "client (%P|%t): user is not superuser, "
- "test runs in time-shared class\n"));
- }
- else
- ACE_ERROR ((LM_ERROR,
- "client (%P|%t): sched_params failed\n"));
- }
-
- ACE_TRY_NEW_ENV
- {
- CORBA::ORB_var orb =
- CORBA::ORB_init (argc, argv, "" ACE_ENV_ARG_PARAMETER);
- ACE_TRY_CHECK;
-
- if (parse_args (argc, argv) != 0)
- return 1;
-
- CORBA::Object_var object =
- orb->string_to_object (ior ACE_ENV_ARG_PARAMETER);
- ACE_TRY_CHECK;
-
- Test::Roundtrip_var roundtrip =
- Test::Roundtrip::_narrow (object.in () ACE_ENV_ARG_PARAMETER);
- ACE_TRY_CHECK;
-
- if (CORBA::is_nil (roundtrip.in ()))
- {
- ACE_ERROR_RETURN ((LM_ERROR,
- "Nil Test::Roundtrip reference <%s>\n",
- ior),
- 1);
- }
-
- for (int j = 0; j < 100; ++j)
- {
- ACE_hrtime_t start = 0;
- (void) roundtrip->test_method (start ACE_ENV_ARG_PARAMETER);
- ACE_TRY_CHECK;
- }
-
- ACE_Sample_History history (niterations);
-
- ACE_hrtime_t test_start = ACE_OS::gethrtime ();
- for (int i = 0; i < niterations; ++i)
- {
- ACE_hrtime_t start = ACE_OS::gethrtime ();
-
- (void) roundtrip->test_method (start ACE_ENV_ARG_PARAMETER);
- ACE_TRY_CHECK;
-
- ACE_hrtime_t now = ACE_OS::gethrtime ();
- history.sample (now - start);
- }
-
- ACE_hrtime_t test_end = ACE_OS::gethrtime ();
-
- ACE_DEBUG ((LM_DEBUG, "test finished\n"));
-
- ACE_DEBUG ((LM_DEBUG, "High resolution timer calibration...."));
- ACE_UINT32 gsf = ACE_High_Res_Timer::global_scale_factor ();
- ACE_DEBUG ((LM_DEBUG, "done\n"));
-
- if (do_dump_history)
- {
- history.dump_samples ("HISTORY", gsf);
- }
-
- ACE_Basic_Stats stats;
- history.collect_basic_stats (stats);
- stats.dump_results ("Total", gsf);
-
- ACE_Throughput_Stats::dump_throughput ("Total", gsf,
- test_end - test_start,
- stats.samples_count ());
-
- if (do_shutdown)
- {
- roundtrip->shutdown (ACE_ENV_SINGLE_ARG_PARAMETER);
- ACE_TRY_CHECK;
- }
- }
- ACE_CATCHANY
- {
- ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION, "Exception caught:");
- return 1;
- }
- ACE_ENDTRY;
-
- return 0;
-}
diff --git a/TAO/performance-tests/Single_Threaded_Latency/server.cpp b/TAO/performance-tests/Single_Threaded_Latency/server.cpp
deleted file mode 100644
index e96f0ff595a..00000000000
--- a/TAO/performance-tests/Single_Threaded_Latency/server.cpp
+++ /dev/null
@@ -1,136 +0,0 @@
-// $Id$
-
-#include "Roundtrip.h"
-#include "ace/Get_Opt.h"
-#include "ace/Sched_Params.h"
-
-#include "tao/Strategies/advanced_resource.h"
-
-ACE_RCSID(Single_Threaded_Latency, server, "$Id$")
-
-const char *ior_output_file = "test.ior";
-
-int
-parse_args (int argc, char *argv[])
-{
- ACE_Get_Opt get_opts (argc, argv, "o:");
- int c;
-
- while ((c = get_opts ()) != -1)
- switch (c)
- {
- case 'o':
- ior_output_file = get_opts.opt_arg ();
- break;
-
- case '?':
- default:
- ACE_ERROR_RETURN ((LM_ERROR,
- "usage: %s "
- "-o <iorfile>"
- "\n",
- argv [0]),
- -1);
- }
- // Indicates sucessful parsing of the command line
- return 0;
-}
-
-int
-main (int argc, char *argv[])
-{
- int priority =
- (ACE_Sched_Params::priority_min (ACE_SCHED_FIFO)
- + ACE_Sched_Params::priority_max (ACE_SCHED_FIFO)) / 2;
- priority = ACE_Sched_Params::next_priority (ACE_SCHED_FIFO,
- priority);
- // Enable FIFO scheduling, e.g., RT scheduling class on Solaris.
-
- if (ACE_OS::sched_params (ACE_Sched_Params (ACE_SCHED_FIFO,
- priority,
- ACE_SCOPE_PROCESS)) != 0)
- {
- if (ACE_OS::last_error () == EPERM)
- {
- ACE_DEBUG ((LM_DEBUG,
- "server (%P|%t): user is not superuser, "
- "test runs in time-shared class\n"));
- }
- else
- ACE_ERROR ((LM_ERROR,
- "server (%P|%t): sched_params failed\n"));
- }
-
- ACE_TRY_NEW_ENV
- {
- CORBA::ORB_var orb =
- CORBA::ORB_init (argc, argv, "" ACE_ENV_ARG_PARAMETER);
- ACE_TRY_CHECK;
-
- CORBA::Object_var poa_object =
- orb->resolve_initial_references("RootPOA" ACE_ENV_ARG_PARAMETER);
- ACE_TRY_CHECK;
-
- if (CORBA::is_nil (poa_object.in ()))
- ACE_ERROR_RETURN ((LM_ERROR,
- " (%P|%t) Unable to initialize the POA.\n"),
- 1);
-
- PortableServer::POA_var root_poa =
- PortableServer::POA::_narrow (poa_object.in () ACE_ENV_ARG_PARAMETER);
- ACE_TRY_CHECK;
-
- PortableServer::POAManager_var poa_manager =
- root_poa->the_POAManager (ACE_ENV_SINGLE_ARG_PARAMETER);
- ACE_TRY_CHECK;
-
- if (parse_args (argc, argv) != 0)
- return 1;
-
- Roundtrip *roundtrip_impl;
- ACE_NEW_RETURN (roundtrip_impl,
- Roundtrip (orb.in ()),
- 1);
- PortableServer::ServantBase_var owner_transfer(roundtrip_impl);
-
- Test::Roundtrip_var roundtrip =
- roundtrip_impl->_this (ACE_ENV_SINGLE_ARG_PARAMETER);
- ACE_TRY_CHECK;
-
- CORBA::String_var ior =
- orb->object_to_string (roundtrip.in () ACE_ENV_ARG_PARAMETER);
- ACE_TRY_CHECK;
-
- // If the ior_output_file exists, output the ior to it
- FILE *output_file= ACE_OS::fopen (ior_output_file, "w");
- if (output_file == 0)
- ACE_ERROR_RETURN ((LM_ERROR,
- "Cannot open output file for writing IOR: %s",
- ior_output_file),
- 1);
- ACE_OS::fprintf (output_file, "%s", ior.in ());
- ACE_OS::fclose (output_file);
-
- poa_manager->activate (ACE_ENV_SINGLE_ARG_PARAMETER);
- ACE_TRY_CHECK;
-
- orb->run (ACE_ENV_SINGLE_ARG_PARAMETER);
- ACE_TRY_CHECK;
-
- ACE_DEBUG ((LM_DEBUG, "(%P|%t) server - event loop finished\n"));
-
- root_poa->destroy (1, 1 ACE_ENV_ARG_PARAMETER);
- ACE_TRY_CHECK;
-
- orb->destroy (ACE_ENV_SINGLE_ARG_PARAMETER);
- ACE_TRY_CHECK;
- }
- ACE_CATCHANY
- {
- ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION, "Exception caught:");
- return 1;
- }
- ACE_ENDTRY;
-
- return 0;
-}
diff --git a/TAO/performance-tests/Thread_Per_Connection_Latency/Client_Task.cpp b/TAO/performance-tests/Thread_Per_Connection_Latency/Client_Task.cpp
deleted file mode 100644
index 09d15331436..00000000000
--- a/TAO/performance-tests/Thread_Per_Connection_Latency/Client_Task.cpp
+++ /dev/null
@@ -1,65 +0,0 @@
-//
-// $Id$
-//
-#include "Client_Task.h"
-
-ACE_RCSID(Thread_Per_Connection_Latency, Client_Task, "$Id$")
-
-Client_Task::Client_Task (Test::Roundtrip_ptr roundtrip,
- int niterations)
- : roundtrip_ (Test::Roundtrip::_duplicate (roundtrip))
- , niterations_ (niterations)
-{
-}
-
-int
-Client_Task::svc (void)
-{
- ACE_DECLARE_NEW_CORBA_ENV;
- ACE_TRY
- {
- this->validate_connection (ACE_ENV_SINGLE_ARG_PARAMETER);
- ACE_TRY_CHECK;
-
- for (int i = 0; i != this->niterations_; ++i)
- {
- CORBA::ULongLong start = ACE_OS::gethrtime ();
-
- (void) this->roundtrip_->test_method (start ACE_ENV_ARG_PARAMETER);
- ACE_TRY_CHECK;
-
- ACE_hrtime_t now = ACE_OS::gethrtime ();
- this->latency_.sample (now - start);
- }
- }
- ACE_CATCHANY
- {
- return 0;
- }
- ACE_ENDTRY;
- return 0;
-}
-
-void
-Client_Task::accumulate_and_dump (ACE_Basic_Stats &totals,
- const char *msg,
- ACE_UINT32 gsf)
-{
- totals.accumulate (this->latency_);
- this->latency_.dump_results (msg, gsf);
-}
-
-void
-Client_Task::validate_connection (ACE_ENV_SINGLE_ARG_DECL)
-{
- CORBA::ULongLong dummy = 0;
- for (int i = 0; i != 100; ++i)
- {
- ACE_TRY
- {
- (void) this->roundtrip_->test_method (dummy ACE_ENV_ARG_PARAMETER);
- ACE_TRY_CHECK;
- }
- ACE_CATCHANY {} ACE_ENDTRY;
- }
-}
diff --git a/TAO/performance-tests/Thread_Per_Connection_Latency/Client_Task.h b/TAO/performance-tests/Thread_Per_Connection_Latency/Client_Task.h
deleted file mode 100644
index 476ee8bd23c..00000000000
--- a/TAO/performance-tests/Thread_Per_Connection_Latency/Client_Task.h
+++ /dev/null
@@ -1,46 +0,0 @@
-//
-// $Id$
-//
-
-#ifndef CLIENT_TASK_H
-#define CLIENT_TASK_H
-#include /**/ "ace/pre.h"
-
-#include "TestC.h"
-#include "ace/Task.h"
-#include "ace/Basic_Stats.h"
-
-/// Implement the Test::Client_Task interface
-class Client_Task : public ACE_Task_Base
-{
-public:
- /// Constructor
- Client_Task (Test::Roundtrip_ptr roundtrip,
- int niterations);
-
- /// Add this thread results to the global numbers and print the
- /// per-thread results.
- void accumulate_and_dump (ACE_Basic_Stats &totals,
- const char *msg,
- ACE_UINT32 gsf);
-
- /// The service method
- virtual int svc (void);
-
-private:
- /// Make sure that the current thread has a connection available.
- void validate_connection (ACE_ENV_SINGLE_ARG_DECL);
-
-private:
- /// The object reference used for this test
- Test::Roundtrip_var roundtrip_;
-
- /// The number of iterations
- int niterations_;
-
- /// Keep track of the latency (minimum, average, maximum and jitter)
- ACE_Basic_Stats latency_;
-};
-
-#include /**/ "ace/post.h"
-#endif /* CLIENT_TASK_H */
diff --git a/TAO/performance-tests/Thread_Per_Connection_Latency/Roundtrip.cpp b/TAO/performance-tests/Thread_Per_Connection_Latency/Roundtrip.cpp
deleted file mode 100644
index 2bc67948fd0..00000000000
--- a/TAO/performance-tests/Thread_Per_Connection_Latency/Roundtrip.cpp
+++ /dev/null
@@ -1,26 +0,0 @@
-//
-// $Id$
-//
-#include "Roundtrip.h"
-
-ACE_RCSID(Single_Per_Connection_Latency, Roundtrip, "$Id$")
-
-Roundtrip::Roundtrip (CORBA::ORB_ptr orb)
- : orb_ (CORBA::ORB::_duplicate (orb))
-{
-}
-
-Test::Timestamp
-Roundtrip::test_method (Test::Timestamp send_time
- ACE_ENV_ARG_DECL_NOT_USED)
- ACE_THROW_SPEC ((CORBA::SystemException))
-{
- return send_time;
-}
-
-void
-Roundtrip::shutdown (ACE_ENV_SINGLE_ARG_DECL)
- ACE_THROW_SPEC ((CORBA::SystemException))
-{
- this->orb_->shutdown (0 ACE_ENV_ARG_PARAMETER);
-}
diff --git a/TAO/performance-tests/Thread_Per_Connection_Latency/Roundtrip.h b/TAO/performance-tests/Thread_Per_Connection_Latency/Roundtrip.h
deleted file mode 100644
index 6474b130a24..00000000000
--- a/TAO/performance-tests/Thread_Per_Connection_Latency/Roundtrip.h
+++ /dev/null
@@ -1,46 +0,0 @@
-//
-// $Id$
-//
-
-#ifndef ROUNDTRIP_H
-#define ROUNDTRIP_H
-#include /**/ "ace/pre.h"
-
-#include "TestS.h"
-
-#if defined (_MSC_VER)
-# if (_MSC_VER >= 1200)
-# pragma warning(push)
-# endif /* _MSC_VER >= 1200 */
-# pragma warning (disable:4250)
-#endif /* _MSC_VER */
-
-/// Implement the Test::Roundtrip interface
-class Roundtrip
- : public virtual POA_Test::Roundtrip
- , public virtual PortableServer::RefCountServantBase
-{
-public:
- /// Constructor
- Roundtrip (CORBA::ORB_ptr orb);
-
- // = The skeleton methods
- virtual Test::Timestamp test_method (Test::Timestamp send_time
- ACE_ENV_ARG_DECL)
- ACE_THROW_SPEC ((CORBA::SystemException));
-
- virtual void shutdown (ACE_ENV_SINGLE_ARG_DECL)
- ACE_THROW_SPEC ((CORBA::SystemException));
-
-private:
- /// Use an ORB reference to conver strings to objects and shutdown
- /// the application.
- CORBA::ORB_var orb_;
-};
-
-#if defined(_MSC_VER) && (_MSC_VER >= 1200)
-# pragma warning(pop)
-#endif /* _MSC_VER */
-
-#include /**/ "ace/post.h"
-#endif /* ROUNDTRIP_H */
diff --git a/TAO/performance-tests/Thread_Per_Connection_Latency/client.cpp b/TAO/performance-tests/Thread_Per_Connection_Latency/client.cpp
deleted file mode 100644
index 69aac2b4ca5..00000000000
--- a/TAO/performance-tests/Thread_Per_Connection_Latency/client.cpp
+++ /dev/null
@@ -1,149 +0,0 @@
-// $Id$
-
-#include "Client_Task.h"
-#include "ace/Get_Opt.h"
-#include "ace/High_Res_Timer.h"
-#include "ace/Sched_Params.h"
-#include "ace/Stats.h"
-
-#include "tao/Strategies/advanced_resource.h"
-
-ACE_RCSID(Thread_Per_Connection_Latency, client, "$Id$")
-
-const char *ior = "file://test.ior";
-int niterations = 1000;
-int do_shutdown = 1;
-
-int
-parse_args (int argc, char *argv[])
-{
- ACE_Get_Opt get_opts (argc, argv, "xk:i:");
- int c;
-
- while ((c = get_opts ()) != -1)
- switch (c)
- {
- case 'x':
- do_shutdown = 0;
- break;
-
- case 'k':
- ior = get_opts.opt_arg ();
- break;
-
- case 'i':
- niterations = ACE_OS::atoi (get_opts.opt_arg ());
- break;
-
- case '?':
- default:
- ACE_ERROR_RETURN ((LM_ERROR,
- "usage: %s "
- "-k <ior> "
- "-i <niterations> "
- "-x (disable shutdown) "
- "\n",
- argv [0]),
- -1);
- }
- // Indicates sucessful parsing of the command line
- return 0;
-}
-
-int
-main (int argc, char *argv[])
-{
- int priority =
- (ACE_Sched_Params::priority_min (ACE_SCHED_FIFO)
- + ACE_Sched_Params::priority_max (ACE_SCHED_FIFO)) / 2;
- // Enable FIFO scheduling, e.g., RT scheduling class on Solaris.
-
- if (ACE_OS::sched_params (ACE_Sched_Params (ACE_SCHED_FIFO,
- priority,
- ACE_SCOPE_PROCESS)) != 0)
- {
- if (ACE_OS::last_error () == EPERM)
- {
- ACE_DEBUG ((LM_DEBUG,
- "client (%P|%t): user is not superuser, "
- "test runs in time-shared class\n"));
- }
- else
- ACE_ERROR ((LM_ERROR,
- "client (%P|%t): sched_params failed\n"));
- }
-
- ACE_TRY_NEW_ENV
- {
- CORBA::ORB_var orb =
- CORBA::ORB_init (argc, argv, "" ACE_ENV_ARG_PARAMETER);
- ACE_TRY_CHECK;
-
- if (parse_args (argc, argv) != 0)
- return 1;
-
- CORBA::Object_var object =
- orb->string_to_object (ior ACE_ENV_ARG_PARAMETER);
- ACE_TRY_CHECK;
-
- Test::Roundtrip_var roundtrip =
- Test::Roundtrip::_narrow (object.in () ACE_ENV_ARG_PARAMETER);
- ACE_TRY_CHECK;
-
- if (CORBA::is_nil (roundtrip.in ()))
- {
- ACE_ERROR_RETURN ((LM_ERROR,
- "Nil Test::Roundtrip reference <%s>\n",
- ior),
- 1);
- }
-
- ACE_DEBUG ((LM_DEBUG, "Starting threads\n"));
-
- Client_Task task0(roundtrip.in (), niterations);
- Client_Task task1(roundtrip.in (), niterations);
- Client_Task task2(roundtrip.in (), niterations);
- Client_Task task3(roundtrip.in (), niterations);
-
- ACE_hrtime_t test_start = ACE_OS::gethrtime ();
- task0.activate(THR_NEW_LWP | THR_JOINABLE);
- task1.activate(THR_NEW_LWP | THR_JOINABLE);
- task2.activate(THR_NEW_LWP | THR_JOINABLE);
- task3.activate(THR_NEW_LWP | THR_JOINABLE);
-
- task0.thr_mgr()->wait ();
- ACE_hrtime_t test_end = ACE_OS::gethrtime ();
-
- ACE_DEBUG ((LM_DEBUG, "Threads finished\n"));
-
- ACE_DEBUG ((LM_DEBUG, "High resolution timer calibration...."));
- ACE_UINT32 gsf = ACE_High_Res_Timer::global_scale_factor ();
- ACE_DEBUG ((LM_DEBUG, "done\n"));
-
- ACE_Basic_Stats totals;
- task0.accumulate_and_dump (totals, "Task[0]", gsf);
- task1.accumulate_and_dump (totals, "Task[1]", gsf);
- task2.accumulate_and_dump (totals, "Task[2]", gsf);
- task3.accumulate_and_dump (totals, "Task[3]", gsf);
-
- totals.dump_results ("Total", gsf);
-
- ACE_Throughput_Stats::dump_throughput ("Total", gsf,
- test_end - test_start,
- totals.samples_count ());
-
- if (do_shutdown)
- {
- roundtrip->shutdown (ACE_ENV_SINGLE_ARG_PARAMETER);
- ACE_TRY_CHECK;
- }
- }
- ACE_CATCHANY
- {
- ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION, "Exception caught:");
- return 1;
- }
- ACE_ENDTRY;
-
- return 0;
-}
diff --git a/TAO/performance-tests/Thread_Per_Connection_Latency/server.cpp b/TAO/performance-tests/Thread_Per_Connection_Latency/server.cpp
deleted file mode 100644
index 004ce70cebf..00000000000
--- a/TAO/performance-tests/Thread_Per_Connection_Latency/server.cpp
+++ /dev/null
@@ -1,136 +0,0 @@
-// $Id$
-
-#include "Roundtrip.h"
-#include "ace/Get_Opt.h"
-#include "ace/Sched_Params.h"
-
-#include "tao/Strategies/advanced_resource.h"
-
-ACE_RCSID(Thread_Per_Connection_Latency, server, "$Id$")
-
-const char *ior_output_file = "test.ior";
-
-int
-parse_args (int argc, char *argv[])
-{
- ACE_Get_Opt get_opts (argc, argv, "o:");
- int c;
-
- while ((c = get_opts ()) != -1)
- switch (c)
- {
- case 'o':
- ior_output_file = get_opts.opt_arg ();
- break;
-
- case '?':
- default:
- ACE_ERROR_RETURN ((LM_ERROR,
- "usage: %s "
- "-o <iorfile>"
- "\n",
- argv [0]),
- -1);
- }
- // Indicates sucessful parsing of the command line
- return 0;
-}
-
-int
-main (int argc, char *argv[])
-{
- int priority =
- (ACE_Sched_Params::priority_min (ACE_SCHED_FIFO)
- + ACE_Sched_Params::priority_max (ACE_SCHED_FIFO)) / 2;
- priority = ACE_Sched_Params::next_priority (ACE_SCHED_FIFO,
- priority);
- // Enable FIFO scheduling, e.g., RT scheduling class on Solaris.
-
- if (ACE_OS::sched_params (ACE_Sched_Params (ACE_SCHED_FIFO,
- priority,
- ACE_SCOPE_PROCESS)) != 0)
- {
- if (ACE_OS::last_error () == EPERM)
- {
- ACE_DEBUG ((LM_DEBUG,
- "server (%P|%t): user is not superuser, "
- "test runs in time-shared class\n"));
- }
- else
- ACE_ERROR ((LM_ERROR,
- "server (%P|%t): sched_params failed\n"));
- }
-
- ACE_TRY_NEW_ENV
- {
- CORBA::ORB_var orb =
- CORBA::ORB_init (argc, argv, "" ACE_ENV_ARG_PARAMETER);
- ACE_TRY_CHECK;
-
- CORBA::Object_var poa_object =
- orb->resolve_initial_references("RootPOA" ACE_ENV_ARG_PARAMETER);
- ACE_TRY_CHECK;
-
- if (CORBA::is_nil (poa_object.in ()))
- ACE_ERROR_RETURN ((LM_ERROR,
- " (%P|%t) Unable to initialize the POA.\n"),
- 1);
-
- PortableServer::POA_var root_poa =
- PortableServer::POA::_narrow (poa_object.in () ACE_ENV_ARG_PARAMETER);
- ACE_TRY_CHECK;
-
- PortableServer::POAManager_var poa_manager =
- root_poa->the_POAManager (ACE_ENV_SINGLE_ARG_PARAMETER);
- ACE_TRY_CHECK;
-
- if (parse_args (argc, argv) != 0)
- return 1;
-
- Roundtrip *roundtrip_impl;
- ACE_NEW_RETURN (roundtrip_impl,
- Roundtrip (orb.in ()),
- 1);
- PortableServer::ServantBase_var owner_transfer(roundtrip_impl);
-
- Test::Roundtrip_var roundtrip =
- roundtrip_impl->_this (ACE_ENV_SINGLE_ARG_PARAMETER);
- ACE_TRY_CHECK;
-
- CORBA::String_var ior =
- orb->object_to_string (roundtrip.in () ACE_ENV_ARG_PARAMETER);
- ACE_TRY_CHECK;
-
- // If the ior_output_file exists, output the ior to it
- FILE *output_file= ACE_OS::fopen (ior_output_file, "w");
- if (output_file == 0)
- ACE_ERROR_RETURN ((LM_ERROR,
- "Cannot open output file for writing IOR: %s",
- ior_output_file),
- 1);
- ACE_OS::fprintf (output_file, "%s", ior.in ());
- ACE_OS::fclose (output_file);
-
- poa_manager->activate (ACE_ENV_SINGLE_ARG_PARAMETER);
- ACE_TRY_CHECK;
-
- orb->run (ACE_ENV_SINGLE_ARG_PARAMETER);
- ACE_TRY_CHECK;
-
- ACE_DEBUG ((LM_DEBUG, "(%P|%t) server - event loop finished\n"));
-
- root_poa->destroy (1, 1 ACE_ENV_ARG_PARAMETER);
- ACE_TRY_CHECK;
-
- orb->destroy (ACE_ENV_SINGLE_ARG_PARAMETER);
- ACE_TRY_CHECK;
- }
- ACE_CATCHANY
- {
- ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION, "Exception caught:");
- return 1;
- }
- ACE_ENDTRY;
-
- return 0;
-}
diff --git a/TAO/performance-tests/Thread_Pool_Latency/Client_Task.cpp b/TAO/performance-tests/Thread_Pool_Latency/Client_Task.cpp
deleted file mode 100644
index efb544633b2..00000000000
--- a/TAO/performance-tests/Thread_Pool_Latency/Client_Task.cpp
+++ /dev/null
@@ -1,65 +0,0 @@
-//
-// $Id$
-//
-#include "Client_Task.h"
-
-ACE_RCSID(Thread_Pool_Latency, Client_Task, "$Id$")
-
-Client_Task::Client_Task (Test::Roundtrip_ptr roundtrip,
- int niterations)
- : roundtrip_ (Test::Roundtrip::_duplicate (roundtrip))
- , niterations_ (niterations)
-{
-}
-
-int
-Client_Task::svc (void)
-{
- ACE_DECLARE_NEW_CORBA_ENV;
- ACE_TRY
- {
- this->validate_connection (ACE_ENV_SINGLE_ARG_PARAMETER);
- ACE_TRY_CHECK;
-
- for (int i = 0; i != this->niterations_; ++i)
- {
- CORBA::ULongLong start = ACE_OS::gethrtime ();
-
- (void) this->roundtrip_->test_method (start ACE_ENV_ARG_PARAMETER);
- ACE_TRY_CHECK;
-
- ACE_hrtime_t now = ACE_OS::gethrtime ();
- this->latency_.sample (now - start);
- }
- }
- ACE_CATCHANY
- {
- return 0;
- }
- ACE_ENDTRY;
- return 0;
-}
-
-void
-Client_Task::accumulate_and_dump (ACE_Basic_Stats &totals,
- const char *msg,
- ACE_UINT32 gsf)
-{
- totals.accumulate (this->latency_);
- this->latency_.dump_results (msg, gsf);
-}
-
-void
-Client_Task::validate_connection (ACE_ENV_SINGLE_ARG_DECL)
-{
- CORBA::ULongLong dummy = 0;
- for (int i = 0; i != 100; ++i)
- {
- ACE_TRY
- {
- (void) this->roundtrip_->test_method (dummy ACE_ENV_ARG_PARAMETER);
- ACE_TRY_CHECK;
- }
- ACE_CATCHANY {} ACE_ENDTRY;
- }
-}
diff --git a/TAO/performance-tests/Thread_Pool_Latency/Client_Task.h b/TAO/performance-tests/Thread_Pool_Latency/Client_Task.h
deleted file mode 100644
index 476ee8bd23c..00000000000
--- a/TAO/performance-tests/Thread_Pool_Latency/Client_Task.h
+++ /dev/null
@@ -1,46 +0,0 @@
-//
-// $Id$
-//
-
-#ifndef CLIENT_TASK_H
-#define CLIENT_TASK_H
-#include /**/ "ace/pre.h"
-
-#include "TestC.h"
-#include "ace/Task.h"
-#include "ace/Basic_Stats.h"
-
-/// Implement the Test::Client_Task interface
-class Client_Task : public ACE_Task_Base
-{
-public:
- /// Constructor
- Client_Task (Test::Roundtrip_ptr roundtrip,
- int niterations);
-
- /// Add this thread results to the global numbers and print the
- /// per-thread results.
- void accumulate_and_dump (ACE_Basic_Stats &totals,
- const char *msg,
- ACE_UINT32 gsf);
-
- /// The service method
- virtual int svc (void);
-
-private:
- /// Make sure that the current thread has a connection available.
- void validate_connection (ACE_ENV_SINGLE_ARG_DECL);
-
-private:
- /// The object reference used for this test
- Test::Roundtrip_var roundtrip_;
-
- /// The number of iterations
- int niterations_;
-
- /// Keep track of the latency (minimum, average, maximum and jitter)
- ACE_Basic_Stats latency_;
-};
-
-#include /**/ "ace/post.h"
-#endif /* CLIENT_TASK_H */
diff --git a/TAO/performance-tests/Thread_Pool_Latency/Roundtrip.cpp b/TAO/performance-tests/Thread_Pool_Latency/Roundtrip.cpp
deleted file mode 100644
index 6028512202c..00000000000
--- a/TAO/performance-tests/Thread_Pool_Latency/Roundtrip.cpp
+++ /dev/null
@@ -1,26 +0,0 @@
-//
-// $Id$
-//
-#include "Roundtrip.h"
-
-ACE_RCSID(Thread_Pool_Latency, Roundtrip, "$Id$")
-
-Roundtrip::Roundtrip (CORBA::ORB_ptr orb)
- : orb_ (CORBA::ORB::_duplicate (orb))
-{
-}
-
-Test::Timestamp
-Roundtrip::test_method (Test::Timestamp send_time
- ACE_ENV_ARG_DECL_NOT_USED)
- ACE_THROW_SPEC ((CORBA::SystemException))
-{
- return send_time;
-}
-
-void
-Roundtrip::shutdown (ACE_ENV_SINGLE_ARG_DECL)
- ACE_THROW_SPEC ((CORBA::SystemException))
-{
- this->orb_->shutdown (0 ACE_ENV_ARG_PARAMETER);
-}
diff --git a/TAO/performance-tests/Thread_Pool_Latency/Roundtrip.h b/TAO/performance-tests/Thread_Pool_Latency/Roundtrip.h
deleted file mode 100644
index 6474b130a24..00000000000
--- a/TAO/performance-tests/Thread_Pool_Latency/Roundtrip.h
+++ /dev/null
@@ -1,46 +0,0 @@
-//
-// $Id$
-//
-
-#ifndef ROUNDTRIP_H
-#define ROUNDTRIP_H
-#include /**/ "ace/pre.h"
-
-#include "TestS.h"
-
-#if defined (_MSC_VER)
-# if (_MSC_VER >= 1200)
-# pragma warning(push)
-# endif /* _MSC_VER >= 1200 */
-# pragma warning (disable:4250)
-#endif /* _MSC_VER */
-
-/// Implement the Test::Roundtrip interface
-class Roundtrip
- : public virtual POA_Test::Roundtrip
- , public virtual PortableServer::RefCountServantBase
-{
-public:
- /// Constructor
- Roundtrip (CORBA::ORB_ptr orb);
-
- // = The skeleton methods
- virtual Test::Timestamp test_method (Test::Timestamp send_time
- ACE_ENV_ARG_DECL)
- ACE_THROW_SPEC ((CORBA::SystemException));
-
- virtual void shutdown (ACE_ENV_SINGLE_ARG_DECL)
- ACE_THROW_SPEC ((CORBA::SystemException));
-
-private:
- /// Use an ORB reference to conver strings to objects and shutdown
- /// the application.
- CORBA::ORB_var orb_;
-};
-
-#if defined(_MSC_VER) && (_MSC_VER >= 1200)
-# pragma warning(pop)
-#endif /* _MSC_VER */
-
-#include /**/ "ace/post.h"
-#endif /* ROUNDTRIP_H */
diff --git a/TAO/performance-tests/Thread_Pool_Latency/Worker_Thread.cpp b/TAO/performance-tests/Thread_Pool_Latency/Worker_Thread.cpp
deleted file mode 100644
index e485bb2b843..00000000000
--- a/TAO/performance-tests/Thread_Pool_Latency/Worker_Thread.cpp
+++ /dev/null
@@ -1,24 +0,0 @@
-//
-// $Id$
-//
-#include "Worker_Thread.h"
-
-ACE_RCSID(Thread_Pool_Latency, Worker_Thread, "$Id$")
-
-Worker_Thread::Worker_Thread (CORBA::ORB_ptr orb)
- : orb_ (CORBA::ORB::_duplicate (orb))
-{
-}
-
-int
-Worker_Thread::svc (void)
-{
- ACE_DECLARE_NEW_CORBA_ENV;
- ACE_TRY
- {
- this->orb_->run (ACE_ENV_SINGLE_ARG_PARAMETER);
- ACE_TRY_CHECK;
- }
- ACE_CATCHANY {} ACE_ENDTRY;
- return 0;
-}
diff --git a/TAO/performance-tests/Thread_Pool_Latency/client.cpp b/TAO/performance-tests/Thread_Pool_Latency/client.cpp
deleted file mode 100644
index 643f541a53f..00000000000
--- a/TAO/performance-tests/Thread_Pool_Latency/client.cpp
+++ /dev/null
@@ -1,149 +0,0 @@
-// $Id$
-
-#include "Client_Task.h"
-#include "ace/Get_Opt.h"
-#include "ace/High_Res_Timer.h"
-#include "ace/Sched_Params.h"
-#include "ace/Stats.h"
-
-#include "tao/Strategies/advanced_resource.h"
-
-ACE_RCSID(Thread_Pool_Latency, client, "$Id$")
-
-const char *ior = "file://test.ior";
-int niterations = 1000;
-int do_shutdown = 1;
-
-int
-parse_args (int argc, char *argv[])
-{
- ACE_Get_Opt get_opts (argc, argv, "xk:i:");
- int c;
-
- while ((c = get_opts ()) != -1)
- switch (c)
- {
- case 'x':
- do_shutdown = 0;
- break;
-
- case 'k':
- ior = get_opts.opt_arg ();
- break;
-
- case 'i':
- niterations = ACE_OS::atoi (get_opts.opt_arg ());
- break;
-
- case '?':
- default:
- ACE_ERROR_RETURN ((LM_ERROR,
- "usage: %s "
- "-k <ior> "
- "-i <niterations> "
- "-x (disable shutdown) "
- "\n",
- argv [0]),
- -1);
- }
- // Indicates sucessful parsing of the command line
- return 0;
-}
-
-int
-main (int argc, char *argv[])
-{
- int priority =
- (ACE_Sched_Params::priority_min (ACE_SCHED_FIFO)
- + ACE_Sched_Params::priority_max (ACE_SCHED_FIFO)) / 2;
- // Enable FIFO scheduling, e.g., RT scheduling class on Solaris.
-
- if (ACE_OS::sched_params (ACE_Sched_Params (ACE_SCHED_FIFO,
- priority,
- ACE_SCOPE_PROCESS)) != 0)
- {
- if (ACE_OS::last_error () == EPERM)
- {
- ACE_DEBUG ((LM_DEBUG,
- "client (%P|%t): user is not superuser, "
- "test runs in time-shared class\n"));
- }
- else
- ACE_ERROR ((LM_ERROR,
- "client (%P|%t): sched_params failed\n"));
- }
-
- ACE_TRY_NEW_ENV
- {
- CORBA::ORB_var orb =
- CORBA::ORB_init (argc, argv, "" ACE_ENV_ARG_PARAMETER);
- ACE_TRY_CHECK;
-
- if (parse_args (argc, argv) != 0)
- return 1;
-
- CORBA::Object_var object =
- orb->string_to_object (ior ACE_ENV_ARG_PARAMETER);
- ACE_TRY_CHECK;
-
- Test::Roundtrip_var roundtrip =
- Test::Roundtrip::_narrow (object.in () ACE_ENV_ARG_PARAMETER);
- ACE_TRY_CHECK;
-
- if (CORBA::is_nil (roundtrip.in ()))
- {
- ACE_ERROR_RETURN ((LM_ERROR,
- "Nil Test::Roundtrip reference <%s>\n",
- ior),
- 1);
- }
-
- ACE_DEBUG ((LM_DEBUG, "Starting threads\n"));
-
- Client_Task task0(roundtrip.in (), niterations);
- Client_Task task1(roundtrip.in (), niterations);
- Client_Task task2(roundtrip.in (), niterations);
- Client_Task task3(roundtrip.in (), niterations);
-
- ACE_hrtime_t test_start = ACE_OS::gethrtime ();
- task0.activate(THR_NEW_LWP | THR_JOINABLE);
- task1.activate(THR_NEW_LWP | THR_JOINABLE);
- task2.activate(THR_NEW_LWP | THR_JOINABLE);
- task3.activate(THR_NEW_LWP | THR_JOINABLE);
-
- task0.thr_mgr()->wait ();
- ACE_hrtime_t test_end = ACE_OS::gethrtime ();
-
- ACE_DEBUG ((LM_DEBUG, "Threads finished\n"));
-
- ACE_DEBUG ((LM_DEBUG, "High resolution timer calibration...."));
- ACE_UINT32 gsf = ACE_High_Res_Timer::global_scale_factor ();
- ACE_DEBUG ((LM_DEBUG, "done\n"));
-
- ACE_Basic_Stats totals;
- task0.accumulate_and_dump (totals, "Task[0]", gsf);
- task1.accumulate_and_dump (totals, "Task[1]", gsf);
- task2.accumulate_and_dump (totals, "Task[2]", gsf);
- task3.accumulate_and_dump (totals, "Task[3]", gsf);
-
- totals.dump_results ("Total", gsf);
-
- ACE_Throughput_Stats::dump_throughput ("Total", gsf,
- test_end - test_start,
- totals.samples_count ());
-
- if (do_shutdown)
- {
- roundtrip->shutdown (ACE_ENV_SINGLE_ARG_PARAMETER);
- ACE_TRY_CHECK;
- }
- }
- ACE_CATCHANY
- {
- ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION, "Exception caught:");
- return 1;
- }
- ACE_ENDTRY;
-
- return 0;
-}
diff --git a/TAO/performance-tests/Thread_Pool_Latency/server.cpp b/TAO/performance-tests/Thread_Pool_Latency/server.cpp
deleted file mode 100644
index bcacaf713c2..00000000000
--- a/TAO/performance-tests/Thread_Pool_Latency/server.cpp
+++ /dev/null
@@ -1,139 +0,0 @@
-// $Id$
-
-#include "Roundtrip.h"
-#include "Worker_Thread.h"
-#include "ace/Get_Opt.h"
-#include "ace/Sched_Params.h"
-
-#include "tao/Strategies/advanced_resource.h"
-
-ACE_RCSID(Thread_Pool_Latency, server, "$Id$")
-
-const char *ior_output_file = "test.ior";
-
-int
-parse_args (int argc, char *argv[])
-{
- ACE_Get_Opt get_opts (argc, argv, "o:");
- int c;
-
- while ((c = get_opts ()) != -1)
- switch (c)
- {
- case 'o':
- ior_output_file = get_opts.opt_arg ();
- break;
-
- case '?':
- default:
- ACE_ERROR_RETURN ((LM_ERROR,
- "usage: %s "
- "-o <iorfile>"
- "\n",
- argv [0]),
- -1);
- }
- // Indicates sucessful parsing of the command line
- return 0;
-}
-
-int
-main (int argc, char *argv[])
-{
- int priority =
- (ACE_Sched_Params::priority_min (ACE_SCHED_FIFO)
- + ACE_Sched_Params::priority_max (ACE_SCHED_FIFO)) / 2;
- priority = ACE_Sched_Params::next_priority (ACE_SCHED_FIFO,
- priority);
- // Enable FIFO scheduling, e.g., RT scheduling class on Solaris.
-
- if (ACE_OS::sched_params (ACE_Sched_Params (ACE_SCHED_FIFO,
- priority,
- ACE_SCOPE_PROCESS)) != 0)
- {
- if (ACE_OS::last_error () == EPERM)
- {
- ACE_DEBUG ((LM_DEBUG,
- "server (%P|%t): user is not superuser, "
- "test runs in time-shared class\n"));
- }
- else
- ACE_ERROR ((LM_ERROR,
- "server (%P|%t): sched_params failed\n"));
- }
-
- ACE_TRY_NEW_ENV
- {
- CORBA::ORB_var orb =
- CORBA::ORB_init (argc, argv, "" ACE_ENV_ARG_PARAMETER);
- ACE_TRY_CHECK;
-
- CORBA::Object_var poa_object =
- orb->resolve_initial_references("RootPOA" ACE_ENV_ARG_PARAMETER);
- ACE_TRY_CHECK;
-
- if (CORBA::is_nil (poa_object.in ()))
- ACE_ERROR_RETURN ((LM_ERROR,
- " (%P|%t) Unable to initialize the POA.\n"),
- 1);
-
- PortableServer::POA_var root_poa =
- PortableServer::POA::_narrow (poa_object.in () ACE_ENV_ARG_PARAMETER);
- ACE_TRY_CHECK;
-
- PortableServer::POAManager_var poa_manager =
- root_poa->the_POAManager (ACE_ENV_SINGLE_ARG_PARAMETER);
- ACE_TRY_CHECK;
-
- if (parse_args (argc, argv) != 0)
- return 1;
-
- Roundtrip *roundtrip_impl;
- ACE_NEW_RETURN (roundtrip_impl,
- Roundtrip (orb.in ()),
- 1);
- PortableServer::ServantBase_var owner_transfer(roundtrip_impl);
-
- Test::Roundtrip_var roundtrip =
- roundtrip_impl->_this (ACE_ENV_SINGLE_ARG_PARAMETER);
- ACE_TRY_CHECK;
-
- CORBA::String_var ior =
- orb->object_to_string (roundtrip.in () ACE_ENV_ARG_PARAMETER);
- ACE_TRY_CHECK;
-
- // If the ior_output_file exists, output the ior to it
- FILE *output_file= ACE_OS::fopen (ior_output_file, "w");
- if (output_file == 0)
- ACE_ERROR_RETURN ((LM_ERROR,
- "Cannot open output file for writing IOR: %s",
- ior_output_file),
- 1);
- ACE_OS::fprintf (output_file, "%s", ior.in ());
- ACE_OS::fclose (output_file);
-
- poa_manager->activate (ACE_ENV_SINGLE_ARG_PARAMETER);
- ACE_TRY_CHECK;
-
- Worker_Thread worker (orb.in ());
-
- worker.activate (THR_NEW_LWP | THR_JOINABLE, 4, 1);
- worker.thr_mgr ()->wait ();
-
- ACE_DEBUG ((LM_DEBUG, "(%P|%t) server - event loop finished\n"));
-
- root_poa->destroy (1, 1 ACE_ENV_ARG_PARAMETER);
- ACE_TRY_CHECK;
-
- orb->destroy (ACE_ENV_SINGLE_ARG_PARAMETER);
- ACE_TRY_CHECK;
- }
- ACE_CATCHANY
- {
- ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION, "Exception caught:");
- return 1;
- }
- ACE_ENDTRY;
-
- return 0;
-}
diff --git a/TAO/tao/AnyTypeCode/PI_ForwardA.h b/TAO/tao/AnyTypeCode/PI_ForwardA.h
index f99092e4ec1..7286439cc39 100644
--- a/TAO/tao/AnyTypeCode/PI_ForwardA.h
+++ b/TAO/tao/AnyTypeCode/PI_ForwardA.h
@@ -121,8 +121,9 @@ namespace PortableInterceptor
// TAO_IDL - Generated from
// be\be_visitor_typedef/typedef_ch.cpp:379
- typedef CORBA::Long AdapterManagerId;
- typedef CORBA::Long_out AdapterManagerId_out;
+ typedef char * AdapterManagerId;
+ typedef CORBA::String_var AdapterManagerId_var;
+ typedef CORBA::String_out AdapterManagerId_out;
// TAO_IDL - Generated from
// be\be_visitor_typecode/typecode_decl.cpp:44
diff --git a/TAO/tao/AnyTypeCode/skip.cpp b/TAO/tao/AnyTypeCode/skip.cpp
index a508b7c8f89..81433f202fb 100644
--- a/TAO/tao/AnyTypeCode/skip.cpp
+++ b/TAO/tao/AnyTypeCode/skip.cpp
@@ -374,7 +374,7 @@ TAO_Marshal_Union::skip (CORBA::TypeCode_ptr tc,
CORBA::Char char_v = CORBA::Char();
CORBA::WChar wchar_v = CORBA::WChar();
CORBA::Boolean boolean_v = false;
-
+
switch (kind)
{
case CORBA::tk_short:
@@ -957,9 +957,9 @@ TAO_Marshal_Value::skip (CORBA::TypeCode_ptr tc,
{
this->nested_processing_ = 1;
- CORBA::ULong value_tag;
+ CORBA::Long value_tag;
- if (!stream->read_ulong (value_tag))
+ if (!stream->read_long (value_tag))
{
return TAO::TRAVERSE_STOP;
}
diff --git a/TAO/tao/Blocked_Connect_Strategy.cpp b/TAO/tao/Blocked_Connect_Strategy.cpp
index 9317a128679..e5ee355a042 100644
--- a/TAO/tao/Blocked_Connect_Strategy.cpp
+++ b/TAO/tao/Blocked_Connect_Strategy.cpp
@@ -38,21 +38,13 @@ TAO_Blocked_Connect_Strategy::synch_options (ACE_Time_Value *timeout,
}
}
-
int
-TAO_Blocked_Connect_Strategy::wait (TAO_Connection_Handler *,
+TAO_Blocked_Connect_Strategy::wait_i (TAO_LF_Event *,
+ TAO_Transport *,
ACE_Time_Value * )
{
// We cannot wait for connection completion
return -1;
}
-int
-TAO_Blocked_Connect_Strategy::wait (TAO_Transport *,
- ACE_Time_Value *)
-{
- // We cannot wait for connection completion
- return -1;
-}
-
TAO_END_VERSIONED_NAMESPACE_DECL
diff --git a/TAO/tao/Blocked_Connect_Strategy.h b/TAO/tao/Blocked_Connect_Strategy.h
index 9c547ebfc23..9eea4edaebc 100644
--- a/TAO/tao/Blocked_Connect_Strategy.h
+++ b/TAO/tao/Blocked_Connect_Strategy.h
@@ -45,11 +45,11 @@ public:
virtual void synch_options (ACE_Time_Value *val,
ACE_Synch_Options &opt);
- virtual int wait (TAO_Connection_Handler *ch,
+protected:
+ virtual int wait_i (TAO_LF_Event *ev,
+ TAO_Transport *t,
ACE_Time_Value *val);
- virtual int wait (TAO_Transport *t,
- ACE_Time_Value *val);
};
TAO_END_VERSIONED_NAMESPACE_DECL
diff --git a/TAO/tao/Bounded_Sequence_CDR_T.h b/TAO/tao/Bounded_Sequence_CDR_T.h
index 7213b9547f6..c0cbbdb5a01 100644
--- a/TAO/tao/Bounded_Sequence_CDR_T.h
+++ b/TAO/tao/Bounded_Sequence_CDR_T.h
@@ -12,6 +12,7 @@
*/
#include "tao/orbconf.h"
+#include "tao/SystemException.h"
TAO_BEGIN_VERSIONED_NAMESPACE_DECL
@@ -328,7 +329,9 @@ namespace TAO {
namespace TAO {
template <typename stream, CORBA::ULong MAX>
bool marshal_sequence(stream & strm, const TAO::bounded_value_sequence <CORBA::Short, MAX> & source) {
- const ::CORBA::ULong length = source.length ();
+ if (0 == &source)
+ ACE_THROW_RETURN (::CORBA::BAD_PARAM(0, CORBA::COMPLETED_MAYBE), false);
+ ::CORBA::ULong const length = source.length ();
if (!(strm << length)) {
return false;
}
@@ -337,7 +340,9 @@ namespace TAO {
template <typename stream, CORBA::ULong MAX>
bool marshal_sequence(stream & strm, const TAO::bounded_value_sequence <CORBA::Long, MAX> & source) {
- const ::CORBA::ULong length = source.length ();
+ if (0 == &source)
+ ACE_THROW_RETURN (::CORBA::BAD_PARAM(0, CORBA::COMPLETED_MAYBE), false);
+ ::CORBA::ULong const length = source.length ();
if (!(strm << length)) {
return false;
}
@@ -346,6 +351,8 @@ namespace TAO {
template <typename stream, CORBA::ULong MAX>
bool marshal_sequence(stream & strm, const TAO::bounded_value_sequence <CORBA::ULong, MAX> & source) {
+ if (0 == &source)
+ ACE_THROW_RETURN (::CORBA::BAD_PARAM(0, CORBA::COMPLETED_MAYBE), false);
::CORBA::ULong const length = source.length ();
if (!(strm << length)) {
return false;
@@ -355,6 +362,8 @@ namespace TAO {
template <typename stream, CORBA::ULong MAX>
bool marshal_sequence(stream & strm, const TAO::bounded_value_sequence <CORBA::UShort, MAX> & source) {
+ if (0 == &source)
+ ACE_THROW_RETURN (::CORBA::BAD_PARAM(0, CORBA::COMPLETED_MAYBE), false);
::CORBA::ULong const length = source.length ();
if (!(strm << length)) {
return false;
@@ -364,6 +373,8 @@ namespace TAO {
template <typename stream, CORBA::ULong MAX>
bool marshal_sequence(stream & strm, const TAO::bounded_value_sequence <CORBA::Octet, MAX> & source) {
+ if (0 == &source)
+ ACE_THROW_RETURN (::CORBA::BAD_PARAM(0, CORBA::COMPLETED_MAYBE), false);
::CORBA::ULong const length = source.length ();
if (!(strm << length)) {
return false;
@@ -373,6 +384,8 @@ namespace TAO {
template <typename stream, CORBA::ULong MAX>
bool marshal_sequence(stream & strm, const TAO::bounded_value_sequence <CORBA::Char, MAX> & source) {
+ if (0 == &source)
+ ACE_THROW_RETURN (::CORBA::BAD_PARAM(0, CORBA::COMPLETED_MAYBE), false);
::CORBA::ULong const length = source.length ();
if (!(strm << length)) {
return false;
@@ -383,6 +396,8 @@ namespace TAO {
# if defined (ACE_HAS_WCHAR) || defined (ACE_HAS_XPG4_MULTIBYTE_CHAR)
template <typename stream, CORBA::ULong MAX>
bool marshal_sequence(stream & strm, const TAO::bounded_value_sequence <CORBA::WChar, MAX> & source) {
+ if (0 == &source)
+ ACE_THROW_RETURN (::CORBA::BAD_PARAM(0, CORBA::COMPLETED_MAYBE), false);
::CORBA::ULong const length = source.length ();
if (!(strm << length)) {
return false;
@@ -393,6 +408,8 @@ namespace TAO {
template <typename stream, CORBA::ULong MAX>
bool marshal_sequence(stream & strm, const TAO::bounded_value_sequence <CORBA::Float, MAX> & source) {
+ if (0 == &source)
+ ACE_THROW_RETURN (::CORBA::BAD_PARAM(0, CORBA::COMPLETED_MAYBE), false);
::CORBA::ULong const length = source.length ();
if (!(strm << length)) {
return false;
@@ -402,6 +419,8 @@ namespace TAO {
template <typename stream, CORBA::ULong MAX>
bool marshal_sequence(stream & strm, const TAO::bounded_value_sequence <CORBA::Double, MAX> & source) {
+ if (0 == &source)
+ ACE_THROW_RETURN (::CORBA::BAD_PARAM(0, CORBA::COMPLETED_MAYBE), false);
::CORBA::ULong const length = source.length ();
if (!(strm << length)) {
return false;
@@ -411,6 +430,8 @@ namespace TAO {
template <typename stream, CORBA::ULong MAX>
bool marshal_sequence(stream & strm, const TAO::bounded_value_sequence <CORBA::ULongLong, MAX> & source) {
+ if (0 == &source)
+ ACE_THROW_RETURN (::CORBA::BAD_PARAM(0, CORBA::COMPLETED_MAYBE), false);
::CORBA::ULong const length = source.length ();
if (!(strm << length)) {
return false;
@@ -420,6 +441,8 @@ namespace TAO {
template <typename stream, CORBA::ULong MAX>
bool marshal_sequence(stream & strm, const TAO::bounded_value_sequence <CORBA::LongDouble, MAX> & source) {
+ if (0 == &source)
+ ACE_THROW_RETURN (::CORBA::BAD_PARAM(0, CORBA::COMPLETED_MAYBE), false);
::CORBA::ULong const length = source.length ();
if (!(strm << length)) {
return false;
@@ -429,6 +452,8 @@ namespace TAO {
template <typename stream, CORBA::ULong MAX>
bool marshal_sequence(stream & strm, const TAO::bounded_value_sequence <CORBA::Boolean, MAX> & source) {
+ if (0 == &source)
+ ACE_THROW_RETURN (::CORBA::BAD_PARAM(0, CORBA::COMPLETED_MAYBE), false);
::CORBA::ULong const length = source.length ();
if (!(strm << length)) {
return false;
@@ -438,6 +463,8 @@ namespace TAO {
template <typename stream, typename value_t, CORBA::ULong MAX>
bool marshal_sequence(stream & strm, const TAO::bounded_value_sequence <value_t, MAX> & source) {
+ if (0 == &source)
+ ACE_THROW_RETURN (::CORBA::BAD_PARAM(0, CORBA::COMPLETED_MAYBE), false);
::CORBA::ULong const length = source.length ();
if (!(strm << length)) {
return false;
@@ -452,6 +479,8 @@ namespace TAO {
template <typename stream, typename charT, CORBA::ULong MAX>
bool marshal_sequence(stream & strm, const TAO::details::bounded_basic_string_sequence <charT, MAX> & source) {
+ if (0 == &source)
+ ACE_THROW_RETURN (::CORBA::BAD_PARAM(0, CORBA::COMPLETED_MAYBE), false);
::CORBA::ULong const length = source.length ();
if (!(strm << length)) {
return false;
@@ -467,6 +496,8 @@ namespace TAO {
template <typename stream, typename object_t, typename object_t_var, CORBA::ULong MAX>
bool marshal_sequence(stream & strm, const TAO::bounded_object_reference_sequence<object_t, object_t_var, MAX> & source) {
typedef typename TAO::bounded_object_reference_sequence<object_t, object_t_var, MAX>::object_type object_type;
+ if (0 == &source)
+ ACE_THROW_RETURN (::CORBA::BAD_PARAM(0, CORBA::COMPLETED_MAYBE), false);
::CORBA::ULong const length = source.length ();
if (!(strm << length)) {
return false;
diff --git a/TAO/tao/CORBALOC_Parser.cpp b/TAO/tao/CORBALOC_Parser.cpp
index 2dda9784489..92369055416 100644
--- a/TAO/tao/CORBALOC_Parser.cpp
+++ b/TAO/tao/CORBALOC_Parser.cpp
@@ -233,7 +233,8 @@ TAO_CORBALOC_Parser::parse_string (const char * ior,
const char * str = full_ep.c_str();
endpoints[i].profile_->parse_string (str ACE_ENV_ARG_PARAMETER);
ACE_CHECK_RETURN (CORBA::Object::_nil ());
- if (mprofile.give_profile(endpoints[i].profile_) != -1)
+ int share = orb->orb_core()->orb_params()->shared_profile();
+ if (mprofile.give_profile(endpoints[i].profile_, share) != -1)
endpoints[i].profile_ = 0;
else
{
diff --git a/TAO/tao/CSD_Framework/CSD_Default_Servant_Dispatcher.cpp b/TAO/tao/CSD_Framework/CSD_Default_Servant_Dispatcher.cpp
index 7fa1a03f257..72b8028cd94 100644
--- a/TAO/tao/CSD_Framework/CSD_Default_Servant_Dispatcher.cpp
+++ b/TAO/tao/CSD_Framework/CSD_Default_Servant_Dispatcher.cpp
@@ -19,14 +19,14 @@ TAO_CSD_Default_Servant_Dispatcher::~TAO_CSD_Default_Servant_Dispatcher (void)
TAO_Root_POA *
TAO_CSD_Default_Servant_Dispatcher::create_Root_POA (const ACE_CString &name,
- TAO_POA_Manager &poa_manager,
+ PortableServer::POAManager_ptr poa_manager,
const TAO_POA_Policy_Set &policies,
ACE_Lock &lock,
TAO_SYNCH_MUTEX &thread_lock,
TAO_ORB_Core &orb_core,
TAO_Object_Adapter *object_adapter
ACE_ENV_ARG_DECL)
-{
+ {
TAO_CSD_POA *poa = 0;
ACE_NEW_THROW_EX (poa,
diff --git a/TAO/tao/CSD_Framework/CSD_Default_Servant_Dispatcher.h b/TAO/tao/CSD_Framework/CSD_Default_Servant_Dispatcher.h
index ed78621d075..1d041331e99 100644
--- a/TAO/tao/CSD_Framework/CSD_Default_Servant_Dispatcher.h
+++ b/TAO/tao/CSD_Framework/CSD_Default_Servant_Dispatcher.h
@@ -38,7 +38,7 @@ public:
/// Factory method for creating new CSD Root POA.
virtual TAO_Root_POA *create_Root_POA (const ACE_CString &name,
- TAO_POA_Manager &poa_manager,
+ PortableServer::POAManager_ptr poa_manager,
const TAO_POA_Policy_Set &policies,
ACE_Lock &lock,
TAO_SYNCH_MUTEX &thread_lock,
diff --git a/TAO/tao/CSD_Framework/CSD_POA.cpp b/TAO/tao/CSD_Framework/CSD_POA.cpp
index cd63c5d7375..f3cc8e605f5 100644
--- a/TAO/tao/CSD_Framework/CSD_POA.cpp
+++ b/TAO/tao/CSD_Framework/CSD_POA.cpp
@@ -18,7 +18,7 @@ TAO_BEGIN_VERSIONED_NAMESPACE_DECL
// Implementation skeleton constructor
TAO_CSD_POA::TAO_CSD_POA (const String &name,
- TAO_POA_Manager &poa_manager,
+ PortableServer::POAManager_ptr poa_manager,
const TAO_POA_Policy_Set &policies,
TAO_Root_POA *parent,
ACE_Lock &lock,
@@ -66,7 +66,7 @@ void TAO_CSD_POA::set_csd_strategy (
TAO_Root_POA *
TAO_CSD_POA::new_POA (const String &name,
- TAO_POA_Manager &poa_manager,
+ PortableServer::POAManager_ptr poa_manager,
const TAO_POA_Policy_Set &policies,
TAO_Root_POA *parent,
ACE_Lock &lock,
diff --git a/TAO/tao/CSD_Framework/CSD_POA.h b/TAO/tao/CSD_Framework/CSD_POA.h
index 7bf2c338e0d..bcbf2e0495f 100644
--- a/TAO/tao/CSD_Framework/CSD_POA.h
+++ b/TAO/tao/CSD_Framework/CSD_POA.h
@@ -40,7 +40,7 @@ class TAO_CSD_FW_Export TAO_CSD_POA
public:
//Constructor
TAO_CSD_POA (const String &name,
- TAO_POA_Manager &poa_manager,
+ PortableServer::POAManager_ptr poa_manager,
const TAO_POA_Policy_Set &policies,
TAO_Root_POA *parent,
ACE_Lock &lock,
@@ -80,7 +80,7 @@ public:
///Method for creating new CSD POA.
TAO_Root_POA * new_POA (const String &name,
- TAO_POA_Manager &poa_manager,
+ PortableServer::POAManager_ptr poa_manager,
const TAO_POA_Policy_Set &policies,
TAO_Root_POA *parent,
ACE_Lock &lock,
diff --git a/TAO/tao/CSD_ThreadPool/CSD_TP_Strategy_Factory.cpp b/TAO/tao/CSD_ThreadPool/CSD_TP_Strategy_Factory.cpp
index 71aa9aa9b8c..9e87aaf73e6 100644
--- a/TAO/tao/CSD_ThreadPool/CSD_TP_Strategy_Factory.cpp
+++ b/TAO/tao/CSD_ThreadPool/CSD_TP_Strategy_Factory.cpp
@@ -86,7 +86,7 @@ TAO::CSD::TP_Strategy_Factory::init (int argc,
arg_remainder.substr (pos + 1, arg.length () - pos);
// Case-insensitive string comparison.
- if (ACE_OS::strcasecmp (off_str.c_str(),
+ if (ACE_OS::strcasecmp (ACE_TEXT_CHAR_TO_TCHAR (off_str.c_str()),
ACE_TEXT("OFF")) == 0)
{
serialize_servants = false;
diff --git a/TAO/tao/Client_Strategy_Factory.cpp b/TAO/tao/Client_Strategy_Factory.cpp
index f459955e2bf..f8cfb870b74 100644
--- a/TAO/tao/Client_Strategy_Factory.cpp
+++ b/TAO/tao/Client_Strategy_Factory.cpp
@@ -40,6 +40,12 @@ TAO_Client_Strategy_Factory::create_wait_strategy (TAO_Transport *)
return 0;
}
+TAO_Client_Strategy_Factory::Connect_Strategy
+TAO_Client_Strategy_Factory::connect_strategy (void) const
+{
+ return TAO_BLOCKED_CONNECT;
+}
+
TAO_Connect_Strategy *
TAO_Client_Strategy_Factory::create_connect_strategy (TAO_ORB_Core *)
{
diff --git a/TAO/tao/Client_Strategy_Factory.h b/TAO/tao/Client_Strategy_Factory.h
index 3c63290ad4a..407e580b509 100644
--- a/TAO/tao/Client_Strategy_Factory.h
+++ b/TAO/tao/Client_Strategy_Factory.h
@@ -71,6 +71,15 @@ public:
/// Create the correct client <asynch_connect> strategy.
virtual TAO_Connect_Strategy *create_connect_strategy (TAO_ORB_Core *);
+ enum Connect_Strategy
+ {
+ TAO_BLOCKED_CONNECT,
+ TAO_REACTIVE_CONNECT,
+ TAO_LEADER_FOLLOWER_CONNECT
+ };
+ /// Return the selected connection strategy option.
+ virtual Connect_Strategy connect_strategy (void) const;
+
/// Does the client allow any form of callback?
virtual int allow_callback (void);
diff --git a/TAO/tao/Codeset/Codeset_Manager_i.cpp b/TAO/tao/Codeset/Codeset_Manager_i.cpp
index ecf3fc73955..3d26ac2e423 100644
--- a/TAO/tao/Codeset/Codeset_Manager_i.cpp
+++ b/TAO/tao/Codeset/Codeset_Manager_i.cpp
@@ -62,7 +62,7 @@ TAO_Codeset_Manager_i::default_char_codeset = TAO_DEFAULT_CHAR_CODESET_ID;
CONV_FRAME::CodeSetId
TAO_Codeset_Manager_i::default_wchar_codeset = TAO_DEFAULT_WCHAR_CODESET_ID;
-TAO_Codeset_Manager_i::TAO_Codeset_Manager_i ()
+TAO_Codeset_Manager_i::TAO_Codeset_Manager_i (void)
: codeset_info_ (),
char_descriptor_ (),
wchar_descriptor_ ()
@@ -72,9 +72,10 @@ TAO_Codeset_Manager_i::TAO_Codeset_Manager_i ()
wchar_descriptor_.ncs(TAO_Codeset_Manager_i::default_wchar_codeset);
wchar_descriptor_.add_translator (ACE_TEXT ("UTF16_BOM_Factory"));
+
}
-TAO_Codeset_Manager_i::~TAO_Codeset_Manager_i ()
+TAO_Codeset_Manager_i::~TAO_Codeset_Manager_i (void)
{
}
diff --git a/TAO/tao/Codeset/Codeset_Manager_i.h b/TAO/tao/Codeset/Codeset_Manager_i.h
index f5ca8491ca3..a9167804b1c 100644
--- a/TAO/tao/Codeset/Codeset_Manager_i.h
+++ b/TAO/tao/Codeset/Codeset_Manager_i.h
@@ -19,15 +19,15 @@
#include "tao/CONV_FRAMEC.h"
#include "tao/Codeset_Manager.h"
+#include "tao/Codeset/codeset_export.h"
+#include "tao/Codeset/Codeset_Descriptor.h"
#if !defined (ACE_LACKS_PRAGMA_ONCE)
# pragma once
#endif /* ACE_LACKS_PRAGMA_ONCE */
#include "ace/Unbounded_Set.h"
-#include "tao/Codeset/codeset_export.h"
-#include "tao/Codeset/Codeset_Descriptor.h"
-
+#include "ace/Dynamic_Service_Dependency.h"
TAO_BEGIN_VERSIONED_NAMESPACE_DECL
@@ -70,8 +70,8 @@ public:
/// to provide a non-compliant default wchar codeset may do so.
static CONV_FRAME::CodeSetId default_wchar_codeset;
- TAO_Codeset_Manager_i ();
- ~TAO_Codeset_Manager_i ();
+ TAO_Codeset_Manager_i (void);
+ ~TAO_Codeset_Manager_i (void);
/// Called by an object of TAO_Acceptor to set NCS and CCS values
/// for Char/Wchar in to the Object Reference.
diff --git a/TAO/tao/Connect_Strategy.cpp b/TAO/tao/Connect_Strategy.cpp
index 2299f775d46..9a79bece571 100644
--- a/TAO/tao/Connect_Strategy.cpp
+++ b/TAO/tao/Connect_Strategy.cpp
@@ -1,4 +1,7 @@
#include "tao/Connect_Strategy.h"
+#include "tao/Transport.h"
+#include "tao/Connection_Handler.h"
+#include "tao/LF_Multi_Event.h"
ACE_RCSID (tao,
Connect_Strategy,
@@ -16,4 +19,41 @@ TAO_Connect_Strategy::~TAO_Connect_Strategy (void)
{
}
+int
+TAO_Connect_Strategy::wait (TAO_Connection_Handler *ch,
+ ACE_Time_Value *max_wait_time)
+{
+ if (ch == 0)
+ return -1;
+
+ return this->wait_i (ch, ch->transport (),max_wait_time);
+}
+
+int
+TAO_Connect_Strategy::wait (TAO_Transport *t,
+ ACE_Time_Value *max_wait_time)
+{
+ // Basically the connection was EINPROGRESS, but before we could
+ // wait for it some other thread detected a failure and cleaned up
+ // the connection handler.
+ if (t == 0)
+ return -1;
+
+ return this->wait_i (t->connection_handler(),t,max_wait_time);
+}
+
+int
+TAO_Connect_Strategy::wait (TAO_LF_Multi_Event *mev,
+ ACE_Time_Value *max_wait_time)
+{
+ return this->wait_i (mev, mev->base_transport(), max_wait_time);
+}
+
+int
+TAO_Connect_Strategy::poll (TAO_LF_Multi_Event *mev)
+{
+ ACE_Time_Value zero(ACE_Time_Value::zero);
+ return this->wait_i (mev, mev->base_transport(), &zero);
+}
+
TAO_END_VERSIONED_NAMESPACE_DECL
diff --git a/TAO/tao/Connect_Strategy.h b/TAO/tao/Connect_Strategy.h
index 1189a6cd171..4783039326a 100644
--- a/TAO/tao/Connect_Strategy.h
+++ b/TAO/tao/Connect_Strategy.h
@@ -34,6 +34,8 @@ class TAO_ORB_Core;
class TAO_Connector;
class TAO_Connection_Handler;
class TAO_Transport;
+class TAO_LF_Multi_Event;
+class TAO_LF_Event;
/**
* @class TAO_Connect_Strategy
@@ -72,13 +74,23 @@ public:
/* If the connection establishment fails the state within the
* connection handler is set appropriately.
*/
- virtual int wait (TAO_Connection_Handler *ch,
- ACE_Time_Value *val) = 0;
+ int wait (TAO_Connection_Handler *ch, ACE_Time_Value *val);
- virtual int wait (TAO_Transport *t,
- ACE_Time_Value *val) = 0;
+ int wait (TAO_Transport *t, ACE_Time_Value *val);
+
+ /// Wait for one of many connections to complete. Returns when one
+ /// succeeds or all fail.
+ int wait (TAO_LF_Multi_Event *ev, ACE_Time_Value *val);
+
+ /// Do a quick check to see if any connections are complete. This
+ /// does the same as the wait with an explicit time value of 0.
+ int poll (TAO_LF_Multi_Event *ev);
protected:
+ /// This is the method that does all the real interesting stuff.
+ virtual int wait_i (TAO_LF_Event *ev,
+ TAO_Transport *t,
+ ACE_Time_Value *val) = 0;
/// Cached copy of the ORB core pointer
TAO_ORB_Core * const orb_core_;
diff --git a/TAO/tao/DLL_Parser.cpp b/TAO/tao/DLL_Parser.cpp
index 753ae4496d7..87fb45d897f 100644
--- a/TAO/tao/DLL_Parser.cpp
+++ b/TAO/tao/DLL_Parser.cpp
@@ -6,6 +6,7 @@
#include "tao/Environment.h"
#include "tao/ORB_Constants.h"
#include "tao/SystemException.h"
+#include "tao/ORB_Core.h"
#include "ace/Dynamic_Service.h"
#include "ace/Log_Msg.h"
@@ -44,8 +45,11 @@ TAO_DLL_Parser::parse_string (const char *ior,
const char *name =
ior + sizeof (::dll_prefix) - 1;
+ TAO_ORB_Core *oc = orb->orb_core ();
+
TAO_Object_Loader *loader =
- ACE_Dynamic_Service<TAO_Object_Loader>::instance (name);
+ ACE_Dynamic_Service<TAO_Object_Loader>::instance
+ (oc->configuration(), name);
if (loader == 0)
{
diff --git a/TAO/tao/Endpoint.cpp b/TAO/tao/Endpoint.cpp
index 75f61995341..6077a1b6b94 100644
--- a/TAO/tao/Endpoint.cpp
+++ b/TAO/tao/Endpoint.cpp
@@ -1,6 +1,7 @@
// $Id$
#include "tao/Endpoint.h"
+#include "tao/ORB_Core.h"
#if !defined (__ACE_INLINE__)
#include "tao/Endpoint.i"
@@ -16,6 +17,14 @@ TAO_Endpoint::~TAO_Endpoint (void)
{
}
+TAO_Endpoint *
+TAO_Endpoint::next_filtered (TAO_ORB_Core *, TAO_Endpoint *root)
+{
+ if (root == 0)
+ return this;
+ return this->next();
+}
+
TAO_END_VERSIONED_NAMESPACE_DECL
//@@ TAO_ENDPOINT_SPL_METHODS_ADD_HOOK
diff --git a/TAO/tao/Endpoint.h b/TAO/tao/Endpoint.h
index b762595ef58..d89582e973e 100644
--- a/TAO/tao/Endpoint.h
+++ b/TAO/tao/Endpoint.h
@@ -29,6 +29,8 @@
TAO_BEGIN_VERSIONED_NAMESPACE_DECL
+class TAO_ORB_Core;
+
/*
* Includes and forward decls for specializing TAO's
* endpoint implementation.
@@ -79,12 +81,29 @@ public:
*/
virtual CORBA::Boolean is_equivalent (const TAO_Endpoint *other_endpoint) = 0;
- /// Endpoints can be stringed in a list.
+ /// Endpoints can be linked in a list.
/**
* @return The next endpoint in the list, if any.
*/
virtual TAO_Endpoint *next (void) = 0;
+ /**
+ * Return the next endpoint in the list, but use protocol-specific
+ * filtering to constrain the value. The orb core is needed to supply
+ * any sort of filter arguments, and the root endpoint is needed in case
+ * the algorithm needs to rewind. If the supplied root is 0, then this
+ * is assumed to be the candidate next endpoint.
+ *
+ * To use this, the caller starts off the change with root == 0. This
+ * is a bit of a violation in logic, a more correct implementation would
+ * accept this == 0 and a non-null root.
+ * To do iteration using next_filtered, do:
+ * for (TAO_Endpoint *ep = root_endpoint->next_filtered (orb_core, 0);
+ * ep != 0;
+ * ep = ep->next_filtered(orb_core, root_endpoint)) { }
+ */
+ virtual TAO_Endpoint *next_filtered (TAO_ORB_Core *, TAO_Endpoint *root);
+
/// Return a string representation for the address.
/**
* The purpose of this method is to provide a general interface to
diff --git a/TAO/tao/IIOP_Connection_Handler.cpp b/TAO/tao/IIOP_Connection_Handler.cpp
index 7073a6523fc..ddfda1fdb1b 100644
--- a/TAO/tao/IIOP_Connection_Handler.cpp
+++ b/TAO/tao/IIOP_Connection_Handler.cpp
@@ -89,6 +89,8 @@ TAO_IIOP_Connection_Handler::open (void*)
this->orb_core ()->orb_params ()->nodelay ();
protocol_properties.keep_alive_ =
this->orb_core ()->orb_params ()->sock_keepalive ();
+ protocol_properties.dont_route_ =
+ this->orb_core ()->orb_params ()->sock_dontroute ();
TAO_Protocols_Hooks *tph =
this->orb_core ()->get_protocols_hooks ();
@@ -148,6 +150,21 @@ TAO_IIOP_Connection_Handler::open (void*)
}
}
+#if !defined (ACE_LACKS_SO_DONTROUTE)
+ if (protocol_properties.dont_route_)
+ {
+ if (this->peer ().
+ set_option (SOL_SOCKET,
+ SO_DONTROUTE,
+ (void *) &protocol_properties.dont_route_,
+ sizeof (protocol_properties.dont_route_)) == -1
+ && errno != ENOTSUP)
+ {
+ return -1;
+ }
+ }
+#endif /* ! ACE_LACKS_SO_DONTROUTE */
+
if (this->transport ()->wait_strategy ()->non_blocking ()
|| this->transport ()->opened_as () == TAO::TAO_SERVER_ROLE)
{
@@ -169,8 +186,9 @@ TAO_IIOP_Connection_Handler::open (void*)
if (TAO_debug_level > 2)
ACE_DEBUG ((LM_DEBUG,
ACE_TEXT("TAO (%P|%t) - IIOP_Connection_Handler::open, ")
- ACE_TEXT("The local addr is <%s> \n"),
- local_addr. get_host_addr ()));
+ ACE_TEXT("The local addr is <%s:%d> \n"),
+ local_addr.get_host_addr (),
+ local_addr.get_port_number()));
if (local_addr == remote_addr)
{
@@ -478,6 +496,31 @@ TAO_IIOP_Connection_Handler::set_dscp_codepoint (CORBA::Boolean set_network_prio
return 0;
}
+
+void
+TAO_IIOP_Connection_Handler::abort (void)
+{
+ struct linger lval;
+ lval.l_onoff = 1;
+ lval.l_linger = 0;
+
+ if (this->peer ().set_option(SOL_SOCKET,
+ SO_LINGER,
+ (void*) &lval,
+ sizeof (lval)) == -1)
+ {
+ if (TAO_debug_level)
+ {
+ ACE_DEBUG ((LM_DEBUG,
+ ACE_TEXT ("TAO (%P|%t) Unable to set ")
+ ACE_TEXT ("SO_LINGER on %d\n"),
+ this->peer ().get_handle ()));
+ }
+ }
+}
+
+
+
//@@ CONNECTION_HANDLER_SPL_COPY_HOOK_END
/*
* End copy hook
diff --git a/TAO/tao/IIOP_Connection_Handler.h b/TAO/tao/IIOP_Connection_Handler.h
index 08e2b7478af..16f647affa0 100644
--- a/TAO/tao/IIOP_Connection_Handler.h
+++ b/TAO/tao/IIOP_Connection_Handler.h
@@ -109,6 +109,11 @@ public:
virtual int open_handler (void *);
+ /// This is used during a canceled connection attempt. Force the
+ /// SO_LINGER timeout to 0 so that when the peer is closed, it won't
+ /// hang around.
+ void abort (void);
+
protected:
/// Constructor that could be used by the derived classes.
diff --git a/TAO/tao/IIOP_Connector.cpp b/TAO/tao/IIOP_Connector.cpp
index 91cd5db0599..dd7aa107fe7 100644
--- a/TAO/tao/IIOP_Connector.cpp
+++ b/TAO/tao/IIOP_Connector.cpp
@@ -10,11 +10,14 @@
#include "tao/Connect_Strategy.h"
#include "tao/Thread_Lane_Resources.h"
#include "tao/Profile_Transport_Resolver.h"
+#include "tao/Base_Transport_Property.h"
#include "tao/Transport.h"
#include "tao/Wait_Strategy.h"
#include "tao/SystemException.h"
+#include "tao/LF_Multi_Event.h"
#include "ace/OS_NS_strings.h"
#include "ace/OS_NS_string.h"
+#include "ace/OS_NS_time.h"
ACE_RCSID (tao,
IIOP_Connector,
@@ -22,6 +25,51 @@ ACE_RCSID (tao,
TAO_BEGIN_VERSIONED_NAMESPACE_DECL
+
+
+//-----------------------------------------------------------------------------
+
+/**
+ * @class TAO_Event_Handler_Array_var
+ *
+ * @brief Auto pointer like class for an array of Event Handlers.
+ *
+ * Used to manage lifecycle of handlers. This class calls
+ * ACE_Event_Handler::remove_reference() on each handler in its destructor
+ * This class started out life as a replacement for the ACE_Event_Handle_var
+ * but is now pared down to be very specific in its role..
+ */
+class TAO_IIOP_Connection_Handler_Array_Guard
+{
+public:
+ TAO_IIOP_Connection_Handler_Array_Guard (TAO_IIOP_Connection_Handler **p, unsigned count);
+ ~TAO_IIOP_Connection_Handler_Array_Guard (void);
+
+private:
+ /// Handler.
+ TAO_IIOP_Connection_Handler **ptr_;
+ unsigned count_;
+};
+
+TAO_IIOP_Connection_Handler_Array_Guard::TAO_IIOP_Connection_Handler_Array_Guard (TAO_IIOP_Connection_Handler **p,
+ unsigned count)
+ : ptr_ (p),
+ count_ (count)
+{
+}
+
+TAO_IIOP_Connection_Handler_Array_Guard::~TAO_IIOP_Connection_Handler_Array_Guard (void)
+{
+ if (this->ptr_ != 0)
+ {
+ for (unsigned i = 0; i < this->count_; i++)
+ this->ptr_[i]->remove_reference ();
+ }
+}
+
+//---------------------------------------------------------------------------
+
+
TAO_IIOP_Connector::~TAO_IIOP_Connector (void)
{
}
@@ -81,6 +129,12 @@ TAO_IIOP_Connector::close (void)
}
int
+TAO_IIOP_Connector::supports_parallel_connects(void) const
+{
+ return 1;
+}
+
+int
TAO_IIOP_Connector::set_validate_endpoint (TAO_Endpoint *endpoint)
{
TAO_IIOP_Endpoint *iiop_endpoint =
@@ -105,8 +159,8 @@ TAO_IIOP_Connector::set_validate_endpoint (TAO_Endpoint *endpoint)
if (TAO_debug_level > 0)
{
ACE_DEBUG ((LM_DEBUG,
- ACE_TEXT ("TAO (%P|%t) IIOP connection failed.\n")
- ACE_TEXT ("TAO (%P|%t) This is most likely ")
+ ACE_TEXT ("(%P|%t) IIOP connection failed.\n")
+ ACE_TEXT (" This is most likely ")
ACE_TEXT ("due to a hostname lookup ")
ACE_TEXT ("failure.\n")));
}
@@ -122,12 +176,124 @@ TAO_IIOP_Connector::make_connection (TAO::Profile_Transport_Resolver *r,
TAO_Transport_Descriptor_Interface &desc,
ACE_Time_Value *timeout)
{
+ TAO_IIOP_Connection_Handler *svc_handler = 0;
TAO_IIOP_Endpoint *iiop_endpoint =
- this->remote_endpoint (desc.endpoint ());
-
+ this->remote_endpoint (desc.endpoint());
+ int result = -1;
if (iiop_endpoint == 0)
return 0;
+ result = this->begin_connection (svc_handler, r, iiop_endpoint, timeout);
+
+ if (result == -1 && errno != EWOULDBLOCK)
+ {
+ // connect completed unsuccessfully
+ svc_handler->remove_reference();
+ // Give users a clue to the problem.
+ if (TAO_debug_level > 3)
+ {
+ ACE_DEBUG ((LM_ERROR,
+ ACE_TEXT ("(%P|%t) IIOP_Connector::make_connection, ")
+ ACE_TEXT("connection to <%s:%d> failed (%p)\n"),
+ ACE_TEXT_CHAR_TO_TCHAR (iiop_endpoint->host ()),
+ iiop_endpoint->port (),
+ ACE_TEXT("errno")));
+ }
+ return 0;
+ }
+ TAO_IIOP_Connection_Handler **sh_ptr = &svc_handler;
+ TAO_IIOP_Endpoint **ep_ptr = &iiop_endpoint;
+ TAO_LF_Multi_Event mev;
+ mev.add_event(svc_handler);
+ return this->complete_connection (result, sh_ptr, ep_ptr, 1U, r, &mev, timeout);
+}
+
+TAO_Transport *
+TAO_IIOP_Connector::make_parallel_connection (TAO::Profile_Transport_Resolver *r,
+ TAO_Transport_Descriptor_Interface &desc,
+ ACE_Time_Value *timeout)
+{
+ TAO_Endpoint *root_ep = desc.endpoint();
+ unsigned max_count = 1;
+ unsigned long ns_stagger =
+ this->orb_core()->orb_params()->parallel_connect_delay();
+ unsigned long sec_stagger = ns_stagger/1000;
+ ns_stagger = (ns_stagger % 1000) * 1000000;
+ for (TAO_Endpoint *ep = root_ep->next_filtered (this->orb_core(),0);
+ ep != 0;
+ ep = ep->next_filtered(this->orb_core(),root_ep))
+ max_count++;
+
+ if (TAO_debug_level > 2)
+ ACE_DEBUG ((LM_DEBUG,
+ ACE_TEXT ("TAO (%P|%t) - IIOP_Connector::")
+ ACE_TEXT ("make_parallel_connection, ")
+ ACE_TEXT ("to %d endpoints\n"), max_count));
+ TAO_IIOP_Endpoint **eplist = 0;
+ TAO_IIOP_Connection_Handler **shlist = 0;
+ ACE_NEW_RETURN (shlist,TAO_IIOP_Connection_Handler *[max_count], 0);
+ ACE_NEW_RETURN (eplist, TAO_IIOP_Endpoint *[max_count], 0);
+
+ TAO_LF_Multi_Event mev;
+ int result = 0;
+ unsigned count = 0;
+ for (TAO_Endpoint *ep = root_ep->next_filtered (this->orb_core(),0);
+ ep != 0;
+ ep = ep->next_filtered(this->orb_core(),root_ep))
+ {
+ eplist[count] = this->remote_endpoint (ep);
+ shlist[count] = 0;
+ result = this->begin_connection (shlist[count],
+ r,
+ eplist[count],
+ timeout);
+
+ // The connection may fail because it is slow, or for other reasons.
+ // If it was an incomplete non-blocking connection, add it to the list
+ // to be waited on, otherwise remove the reference to the handler and
+ // move on to the next endpoint.
+ if (result == -1)
+ {
+ if (errno == EWOULDBLOCK)
+ {
+ mev.add_event(shlist[count++]);
+ if (ep->next() != 0)
+ {
+ struct timespec nsleep = {sec_stagger, ns_stagger};
+ ACE_OS::nanosleep (&nsleep);
+ result = this->active_connect_strategy_->poll (&mev);
+ if (result != -1)
+ break;
+ }
+ }
+ else
+ {
+ shlist[count]->remove_reference(); // done bump the list count
+ }
+ continue;
+ }
+
+ if (result != -1) // we have a winner!
+ {
+ count++;
+ break; // no waiting involved since a connection is completed
+ }
+ }
+
+ TAO_Transport *winner = 0;
+ if (count > 0) // only complete if at least one pending or success
+ winner = this->complete_connection (result,shlist,eplist,count,r,&mev,timeout);
+ delete [] shlist; // reference reductions should have been done already
+ delete [] eplist;
+ return winner;
+}
+
+int
+TAO_IIOP_Connector::begin_connection (TAO_IIOP_Connection_Handler *&svc_handler,
+ TAO::Profile_Transport_Resolver *r,
+ TAO_IIOP_Endpoint *iiop_endpoint,
+ ACE_Time_Value *timeout)
+{
const ACE_INET_Addr &remote_address =
iiop_endpoint->object_addr ();
@@ -146,8 +312,8 @@ TAO_IIOP_Connector::make_connection (TAO::Profile_Transport_Resolver *r,
if (TAO_debug_level > 2)
ACE_DEBUG ((LM_DEBUG,
- "TAO (%P|%t) - IIOP_Connector::make_connection, "
- "to <%s:%d> which should %s\n",
+ ACE_TEXT ("TAO (%P|%t) - IIOP_Connector::begin_connection, ")
+ ACE_TEXT ("to <%s:%d> which should %s\n"),
ACE_TEXT_TO_TCHAR_IN(iiop_endpoint->host()),
iiop_endpoint->port(),
r->blocked_connect () ? ACE_TEXT("block") : ACE_TEXT("nonblock")));
@@ -167,7 +333,7 @@ TAO_IIOP_Connector::make_connection (TAO::Profile_Transport_Resolver *r,
timeout = &tmp_zero;
}
- TAO_IIOP_Connection_Handler *svc_handler = 0;
+ svc_handler = 0;
int result =
this->base_connector_.connect (svc_handler,
@@ -193,62 +359,124 @@ TAO_IIOP_Connector::make_connection (TAO::Profile_Transport_Resolver *r,
// once the connect() returns since this might be too late if
// another thread pick up the completion and potentially deletes the
// handler before we get a chance to increment the reference count.
+ return result;
+}
- // Make sure that we always do a remove_reference
- ACE_Event_Handler_var svc_handler_auto_ptr (svc_handler);
-
- TAO_Transport *transport = svc_handler->transport ();
-
- if (result == -1)
+TAO_Transport *
+TAO_IIOP_Connector::complete_connection (int result,
+ TAO_IIOP_Connection_Handler **&sh_list,
+ TAO_IIOP_Endpoint **ep_list,
+ unsigned count,
+ TAO::Profile_Transport_Resolver *r,
+ TAO_LF_Multi_Event *mev,
+ ACE_Time_Value *timeout)
+{
+ // Make sure that we always do a remove_reference for every member
+ // of the list
+ TAO_IIOP_Connection_Handler_Array_Guard svc_handler_auto_ptr (sh_list,count);
+ TAO_Transport *transport = 0;
+ TAO_Transport **tlist = 0;
+ ACE_NEW_RETURN (tlist,TAO_Transport*[count],0);
+
+ // populate the transport list
+ for (unsigned i = 0; i < count; i++)
+ tlist[i] = sh_list[i]->transport();
+
+ if (result != -1)
+ {
+ // We received a compeleted connection and 0 or more pending.
+ // the winner is the last member of the list, because the
+ // iterator stopped on a successful connect.
+ transport = tlist[count-1];
+ }
+ else
{
- // No immediate result, wait for completion
- if (errno == EWOULDBLOCK)
+ if (count == 1)
{
- // Try to wait until connection completion. Incase we block, then we
- // get a connected transport or not. In case of non block we get
- // a connected or not connected transport
+ transport = tlist[0];
if (!this->wait_for_connection_completion (r,
transport,
timeout))
{
if (TAO_debug_level > 2)
- ACE_ERROR ((LM_ERROR, "TAO (%P|%t) - IIOP_Connector::"
- "make_connection, "
- "wait for completion failed\n"));
+ ACE_ERROR ((LM_ERROR,
+ ACE_TEXT ("TAO (%P|%t) - IIOP_Connector::")
+ ACE_TEXT ("complete_connection, wait for completion ")
+ ACE_TEXT ("failed for 1 pending connect\n")));
}
}
else
{
- // Transport is not usable
- transport = 0;
+ if (!this->wait_for_connection_completion (r,
+ transport,
+ tlist,
+ count,
+ mev,
+ timeout))
+ {
+ if (TAO_debug_level > 2)
+ ACE_ERROR ((LM_ERROR,
+ ACE_TEXT ("TAO (%P|%t) - IIOP_Connector::")
+ ACE_TEXT ("complete_connection, wait for completion ")
+ ACE_TEXT ("failed for %d pending connects\n"),
+ count));
+ }
+ }
+ }
+ // At this point, the connection has be successfully created
+ // connected or not connected, but we have a connection.
+ TAO_IIOP_Connection_Handler *svc_handler = 0;
+ TAO_IIOP_Endpoint *iiop_endpoint = 0;
+
+ if (transport != 0)
+ {
+ for (unsigned i = 0; i < count; i++)
+ {
+ if (transport == tlist[i])
+ {
+ svc_handler = sh_list[i];
+ iiop_endpoint = ep_list[i];
+ break;
+ }
}
}
+
+ // Done with the transport list
+ delete [] tlist;
+
// In case of errors transport is zero
if (transport == 0)
{
// Give users a clue to the problem.
if (TAO_debug_level > 3)
+ {
+ for (unsigned i = 0; i < count; i++)
ACE_DEBUG ((LM_ERROR,
- "TAO (%P|%t) - IIOP_Connector::make_connection, "
- "connection to <%s:%d> failed (%p)\n",
- iiop_endpoint->host (), iiop_endpoint->port (),
+ ACE_TEXT ("(%P|%t) IIOP_Connector::make_connection, ")
+ ACE_TEXT("connection to <%s:%d> failed (%p)\n"),
+ ACE_TEXT_CHAR_TO_TCHAR (ep_list[i]->host ()),
+ ep_list[i]->port (),
ACE_TEXT("errno")));
+ }
return 0;
}
- // At this point, the connection has be successfully created
- // connected or not connected, but we have a connection.
+
if (TAO_debug_level > 2)
+ {
ACE_DEBUG ((LM_DEBUG,
- "TAO (%P|%t) - IIOP_Connector::make_connection, "
- "new %s connection to <%s:%d> on Transport[%d]\n",
- transport->is_connected() ? "connected" : "not connected",
- iiop_endpoint->host (),
+ ACE_TEXT ("TAO (%P|%t) - IIOP_Connector::make_connection, ")
+ ACE_TEXT ("new %s connection to <%s:%d> on Transport[%d]\n"),
+ transport->is_connected() ?
+ ACE_TEXT("connected") : ACE_TEXT("not connected"),
+ ACE_TEXT_CHAR_TO_TCHAR (iiop_endpoint->host ()),
iiop_endpoint->port (),
svc_handler->peer ().get_handle ()));
+ }
+ TAO_Base_Transport_Property desc(iiop_endpoint,0);
// Add the handler to Cache
int retval =
this->orb_core ()->lane_resources ().transport_cache ().cache_transport (
@@ -264,8 +492,8 @@ TAO_IIOP_Connector::make_connection (TAO::Profile_Transport_Resolver *r,
if (TAO_debug_level > 0)
{
ACE_ERROR ((LM_ERROR,
- "TAO (%P|%t) - IIOP_Connector::make_connection, "
- "could not add the new connection to cache\n"));
+ ACE_TEXT ("(%P|%t) IIOP_Connector::make_connection, ")
+ ACE_TEXT ("could not add new connection to cache\n")));
}
return 0;
@@ -285,9 +513,9 @@ TAO_IIOP_Connector::make_connection (TAO::Profile_Transport_Resolver *r,
if (TAO_debug_level > 0)
ACE_ERROR ((LM_ERROR,
- "TAO (%P|%t) - IIOP_Connector [%d]::make_connection, "
- "could not register the transport "
- "in the reactor.\n",
+ ACE_TEXT ("(%P|%t) IIOP_Connector [%d]::make_connection, ")
+ ACE_TEXT ("could not register the transport ")
+ ACE_TEXT ("in the reactor.\n"),
transport->id ()));
return 0;
@@ -395,10 +623,15 @@ TAO_IIOP_Connector::cancel_svc_handler (
// Cancel from the connector
if (handler)
+ {
+ handler->abort();
return this->base_connector_.cancel (handler);
+ }
return -1;
}
+
+
//@@ TAO_CONNECTOR_SPL_COPY_HOOK_END
TAO_END_VERSIONED_NAMESPACE_DECL
diff --git a/TAO/tao/IIOP_Connector.h b/TAO/tao/IIOP_Connector.h
index f465814dbc6..c1026010a09 100644
--- a/TAO/tao/IIOP_Connector.h
+++ b/TAO/tao/IIOP_Connector.h
@@ -90,12 +90,23 @@ public:
//@@ TAO_CONNECTOR_SPL_PUBLIC_METHODS_COPY_HOOK_END
protected:
+ /// A flag indicating the actual connector supports parallel
+ /// connection attempts. The base implementation always returns
+ /// 0. Override to return non-zero if parallel connection attempts
+ /// may be tried.
+ virtual int supports_parallel_connects (void) const;
// = The TAO_Connector methods, please check the documentation on
// Transport_Connector.h
int set_validate_endpoint (TAO_Endpoint *ep);
- TAO_Transport *make_connection (TAO::Profile_Transport_Resolver *r,
+ virtual TAO_Transport *make_connection (
+ TAO::Profile_Transport_Resolver *r,
+ TAO_Transport_Descriptor_Interface &desc,
+ ACE_Time_Value *timeout = 0);
+
+ virtual TAO_Transport *make_parallel_connection (
+ TAO::Profile_Transport_Resolver *r,
TAO_Transport_Descriptor_Interface &desc,
ACE_Time_Value *timeout = 0);
@@ -118,6 +129,26 @@ protected:
const bool lite_flag_;
private:
+ /// This is the first half of making a connection. Both make_connection
+ /// and make_parallel_connection will start out using begin_connection.
+ int begin_connection (TAO_IIOP_Connection_Handler *&svc_handler,
+ TAO::Profile_Transport_Resolver *r,
+ TAO_IIOP_Endpoint *endpoint,
+ ACE_Time_Value *timeout = 0);
+
+ /// This is the second half of making a connection when several endpoints
+ /// are involved. This works with modified wait strategies to wait for one
+ /// of many transports, and when once completes it will cancel the rest.
+ /// The winning transport is returned.
+ TAO_Transport *complete_connection (int result,
+ TAO_IIOP_Connection_Handler **&sh_list,
+ TAO_IIOP_Endpoint **ep_list,
+ unsigned count,
+ TAO::Profile_Transport_Resolver *r,
+ TAO_LF_Multi_Event *mev,
+ ACE_Time_Value *timeout = 0);
+
+
/// Return the remote endpoint, a helper function
TAO_IIOP_Endpoint *remote_endpoint (TAO_Endpoint *ep);
diff --git a/TAO/tao/IIOP_Endpoint.cpp b/TAO/tao/IIOP_Endpoint.cpp
index 2ca751b4ba2..f72f3999629 100644
--- a/TAO/tao/IIOP_Endpoint.cpp
+++ b/TAO/tao/IIOP_Endpoint.cpp
@@ -109,6 +109,22 @@ TAO_IIOP_Endpoint::TAO_IIOP_Endpoint (const char *host,
//@@ TAO_ENDPOINT_SPL_COPY_HOOK_END
+TAO_IIOP_Endpoint &
+TAO_IIOP_Endpoint::operator= (const TAO_IIOP_Endpoint &other)
+{
+ this->host_ = other.host_;
+ this->port_ = other.port_;
+#if defined (ACE_HAS_IPV6)
+ this->is_ipv6_decimal_ = other.is_ipv6_decimal_;
+#endif /* ACE_HAS_IPV6 */
+ this->is_encodable_ = other.is_encodable_;
+ this->object_addr_set_ = other.object_addr_set_;
+ this->object_addr_ = other.object_addr_;
+ this->preferred_path_ = other.preferred_path_;
+ this->next_ = 0; // do not copy list membership, since we are only cloning the values
+ return *this;
+}
+
TAO_IIOP_Endpoint::~TAO_IIOP_Endpoint (void)
{
}
@@ -228,6 +244,75 @@ TAO_IIOP_Endpoint::next (void)
}
TAO_Endpoint *
+TAO_IIOP_Endpoint::next_filtered (TAO_ORB_Core * orb_core, TAO_Endpoint *root)
+{
+ bool want_ipv6 = false;
+ bool ipv6_only = false;
+ bool prefer_ipv6 = false;
+#if defined (ACE_HAS_IPV6)
+ want_ipv6 = true;
+ ipv6_only = orb_core->orb_params()->connect_ipv6_only();
+ prefer_ipv6 = orb_core->orb_params()->prefer_ipv6_interfaces();
+#else
+ ACE_UNUSED_ARG (orb_core);
+#endif /* ACE_HAS_IPV6 */
+ return
+ this->next_filtered_i (static_cast<TAO_IIOP_Endpoint *>(root),
+ ipv6_only,
+ prefer_ipv6,
+ want_ipv6);
+}
+
+TAO_IIOP_Endpoint*
+TAO_IIOP_Endpoint::next_filtered_i (TAO_IIOP_Endpoint *root,
+ bool ipv6_only,
+ bool prefer_ipv6,
+ bool want_ipv6)
+{
+ // the candidate is nominally the next entry in the list, but since
+ // the list may loop back on itself, the root of the list needs to be
+ // initialized.
+ TAO_IIOP_Endpoint *candidate = (root == 0) ? this : next_;
+ if (root == 0)
+ root = this;
+
+#if defined (ACE_HAS_IPV6)
+ if (ipv6_only)
+ {
+ if (candidate == 0 || candidate->is_ipv6_decimal())
+ return candidate;
+ const ACE_INET_Addr &addr = candidate->object_addr ();
+ bool allowed = addr.get_type () == AF_INET6 &&
+ !addr.is_ipv4_mapped_ipv6();
+
+ return allowed ? candidate :
+ candidate->next_filtered_i(root, ipv6_only, prefer_ipv6, true);
+ }
+ if (prefer_ipv6)
+ {
+ if (candidate == 0)
+ return !want_ipv6 ? candidate :
+ root->next_filtered_i(root, ipv6_only, prefer_ipv6, false);
+
+ if (want_ipv6 == candidate->is_ipv6_decimal())
+ return candidate;
+
+ const ACE_INET_Addr &addr = candidate->object_addr ();
+ bool really_ipv6 = addr.get_type () == AF_INET6 &&
+ !addr.is_ipv4_mapped_ipv6();
+ return (want_ipv6 == really_ipv6) ? candidate :
+ candidate->next_filtered_i(root, ipv6_only, prefer_ipv6, want_ipv6);
+ }
+#else
+ ACE_UNUSED_ARG (want_ipv6);
+ ACE_UNUSED_ARG (ipv6_only);
+ ACE_UNUSED_ARG (prefer_ipv6);
+#endif
+
+ return candidate;
+}
+
+TAO_Endpoint *
TAO_IIOP_Endpoint::duplicate (void)
{
TAO_IIOP_Endpoint *endpoint = 0;
diff --git a/TAO/tao/IIOP_Endpoint.h b/TAO/tao/IIOP_Endpoint.h
index 73fda040cd1..fff92575b94 100644
--- a/TAO/tao/IIOP_Endpoint.h
+++ b/TAO/tao/IIOP_Endpoint.h
@@ -85,6 +85,23 @@ public:
virtual TAO_Endpoint *next (void);
+ /**
+ * Return the next endpoint in the list, but use protocol-specific
+ * filtering to constrain the value. The orb core is needed to supply
+ * any sort of filter arguments, and the root endpoint is needed in case
+ * the algorithm needs to rewind. If the supplied root is 0, then this
+ * is assumed to be the candidate next endpoint.
+ *
+ * To use this, the caller starts off the change with root == 0. This
+ * is a bit of a violation in logic, a more correct implementation would
+ * accept this == 0 and a non-null root.
+ * To do iteration using next_filtered, do:
+ * for (TAO_Endpoint *ep = root_endpoint->next_filtered (orb_core, 0);
+ * ep != 0;
+ * ep = ep->next_filtered(orb_core, root_endpoint)) { }
+ */
+ virtual TAO_Endpoint *next_filtered (TAO_ORB_Core *, TAO_Endpoint *root);
+
virtual int addr_to_string (char *buffer, size_t length);
/// Makes a copy of @c this
@@ -135,7 +152,17 @@ public:
//@@ TAO_ENDPOINT_SPL_PUBLIC_METHODS_COPY_HOOK_END
+
+ /// Need to have an assignment operator since the IIOP_Profile class may
+ /// have to reorder its list of endpoints based on filtering by the EndpointPolicy.
+ TAO_IIOP_Endpoint & operator= (const TAO_IIOP_Endpoint& other);
+
private:
+ TAO_IIOP_Endpoint *next_filtered_i (TAO_IIOP_Endpoint *root,
+ bool ipv6_only,
+ bool prefer_ipv6,
+ bool want_ipv6);
+
//@@ TAO_ENDPOINT_SPL_PRIVATE_DATA_COPY_HOOK_START
diff --git a/TAO/tao/IIOP_Profile.cpp b/TAO/tao/IIOP_Profile.cpp
index 93bc39cbd7d..4866b52a071 100644
--- a/TAO/tao/IIOP_Profile.cpp
+++ b/TAO/tao/IIOP_Profile.cpp
@@ -202,13 +202,16 @@ TAO_IIOP_Profile::parse_string_i (const char *ior
{
// A port number or port name was specified.
CORBA::ULong length_port = okd - cp_pos - 1;
-
CORBA::String_var tmp = CORBA::string_alloc (length_port);
ACE_OS::strncpy (tmp.inout (), cp_pos + 1, length_port);
tmp[length_port] = '\0';
-
- if (ACE_OS::strspn (tmp.in (), "1234567890") == length_port)
+ if (length_port == 0)
+ {
+ this->endpoint_.port_ = 2809; // default IIOP port for
+ // parsing corbaloc strings
+ }
+ else if (ACE_OS::strspn (tmp.in (), "1234567890") == length_port)
{
this->endpoint_.port_ =
static_cast<CORBA::UShort> (ACE_OS::atoi (tmp.in ()));
@@ -299,6 +302,9 @@ TAO_IIOP_Profile::parse_string_i (const char *ior
CORBA::Boolean
TAO_IIOP_Profile::do_is_equivalent (const TAO_Profile *other_profile)
{
+ if (other_profile == this)
+ return 1;
+
const TAO_IIOP_Profile *op =
dynamic_cast<const TAO_IIOP_Profile *> (other_profile);
@@ -306,6 +312,10 @@ TAO_IIOP_Profile::do_is_equivalent (const TAO_Profile *other_profile)
if (op == 0)
return 0;
+ if (this->count_ == 0 && op->count_ == 0)
+ return 1;
+ if (this->count_ != op->count_)
+ return 0;
// Check endpoints equivalence.
const TAO_IIOP_Endpoint *other_endp = &op->endpoint_;
for (TAO_IIOP_Endpoint *endp = &this->endpoint_;
@@ -372,6 +382,65 @@ TAO_IIOP_Profile::add_endpoint (TAO_IIOP_Endpoint *endp)
++this->count_;
}
+void
+TAO_IIOP_Profile::remove_endpoint (TAO_IIOP_Endpoint *endp)
+{
+ if (endp == 0)
+ return;
+
+ // special handling for the target matching the base endpoint
+ if (endp == &this->endpoint_)
+ {
+ if (--this->count_ > 0)
+ {
+ TAO_IIOP_Endpoint* n = this->endpoint_.next_;
+ this->endpoint_ = *n;
+ // since the assignment operator does not copy the next_
+ // pointer, we must do it by hand
+ this->endpoint_.next_ = n->next_;
+ delete n;
+ }
+ return;
+ }
+
+ TAO_IIOP_Endpoint* last = &this->endpoint_;
+ TAO_IIOP_Endpoint* cur = this->endpoint_.next_;
+
+ while (cur != 0)
+ {
+ if (cur == endp)
+ break;
+ last = cur;
+ cur = cur->next_;
+ }
+
+ if (cur != 0)
+ {
+ last->next_ = cur->next_;
+ cur->next_ = 0;
+ --this->count_;
+ delete cur;
+ }
+}
+
+void
+TAO_IIOP_Profile::remove_generic_endpoint (TAO_Endpoint *ep)
+{
+ this->remove_endpoint(dynamic_cast<TAO_IIOP_Endpoint *>(ep));
+}
+
+void
+TAO_IIOP_Profile::add_generic_endpoint (TAO_Endpoint *endp)
+{
+ TAO_IIOP_Endpoint *iep = dynamic_cast<TAO_IIOP_Endpoint *>(endp);
+ if (iep != 0)
+ {
+ TAO_IIOP_Endpoint *clone;
+ ACE_NEW (clone, TAO_IIOP_Endpoint(*iep));
+ this->add_endpoint(clone);
+ }
+}
+
char *
TAO_IIOP_Profile::to_string (ACE_ENV_SINGLE_ARG_DECL_NOT_USED)
{
diff --git a/TAO/tao/IIOP_Profile.h b/TAO/tao/IIOP_Profile.h
index 4c338cbc664..03cf95694bd 100644
--- a/TAO/tao/IIOP_Profile.h
+++ b/TAO/tao/IIOP_Profile.h
@@ -77,6 +77,18 @@ public:
*/
void add_endpoint (TAO_IIOP_Endpoint *endp);
+ /**
+ * Remove @a endp from this profile's list of endpoints and free the
+ * @a endp memory.
+ * This method assumes @a endp is in this profile's endpoint list.
+ */
+ void remove_endpoint (TAO_IIOP_Endpoint *endp);
+
+ virtual void remove_generic_endpoint (TAO_Endpoint *ep);
+
+ /// Add an endpoint when the specific endpoint type is unknown
+ virtual void add_generic_endpoint (TAO_Endpoint *ep);
+
//@@ TAO_PROFILE_SPL_PUBLIC_METHODS_COPY_HOOK_END
/// The object key delimiter that IIOP uses or expects.
diff --git a/TAO/tao/IORInterceptor/IORInfo.cpp b/TAO/tao/IORInterceptor/IORInfo.cpp
index 8c9f231166f..de6dd91494d 100644
--- a/TAO/tao/IORInterceptor/IORInfo.cpp
+++ b/TAO/tao/IORInterceptor/IORInfo.cpp
@@ -90,14 +90,16 @@ TAO_IORInfo::add_ior_component_to_profile (
ACE_CHECK;
}
-PortableInterceptor::AdapterManagerId
+char *
TAO_IORInfo::manager_id (ACE_ENV_SINGLE_ARG_DECL)
ACE_THROW_SPEC ((CORBA::SystemException))
{
this->check_validity (ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_CHECK_RETURN (0);
- return this->poa_->get_manager_id (ACE_ENV_SINGLE_ARG_PARAMETER);
+ PortableServer::POAManager_var poa_manager = this->poa_->the_POAManager (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK_RETURN (0);
+ return poa_manager->get_id (ACE_ENV_SINGLE_ARG_PARAMETER);
}
PortableInterceptor::AdapterState
diff --git a/TAO/tao/IORInterceptor/IORInfo.h b/TAO/tao/IORInterceptor/IORInfo.h
index d0314b30f7e..3d4803a6792 100644
--- a/TAO/tao/IORInterceptor/IORInfo.h
+++ b/TAO/tao/IORInterceptor/IORInfo.h
@@ -79,7 +79,7 @@ public:
ACE_ENV_ARG_DECL_WITH_DEFAULTS)
ACE_THROW_SPEC ((CORBA::SystemException));
- virtual PortableInterceptor::AdapterManagerId manager_id (
+ virtual char * manager_id (
ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS)
ACE_THROW_SPEC ((CORBA::SystemException));
diff --git a/TAO/tao/IORInterceptor/IORInfoC.h b/TAO/tao/IORInterceptor/IORInfoC.h
index 80b0ab75f1d..488250f84ef 100644
--- a/TAO/tao/IORInterceptor/IORInfoC.h
+++ b/TAO/tao/IORInterceptor/IORInfoC.h
@@ -160,7 +160,7 @@ namespace PortableInterceptor
// TAO_IDL - Generated from
// be\be_visitor_operation/operation_ch.cpp:46
- virtual ::PortableInterceptor::AdapterManagerId manager_id (
+ virtual char * manager_id (
ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS
)
ACE_THROW_SPEC ((
diff --git a/TAO/tao/IORInterceptor/IORInterceptorC.h b/TAO/tao/IORInterceptor/IORInterceptorC.h
index 7f78cfe946f..5b0df155836 100644
--- a/TAO/tao/IORInterceptor/IORInterceptorC.h
+++ b/TAO/tao/IORInterceptor/IORInterceptorC.h
@@ -235,7 +235,7 @@ namespace PortableInterceptor
// be\be_visitor_operation/operation_ch.cpp:46
virtual void adapter_manager_state_changed (
- ::PortableInterceptor::AdapterManagerId id,
+ const char * id,
::PortableInterceptor::AdapterState state
ACE_ENV_ARG_DECL_WITH_DEFAULTS
)
diff --git a/TAO/tao/IORInterceptor/IORInterceptor_Adapter_Impl.cpp b/TAO/tao/IORInterceptor/IORInterceptor_Adapter_Impl.cpp
index 35cbb376d28..00a00383fd6 100644
--- a/TAO/tao/IORInterceptor/IORInterceptor_Adapter_Impl.cpp
+++ b/TAO/tao/IORInterceptor/IORInterceptor_Adapter_Impl.cpp
@@ -220,7 +220,7 @@ TAO_IORInterceptor_Adapter_Impl::adapter_state_changed (
void
TAO_IORInterceptor_Adapter_Impl::adapter_manager_state_changed (
- PortableInterceptor::AdapterManagerId id,
+ const char * id,
PortableInterceptor::AdapterState state
ACE_ENV_ARG_DECL)
ACE_THROW_SPEC ((CORBA::SystemException))
diff --git a/TAO/tao/IORInterceptor/IORInterceptor_Adapter_Impl.h b/TAO/tao/IORInterceptor/IORInterceptor_Adapter_Impl.h
index 6257c699b9a..5dc289f77d8 100644
--- a/TAO/tao/IORInterceptor/IORInterceptor_Adapter_Impl.h
+++ b/TAO/tao/IORInterceptor/IORInterceptor_Adapter_Impl.h
@@ -80,7 +80,7 @@ public:
ACE_THROW_SPEC ((CORBA::SystemException));
virtual void adapter_manager_state_changed (
- PortableInterceptor::AdapterManagerId id,
+ const char * id,
PortableInterceptor::AdapterState state
ACE_ENV_ARG_DECL)
ACE_THROW_SPEC ((CORBA::SystemException));
diff --git a/TAO/tao/IORInterceptor_Adapter.h b/TAO/tao/IORInterceptor_Adapter.h
index ea337f5c9f3..5dc955a3393 100644
--- a/TAO/tao/IORInterceptor_Adapter.h
+++ b/TAO/tao/IORInterceptor_Adapter.h
@@ -101,7 +101,7 @@ public:
ACE_THROW_SPEC ((CORBA::SystemException)) = 0;
virtual void adapter_manager_state_changed (
- PortableInterceptor::AdapterManagerId id,
+ const char * id,
PortableInterceptor::AdapterState state
ACE_ENV_ARG_DECL)
ACE_THROW_SPEC ((CORBA::SystemException)) = 0;
diff --git a/TAO/tao/Invocation_Endpoint_Selectors.cpp b/TAO/tao/Invocation_Endpoint_Selectors.cpp
index bdb493bd648..5221ee8d9c5 100644
--- a/TAO/tao/Invocation_Endpoint_Selectors.cpp
+++ b/TAO/tao/Invocation_Endpoint_Selectors.cpp
@@ -14,7 +14,7 @@ ACE_RCSID (tao,
"$Id$")
-TAO_BEGIN_VERSIONED_NAMESPACE_DECL
+ TAO_BEGIN_VERSIONED_NAMESPACE_DECL
TAO_Invocation_Endpoint_Selector::~TAO_Invocation_Endpoint_Selector (void)
{
@@ -27,98 +27,10 @@ TAO_Default_Endpoint_Selector::~TAO_Default_Endpoint_Selector (void)
}
void
-TAO_Default_Endpoint_Selector::select_endpoint (
- TAO::Profile_Transport_Resolver *r,
- ACE_Time_Value *max_wait_time
- ACE_ENV_ARG_DECL)
+TAO_Default_Endpoint_Selector::select_endpoint (TAO::Profile_Transport_Resolver *r,
+ ACE_Time_Value *max_wait_time
+ ACE_ENV_ARG_DECL)
{
-#if defined (ACE_HAS_IPV6)
- // See if we have IIOP selector preference parameters set.
- // If so we need to walk a different path in selecting an endpoint.
- if (r->stub ()->orb_core ()->orb_params ()->prefer_ipv6_interfaces () ||
- r->stub ()->orb_core ()->orb_params ()->connect_ipv6_only ())
- {
- bool test_ipv6 = true; // first round try IPv6
-
- for (unsigned test_count = 2; test_count > 0 ;--test_count)
- {
- do
- {
- r->profile (r->stub ()->profile_in_use ());
-
- // Check whether we need to do a blocked wait or we have a
- // non-blocked wait and we support that. If this is not the
- // case we can't use this profile so try the next.
- if (r->blocked_connect () ||
- (!r->blocked_connect () &&
- r->profile ()->supports_non_blocking_oneways ()))
- {
- const size_t endpoint_count =
- r->profile ()->endpoint_count ();
-
- TAO_Endpoint *ep =
- r->profile ()->endpoint ();
-
- for (size_t i = 0; i < endpoint_count; ++i)
- {
- // in case we're running the first round:
- // try this endpoint if it either *not* an IIOP endpoint OR
- // if it is an IIOP IPv6 endpoint.
- // else
- // only try when it's an IPv4 IIOP endpoint
- bool try_ep = test_ipv6;
-
- if (r->profile ()->tag () == IOP::TAG_INTERNET_IOP)
- {
- TAO_IIOP_Endpoint *iep =
- dynamic_cast<TAO_IIOP_Endpoint *> (ep);
- if (!iep->is_ipv6_decimal ())
- {
- const ACE_INET_Addr &addr = iep->object_addr ();
-
- if (test_ipv6)
- try_ep =
- addr.get_type () == AF_INET6 &&
- !addr.is_ipv4_mapped_ipv6();
- else
- try_ep =
- addr.get_type () == AF_INET ||
- (addr.get_type () == AF_INET6 &&
- addr.is_ipv4_mapped_ipv6());
- }
- }
-
- if (try_ep)
- {
- TAO_Base_Transport_Property desc (ep);
- const bool retval =
- r->try_connect (&desc,
- max_wait_time
- ACE_ENV_ARG_PARAMETER);
- ACE_CHECK;
-
- // Check if the connect has completed.
- if (retval)
- return;
- }
-
- // Go to the next endpoint in this profile.
- ep = ep->next ();
- }
- }
- }
- while (r->stub ()->next_profile_retry () != 0);
-
- // If we get here we did not find any suitable non-IPv4 endpoint so
- // now try those if allowed
- if (!r->stub ()->orb_core ()->orb_params ()->connect_ipv6_only ())
- test_ipv6 = false;
- else
- break; // Do not test remaining (if any) IPv4 endpoints
- }
- }
- else
-#endif /* ACE_HAS_IPV6 */
do
{
r->profile (r->stub ()->profile_in_use ());
@@ -127,18 +39,41 @@ TAO_Default_Endpoint_Selector::select_endpoint (
// non-blocked wait and we support that. If this is not the
// case we can't use this profile so try the next.
if (r->blocked_connect () ||
- (!r->blocked_connect () && r->profile ()->supports_non_blocking_oneways ()))
+ (!r->blocked_connect () &&
+ r->profile ()->supports_non_blocking_oneways ()))
{
- size_t const endpoint_count =
- r->profile ()->endpoint_count ();
+ if (r->profile ()->endpoint_count () > 1 &&
+ r->use_parallel_connect())
+ {
+
+ TAO_Endpoint *ep =
+ r->profile ()->endpoint ();
- TAO_Endpoint * ep =
- r->profile ()->endpoint ();
+ TAO_Base_Transport_Property desc (ep);
+ bool success =
+ r->try_parallel_connect (&desc,
+ max_wait_time
+ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK;
- for (size_t i = 0; i < endpoint_count; ++i)
+ // Check if the connect has completed.
+ if (success)
+ return;
+ // The default implementation of try_parallel_connect returns
+ // a not supported errno. In this case, allow the ordinary
+ // connection mechanism to be tried. OTOH, if the connection
+ // attempt failed for some other reason, then abandon this
+ // profile and try the next one in the list.
+ else if (errno != ENOTSUP)
+ continue;
+ }
+
+ for (TAO_Endpoint *ep = r->profile ()->first_filtered_endpoint ();
+ ep != 0;
+ ep = r->profile ()->next_filtered_endpoint (ep))
{
TAO_Base_Transport_Property desc (ep);
- bool const retval =
+ bool retval =
r->try_connect (&desc,
max_wait_time
ACE_ENV_ARG_PARAMETER);
@@ -147,14 +82,13 @@ TAO_Default_Endpoint_Selector::select_endpoint (
// Check if the connect has completed.
if (retval)
return;
-
- // Go to the next endpoint in this profile.
- ep = ep->next ();
}
+
}
}
while (r->stub ()->next_profile_retry () != 0);
+
// If we get here, we completely failed to find an endpoint selector
// that we know how to use, so throw an exception.
ACE_THROW (CORBA::TRANSIENT (CORBA::OMGVMCID | 2,
diff --git a/TAO/tao/Invocation_Endpoint_Selectors.h b/TAO/tao/Invocation_Endpoint_Selectors.h
index 29b5580d88a..bd2c5101889 100644
--- a/TAO/tao/Invocation_Endpoint_Selectors.h
+++ b/TAO/tao/Invocation_Endpoint_Selectors.h
@@ -99,6 +99,7 @@ public:
virtual void select_endpoint (TAO::Profile_Transport_Resolver *r,
ACE_Time_Value *val
ACE_ENV_ARG_DECL);
+
};
TAO_END_VERSIONED_NAMESPACE_DECL
diff --git a/TAO/tao/LF_CH_Event.h b/TAO/tao/LF_CH_Event.h
index 2a92f9007ab..f9adcc5fb1b 100644
--- a/TAO/tao/LF_CH_Event.h
+++ b/TAO/tao/LF_CH_Event.h
@@ -23,6 +23,8 @@
TAO_BEGIN_VERSIONED_NAMESPACE_DECL
+class TAO_LF_Multi_Event;
+
/**
* @class TAO_LF_CH_Event
*
@@ -35,6 +37,15 @@ TAO_BEGIN_VERSIONED_NAMESPACE_DECL
class TAO_Export TAO_LF_CH_Event: public TAO_LF_Event
{
public:
+ /**
+ * The TAO_LF_Multi_Event class is another specialization of
+ * TAO_LF_Event, used for aggregating many connection handlers into
+ * a single event object.. It requires friendship so that it can
+ * check the is_state_final() flag on each of its contained
+ * connection handlers.
+ */
+ friend class TAO_LF_Multi_Event;
+
/// Constructor
TAO_LF_CH_Event (void);
diff --git a/TAO/tao/LF_Connect_Strategy.cpp b/TAO/tao/LF_Connect_Strategy.cpp
index d1d71b550e3..bc401286334 100644
--- a/TAO/tao/LF_Connect_Strategy.cpp
+++ b/TAO/tao/LF_Connect_Strategy.cpp
@@ -1,4 +1,5 @@
#include "tao/LF_Connect_Strategy.h"
+#include "tao/LF_Multi_Event.h"
#include "tao/Connection_Handler.h"
#include "tao/LF_Follower.h"
#include "tao/Leader_Follower.h"
@@ -41,41 +42,26 @@ TAO_LF_Connect_Strategy::synch_options (ACE_Time_Value *timeout,
}
int
-TAO_LF_Connect_Strategy::wait (TAO_Connection_Handler *ch,
+TAO_LF_Connect_Strategy::wait_i (TAO_LF_Event *ev,
+ TAO_Transport *transport,
ACE_Time_Value *max_wait_time)
{
- ACE_ASSERT (ch != 0);
-
- return this->wait (ch->transport (),
- max_wait_time);
-}
-
-int
-TAO_LF_Connect_Strategy::wait (TAO_Transport *transport,
- ACE_Time_Value *max_wait_time)
-{
- // Basically the connection was EINPROGRESS, but before we could
- // wait for it some other thread detected a failure and cleaned up
- // the connection handler.
if (transport == 0)
return -1;
- TAO_Connection_Handler *ch =
- transport->connection_handler ();
-
TAO_Leader_Follower &leader_follower =
this->orb_core_->leader_follower ();
int result =
- leader_follower.wait_for_event (ch,
+ leader_follower.wait_for_event (ev,
transport,
max_wait_time);
- // Set the result.
- if (ch->error_detected () && result != -1)
+ if (ev->error_detected () && result != -1)
result = -1;
return result;
}
+
TAO_END_VERSIONED_NAMESPACE_DECL
diff --git a/TAO/tao/LF_Connect_Strategy.h b/TAO/tao/LF_Connect_Strategy.h
index 4cff8ed7976..35e6e514046 100644
--- a/TAO/tao/LF_Connect_Strategy.h
+++ b/TAO/tao/LF_Connect_Strategy.h
@@ -28,7 +28,7 @@ ACE_END_VERSIONED_NAMESPACE_DECL
TAO_BEGIN_VERSIONED_NAMESPACE_DECL
-class TAO_Connector;
+class TAO_LF_Event;
/**
* @class TAO_LF_Connect_Strategy
@@ -53,13 +53,11 @@ public:
virtual void synch_options (ACE_Time_Value *val,
ACE_Synch_Options &opt);
- virtual int wait (TAO_Connection_Handler *ch,
+protected:
+ virtual int wait_i (TAO_LF_Event *ev,
+ TAO_Transport *t,
ACE_Time_Value *val);
- virtual int wait (TAO_Transport *ch,
- ACE_Time_Value *val);
-
-
};
TAO_END_VERSIONED_NAMESPACE_DECL
diff --git a/TAO/tao/LF_Event.h b/TAO/tao/LF_Event.h
index 678be63cb3c..473fc8a4868 100644
--- a/TAO/tao/LF_Event.h
+++ b/TAO/tao/LF_Event.h
@@ -65,12 +65,15 @@ public:
* method is used to bind the waiting thread to the event, in order
* to let the event signal any important state changes.
*
+ * This is virtual to allow the LF_Multi_Event derived type share
+ * the follower with all the subordinate LF_CH_Events.
+ *
* @return -1 if the LF_Event is already bound, 0 otherwise
*/
- int bind (TAO_LF_Follower *follower);
+ virtual int bind (TAO_LF_Follower *follower);
/// Unbind the follower
- int unbind (void);
+ virtual int unbind (void);
//@{
/** @name State management
diff --git a/TAO/tao/MProfile.cpp b/TAO/tao/MProfile.cpp
index 59e25c0bfb7..94fb9e4dbf0 100644
--- a/TAO/tao/MProfile.cpp
+++ b/TAO/tao/MProfile.cpp
@@ -364,4 +364,19 @@ TAO_MProfile::policy_list (ACE_ENV_SINGLE_ARG_DECL)
return ret_val;
}
+int
+TAO_MProfile::give_shared_profile (TAO_Profile *pfile)
+{
+ for (unsigned i = 0; i < this->last_; i++)
+ if (pfile->tag() == this->pfiles_[i]->tag() &&
+ pfile->compare_key(this->pfiles_[i]))
+ {
+ this->pfiles_[i]->add_generic_endpoint(pfile->endpoint());
+ pfile->_decr_refcnt();
+ return i;
+ }
+ return this->give_profile(pfile,0);
+}
+
+
TAO_END_VERSIONED_NAMESPACE_DECL
diff --git a/TAO/tao/MProfile.h b/TAO/tao/MProfile.h
index ba45b3a4a5d..7fef351e37c 100644
--- a/TAO/tao/MProfile.h
+++ b/TAO/tao/MProfile.h
@@ -140,7 +140,7 @@ public:
/// Return the index of this entry or -1 if it can not be added.
/// this object assumes ownership of this profile!!
- int give_profile (TAO_Profile *pfile);
+ int give_profile (TAO_Profile *pfile, int share = 0);
/// append the profiles in pfiles to this object. The count
/// will be incremented on the individual profile objects.
@@ -217,6 +217,12 @@ private:
/// Helper method to implement the destructor
void cleanup (void);
+ /// A helper to give_profile to be used when share is true. This
+ /// method is used primarily to help the corbaloc parser create a
+ /// single profile with multiple endpoints rather than constructing
+ /// multiple profiles with 1 endpoint per.
+ int give_shared_profile (TAO_Profile *pfile);
+
private:
/**
diff --git a/TAO/tao/MProfile.i b/TAO/tao/MProfile.i
index b3ebb70abf5..2cf4d05d274 100644
--- a/TAO/tao/MProfile.i
+++ b/TAO/tao/MProfile.i
@@ -142,8 +142,10 @@ TAO_MProfile::rewind (void)
current_ = 0;
}
ACE_INLINE int
-TAO_MProfile::give_profile (TAO_Profile *pfile)
+TAO_MProfile::give_profile (TAO_Profile *pfile, int share)
{
+ if (share)
+ return this->give_shared_profile(pfile);
// skip by the used slots
if (last_ == size_) // full!
return -1;
diff --git a/TAO/tao/Makefile.am b/TAO/tao/Makefile.am
index 8829c8e503c..40e0939707f 100644
--- a/TAO/tao/Makefile.am
+++ b/TAO/tao/Makefile.am
@@ -130,6 +130,7 @@ libTAO_la_SOURCES = \
LF_Follower_Auto_Adder.cpp \
LF_Follower_Auto_Ptr.cpp \
LF_Invocation_Event.cpp \
+ LF_Multi_Event.cpp \
LF_Strategy.cpp \
LF_Strategy_Complete.cpp \
LRU_Connection_Purging_Strategy.cpp \
@@ -276,6 +277,7 @@ nobase_include_HEADERS = \
Any_Insert_Policy_T.h \
Arg_Traits_T.h \
Argument.h \
+ Array_Traits_T.h \
Array_VarOut_T.cpp \
Array_VarOut_T.h \
Array_VarOut_T.inl \
@@ -301,6 +303,16 @@ nobase_include_HEADERS = \
BooleanSeq.pidl \
BooleanSeqC.h \
BooleanSeqS.h \
+ Bounded_Array_Allocation_Traits.h \
+ Bounded_Array_Sequence_T.h \
+ Bounded_Basic_String_Sequence_T.h \
+ Bounded_Object_Reference_Sequence_T.h \
+ Bounded_Reference_Allocation_Traits.h \
+ Bounded_Sequence_CDR_T.h \
+ Bounded_String_Sequence_T.h \
+ Bounded_Value_Allocation_Traits_T.h \
+ Bounded_Value_Sequence_T.h \
+ Bounded_Wstring_Sequence_T.h \
Buffer_Allocator_T.cpp \
Buffer_Allocator_T.h \
Buffering_Constraint_Policy.h \
@@ -405,6 +417,7 @@ nobase_include_HEADERS = \
GIOP_Message_Version.inl \
GIOP_Utils.h \
GUIResource_Factory.h \
+ Generic_Sequence_T.h \
IFR_Client_Adapter.h \
IIOP.pidl \
IIOPC.h \
@@ -461,6 +474,7 @@ nobase_include_HEADERS = \
LF_Follower_Auto_Ptr.h \
LF_Follower_Auto_Ptr.inl \
LF_Invocation_Event.h \
+ LF_Multi_Event.h \
LF_Strategy.h \
LF_Strategy_Complete.h \
LRU_Connection_Purging_Strategy.h \
@@ -518,6 +532,9 @@ nobase_include_HEADERS = \
Object_Proxy_Broker.h \
Object_Ref_Table.h \
Object_Ref_Table.inl \
+ Object_Reference_Sequence_Element_T.h \
+ Object_Reference_Traits_Base_T.h \
+ Object_Reference_Traits_T.h \
Object_T.cpp \
Object_T.h \
Objref_VarOut_T.cpp \
@@ -570,6 +587,7 @@ nobase_include_HEADERS = \
Pseudo_VarOut_T.h \
Pseudo_VarOut_T.inl \
Queued_Message.h \
+ Range_Checking_T.h \
Reactive_Connect_Strategy.h \
Reactive_Flushing_Strategy.h \
Refcounted_ObjectKey.h \
@@ -588,6 +606,7 @@ nobase_include_HEADERS = \
Seq_Var_T.cpp \
Seq_Var_T.h \
Seq_Var_T.inl \
+ Sequence_T.h \
ServerRequestInterceptor_Adapter.h \
ServerRequestInterceptor_Adapter_Factory.h \
Server_Strategy_Factory.h \
@@ -609,6 +628,10 @@ nobase_include_HEADERS = \
StringSeqC.h \
StringSeqS.h \
String_Alloc.h \
+ String_Manager_T.h \
+ String_Sequence_Element_T.h \
+ String_Traits_Base_T.h \
+ String_Traits_T.h \
Stub.h \
Stub.i \
Stub_Factory.h \
@@ -672,8 +695,20 @@ nobase_include_HEADERS = \
UShortSeq.pidl \
UShortSeqC.h \
UShortSeqS.h \
+ Unbounded_Array_Allocation_Traits_T.h \
+ Unbounded_Array_Sequence_T.h \
+ Unbounded_Basic_String_Sequence_T.h \
+ Unbounded_Object_Reference_Sequence_T.h \
+ Unbounded_Octet_Sequence_T.h \
+ Unbounded_Reference_Allocation_Traits_T.h \
+ Unbounded_Sequence_CDR_T.h \
+ Unbounded_String_Sequence_T.h \
+ Unbounded_Value_Allocation_Traits_T.h \
+ Unbounded_Value_Sequence_T.h \
+ Unbounded_Wstring_Sequence_T.h \
UserException.h \
UserException.inl \
+ Value_Traits_T.h \
Valuetype_Adapter.h \
Valuetype_Adapter_Factory.h \
VarOut_T.cpp \
@@ -1302,6 +1337,7 @@ libTAO_PortableServer_la_CPPFLAGS = \
-DTAO_PORTABLESERVER_BUILD_DLL
libTAO_PortableServer_la_SOURCES = \
+ PortableServer/Acceptor_Filter_Factory.cpp \
PortableServer/Active_Object_Map.cpp \
PortableServer/Active_Object_Map_Entry.cpp \
PortableServer/Active_Policy_Strategies.cpp \
@@ -1360,6 +1396,8 @@ libTAO_PortableServer_la_SOURCES = \
PortableServer/Operation_Table_Perfect_Hash.cpp \
PortableServer/POAManager.cpp \
PortableServer/POAManagerC.cpp \
+ PortableServer/POAManagerFactory.cpp \
+ PortableServer/POAManagerFactoryC.cpp \
PortableServer/POA_Cached_Policies.cpp \
PortableServer/POA_Current.cpp \
PortableServer/POA_Current_Factory.cpp \
@@ -1429,6 +1467,7 @@ libTAO_PortableServer_la_LIBADD = \
$(ACE_BUILDDIR)/ace/libACE.la
nobase_include_HEADERS += \
+ PortableServer/Acceptor_Filter_Factory.h \
PortableServer/Active_Object_Map.h \
PortableServer/Active_Object_Map.i \
PortableServer/Active_Object_Map_Entry.h \
@@ -1525,6 +1564,9 @@ nobase_include_HEADERS += \
PortableServer/POAManager.i \
PortableServer/POAManager.pidl \
PortableServer/POAManagerC.h \
+ PortableServer/POAManagerFactory.h \
+ PortableServer/POAManagerFactory.pidl \
+ PortableServer/POAManagerFactoryC.h \
PortableServer/POA_Cached_Policies.h \
PortableServer/POA_Cached_Policies.i \
PortableServer/POA_Current.h \
@@ -2242,6 +2284,74 @@ EXTRA_DIST += \
DynamicInterface/TAO_DynamicInterface.rc
+## Makefile.EndpointPolicy.am
+
+lib_LTLIBRARIES += libTAO_EndpointPolicy.la
+
+libTAO_EndpointPolicy_la_CPPFLAGS = \
+ -I$(ACE_ROOT) \
+ -I$(ACE_BUILDDIR) \
+ -I$(TAO_ROOT) \
+ -I$(TAO_BUILDDIR) \
+ -DTAO_ENDPOINTPOLICY_BUILD_DLL
+
+libTAO_EndpointPolicy_la_SOURCES = \
+ EndpointPolicy/EndpointPolicy.cpp \
+ EndpointPolicy/EndpointPolicyA.cpp \
+ EndpointPolicy/EndpointPolicyC.cpp \
+ EndpointPolicy/EndpointPolicyTypeA.cpp \
+ EndpointPolicy/EndpointPolicyTypeC.cpp \
+ EndpointPolicy/EndpointPolicy_Factory.cpp \
+ EndpointPolicy/EndpointPolicy_ORBInitializer.cpp \
+ EndpointPolicy/EndpointPolicy_i.cpp \
+ EndpointPolicy/Endpoint_Acceptor_Filter.cpp \
+ EndpointPolicy/Endpoint_Acceptor_Filter_Factory.cpp \
+ EndpointPolicy/IIOPEndpointValueA.cpp \
+ EndpointPolicy/IIOPEndpointValueC.cpp \
+ EndpointPolicy/IIOPEndpointValue_i.cpp
+
+libTAO_EndpointPolicy_la_LDFLAGS = \
+ -version-number @TAO_MAJOR@:@TAO_MINOR@:@TAO_BETA@
+
+libTAO_EndpointPolicy_la_LIBADD = \
+ libTAO_PI.la \
+ libTAO_CodecFactory.la \
+ libTAO_PortableServer.la \
+ libTAO_AnyTypeCode.la \
+ libTAO.la \
+ $(ACE_BUILDDIR)/ace/libACE.la
+
+nobase_include_HEADERS += \
+ EndpointPolicy/EndpointPolicy.h \
+ EndpointPolicy/EndpointPolicyA.h \
+ EndpointPolicy/EndpointPolicyC.h \
+ EndpointPolicy/EndpointPolicyC.inl \
+ EndpointPolicy/EndpointPolicyTypeA.h \
+ EndpointPolicy/EndpointPolicyTypeC.h \
+ EndpointPolicy/EndpointPolicy_Export.h \
+ EndpointPolicy/EndpointPolicy_Factory.h \
+ EndpointPolicy/EndpointPolicy_ORBInitializer.h \
+ EndpointPolicy/EndpointPolicy_i.h \
+ EndpointPolicy/Endpoint_Acceptor_Filter.h \
+ EndpointPolicy/Endpoint_Acceptor_Filter_Factory.h \
+ EndpointPolicy/Endpoint_Value_Impl.h \
+ EndpointPolicy/IIOPEndpointValueA.h \
+ EndpointPolicy/IIOPEndpointValueC.h \
+ EndpointPolicy/IIOPEndpointValue_i.h
+
+pkgconfig_DATA += \
+ TAO_EndpointPolicy.pc
+
+CLEANFILES += \
+ TAO_EndpointPolicy.pc
+
+TAO_EndpointPolicy.pc: ${top_builddir}/config.status ${srcdir}/EndpointPolicy/TAO_EndpointPolicy.pc.in
+ ${top_builddir}/config.status --file $@:${srcdir}/EndpointPolicy/TAO_EndpointPolicy.pc.in
+
+EXTRA_DIST += \
+ EndpointPolicy/TAO_EndpointPolicy.pc.in
+
+
## Makefile.ObjRefTemplate.am
lib_LTLIBRARIES += libTAO_ObjRefTemplate.la
diff --git a/TAO/tao/Messaging/ExceptionHolderC.cpp b/TAO/tao/Messaging/ExceptionHolderC.cpp
index 8de5efc6d7b..3c9396ae7da 100644
--- a/TAO/tao/Messaging/ExceptionHolderC.cpp
+++ b/TAO/tao/Messaging/ExceptionHolderC.cpp
@@ -90,6 +90,12 @@ Messaging::ExceptionHolder::_tao_obv_repository_id (void) const
}
void
+Messaging::ExceptionHolder::_tao_obv_truncatable_repo_ids (Repository_Id_List& ids) const
+{
+ ids.push_back (this->_tao_obv_static_repository_id ());
+}
+
+void
Messaging::ExceptionHolder::_tao_any_destructor (void *_tao_void_pointer)
{
ExceptionHolder *_tao_tmp_pointer =
@@ -100,57 +106,49 @@ Messaging::ExceptionHolder::_tao_any_destructor (void *_tao_void_pointer)
Messaging::ExceptionHolder::~ExceptionHolder (void)
{}
-::CORBA::Boolean Messaging::ExceptionHolder::_tao_marshal_v (TAO_OutputCDR & strm) const
+::CORBA::Boolean
+Messaging::ExceptionHolder::_tao_marshal_v (TAO_OutputCDR & strm) const
{
return this->_tao_marshal__Messaging_ExceptionHolder (strm);
}
-::CORBA::Boolean Messaging::ExceptionHolder::_tao_unmarshal_v (TAO_InputCDR & strm)
+::CORBA::Boolean
+Messaging::ExceptionHolder::_tao_unmarshal_v (TAO_InputCDR & strm)
{
return this->_tao_unmarshal__Messaging_ExceptionHolder (strm);
}
-::CORBA::Boolean Messaging::ExceptionHolder::_tao_unmarshal (
+::CORBA::Boolean
+Messaging::ExceptionHolder::_tao_match_formal_type (ptrdiff_t formal_type_id) const
+{
+ return formal_type_id ==
+ reinterpret_cast<ptrdiff_t>(&Messaging::ExceptionHolder::_downcast);
+}
+
+::CORBA::Boolean
+Messaging::ExceptionHolder::_tao_unmarshal (
TAO_InputCDR &strm,
ExceptionHolder *&new_object
)
{
::CORBA::ValueBase *base = 0;
- ::CORBA::ValueFactory_var factory;
::CORBA::Boolean retval =
::CORBA::ValueBase::_tao_unmarshal_pre (
strm,
- factory.out (),
base,
ExceptionHolder::_tao_obv_static_repository_id ()
);
if (retval == 0)
- {
return 0;
- }
- if (factory.in () != 0)
- {
- base = factory->create_for_unmarshal ();
-
- if (base == 0)
- {
- return 0; // %! except.?
- }
-
- retval = base->_tao_unmarshal_v (strm);
-
- if (retval == 0)
- {
+ if (base != 0 && !base->_tao_unmarshal_v (strm))
return 0;
- }
- }
// Now base must be null or point to the unmarshaled object.
// Align the pointer to the right subobject.
new_object = ExceptionHolder::_downcast (base);
- return retval;
+ return 1;
}
// TAO_IDL - Generated from
diff --git a/TAO/tao/Messaging/ExceptionHolderC.h b/TAO/tao/Messaging/ExceptionHolderC.h
index 841d6712b25..edbcde265bd 100644
--- a/TAO/tao/Messaging/ExceptionHolderC.h
+++ b/TAO/tao/Messaging/ExceptionHolderC.h
@@ -42,7 +42,7 @@
#include "tao/Messaging/messaging_export.h"
#include "tao/Valuetype/ValueBase.h"
-#include "tao/Valuetype/Valuetype_Adapter_Impl.h"
+#include "tao/Valuetype/Valuetype_Adapter_Factory_Impl.h"
#include "tao/ORB.h"
#include "tao/SystemException.h"
#include "tao/Environment.h"
@@ -109,6 +109,8 @@ namespace Messaging
virtual const char* _tao_obv_repository_id (void) const;
+ virtual void _tao_obv_truncatable_repo_ids (Repository_Id_List &) const;
+
static const char* _tao_obv_static_repository_id (void);
static void _tao_any_destructor (void *);
@@ -160,6 +162,7 @@ namespace Messaging
virtual ::CORBA::Boolean _tao_marshal_v (TAO_OutputCDR &) const;
virtual ::CORBA::Boolean _tao_unmarshal_v (TAO_InputCDR &);
+ virtual ::CORBA::Boolean _tao_match_formal_type (ptrdiff_t ) const;
private:
ExceptionHolder (const ExceptionHolder &);
@@ -295,5 +298,3 @@ TAO_END_VERSIONED_NAMESPACE_DECL
#include /**/ "ace/post.h"
#endif /* ifndef */
-
-
diff --git a/TAO/tao/ORB.cpp b/TAO/tao/ORB.cpp
index 3bcc3e37d36..98bb700a342 100644
--- a/TAO/tao/ORB.cpp
+++ b/TAO/tao/ORB.cpp
@@ -36,6 +36,7 @@ ACE_RCSID (tao,
#endif /* ! __ACE_INLINE__ */
#include "ace/Dynamic_Service.h"
+#include "ace/Service_Config.h"
#include "ace/Arg_Shifter.h"
#include "ace/Reactor.h"
#include "ace/Argv_Type_Converter.h"
@@ -188,7 +189,7 @@ CORBA::ORB::destroy (ACE_ENV_SINGLE_ARG_DECL)
if (TAO_debug_level > 2)
{
ACE_DEBUG ((LM_DEBUG,
- ACE_TEXT ("CORBA::ORB::destroy() has been called on ORB <%s>.\n"),
+ ACE_TEXT ("CORBA::ORB::destroy() called on ORB <%s>.\n"),
ACE_TEXT_TO_TCHAR_IN (this->orb_core ()->orbid ())));
}
@@ -1074,7 +1075,8 @@ CORBA::ORB::resolve_initial_references (const char *name,
}
else if (ACE_OS::strcmp (name, TAO_OBJID_POACURRENT) == 0)
{
- result = this->orb_core ()->resolve_poa_current (ACE_ENV_SINGLE_ARG_PARAMETER);
+ result = this->orb_core ()->resolve_poa_current
+ (ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_CHECK_RETURN (CORBA::Object::_nil ());
}
else if (ACE_OS::strcmp (name, TAO_OBJID_POLICYMANAGER) == 0)
@@ -1087,33 +1089,39 @@ CORBA::ORB::resolve_initial_references (const char *name,
}
else if (ACE_OS::strcmp (name, TAO_OBJID_IORMANIPULATION) == 0)
{
- result = this->orb_core ()->resolve_ior_manipulation (ACE_ENV_SINGLE_ARG_PARAMETER);
+ result = this->orb_core ()->resolve_ior_manipulation
+ (ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_CHECK_RETURN (CORBA::Object::_nil ());
}
else if (ACE_OS::strcmp (name, TAO_OBJID_IORTABLE) == 0)
{
- result = this->orb_core ()->resolve_ior_table (ACE_ENV_SINGLE_ARG_PARAMETER);
+ result = this->orb_core ()->resolve_ior_table
+ (ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_CHECK_RETURN (CORBA::Object::_nil ());
}
else if (ACE_OS::strcmp (name, TAO_OBJID_DYNANYFACTORY) == 0)
{
- result = this->orb_core ()->resolve_dynanyfactory (ACE_ENV_SINGLE_ARG_PARAMETER);
+ result = this->orb_core ()->resolve_dynanyfactory
+ (ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_CHECK_RETURN (CORBA::Object::_nil ());
}
else if (ACE_OS::strcmp (name, TAO_OBJID_TYPECODEFACTORY) == 0)
{
- result = this->orb_core ()->resolve_typecodefactory (ACE_ENV_SINGLE_ARG_PARAMETER);
+ result = this->orb_core ()->resolve_typecodefactory
+ (ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_CHECK_RETURN (CORBA::Object::_nil ());
}
else if (ACE_OS::strcmp (name, TAO_OBJID_CODECFACTORY) == 0)
{
- result = this->orb_core ()->resolve_codecfactory (ACE_ENV_SINGLE_ARG_PARAMETER);
+ result = this->orb_core ()->resolve_codecfactory
+ (ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_CHECK_RETURN (CORBA::Object::_nil ());
}
#if TAO_HAS_INTERCEPTORS == 1
else if (ACE_OS::strcmp (name, TAO_OBJID_PICurrent) == 0)
{
- result = this->orb_core ()->resolve_picurrent (ACE_ENV_SINGLE_ARG_PARAMETER);
+ result = this->orb_core ()->resolve_picurrent
+ (ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_CHECK_RETURN (CORBA::Object::_nil ());
}
#endif
@@ -1151,7 +1159,7 @@ CORBA::ORB::resolve_initial_references (const char *name,
// Look for an environment variable called "<name>IOR".
//
CORBA::String_var ior_env_var_name =
- CORBA::string_alloc (static_cast <CORBA::ULong> (ACE_OS::strlen (name) + 3));
+ CORBA::string_alloc (static_cast<CORBA::ULong> (ACE_OS::strlen (name) + 3));
ACE_OS::strcpy (ior_env_var_name.inout (),
name);
@@ -1279,7 +1287,6 @@ TAO::ORB::init_orb_globals (ACE_ENV_SINGLE_ARG_DECL)
++orb_init_count;
}
-#if defined (ACE_HAS_EXCEPTIONS)
// This must be done after the system TypeCodes and Exceptions have
// been initialized. An unexpected exception will cause TAO's
// unexpected exception handler to be called. That handler
@@ -1293,39 +1300,6 @@ TAO::ORB::init_orb_globals (ACE_ENV_SINGLE_ARG_DECL)
*/
TAO_Singleton_Manager::instance ()->_set_unexpected (
::TAO_unexpected_exception_handler);
-#endif /* ACE_HAS_EXCEPTIONS */
-
- // Verify some of the basic implementation requirements. This test
- // gets optimized away by a decent compiler (or else the rest of the
- // routine does).
- //
- // NOTE: we still "just" assume that native floating point is IEEE.
- if ( sizeof (CORBA::Boolean) != 1
- || sizeof (CORBA::Short) != 2
- || sizeof (CORBA::Long) != 4
- || sizeof (CORBA::LongLong) != 8
- || sizeof (CORBA::Float) != 4
- || sizeof (CORBA::Double) != 8
- || sizeof (CORBA::LongDouble) != 16
- || sizeof (CORBA::WChar) < 2
- || sizeof (void *) != ACE_SIZEOF_VOID_P)
- {
- ACE_ERROR ((LM_ERROR,
- "%N; ERROR: unexpected basic type size; "
- "b:%d s:%d l:%d ll:%d f:%d d:%d ld:%d wc:%d v:%d\n"
- "please reconfigure TAO\n",
- sizeof (CORBA::Boolean),
- sizeof (CORBA::Short),
- sizeof (CORBA::Long),
- sizeof (CORBA::LongLong),
- sizeof (CORBA::Float),
- sizeof (CORBA::Double),
- sizeof (CORBA::LongDouble),
- sizeof (CORBA::WChar),
- sizeof (void *)));
-
- ACE_THROW (CORBA::INITIALIZE ());
- }
}
const ACE_CString &
@@ -1361,15 +1335,6 @@ CORBA::ORB_init (int &argc,
char *argv[],
const char *orb_name)
{
- // Make sure TAO's singleton manager is initialized.
- //
- // We need to initialize before TAO_default_environment() is called
- // since that call instantiates a TAO_TSS_Singleton.
- if (TAO_Singleton_Manager::instance ()->init () == -1)
- {
- return CORBA::ORB::_nil ();
- }
-
return CORBA::ORB_init (argc,
argv,
orb_name,
@@ -1400,6 +1365,8 @@ CORBA::ORB_init (int &argc,
CORBA::ORB::_nil ()));
// Make sure TAO's singleton manager is initialized.
+ // We need to initialize before TAO_default_environment() is called
+ // since that call instantiates a TAO_TSS_Singleton.
if (TAO_Singleton_Manager::instance ()->init () == -1)
{
return CORBA::ORB::_nil ();
@@ -1435,6 +1402,8 @@ CORBA::ORB_init (int &argc,
CORBA::ORB::_nil ());
}
+
+
if (orbid_string.length () == 0)
{
ACE_Arg_Shifter arg_shifter (command_line.get_argc (),
@@ -1503,10 +1472,33 @@ CORBA::ORB_init (int &argc,
oc.reset (tmp);
}
+
+ // Having the ORB's default static services be shared among all ORBs
+ // is tempting from the point of view of reducing the dynamic
+ // footprint. However, if the ORB in a DLL and the rest of that
+ // application most likely neither cares, nor wishes to know about
+ // them. Furthermore, if the ORB DLL gets unloaded, the static
+ // services it had registered globaly will no longer be accesible,
+ // which will have disastrous consequences at the process
+ // shutdown. Hence, the ACE_Service_Config_Guard ensures that for
+ // the current thread, any references to the global
+ // ACE_Service_Config will be forwarded to the ORB's.
+
+ // Making sure the initialization process in the current thread uses
+ // the correct service repository (ours), instead of the global one.
+ ACE_Service_Config_Guard scg (oc->configuration ());
+
+ /*
+ * Currently I choose to make the ORB an owner of its configuration,
+ * which in general is not quite correct because it is very common ORBs to
+ * need to share the same configuration.
+ */
+
// Initialize the Service Configurator. This must occur before the
// ORBInitializer::pre_init() method is invoked on each registered
// ORB initializer.
- int result = TAO::ORB::open_services (command_line.get_argc (),
+ int result = TAO::ORB::open_services (oc->configuration (),
+ command_line.get_argc (),
command_line.get_TCHAR_argv ());
// Check for errors returned from <TAO_Internal::open_services>.
diff --git a/TAO/tao/ORB_Core.cpp b/TAO/tao/ORB_Core.cpp
index 3487f46ca0a..99877176ed8 100644
--- a/TAO/tao/ORB_Core.cpp
+++ b/TAO/tao/ORB_Core.cpp
@@ -99,7 +99,8 @@ TAO_ORB_Core_Static_Resources* TAO_ORB_Core_Static_Resources::instance_ = 0;
// Force an instance to be created at module initialization time,
// since we do not want to worry about double checked locking and
// the race condition to initialize the lock.
-TAO_ORB_Core_Static_Resources* TAO_ORB_Core_Static_Resources::initialization_reference_ =
+TAO_ORB_Core_Static_Resources*
+TAO_ORB_Core_Static_Resources::initialization_reference_ =
TAO_ORB_Core_Static_Resources::instance ();
TAO_ORB_Core_Static_Resources*
@@ -126,7 +127,9 @@ TAO_ORB_Core_Static_Resources::TAO_ORB_Core_Static_Resources (void)
timeout_hook_ (0),
connection_timeout_hook_ (0),
endpoint_selector_factory_name_ ("Default_Endpoint_Selector_Factory"),
- thread_lane_resources_manager_factory_name_ ("Default_Thread_Lane_Resources_Manager_Factory"),
+ thread_lane_resources_manager_factory_name_
+ ("Default_Thread_Lane_Resources_Manager_Factory"),
+
collocation_resolver_name_ ("Default_Collocation_Resolver"),
stub_factory_name_ ("Default_Stub_Factory"),
resource_factory_name_ ("Resource_Factory"),
@@ -136,7 +139,13 @@ TAO_ORB_Core_Static_Resources::TAO_ORB_Core_Static_Resources (void)
iorinterceptor_adapter_factory_name_ ("IORInterceptor_Adapter_Factory"),
valuetype_adapter_factory_name_ ("valuetype_Adapter_Factory"),
poa_factory_name_ ("TAO_Object_Adapter_Factory"),
- poa_factory_directive_ (ACE_TEXT_TO_CHAR_IN (ACE_DYNAMIC_SERVICE_DIRECTIVE("TAO_Object_Adapter_Factory", "TAO_PortableServer", "_make_TAO_Object_Adapter_Factory", "")))
+ poa_factory_directive_
+ (ACE_TEXT_TO_CHAR_IN
+ (ACE_DYNAMIC_SERVICE_DIRECTIVE("TAO_Object_Adapter_Factory",
+ "TAO_PortableServer",
+ "_make_TAO_Object_Adapter_Factory",
+ ""))),
+ alt_connection_timeout_hook_ (0)
{
}
@@ -252,6 +261,17 @@ TAO_ORB_Core::TAO_ORB_Core (const char *orbid)
// Initialize the default request dispatcher.
ACE_NEW (this->request_dispatcher_,
TAO_Request_Dispatcher);
+
+ /*
+ * @TODO: Get rid of the "magic number" for the Service repository size.
+ * Can this be dynamic container instead?
+ */
+ if (ACE_OS::strnlen (this->orbid_, 1) == 0)
+ // (re)use the default/global getsalt
+ ACE_NEW (this->config_, ACE_Service_Gestalt);
+ else
+ ACE_NEW (this->config_,
+ ACE_Service_Gestalt (ACE_Service_Gestalt::MAX_SERVICES / 4));
}
TAO_ORB_Core::~TAO_ORB_Core (void)
@@ -288,6 +308,9 @@ TAO_ORB_Core::~TAO_ORB_Core (void)
orbinitializer_registry_ = 0;
::CORBA::release (this->orb_);
+
+ delete this->config_;
+ this->config_ = 0;
}
int
@@ -338,6 +361,9 @@ TAO_ORB_Core::init (int &argc, char *argv[] ACE_ENV_ARG_DECL)
// Use SO_KEEPALIVE (default 0).
int so_keepalive = 0;
+ // Use SO_DONTROUTE (default 0)
+ int so_dontroute = 0;
+
// Use dotted decimal addresses
// @@ This option will be treated as a suggestion to each loaded
// protocol to use a character representation for the numeric
@@ -359,6 +385,8 @@ TAO_ORB_Core::init (int &argc, char *argv[] ACE_ENV_ARG_DECL)
int linger = -1;
+ int use_parallel_connects = 0;
+
// Copy command line parameter not to use original.
ACE_Argv_Type_Converter command_line (argc, argv);
@@ -455,6 +483,15 @@ TAO_ORB_Core::init (int &argc, char *argv[] ACE_ENV_ARG_DECL)
arg_shifter.consume_arg ();
}
else if (0 != (current_arg = arg_shifter.get_the_parameter
+ (ACE_LIB_TEXT("-ORBDontRoute"))))
+ {
+ // Use SO_DONTROUTE or not.
+ so_dontroute =
+ ACE_OS::atoi (current_arg);
+
+ arg_shifter.consume_arg ();
+ }
+ else if (0 != (current_arg = arg_shifter.get_the_parameter
(ACE_TEXT("-ORBTradingServicePort"))))
{
// Specify the port number for the TradingService.
@@ -878,7 +915,7 @@ TAO_ORB_Core::init (int &argc, char *argv[] ACE_ENV_ARG_DECL)
ACE_CString lane (ACE_TEXT_TO_CHAR_IN (current_arg));
arg_shifter.consume_arg ();
- if(arg_shifter.is_option_next ())
+ if (arg_shifter.is_option_next ())
return -1;
ACE_CString endpoints (ACE_TEXT_TO_CHAR_IN (arg_shifter.get_current ()));
@@ -915,6 +952,20 @@ TAO_ORB_Core::init (int &argc, char *argv[] ACE_ENV_ARG_DECL)
{
negotiate_codesets =
(ACE_OS::atoi (current_arg));
+
+ arg_shifter.consume_arg ();
+ }
+ else if ((current_arg = arg_shifter.get_the_parameter
+ (ACE_LIB_TEXT("-ORBUseParallelConnects"))))
+ {
+ use_parallel_connects = ACE_OS::atoi (current_arg);
+ arg_shifter.consume_arg ();
+ }
+ else if ((current_arg = arg_shifter.get_the_parameter
+ (ACE_LIB_TEXT("-ORBParallelConnectDelay"))))
+ {
+ this->orb_params ()->parallel_connect_delay
+ (ACE_OS::atoi (current_arg));
arg_shifter.consume_arg ();
}
else if (0 != (current_arg = arg_shifter.get_the_parameter
@@ -962,7 +1013,8 @@ TAO_ORB_Core::init (int &argc, char *argv[] ACE_ENV_ARG_DECL)
ACE_DEBUG ((LM_ERROR,
ACE_TEXT ("ERROR: Unknown \"-ORB\" option ")
ACE_TEXT ("<%s>.\n"),
- ((current_arg == 0) ? ACE_TEXT("<NULL>") : current_arg)));
+ ((current_arg == 0) ? ACE_TEXT("<NULL>")
+ : current_arg)));
}
ACE_THROW_RETURN (CORBA::BAD_PARAM (
@@ -996,7 +1048,8 @@ TAO_ORB_Core::init (int &argc, char *argv[] ACE_ENV_ARG_DECL)
if (TAO_debug_level > 0)
{
ACE_ERROR ((LM_ERROR,
- ACE_TEXT ("ERROR: Environment variable TAO_ORBENDPOINT set to invalid value ")
+ ACE_TEXT ("ERROR: Environment variable ")
+ ACE_TEXT ("TAO_ORBENDPOINT set to invalid value ")
ACE_TEXT ("<%s>.\n"),
env_endpoint));
}
@@ -1022,6 +1075,7 @@ TAO_ORB_Core::init (int &argc, char *argv[] ACE_ENV_ARG_DECL)
(void) ACE_OS::signal (SIGPIPE, (ACE_SignalHandler) SIG_IGN);
#endif /* SIGPIPE */
+
// Calling the open method here so that the svc.conf file is
// opened and TAO_default_resource_factory::init () is called by the
// time this method is called.
@@ -1155,9 +1209,14 @@ TAO_ORB_Core::init (int &argc, char *argv[] ACE_ENV_ARG_DECL)
this->orb_params ()->cache_incoming_by_dotted_decimal_address
(no_server_side_name_lookups
|| dotted_decimal_addresses);
+
+ this->orb_params ()->use_parallel_connects
+ (use_parallel_connects != 0);
+
this->orb_params ()->linger (linger);
this->orb_params ()->nodelay (nodelay);
this->orb_params ()->sock_keepalive (so_keepalive);
+ this->orb_params ()->sock_dontroute (so_dontroute);
if (rcv_sock_size >= 0)
this->orb_params ()->sock_rcvbuf_size (rcv_sock_size);
if (snd_sock_size >= 0)
@@ -1196,9 +1255,13 @@ TAO_ORB_Core::init (int &argc, char *argv[] ACE_ENV_ARG_DECL)
this->flushing_strategy_ = trf->create_flushing_strategy ();
// Look in the service repository for an instance of the Protocol Hooks.
+ const ACE_CString &protocols_hooks_name =
+ TAO_ORB_Core_Static_Resources::instance ()->protocols_hooks_name_;
+
this->protocols_hooks_ =
ACE_Dynamic_Service<TAO_Protocols_Hooks>::instance
- (TAO_ORB_Core_Static_Resources::instance ()->protocols_hooks_name_.c_str());
+ (this->configuration (),
+ ACE_TEXT_CHAR_TO_TCHAR (protocols_hooks_name.c_str()));
// Must have valid protocol hooks.
if (this->protocols_hooks_ == 0)
@@ -1283,7 +1346,7 @@ TAO_ORB_Core::fini (void)
if (this->thread_lane_resources_manager_ != 0)
this->thread_lane_resources_manager_->finalize ();
- (void) TAO::ORB::close_services ();
+ (void) TAO::ORB::close_services (this->configuration ());
// Destroy the object_key table
this->object_key_table_.destroy ();
@@ -1405,9 +1468,13 @@ TAO_ORB_Core::resource_factory (void)
}
// Look in the service repository for an instance.
+ ACE_CString &resource_factory_name =
+ TAO_ORB_Core_Static_Resources::instance ()->resource_factory_name_;
+
this->resource_factory_ =
ACE_Dynamic_Service<TAO_Resource_Factory>::instance
- (TAO_ORB_Core_Static_Resources::instance ()->resource_factory_name_.c_str());
+ (this->configuration (),
+ ACE_TEXT_CHAR_TO_TCHAR (resource_factory_name.c_str()));
return this->resource_factory_;
}
@@ -1427,9 +1494,13 @@ TAO_ORB_Core::thread_lane_resources_manager (void)
return *this->thread_lane_resources_manager_;
// If not, lookup the corresponding factory and ask it to make one.
+ const ACE_CString &thread_lane_resources_manager_factory_name =
+ TAO_ORB_Core_Static_Resources::instance ()->thread_lane_resources_manager_factory_name_;
+
TAO_Thread_Lane_Resources_Manager_Factory *factory =
ACE_Dynamic_Service<TAO_Thread_Lane_Resources_Manager_Factory>::instance
- (TAO_ORB_Core_Static_Resources::instance ()->thread_lane_resources_manager_factory_name_.c_str());
+ (this->configuration (),
+ ACE_TEXT_CHAR_TO_TCHAR (thread_lane_resources_manager_factory_name.c_str()));
this->thread_lane_resources_manager_ =
factory->create_thread_lane_resources_manager (*this);
@@ -1445,9 +1516,13 @@ TAO_ORB_Core::collocation_resolver (void)
return *this->collocation_resolver_;
// If not, lookup it up.
+ const ACE_CString &collocation_resolver_name =
+ TAO_ORB_Core_Static_Resources::instance ()->collocation_resolver_name_;
+
this->collocation_resolver_ =
ACE_Dynamic_Service<TAO_Collocation_Resolver>::instance
- (TAO_ORB_Core_Static_Resources::instance ()->collocation_resolver_name_.c_str());
+ (this->configuration (),
+ ACE_TEXT_CHAR_TO_TCHAR (collocation_resolver_name.c_str()));
return *this->collocation_resolver_;
}
@@ -1457,18 +1532,21 @@ TAO_ORB_Core::policy_factory_registry_i (void)
{
TAO_PolicyFactory_Registry_Factory *loader =
- ACE_Dynamic_Service<TAO_PolicyFactory_Registry_Factory>::instance (
- "PolicyFactory_Loader");
+ ACE_Dynamic_Service<TAO_PolicyFactory_Registry_Factory>::instance
+ (this->configuration (),
+ ACE_TEXT ("PolicyFactory_Loader"));
+
if (loader == 0)
{
- ACE_Service_Config::process_directive (
+ this->configuration ()->process_directive (
ACE_DYNAMIC_SERVICE_DIRECTIVE("PolicyFactory_Loader",
"TAO_PI",
- "_make_PolicyFactory_Loader",
+ "_make_TAO_PolicyFactory_Loader",
""));
loader =
- ACE_Dynamic_Service<TAO_PolicyFactory_Registry_Factory>::instance (
- "PolicyFactory_Loader");
+ ACE_Dynamic_Service<TAO_PolicyFactory_Registry_Factory>::instance
+ (this->configuration (),
+ ACE_TEXT ("PolicyFactory_Loader"));
}
if (loader != 0)
@@ -1486,7 +1564,8 @@ TAO_ORB_Core::orbinitializer_registry_i (void)
// If not, lookup it up.
this->orbinitializer_registry_ =
ACE_Dynamic_Service<TAO::ORBInitializer_Registry_Adapter>::instance
- ("ORBInitializer_Registry");
+ (this->configuration (),
+ ACE_TEXT ("ORBInitializer_Registry"));
#if !defined (TAO_AS_STATIC_LIBS)
// In case we build shared, try to load the PI Client library, in a
@@ -1494,14 +1573,15 @@ TAO_ORB_Core::orbinitializer_registry_i (void)
// output an error then.
if (orbinitializer_registry_ == 0)
{
- ACE_Service_Config::process_directive (
+ this->configuration ()->process_directive (
ACE_DYNAMIC_SERVICE_DIRECTIVE("ORBInitializer_Registry",
"TAO_PI",
"_make_ORBInitializer_Registry",
""));
orbinitializer_registry_ =
ACE_Dynamic_Service<TAO::ORBInitializer_Registry_Adapter>::instance
- ("ORBInitializer_Registry");
+ (this->configuration (),
+ ACE_TEXT ("ORBInitializer_Registry"));
}
#endif /* !TAO_AS_STATIC_LIBS */
@@ -1516,9 +1596,13 @@ TAO_ORB_Core::stub_factory (void)
return this->stub_factory_;
// If not, look in the service repository for an instance.
+ const ACE_CString &stub_factory_name =
+ TAO_ORB_Core_Static_Resources::instance ()->stub_factory_name_;
+
this->stub_factory_ =
ACE_Dynamic_Service<TAO_Stub_Factory>::instance
- (TAO_ORB_Core_Static_Resources::instance ()->stub_factory_name_.c_str());
+ (this->configuration (),
+ ACE_TEXT_CHAR_TO_TCHAR (stub_factory_name.c_str()));
return this->stub_factory_;
}
@@ -1554,9 +1638,13 @@ TAO_ORB_Core::endpoint_selector_factory (void)
return this->endpoint_selector_factory_;
// If not, look in the service repository for an instance.
+ const ACE_CString &endpoint_selector_factory_name =
+ TAO_ORB_Core_Static_Resources::instance ()->endpoint_selector_factory_name_;
+
this->endpoint_selector_factory_ =
ACE_Dynamic_Service<TAO_Endpoint_Selector_Factory>::instance
- (TAO_ORB_Core_Static_Resources::instance ()->endpoint_selector_factory_name_.c_str());
+ (this->configuration (),
+ ACE_TEXT_CHAR_TO_TCHAR (endpoint_selector_factory_name.c_str()));
return this->endpoint_selector_factory_;
}
@@ -1642,7 +1730,9 @@ TAO_ORB_Core::client_factory (void)
{
// Look in the service repository for an instance.
this->client_factory_ =
- ACE_Dynamic_Service<TAO_Client_Strategy_Factory>::instance ("Client_Strategy_Factory");
+ ACE_Dynamic_Service<TAO_Client_Strategy_Factory>::instance
+ (this->configuration (),
+ ACE_TEXT ("Client_Strategy_Factory"));
}
return this->client_factory_;
@@ -1655,7 +1745,9 @@ TAO_ORB_Core::server_factory (void)
{
// Look in the service repository for an instance.
this->server_factory_ =
- ACE_Dynamic_Service<TAO_Server_Strategy_Factory>::instance ("Server_Strategy_Factory");
+ ACE_Dynamic_Service<TAO_Server_Strategy_Factory>::instance
+ (this->configuration (),
+ ACE_TEXT ("Server_Strategy_Factory"));
}
return this->server_factory_;
@@ -1667,20 +1759,28 @@ TAO_ORB_Core::root_poa (ACE_ENV_SINGLE_ARG_DECL)
// DCL ..
if (CORBA::is_nil (this->root_poa_.in ()))
{
+
+ // Making sure the initialization process in the current thread uses
+ // the correct service repository (ours), instead of the global one.
+ ACE_Service_Config_Guard scg (this->configuration ());
+
+
TAO_ORB_Core_Static_Resources* static_resources =
TAO_ORB_Core_Static_Resources::instance ();
TAO_Adapter_Factory *factory =
- ACE_Dynamic_Service<TAO_Adapter_Factory>::instance (
+ ACE_Dynamic_Service<TAO_Adapter_Factory>::instance
+ (this->configuration (),
static_resources->poa_factory_name_.c_str());
if (factory == 0)
{
- ACE_Service_Config::process_directive (
- ACE_TEXT_TO_TCHAR_IN (
+ this->configuration()->process_directive (ACE_TEXT_TO_TCHAR_IN (
static_resources->poa_factory_directive_.c_str()));
+
factory =
- ACE_Dynamic_Service<TAO_Adapter_Factory>::instance (
+ ACE_Dynamic_Service<TAO_Adapter_Factory>::instance
+ (this->configuration (),
static_resources->poa_factory_name_.c_str());
}
@@ -1799,7 +1899,8 @@ TAO_ORB_Core::load_policy_validators (TAO_Policy_Validator &validator
if (this->bidir_adapter_ == 0)
{
this->bidir_adapter_ =
- ACE_Dynamic_Service<TAO_BiDir_Adapter>::instance ("BiDirGIOP_Loader");
+ ACE_Dynamic_Service<TAO_BiDir_Adapter>::instance
+ (this->configuration (), ACE_TEXT ("BiDirGIOP_Loader"));
}
// Call the BiDir library if it has been loaded
@@ -1983,6 +2084,8 @@ TAO_ORB_Core::run (ACE_Time_Value *tv,
int perform_work
ACE_ENV_ARG_DECL_NOT_USED)
{
+ ACE_Service_Config_Guard guard (this->configuration());
+
if (TAO_debug_level > 2)
{
ACE_DEBUG ((LM_DEBUG,
@@ -2067,6 +2170,7 @@ TAO_ORB_Core::run (ACE_Time_Value *tv,
// A timeout, terminate the loop...
break;
}
+
if (perform_work)
{
// This is running on behalf of a perform_work() call,
@@ -2171,8 +2275,7 @@ TAO_ORB_Core::destroy (ACE_ENV_SINGLE_ARG_DECL)
//
// Shutdown the ORB and block until the shutdown is complete.
- this->shutdown (1
- ACE_ENV_ARG_PARAMETER);
+ this->shutdown (1 ACE_ENV_ARG_PARAMETER);
ACE_CHECK;
// Invoke Interceptor::destroy() on all registered interceptors.
@@ -2201,7 +2304,6 @@ TAO_ORB_Core::check_shutdown (ACE_ENV_SINGLE_ARG_DECL)
void
TAO_ORB_Core::destroy_interceptors (ACE_ENV_SINGLE_ARG_DECL)
{
-
ACE_TRY
{
ACE_GUARD (TAO_SYNCH_MUTEX, monitor, this->lock_);
@@ -2264,19 +2366,28 @@ void
TAO_ORB_Core::resolve_typecodefactory_i (ACE_ENV_SINGLE_ARG_DECL)
{
TAO_Object_Loader *loader =
- ACE_Dynamic_Service<TAO_Object_Loader>::instance ("TypeCodeFactory_Loader");
+ ACE_Dynamic_Service<TAO_Object_Loader>::instance
+ (this->configuration (),
+ ACE_TEXT ("TypeCodeFactory_Loader"));
+
+#if !defined(TAO_AS_STATIC_LIBS)
if (loader == 0)
{
- ACE_Service_Config::process_directive (
- ACE_DYNAMIC_SERVICE_DIRECTIVE("TypeCodeFactory_Loader",
+ this->configuration ()->process_directive (
+ ACE_DYNAMIC_SERVICE_DIRECTIVE("TypeCodeFactory",
"TAO_TypeCodeFactory",
"_make_TAO_TypeCodeFactory_Loader",
""));
loader =
- ACE_Dynamic_Service<TAO_Object_Loader>::instance ("TypeCodeFactory_Loader");
+ ACE_Dynamic_Service<TAO_Object_Loader>::instance
+ (this->configuration (),
+ ACE_TEXT ("TypeCodeFactory_Loader"));
+
if (loader == 0)
ACE_THROW (CORBA::ORB::InvalidName ());
}
+#endif /* !defined (TAO_AS_STATIC_LIBS) */
+
this->typecode_factory_ =
loader->create_object (this->orb_, 0, 0 ACE_ENV_ARG_PARAMETER);
}
@@ -2285,17 +2396,26 @@ void
TAO_ORB_Core::resolve_codecfactory_i (ACE_ENV_SINGLE_ARG_DECL)
{
TAO_Object_Loader *loader =
- ACE_Dynamic_Service<TAO_Object_Loader>::instance ("CodecFactory_Loader");
+ ACE_Dynamic_Service<TAO_Object_Loader>::instance
+ (this->configuration (),
+ ACE_TEXT ("CodecFactory_Loader"));
+
+#if !defined(TAO_AS_STATIC_LIBS)
if (loader == 0)
{
- ACE_Service_Config::process_directive (
- ACE_DYNAMIC_SERVICE_DIRECTIVE("CodecFactory_Loader",
+ this->configuration()->process_directive (
+ ACE_DYNAMIC_SERVICE_DIRECTIVE("CodecFactory",
"TAO_CodecFactory",
"_make_TAO_CodecFactory_Loader",
""));
loader =
- ACE_Dynamic_Service<TAO_Object_Loader>::instance ("CodecFactory_Loader");
+ ACE_Dynamic_Service<TAO_Object_Loader>::instance
+ (this->configuration (),
+ ACE_TEXT ("CodecFactory_Loader"));
+
}
+#endif /* !defined (TAO_AS_STATIC_LIBS) */
+
if (loader != 0)
{
this->codec_factory_ =
@@ -2308,17 +2428,29 @@ void
TAO_ORB_Core::resolve_poa_current_i (ACE_ENV_SINGLE_ARG_DECL)
{
TAO_Object_Loader *loader =
- ACE_Dynamic_Service<TAO_Object_Loader>::instance ("TAO_POA_Current_Factory");
+ ACE_Dynamic_Service<TAO_Object_Loader>::instance
+ (this->configuration(),
+ ACE_TEXT ("TAO_POA_Current_Factory"));
+
+#if !defined(TAO_AS_STATIC_LIBS)
if (loader == 0)
{
- ACE_Service_Config::process_directive (
+ this->configuration()->process_directive (
ACE_DYNAMIC_SERVICE_DIRECTIVE("TAO_POA_Current_Factory",
"TAO_PortableServer",
"_make_TAO_POA_Current_Factory",
""));
loader =
- ACE_Dynamic_Service<TAO_Object_Loader>::instance ("TAO_POA_Current_Factory");
+ ACE_Dynamic_Service<TAO_Object_Loader>::instance
+ (this->configuration(),
+ ACE_TEXT ("TAO_POA_Current_Factory"));
}
+
+ if (loader == 0)
+ ACE_THROW (CORBA::ORB::InvalidName ());
+
+#endif /* !defined (TAO_AS_STATIC_LIBS) */
+
if (loader != 0)
{
this->poa_current_ =
@@ -2333,17 +2465,24 @@ void
TAO_ORB_Core::resolve_picurrent_i (ACE_ENV_SINGLE_ARG_DECL)
{
TAO_Object_Loader *loader =
- ACE_Dynamic_Service<TAO_Object_Loader>::instance ("PICurrent_Loader");
+ ACE_Dynamic_Service<TAO_Object_Loader>::instance
+ (this->configuration (),
+ ACE_TEXT ("PICurrent_Loader"));
+
+#if !defined(TAO_AS_STATIC_LIBS)
if (loader == 0)
{
- ACE_Service_Config::process_directive (
+ this->configuration ()->process_directive (
ACE_DYNAMIC_SERVICE_DIRECTIVE("PICurrent_Loader",
"TAO_PI",
"_make_TAO_PICurrent_Loader",
""));
loader =
- ACE_Dynamic_Service<TAO_Object_Loader>::instance ("PICurrent_Loader");
+ ACE_Dynamic_Service<TAO_Object_Loader>::instance
+ (this->configuration (),
+ ACE_TEXT ("PICurrent_Loader"));
}
+#endif /* !defined (TAO_AS_STATIC_LIBS) */
if (loader != 0)
{
@@ -2362,17 +2501,24 @@ void
TAO_ORB_Core::resolve_dynanyfactory_i (ACE_ENV_SINGLE_ARG_DECL)
{
TAO_Object_Loader *loader =
- ACE_Dynamic_Service<TAO_Object_Loader>::instance ("DynamicAny_Loader");
+ ACE_Dynamic_Service<TAO_Object_Loader>::instance
+ (this->configuration (),
+ ACE_TEXT ("DynamicAny_Loader"));
+
+#if !defined(TAO_AS_STATIC_LIBS)
if (loader == 0)
{
- ACE_Service_Config::process_directive (
+ this->configuration ()->process_directive (
ACE_DYNAMIC_SERVICE_DIRECTIVE("DynamicAny_Loader",
"TAO_DynamicAny",
"_make_TAO_DynamicAny_Loader",
""));
loader =
- ACE_Dynamic_Service<TAO_Object_Loader>::instance ("DynamicAny_Loader");
+ ACE_Dynamic_Service<TAO_Object_Loader>::instance
+ (this->configuration (),
+ ACE_TEXT ("DynamicAny_Loader"));
}
+#endif /* !defined (TAO_AS_STATIC_LIBS) */
if (loader != 0)
{
@@ -2386,18 +2532,25 @@ void
TAO_ORB_Core::resolve_iormanipulation_i (ACE_ENV_SINGLE_ARG_DECL)
{
TAO_Object_Loader *loader =
- ACE_Dynamic_Service<TAO_Object_Loader>::instance ("IORManip_Loader");
+ ACE_Dynamic_Service<TAO_Object_Loader>::instance
+ (this->configuration (),
+ ACE_TEXT ("IORManip_Loader"));
+#if !defined(TAO_AS_STATIC_LIBS)
if (loader == 0)
{
- ACE_Service_Config::process_directive (
+ this->configuration()->process_directive (
ACE_DYNAMIC_SERVICE_DIRECTIVE("IORManip_Loader",
"TAO_IORManip",
"_make_TAO_IORManip_Loader",
""));
loader =
- ACE_Dynamic_Service<TAO_Object_Loader>::instance ("IORManip_Loader");
+ ACE_Dynamic_Service<TAO_Object_Loader>::instance
+ (this->configuration (),
+ ACE_TEXT ("IORManip_Loader"));
}
+#endif /* !defined (TAO_AS_STATIC_LIBS) */
+
if (loader != 0)
{
this->ior_manip_factory_ =
@@ -2410,29 +2563,39 @@ void
TAO_ORB_Core::resolve_ior_table_i (ACE_ENV_SINGLE_ARG_DECL)
{
TAO_Adapter_Factory *factory =
- ACE_Dynamic_Service<TAO_Adapter_Factory>::instance ("TAO_IORTable");
+ ACE_Dynamic_Service<TAO_Adapter_Factory>::instance
+ (this->configuration (),
+ ACE_TEXT ("TAO_IORTable"));
+
+#if !defined(TAO_AS_STATIC_LIBS)
if (factory == 0)
{
- ACE_Service_Config::process_directive (
+ this->configuration ()->process_directive (
ACE_DYNAMIC_SERVICE_DIRECTIVE("TAO_IORTable",
"TAO_IORTable",
"_make_TAO_Table_Adapter_Factory",
""));
factory =
- ACE_Dynamic_Service<TAO_Adapter_Factory>::instance ("TAO_IORTable");
+ ACE_Dynamic_Service<TAO_Adapter_Factory>::instance
+ (this->configuration (),
+ ACE_TEXT ("TAO_IORTable"));
}
+#endif /* !defined (TAO_AS_STATIC_LIBS) */
if (factory != 0)
{
- // @@ Not exception safe
- TAO_Adapter *iortable_adapter = factory->create (this);
- this->adapter_registry_.insert (iortable_adapter ACE_ENV_ARG_PARAMETER);
+ ACE_Auto_Ptr <TAO_Adapter> iortable_adapter (factory->create (this));
+ iortable_adapter->open (ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_CHECK;
- iortable_adapter->open (ACE_ENV_SINGLE_ARG_PARAMETER);
+ CORBA::Object_var tmp_root = iortable_adapter->root ();
+
+ this->adapter_registry_.insert (iortable_adapter.get () ACE_ENV_ARG_PARAMETER);
ACE_CHECK;
- this->ior_table_ = iortable_adapter->root ();
+ // It is now (exception) safe to release ownership from the auto pointers
+ this->ior_table_= tmp_root._retn ();
+ iortable_adapter.release ();
}
}
@@ -2709,7 +2872,8 @@ TAO_ORB_Core::implrepo_service (void)
ACE_TRY_NEW_ENV
{
- CORBA::Object_var temp = this->orb_->resolve_initial_references ("ImplRepoService" ACE_ENV_ARG_PARAMETER);
+ CORBA::Object_var temp =
+ this->orb_->resolve_initial_references ("ImplRepoService" ACE_ENV_ARG_PARAMETER);
ACE_TRY_CHECK;
ACE_GUARD_RETURN (TAO_SYNCH_MUTEX, ace_mon, this->lock_, CORBA::Object::_nil ());
@@ -2719,7 +2883,8 @@ TAO_ORB_Core::implrepo_service (void)
}
ACE_CATCHANY
{
- // Just make sure that we have a null pointer. Ignore the exception anyway.
+ // Just make sure that we have a null pointer. Ignore the exception
+ // anyway.
this->implrepo_service_ = CORBA::Object::_nil ();
}
ACE_ENDTRY;
@@ -2803,15 +2968,77 @@ TAO_ORB_Core::call_timeout_hook (TAO_Stub *stub,
return;
}
(*timeout_hook) (this, stub, has_timeout, time_value);
+
+ Timeout_Hook alt_connection_timeout_hook =
+ TAO_ORB_Core_Static_Resources::instance ()->alt_connection_timeout_hook_;
+
+ if (alt_connection_timeout_hook == 0)
+ return;
+
+ if (!has_timeout || time_value == ACE_Time_Value::zero )
+ {
+ (*alt_connection_timeout_hook) (this, stub, has_timeout,time_value);
+ return;
+ }
+
+ // At this point, both the primary and alternate hooks are defined, and
+ // the primary did indeed set a value
+ ACE_Time_Value tv1;
+ bool ht1;
+ (*alt_connection_timeout_hook) (this, stub, ht1,tv1);
+ if (ht1 && tv1 > ACE_Time_Value::zero && tv1 < time_value)
+ time_value = tv1;
}
void
TAO_ORB_Core::set_timeout_hook (Timeout_Hook hook)
{
// Saving the hook pointer so that we can use it later when needed.
- TAO_ORB_Core_Static_Resources::instance ()->timeout_hook_ = hook;
+ // For now there are only two entry points that may supply a connection
+ // timeout hook. But there might be future entry points, so this should
+ // probably be addressed by a more sophisticated mechanism.
+
+#define TOCSRi TAO_ORB_Core_Static_Resources::instance ()
+
+ // A consern was raised that since this function is called by two
+ // different initializers there may be a race condition that might
+ // require a lock. We are not using a lock at this time because of
+ // two callers, one happens only during service directive processing
+ // and the other only during ORB Initialization time. The former
+ // happens when the OC_Endpoint_Selector_Factory is loaded, the
+ // latter is part of the messaging library. The messaging library
+ // calls this function as part of pre_init processing, and this call
+ // happes for every ORB instance. This was the case before these The
+ // latter call occurs when the messaging library is loaded. The
+ // redundant calls occured then as well. Second, it isn't clear how
+ // a lock in this static method would react in the face of windows
+ // dlls, shared memory segments, etc. Therefore we are continuing to
+ // keep this code lockless as it always was, assuming no
+ // simultanious overwrite will occur.
+
+ if (TOCSRi->connection_timeout_hook_ == 0)
+ {
+ if (TAO_debug_level > 2)
+ ACE_DEBUG ((LM_DEBUG,
+ ACE_TEXT("TAO (%P|%t) setting primary hook\n")));
+ TOCSRi->connection_timeout_hook_ = hook;
+ }
+ else if (TOCSRi->connection_timeout_hook_ != hook &&
+ TOCSRi->alt_connection_timeout_hook_ == 0)
+ {
+ if (TAO_debug_level > 2)
+ ACE_DEBUG ((LM_DEBUG,
+ ACE_TEXT("TAO (%P|%t) setting alternate hook\n")));
+ TOCSRi->alt_connection_timeout_hook_ = hook;
+ }
+ else
+ if (TAO_debug_level > 2)
+ ACE_DEBUG ((LM_DEBUG,
+ ACE_TEXT ("TAO (%P|%t) not overwriting alternate hook.")
+ ACE_TEXT (" Is it still null? %d\n"),
+ TOCSRi->alt_connection_timeout_hook_ == 0));
- return;
+#undef TOCSRi
}
void
@@ -2991,16 +3218,38 @@ TAO_ORB_Core::ior_interceptor_adapter (void)
ACE_TRY
{
TAO_IORInterceptor_Adapter_Factory * ior_ap_factory =
- ACE_Dynamic_Service<TAO_IORInterceptor_Adapter_Factory>::instance (
- TAO_ORB_Core::iorinterceptor_adapter_factory_name ()
- );
+ ACE_Dynamic_Service<TAO_IORInterceptor_Adapter_Factory>::instance
+ (this->configuration (),
+ ACE_TEXT_CHAR_TO_TCHAR (TAO_ORB_Core::iorinterceptor_adapter_factory_name ()));
- if (ior_ap_factory)
+#if !defined (TAO_AS_STATIC_LIBS)
+ // In case we build shared, try to load the IOR_Interceptor factory. In a
+ // static build we just can't do this, so don't try it
+ if (ior_ap_factory == 0)
+ {
+ this->configuration()->process_directive
+ (ACE_DYNAMIC_SERVICE_DIRECTIVE("Concrete_IORInterceptor_Adapter_Factory",
+ "TAO_IORInterceptor",
+ "_make_TAO_IORInterceptor_Adapter_Factory_Impl",
+ ""));
+ ior_ap_factory =
+ ACE_Dynamic_Service<TAO_IORInterceptor_Adapter_Factory>::instance
+ (this->configuration (), ACE_TEXT("Concrete_IORInterceptor_Adapter_Factory"));
+ }
+#endif /* !TAO_AS_STATIC_LIBS */
+
+ if (ior_ap_factory == 0)
{
- this->ior_interceptor_adapter_ =
- ior_ap_factory->create (ACE_ENV_SINGLE_ARG_PARAMETER);
- ACE_TRY_CHECK;
+ ACE_ERROR_RETURN ((LM_ERROR,
+ ACE_TEXT ("(%P|%t) Unable to get a IORInterceptor factory\n")),
+ 0);
+ ACE_THROW (CORBA::INTERNAL ());
}
+
+ this->ior_interceptor_adapter_ =
+ ior_ap_factory->create (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
}
ACE_CATCHANY
{
@@ -3034,7 +3283,8 @@ TAO_ORB_Core::add_interceptor (
ACE_ERROR ((LM_ERROR,
ACE_TEXT ("(%P|%t) %p\n"),
ACE_TEXT ("ERROR: ORB Core unable to find the ")
- ACE_TEXT ("Client Request Interceptor Adapter Factory instance")));
+ ACE_TEXT ("Client Request Interceptor Adapter Factory ")
+ ACE_TEXT ("instance")));
ACE_THROW (CORBA::INTERNAL ());
}
@@ -3053,9 +3303,9 @@ TAO_ORB_Core::clientrequestinterceptor_adapter_i (void)
if (this->client_request_interceptor_adapter_ == 0)
{
TAO_ClientRequestInterceptor_Adapter_Factory *factory =
- ACE_Dynamic_Service<TAO_ClientRequestInterceptor_Adapter_Factory>::instance (
- "ClientRequestInterceptor_Adapter_Factory"
- );
+ ACE_Dynamic_Service<TAO_ClientRequestInterceptor_Adapter_Factory>::instance
+ (this->configuration (),
+ ACE_TEXT ("ClientRequestInterceptor_Adapter_Factory"));
if (factory)
{
@@ -3084,7 +3334,8 @@ TAO_ORB_Core::add_interceptor (
ACE_ERROR ((LM_ERROR,
ACE_TEXT ("(%P|%t) %p\n"),
ACE_TEXT ("ERROR: ORB Core unable to find the ")
- ACE_TEXT ("Server Request Interceptor Adapter Factory instance")));
+ ACE_TEXT ("Server Request Interceptor Adapter Factory ")
+ ACE_TEXT ("instance")));
ACE_THROW (CORBA::INTERNAL ());
}
@@ -3110,7 +3361,8 @@ TAO_ORB_Core::add_interceptor (
ACE_ERROR ((LM_ERROR,
ACE_TEXT ("(%P|%t) %p\n"),
ACE_TEXT ("ERROR: ORB Core unable to find the ")
- ACE_TEXT ("Client Request Interceptor Adapter Factory instance")));
+ ACE_TEXT ("Client Request Interceptor Adapter Factory ")
+ ACE_TEXT ("instance")));
ACE_THROW (CORBA::INTERNAL ());
}
@@ -3136,7 +3388,8 @@ TAO_ORB_Core::add_interceptor (
ACE_ERROR ((LM_ERROR,
ACE_TEXT ("(%P|%t) %p\n"),
ACE_TEXT ("ERROR: ORB Core unable to find the ")
- ACE_TEXT ("Server Request Interceptor Adapter Factory instance")));
+ ACE_TEXT ("Server Request Interceptor Adapter Factory ")
+ ACE_TEXT ("instance")));
ACE_THROW (CORBA::INTERNAL ());
}
@@ -3155,9 +3408,9 @@ TAO_ORB_Core::serverrequestinterceptor_adapter_i (void)
if (this->server_request_interceptor_adapter_ == 0)
{
TAO_ServerRequestInterceptor_Adapter_Factory *factory =
- ACE_Dynamic_Service<TAO_ServerRequestInterceptor_Adapter_Factory>::instance (
- "ServerRequestInterceptor_Adapter_Factory"
- );
+ ACE_Dynamic_Service<TAO_ServerRequestInterceptor_Adapter_Factory>::instance
+ (this->configuration (),
+ ACE_TEXT ("ServerRequestInterceptor_Adapter_Factory"));
if (factory)
{
@@ -3167,6 +3420,11 @@ TAO_ORB_Core::serverrequestinterceptor_adapter_i (void)
}
}
+ if (TAO_debug_level > 2)
+ ACE_DEBUG ((LM_DEBUG,
+ ACE_TEXT ("(%P|%t) Server request interceptor adapter list at %@\n"),
+ this->server_request_interceptor_adapter_));
+
return this->server_request_interceptor_adapter_;
}
diff --git a/TAO/tao/ORB_Core.h b/TAO/tao/ORB_Core.h
index d0144373b4b..b9a0581bf39 100644
--- a/TAO/tao/ORB_Core.h
+++ b/TAO/tao/ORB_Core.h
@@ -316,7 +316,7 @@ public:
* Sets the value of gui_resource_factory in TSS. ORB_Core is responsible
* for releasing this factory if needed.
*/
- static void set_gui_resource_factory (TAO::GUIResource_Factory *gui_resource_factory);
+ static void set_gui_resource_factory (TAO::GUIResource_Factory *gui_factory);
/// Sets the value of TAO_ORB_Core::protocols_hooks_
static void set_protocols_hooks (const char *protocols_hooks_name);
@@ -508,6 +508,30 @@ public:
ACE_Time_Value &time_value);
/// Define the Timeout_Hook signature
+ /**
+ * The connection timeout hook was originally defined to allow the
+ * TAO Messaging code to be factored out of the core TAO library and
+ * placed in to an optional library. Since then, a new invocation
+ * endpoint selector, the optimised connection endpoint selector
+ * (see Strategies/OC_Endpoint_Selector.h) reused this connection
+ * timeout hook. However, this set up a problem when both the
+ * Messaging library and OCES are being used in the same
+ * application.
+ *
+ * The solution was to add a new connection timeout hook attribute
+ * (see alt_connection_timeout_hook_ below). This method now checks
+ * to see if the connection timeout hook is already set, and if so
+ * assigns the supplied hook value to the alternate connection
+ * timeout hook. This functionality has a side-effect of assuming
+ * that hooks are NEVER unloaded or actively replaced. IOW, no one
+ * will call this method with a 0 or some other pointer value to
+ * replace an existing hook.
+ *
+ * If such functionality as unloading a hook pointer is required,
+ * then this method must be extended to give some kind of identity
+ * for the hook. Additional changes to the definition of the hook
+ * will also be necessary to support such identity and manipulation.
+ */
static void connection_timeout_hook (Timeout_Hook hook);
void call_sync_scope_hook (TAO_Stub *stub,
@@ -893,6 +917,9 @@ public:
(const CORBA::Object_ptr obj,
const TAO_Service_Context &service_context);
+ /// Configuration accessor method
+ ACE_Service_Gestalt* configuration () const;
+
/// Get outgoing fragmentation strategy.
auto_ptr<TAO_GIOP_Fragmentation_Strategy>
fragmentation_strategy (TAO_Transport * transport);
@@ -1235,6 +1262,8 @@ protected:
/// Code Set Manager - points to service object in the service repo
TAO_Codeset_Manager *codeset_manager_;
+ /// ORB's service configuration
+ ACE_Service_Gestalt *config_;
};
// ****************************************************************
@@ -1379,6 +1408,9 @@ public:
*/
ACE_CString poa_factory_directive_;
+ /// An alternative hook to be set for the ConnectionTimeoutPolicy
+ TAO_ORB_Core::Timeout_Hook alt_connection_timeout_hook_;
+
private:
/// Constructor.
diff --git a/TAO/tao/ORB_Core.i b/TAO/tao/ORB_Core.i
index b78066a39eb..3f5f53cd423 100644
--- a/TAO/tao/ORB_Core.i
+++ b/TAO/tao/ORB_Core.i
@@ -7,6 +7,12 @@
TAO_BEGIN_VERSIONED_NAMESPACE_DECL
+ACE_INLINE ACE_Service_Gestalt*
+TAO_ORB_Core::configuration (void) const
+{
+ return this->config_;
+}
+
ACE_INLINE CORBA::ULong
TAO_ORB_Core::_incr_refcnt (void)
{
@@ -250,23 +256,6 @@ TAO_ORB_Core::orb_params(void)
return &(this->orb_params_);
}
-ACE_INLINE TAO_Codeset_Manager *
-TAO_ORB_Core::codeset_manager()
-{
- if (this->orb_params()->negotiate_codesets() == 0)
- return 0;
- if (this->codeset_manager_ == 0)
- {
- // This causes a factory to be loaded which will call
- // the codeset_manager setter in this thread.
- this->codeset_manager_ =
- this->resource_factory()->codeset_manager();
- if (this->codeset_manager_ == 0)
- this->orb_params()->negotiate_codesets(false);
- }
- return this->codeset_manager_;
-}
-
#define TAO_OC_RETRIEVE(member) \
((this->member##_ == 0) \
? (this->member##_ = this->resource_factory ()->get_##member ()) \
@@ -447,6 +436,23 @@ TAO_ORB_Core::server_id (void) const
return this->server_id_.c_str();
}
+ACE_INLINE TAO_Codeset_Manager *
+TAO_ORB_Core::codeset_manager()
+{
+ if (this->orb_params()->negotiate_codesets() == 0)
+ return 0;
+ if (this->codeset_manager_ == 0)
+ {
+ // This causes a factory to be loaded which will call
+ // the codeset_manager setter in this thread.
+ this->codeset_manager_ =
+ this->resource_factory()->codeset_manager();
+ if (this->codeset_manager_ == 0)
+ this->orb_params()->negotiate_codesets(false);
+ }
+ return this->codeset_manager_;
+}
+
ACE_INLINE TAO::ORBInitializer_Registry_Adapter *
TAO_ORB_Core::orbinitializer_registry ()
{
diff --git a/TAO/tao/ObjRefTemplate/Default_ORTC.cpp b/TAO/tao/ObjRefTemplate/Default_ORTC.cpp
index b3a94f7c90a..ef7dde2671c 100644
--- a/TAO/tao/ObjRefTemplate/Default_ORTC.cpp
+++ b/TAO/tao/ObjRefTemplate/Default_ORTC.cpp
@@ -92,6 +92,12 @@ TAO_Default_ORT::ObjectReferenceTemplate::_tao_obv_repository_id (void) const
}
void
+TAO_Default_ORT::ObjectReferenceTemplate::_tao_obv_truncatable_repo_ids (Repository_Id_List& ids) const
+{
+ ids.push_back (this->_tao_obv_static_repository_id ());
+}
+
+void
TAO_Default_ORT::ObjectReferenceTemplate::_tao_any_destructor (void *_tao_void_pointer)
{
ObjectReferenceTemplate *_tao_tmp_pointer =
@@ -112,53 +118,42 @@ CORBA::Boolean TAO_Default_ORT::ObjectReferenceTemplate::_tao_unmarshal_v (TAO_I
return this->_tao_unmarshal__TAO_Default_ORT_ObjectReferenceTemplate (strm);
}
+CORBA::Boolean TAO_Default_ORT::ObjectReferenceTemplate::_tao_match_formal_type (ptrdiff_t formal_type_id) const
+{
+ return formal_type_id ==
+ reinterpret_cast<ptrdiff_t>(&TAO_Default_ORT::ObjectReferenceTemplate::_downcast);
+}
+
CORBA::Boolean TAO_Default_ORT::ObjectReferenceTemplate::_tao_unmarshal (
TAO_InputCDR &strm,
ObjectReferenceTemplate *&new_object
)
{
CORBA::ValueBase *base = 0;
- CORBA::ValueFactory_var factory;
CORBA::Boolean retval =
CORBA::ValueBase::_tao_unmarshal_pre (
strm,
- factory.out (),
base,
ObjectReferenceTemplate::_tao_obv_static_repository_id ()
);
-
+
if (retval == 0)
- {
return 0;
- }
-
- if (factory.in () != 0)
- {
- base = factory->create_for_unmarshal ();
-
- if (base == 0)
- {
- return 0; // %! except.?
- }
-
- retval = base->_tao_unmarshal_v (strm);
-
- if (retval == 0)
- {
+
+ if (base != 0 && ! base->_tao_unmarshal_v (strm))
return 0;
- }
- }
-
+
// Now base must be null or point to the unmarshaled object.
// Align the pointer to the right subobject.
new_object = ObjectReferenceTemplate::_downcast (base);
- return retval;
+ return 1;
}
// TAO_IDL - Generated from
// be\be_visitor_valuetype/valuetype_obv_cs.cpp:58
OBV_TAO_Default_ORT::ObjectReferenceTemplate::ObjectReferenceTemplate (void)
+: require_truncation_ (false)
{}
OBV_TAO_Default_ORT::ObjectReferenceTemplate::~ObjectReferenceTemplate (void)
@@ -242,4 +237,10 @@ OBV_TAO_Default_ORT::ObjectReferenceTemplate::_tao_unmarshal_state (TAO_InputCDR
);
}
+void
+OBV_TAO_Default_ORT::ObjectReferenceTemplate::truncation_hook (void)
+{
+ this->require_truncation_ = true;
+}
+
TAO_END_VERSIONED_NAMESPACE_DECL
diff --git a/TAO/tao/ObjRefTemplate/Default_ORTC.h b/TAO/tao/ObjRefTemplate/Default_ORTC.h
index bf461b7efcd..cce4f9d2850 100644
--- a/TAO/tao/ObjRefTemplate/Default_ORTC.h
+++ b/TAO/tao/ObjRefTemplate/Default_ORTC.h
@@ -42,7 +42,7 @@
#include "tao/ObjRefTemplate/ort_export.h"
#include "tao/Valuetype/ValueBase.h"
-#include "tao/Valuetype/Valuetype_Adapter_Impl.h"
+#include "tao/Valuetype/Valuetype_Adapter_Factory_Impl.h"
#include "tao/ORB.h"
#include "tao/SystemException.h"
#include "tao/Environment.h"
@@ -71,22 +71,22 @@ TAO_BEGIN_VERSIONED_NAMESPACE_DECL
namespace TAO_Default_ORT
{
-
+
// TAO_IDL - Generated from
// be\be_valuetype.cpp:524
-
-
+
+
#if !defined (_TAO_DEFAULT_ORT_OBJECTREFERENCETEMPLATE__VAR_OUT_CH_)
#define _TAO_DEFAULT_ORT_OBJECTREFERENCETEMPLATE__VAR_OUT_CH_
-
+
class ObjectReferenceTemplate;
typedef
TAO_Value_Var_T<
ObjectReferenceTemplate
>
ObjectReferenceTemplate_var;
-
+
typedef
TAO_Value_Out_T<
ObjectReferenceTemplate
@@ -94,61 +94,64 @@ namespace TAO_Default_ORT
ObjectReferenceTemplate_out;
#endif /* end #if !defined */
-
+
// TAO_IDL - Generated from
// be\be_visitor_valuetype/valuetype_ch.cpp:56
#if !defined (_TAO_DEFAULT_ORT_OBJECTREFERENCETEMPLATE_CH_)
#define _TAO_DEFAULT_ORT_OBJECTREFERENCETEMPLATE_CH_
-
+
class TAO_ORT_Export ObjectReferenceTemplate
: public virtual PortableInterceptor::ObjectReferenceTemplate
{
public:
typedef ObjectReferenceTemplate_var _var_type;
-
+
static ObjectReferenceTemplate* _downcast (CORBA::ValueBase *);
-
+
// (TAO extensions or internals)
static CORBA::Boolean _tao_unmarshal (
TAO_InputCDR &,
ObjectReferenceTemplate *&
);
-
+
virtual const char* _tao_obv_repository_id (void) const;
-
+
+ virtual void _tao_obv_truncatable_repo_ids (Repository_Id_List &) const;
+
static const char* _tao_obv_static_repository_id (void);
-
+
static void _tao_any_destructor (void *);
-
+
// TAO_IDL - Generated from
// be\be_visitor_valuetype/valuetype_ch.cpp:246
-
+
protected:
ObjectReferenceTemplate (void);
-
+
virtual ~ObjectReferenceTemplate (void);
-
+
virtual CORBA::Boolean _tao_marshal_v (TAO_OutputCDR &) const;
virtual CORBA::Boolean _tao_unmarshal_v (TAO_InputCDR &);
-
+ virtual CORBA::Boolean _tao_match_formal_type (ptrdiff_t ) const;
+
private:
ObjectReferenceTemplate (const ObjectReferenceTemplate &);
void operator= (const ObjectReferenceTemplate &);
-
+
protected:
virtual CORBA::Boolean
_tao_marshal__TAO_Default_ORT_ObjectReferenceTemplate (TAO_OutputCDR &) const = 0;
-
+
virtual CORBA::Boolean
_tao_unmarshal__TAO_Default_ORT_ObjectReferenceTemplate (TAO_InputCDR &) = 0;
};
#endif /* end #if !defined */
-
+
// TAO_IDL - Generated from
// be\be_visitor_typecode/typecode_decl.cpp:44
-
+
extern TAO_ORT_Export ::CORBA::TypeCode_ptr const _tc_ObjectReferenceTemplate;
// TAO_IDL - Generated from
@@ -161,35 +164,37 @@ namespace TAO_Default_ORT
namespace OBV_TAO_Default_ORT
{
-
+
// TAO_IDL - Generated from
// be\be_visitor_valuetype/valuetype_obv_ch.cpp:58
#if !defined (_TAO_DEFAULT_ORT_OBJECTREFERENCETEMPLATE___OBV_CH_)
#define _TAO_DEFAULT_ORT_OBJECTREFERENCETEMPLATE___OBV_CH_
-
+
// OBV_ class
class TAO_ORT_Export ObjectReferenceTemplate
: public virtual TAO_Default_ORT::ObjectReferenceTemplate
{
public:
-
+
protected:
ObjectReferenceTemplate (void);
virtual ~ObjectReferenceTemplate (void);
-
+
protected:
virtual CORBA::Boolean
_tao_marshal__TAO_Default_ORT_ObjectReferenceTemplate (TAO_OutputCDR &) const;
-
+
virtual CORBA::Boolean
_tao_unmarshal__TAO_Default_ORT_ObjectReferenceTemplate (TAO_InputCDR &);
-
+
CORBA::Boolean _tao_marshal_state (TAO_OutputCDR &) const;
CORBA::Boolean _tao_unmarshal_state (TAO_InputCDR &);
-
+ virtual void truncation_hook (void);
+
private:
- };
+ CORBA::Boolean require_truncation_;
+};
#endif /* end #if !defined */
}
@@ -203,7 +208,7 @@ namespace TAO
#if !defined (_TAO_DEFAULT_ORT_OBJECTREFERENCETEMPLATE__TRAITS_CH_)
#define _TAO_DEFAULT_ORT_OBJECTREFERENCETEMPLATE__TRAITS_CH_
-
+
template<>
struct TAO_ORT_Export Value_Traits<TAO_Default_ORT::ObjectReferenceTemplate>
{
@@ -257,5 +262,3 @@ TAO_END_VERSIONED_NAMESPACE_DECL
#include /**/ "ace/post.h"
#endif /* ifndef */
-
-
diff --git a/TAO/tao/ObjRefTemplate/ObjectReferenceTemplateC.cpp b/TAO/tao/ObjRefTemplate/ObjectReferenceTemplateC.cpp
index 1a419ab1be5..8672196c8f2 100644
--- a/TAO/tao/ObjRefTemplate/ObjectReferenceTemplateC.cpp
+++ b/TAO/tao/ObjRefTemplate/ObjectReferenceTemplateC.cpp
@@ -118,6 +118,12 @@ PortableInterceptor::ObjectReferenceFactory::_tao_obv_repository_id (void) const
}
void
+PortableInterceptor::ObjectReferenceFactory::_tao_obv_truncatable_repo_ids (Repository_Id_List& ids) const
+{
+ ids.push_back (this->_tao_obv_static_repository_id ());
+}
+
+void
PortableInterceptor::ObjectReferenceFactory::_tao_any_destructor (void *_tao_void_pointer)
{
ObjectReferenceFactory *_tao_tmp_pointer =
@@ -128,47 +134,30 @@ PortableInterceptor::ObjectReferenceFactory::_tao_any_destructor (void *_tao_voi
PortableInterceptor::ObjectReferenceFactory::~ObjectReferenceFactory (void)
{}
-CORBA::Boolean PortableInterceptor::ObjectReferenceFactory::_tao_unmarshal (
+CORBA::Boolean
+PortableInterceptor::ObjectReferenceFactory::_tao_unmarshal (
TAO_InputCDR &strm,
ObjectReferenceFactory *&new_object
)
{
CORBA::ValueBase *base = 0;
- CORBA::ValueFactory_var factory;
CORBA::Boolean retval =
CORBA::ValueBase::_tao_unmarshal_pre (
strm,
- factory.out (),
base,
ObjectReferenceFactory::_tao_obv_static_repository_id ()
);
if (retval == 0)
- {
return 0;
- }
- if (factory.in () != 0)
- {
- base = factory->create_for_unmarshal ();
-
- if (base == 0)
- {
- return 0; // %! except.?
- }
-
- retval = base->_tao_unmarshal_v (strm);
-
- if (retval == 0)
- {
+ if (base != 0 && ! base->_tao_unmarshal_v (strm))
return 0;
- }
- }
// Now base must be null or point to the unmarshaled object.
// Align the pointer to the right subobject.
new_object = ObjectReferenceFactory::_downcast (base);
- return retval;
+ return 1;
}
// TAO_IDL - Generated from
@@ -211,6 +200,12 @@ PortableInterceptor::ObjectReferenceTemplate::_tao_obv_repository_id (void) cons
}
void
+PortableInterceptor::ObjectReferenceTemplate::_tao_obv_truncatable_repo_ids (Repository_Id_List& ids) const
+{
+ ids.push_back (this->_tao_obv_static_repository_id ());
+}
+
+void
PortableInterceptor::ObjectReferenceTemplate::_tao_any_destructor (void *_tao_void_pointer)
{
ObjectReferenceTemplate *_tao_tmp_pointer =
@@ -227,41 +222,30 @@ CORBA::Boolean PortableInterceptor::ObjectReferenceTemplate::_tao_unmarshal (
)
{
CORBA::ValueBase *base = 0;
- CORBA::ValueFactory_var factory;
CORBA::Boolean retval =
CORBA::ValueBase::_tao_unmarshal_pre (
strm,
- factory.out (),
base,
ObjectReferenceTemplate::_tao_obv_static_repository_id ()
);
if (retval == 0)
- {
- return 0;
- }
-
- if (factory.in () != 0)
- {
- base = factory->create_for_unmarshal ();
-
- if (base == 0)
- {
- return 0; // %! except.?
- }
+ return 0;
- retval = base->_tao_unmarshal_v (strm);
-
- if (retval == 0)
- {
- return 0;
- }
- }
+ if (base != 0 && ! base->_tao_unmarshal_v (strm))
+ return 0;
// Now base must be null or point to the unmarshaled object.
// Align the pointer to the right subobject.
new_object = ObjectReferenceTemplate::_downcast (base);
- return retval;
+ return 1;
+}
+
+CORBA::Boolean
+PortableInterceptor::ObjectReferenceFactory::_tao_match_formal_type (ptrdiff_t formal_type_id) const
+{
+ return formal_type_id ==
+ reinterpret_cast<ptrdiff_t>(&PortableInterceptor::ObjectReferenceFactory::_downcast);
}
// TAO_IDL - Generated from
diff --git a/TAO/tao/ObjRefTemplate/ObjectReferenceTemplateC.h b/TAO/tao/ObjRefTemplate/ObjectReferenceTemplateC.h
index eab7a48e6b6..6997ded8853 100644
--- a/TAO/tao/ObjRefTemplate/ObjectReferenceTemplateC.h
+++ b/TAO/tao/ObjRefTemplate/ObjectReferenceTemplateC.h
@@ -45,7 +45,7 @@
#include "tao/ObjRefTemplate/ort_export.h"
#include "tao/Valuetype/ValueBase.h"
-#include "tao/Valuetype/Valuetype_Adapter_Impl.h"
+#include "tao/Valuetype/Valuetype_Adapter_Factory_Impl.h"
#include "tao/ORB.h"
#include "tao/SystemException.h"
#include "tao/Environment.h"
@@ -127,6 +127,8 @@ namespace PortableInterceptor
static const char* _tao_obv_static_repository_id (void);
+ virtual void _tao_obv_truncatable_repo_ids (Repository_Id_List& ids) const;
+
static void _tao_any_destructor (void *);
// TAO_IDL - Generated from
@@ -145,6 +147,7 @@ namespace PortableInterceptor
virtual ~ObjectReferenceFactory (void);
+ virtual CORBA::Boolean _tao_match_formal_type(ptrdiff_t ) const;
private:
ObjectReferenceFactory (const ObjectReferenceFactory &);
@@ -204,6 +207,8 @@ namespace PortableInterceptor
virtual const char* _tao_obv_repository_id (void) const;
+ virtual void _tao_obv_truncatable_repo_ids (Repository_Id_List &) const;
+
static const char* _tao_obv_static_repository_id (void);
static void _tao_any_destructor (void *);
@@ -440,5 +445,3 @@ TAO_END_VERSIONED_NAMESPACE_DECL
#include /**/ "ace/post.h"
#endif /* ifndef */
-
-
diff --git a/TAO/tao/Object.cpp b/TAO/tao/Object.cpp
index 0df3b311b58..e39e2e473a3 100644
--- a/TAO/tao/Object.cpp
+++ b/TAO/tao/Object.cpp
@@ -158,7 +158,7 @@ CORBA::Object::marshal (TAO_OutputCDR &cdr)
}
/*static*/ CORBA::Boolean
-CORBA::Object::marshal (CORBA::Object_ptr x,
+CORBA::Object::marshal (const CORBA::Object_ptr x,
TAO_OutputCDR &cdr)
{
if (x == 0)
diff --git a/TAO/tao/Object.h b/TAO/tao/Object.h
index c6bd922d66a..7c806d0a58b 100644
--- a/TAO/tao/Object.h
+++ b/TAO/tao/Object.h
@@ -276,8 +276,8 @@ namespace CORBA
/// Marshalling operator used by the stub code. A long story why
/// the stub code uses this, let us keep it short here.
- static CORBA::Boolean marshal (const Object_ptr obj,
- TAO_OutputCDR &strm);
+ static CORBA::Boolean marshal (const Object_ptr x,
+ TAO_OutputCDR &cdr);
/// Accessor for the cached servant reference held on the stub
/// if this object is collocated
diff --git a/TAO/tao/PI/ORBInitializer_Registry_Impl.cpp b/TAO/tao/PI/ORBInitializer_Registry_Impl.cpp
index 919abb2706e..57834a96e38 100644
--- a/TAO/tao/PI/ORBInitializer_Registry_Impl.cpp
+++ b/TAO/tao/PI/ORBInitializer_Registry_Impl.cpp
@@ -1,6 +1,7 @@
#include "tao/PI/ORBInitializer_Registry_Impl.h"
#include "tao/PI/ORBInitInfo.h"
#include "tao/PI/PICurrent.h"
+#include "tao/PI/PI_ORBInitializer.h"
#include "tao/ORB_Core.h"
#include "tao/ORB_Constants.h"
@@ -10,6 +11,10 @@
#include "ace/Recursive_Thread_Mutex.h"
#include "ace/Log_Msg.h"
+#include "tao/PI/ClientRequestInterceptor_Factory_Impl.h"
+#include "tao/PI/PICurrent_Loader.h"
+#include "tao/PI/PolicyFactory_Loader.h"
+
ACE_RCSID (PI,
ORBInitializer_Registry,
"$Id$")
@@ -24,6 +29,66 @@ TAO::ORBInitializer_Registry::ORBInitializer_Registry (void)
}
int
+TAO::ORBInitializer_Registry::init (int, ACE_TCHAR *[])
+{
+ ACE_GUARD_RETURN (TAO_SYNCH_RECURSIVE_MUTEX,
+ guard,
+ this->lock_,
+ -1);
+
+#if TAO_HAS_INTERCEPTORS == 1
+
+ ACE_Service_Config::process_directive
+ (ace_svc_desc_TAO_PolicyFactory_Loader);
+
+ ACE_Service_Config::process_directive
+ (ace_svc_desc_TAO_ClientRequestInterceptor_Adapter_Factory_Impl);
+
+ ACE_Service_Config::process_directive
+ (ace_svc_desc_TAO_PICurrent_Loader);
+
+ PortableInterceptor::ORBInitializer_ptr temp_orb_initializer =
+ PortableInterceptor::ORBInitializer::_nil ();
+
+ PortableInterceptor::ORBInitializer_var orb_initializer;
+
+ ACE_DECLARE_NEW_CORBA_ENV;
+ ACE_TRY
+ {
+ /// Register the PI ORBInitializer.
+
+ ACE_NEW_THROW_EX (temp_orb_initializer,
+ TAO_PI_ORBInitializer,
+ CORBA::NO_MEMORY (
+ CORBA::SystemException::_tao_minor_code (
+ TAO::VMCID,
+ ENOMEM),
+ CORBA::COMPLETED_NO));
+ ACE_TRY_CHECK;
+
+ orb_initializer = temp_orb_initializer;
+
+ this->register_orb_initializer (orb_initializer.in ()
+ ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+ }
+ ACE_CATCHANY
+ {
+ if (TAO_debug_level > 0)
+ {
+ ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION,
+ "(%P | %t) Caught exception:");
+ }
+ return -1;
+ }
+ ACE_ENDTRY;
+#endif /* TAO_HAS_INTERCEPTORS == 1 */
+
+ return 0;
+}
+
+
+int
TAO::ORBInitializer_Registry::fini (void)
{
ACE_GUARD_RETURN (TAO_SYNCH_RECURSIVE_MUTEX,
diff --git a/TAO/tao/PI/ORBInitializer_Registry_Impl.h b/TAO/tao/PI/ORBInitializer_Registry_Impl.h
index edb5a2bfc26..1e4788a2602 100644
--- a/TAO/tao/PI/ORBInitializer_Registry_Impl.h
+++ b/TAO/tao/PI/ORBInitializer_Registry_Impl.h
@@ -76,6 +76,17 @@ namespace TAO
PortableInterceptor::SlotId slotid
ACE_ENV_ARG_DECL);
+ protected:
+
+ // Added to provide registration for the several static service objects,
+ // brought in with this ORBInitializer_Registry implementation. Note that
+ // this is more reliable than using static initializers, since multiple
+ // copies of the dynamic service object will require their own (multiple)
+ // copies of the dependent static service objects. That is just impossible
+ // without registering those static services in the same repo, the dynamic
+ // SO is registered with.
+ virtual int init (int, ACE_TCHAR *[]);
+
private:
// Prevent copying
ORBInitializer_Registry (const ORBInitializer_Registry &);
diff --git a/TAO/tao/PI/PI.cpp b/TAO/tao/PI/PI.cpp
index 3e18928cf8c..ebec2effb3f 100644
--- a/TAO/tao/PI/PI.cpp
+++ b/TAO/tao/PI/PI.cpp
@@ -1,11 +1,4 @@
#include "tao/PI/PI.h"
-#include "tao/PI/ORBInitializer_Registry_Impl.h"
-#include "tao/PI/PolicyFactory_Loader.h"
-#include "tao/PI/ClientRequestInterceptor_Factory_Impl.h"
-#include "tao/PI/PICurrent_Loader.h"
-#include "tao/PI/PI_ORBInitializer.h"
-#include "tao/ORBInitializer_Registry.h"
-#include "tao/ORB_Constants.h"
ACE_RCSID (PI,
PI,
@@ -13,55 +6,4 @@ ACE_RCSID (PI,
TAO_BEGIN_VERSIONED_NAMESPACE_DECL
-int
-TAO_PI_Init::Initializer (void)
-{
-#if TAO_HAS_INTERCEPTORS == 1
- ACE_Service_Config::process_directive (ace_svc_desc_TAO_ClientRequestInterceptor_Adapter_Factory_Impl);
-
- ACE_Service_Config::process_directive (ace_svc_desc_TAO_PICurrent_Loader);
-#endif /* TAO_HAS_INTERCEPTORS == 1 */
-
- int status = ACE_Service_Config::process_directive (
- ace_svc_desc_ORBInitializer_Registry);
-#if TAO_HAS_INTERCEPTORS == 1
- PortableInterceptor::ORBInitializer_ptr temp_orb_initializer =
- PortableInterceptor::ORBInitializer::_nil ();
-
- PortableInterceptor::ORBInitializer_var orb_initializer;
-
- ACE_DECLARE_NEW_CORBA_ENV;
- ACE_TRY
- {
- /// Register the PI ORBInitializer.
-
- ACE_NEW_THROW_EX (temp_orb_initializer,
- TAO_PI_ORBInitializer,
- CORBA::NO_MEMORY (
- CORBA::SystemException::_tao_minor_code (
- TAO::VMCID,
- ENOMEM),
- CORBA::COMPLETED_NO));
- ACE_TRY_CHECK;
-
- orb_initializer = temp_orb_initializer;
-
- PortableInterceptor::register_orb_initializer (orb_initializer.in ()
- ACE_ENV_ARG_PARAMETER);
- ACE_TRY_CHECK;
- }
- ACE_CATCHANY
- {
- if (TAO_debug_level > 0)
- {
- ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION,
- "(%P | %t) Caught exception:");
- }
- return -1;
- }
- ACE_ENDTRY;
-#endif /* TAO_HAS_INTERCEPTORS == 1 */
- return status;
-}
-
TAO_END_VERSIONED_NAMESPACE_DECL
diff --git a/TAO/tao/PI/PI.h b/TAO/tao/PI/PI.h
index da45315f182..6facdc7fc2d 100644
--- a/TAO/tao/PI/PI.h
+++ b/TAO/tao/PI/PI.h
@@ -25,22 +25,6 @@
TAO_BEGIN_VERSIONED_NAMESPACE_DECL
-/**
- * @class TAO_PI_Init
- *
- */
-class TAO_PI_Export TAO_PI_Init
-{
-public:
-
- /// Used to force the initialization of the ORB code.
- static int Initializer (void);
-};
-
-static int
-TAO_Requires_PI_Initializer =
- TAO_PI_Init::Initializer ();
-
TAO_END_VERSIONED_NAMESPACE_DECL
#include /**/ "ace/post.h"
diff --git a/TAO/tao/PI/PolicyFactory_Loader.cpp b/TAO/tao/PI/PolicyFactory_Loader.cpp
index 3b8e49f062c..1e4f6e44d5a 100644
--- a/TAO/tao/PI/PolicyFactory_Loader.cpp
+++ b/TAO/tao/PI/PolicyFactory_Loader.cpp
@@ -14,9 +14,6 @@
#include "tao/PI/PolicyFactory_Loader.h"
#include "tao/PI/PolicyFactory_Registry.h"
-#include "tao/ORB.h"
-#include "tao/debug.h"
-
ACE_RCSID (PI,
PolicyFactory_Loader,
"$Id$")
@@ -33,12 +30,6 @@ TAO_PolicyFactory_Loader::create (void)
return obj;
}
-int
-TAO_PolicyFactory_Loader::Initializer (void)
-{
- return ACE_Service_Config::process_directive (ace_svc_desc_TAO_PolicyFactory_Loader);
-}
-
TAO_END_VERSIONED_NAMESPACE_DECL
ACE_STATIC_SVC_DEFINE (TAO_PolicyFactory_Loader,
diff --git a/TAO/tao/PI/PolicyFactory_Loader.h b/TAO/tao/PI/PolicyFactory_Loader.h
index a25c378676e..4ee3c5a2c56 100644
--- a/TAO/tao/PI/PolicyFactory_Loader.h
+++ b/TAO/tao/PI/PolicyFactory_Loader.h
@@ -34,14 +34,8 @@ class TAO_PI_Export TAO_PolicyFactory_Loader
public:
/// Creates a Codec factory and returns it.
virtual TAO::PolicyFactory_Registry_Adapter* create (void);
-
- /// Used to force the initialization of the ORB code.
- static int Initializer (void);
};
-static int
-TAO_Requires_PolicyFactory_Initializer = TAO_PolicyFactory_Loader::Initializer ();
-
TAO_END_VERSIONED_NAMESPACE_DECL
ACE_STATIC_SVC_DECLARE (TAO_PolicyFactory_Loader)
diff --git a/TAO/tao/PI_Forward.pidl b/TAO/tao/PI_Forward.pidl
index f704658e38c..4ace2af6e7b 100644
--- a/TAO/tao/PI_Forward.pidl
+++ b/TAO/tao/PI_Forward.pidl
@@ -43,7 +43,7 @@ module PortableInterceptor
typedef string ORBId;
typedef CORBA::StringSeq AdapterName;
typedef CORBA::OctetSeq ObjectId;
- typedef long AdapterManagerId;
+ typedef string AdapterManagerId;
typedef short AdapterState;
typedef unsigned long SlotId;
typedef short ReplyStatus;
diff --git a/TAO/tao/PI_ForwardC.h b/TAO/tao/PI_ForwardC.h
index d8672822375..898705618bc 100644
--- a/TAO/tao/PI_ForwardC.h
+++ b/TAO/tao/PI_ForwardC.h
@@ -100,8 +100,9 @@ namespace PortableInterceptor
// TAO_IDL - Generated from
// be\be_visitor_typedef/typedef_ch.cpp:379
- typedef CORBA::Long AdapterManagerId;
- typedef CORBA::Long_out AdapterManagerId_out;
+ typedef char * AdapterManagerId;
+ typedef CORBA::String_var AdapterManagerId_var;
+ typedef CORBA::String_out AdapterManagerId_out;
// TAO_IDL - Generated from
// be\be_visitor_typedef/typedef_ch.cpp:379
diff --git a/TAO/tao/Parser_Registry.cpp b/TAO/tao/Parser_Registry.cpp
index 1d873b9ae12..7b21273679e 100644
--- a/TAO/tao/Parser_Registry.cpp
+++ b/TAO/tao/Parser_Registry.cpp
@@ -49,7 +49,8 @@ TAO_Parser_Registry::open (TAO_ORB_Core *orb_core)
for (size_t i = 0; i != this->size_; ++i)
{
this->parsers_[i] =
- ACE_Dynamic_Service<TAO_IOR_Parser>::instance (names [i]);
+ ACE_Dynamic_Service<TAO_IOR_Parser>::instance (orb_core->configuration (),
+ names [i]);
if (this->parsers_[i] == 0)
{
diff --git a/TAO/tao/PortableServer/Default_Acceptor_Filter.h b/TAO/tao/PortableServer/Default_Acceptor_Filter.h
index b9288216837..3b1bca11b17 100644
--- a/TAO/tao/PortableServer/Default_Acceptor_Filter.h
+++ b/TAO/tao/PortableServer/Default_Acceptor_Filter.h
@@ -46,7 +46,7 @@ public:
TAO_Default_Acceptor_Filter (void);
/// Populate @a mprofile with all available endpoints.
- int fill_profile (const TAO::ObjectKey &object_key,
+ virtual int fill_profile (const TAO::ObjectKey &object_key,
TAO_MProfile &mprofile,
TAO_Acceptor **acceptors_begin,
TAO_Acceptor **acceptors_end,
diff --git a/TAO/tao/PortableServer/Default_Servant_Dispatcher.cpp b/TAO/tao/PortableServer/Default_Servant_Dispatcher.cpp
index ae93dee3d61..44d6a2356dd 100644
--- a/TAO/tao/PortableServer/Default_Servant_Dispatcher.cpp
+++ b/TAO/tao/PortableServer/Default_Servant_Dispatcher.cpp
@@ -15,7 +15,7 @@ TAO_Default_Servant_Dispatcher::~TAO_Default_Servant_Dispatcher (void)
TAO_Root_POA *
TAO_Default_Servant_Dispatcher::create_Root_POA (const ACE_CString &name,
- TAO_POA_Manager &poa_manager,
+ PortableServer::POAManager_ptr poa_manager,
const TAO_POA_Policy_Set &policies,
ACE_Lock &lock,
TAO_SYNCH_MUTEX &thread_lock,
diff --git a/TAO/tao/PortableServer/Default_Servant_Dispatcher.h b/TAO/tao/PortableServer/Default_Servant_Dispatcher.h
index 412e8eea9c6..e5f5f2b71db 100644
--- a/TAO/tao/PortableServer/Default_Servant_Dispatcher.h
+++ b/TAO/tao/PortableServer/Default_Servant_Dispatcher.h
@@ -62,7 +62,7 @@ public:
/// Factory method for creating new POA's.
TAO_Root_POA *create_Root_POA (
const ACE_CString &name,
- TAO_POA_Manager &poa_manager,
+ PortableServer::POAManager_ptr poa_manager,
const TAO_POA_Policy_Set &policies,
ACE_Lock &lock,
TAO_SYNCH_MUTEX &thread_lock,
diff --git a/TAO/tao/PortableServer/Object_Adapter.cpp b/TAO/tao/PortableServer/Object_Adapter.cpp
index 224b531864f..45519170d6e 100644
--- a/TAO/tao/PortableServer/Object_Adapter.cpp
+++ b/TAO/tao/PortableServer/Object_Adapter.cpp
@@ -11,6 +11,7 @@
#include "tao/PortableServer/Default_Servant_Dispatcher.h"
#include "tao/PortableServer/Collocated_Object_Proxy_Broker.h"
#include "tao/PortableServer/POAManager.h"
+#include "tao/PortableServer/POAManagerFactory.h"
#include "tao/PortableServer/Servant_Base.h"
// -- ACE Include --
@@ -591,13 +592,16 @@ TAO_Object_Adapter::open (ACE_ENV_SINGLE_ARG_DECL)
TAO_Default_Servant_Dispatcher);
}
- TAO_POA_Manager *poa_manager;
- ACE_NEW_THROW_EX (poa_manager,
- TAO_POA_Manager (*this),
+ ACE_NEW_THROW_EX (this->poa_manager_factory_,
+ TAO_POAManager_Factory (*this),
CORBA::NO_MEMORY ());
- ACE_CHECK;
- PortableServer::POAManager_var safe_poa_manager = poa_manager;
+ ::CORBA::PolicyList policy;
+ PortableServer::POAManager_var poa_manager
+ = poa_manager_factory_->create_POAManager (TAO_DEFAULT_ROOTPOAMANAGER_NAME,
+ policy
+ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK;
// This makes sure that the default resources are open when the Root
// POA is created.
@@ -639,7 +643,7 @@ TAO_Object_Adapter::open (ACE_ENV_SINGLE_ARG_DECL)
TAO_Root_POA::String root_poa_name (TAO_DEFAULT_ROOTPOA_NAME);
this->root_ =
this->servant_dispatcher_->create_Root_POA (root_poa_name,
- *poa_manager,
+ poa_manager.in (),
policies,
this->lock (),
this->thread_lock (),
@@ -662,11 +666,6 @@ TAO_Object_Adapter::open (ACE_ENV_SINGLE_ARG_DECL)
// for this servant.
this->root_->establish_components (ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_CHECK;
-
- // Release the POA_Manager_var since we got here without error. The
- // TAO_POA object takes ownership of the POA_Manager object
- // (actually it shares the ownership with its peers).
- (void) safe_poa_manager._retn ();
}
void
@@ -684,14 +683,18 @@ TAO_Object_Adapter::close (int wait_for_completion
// destroyed. In the case of the POA, this means that all object
// etherealizations have finished and root POA has been destroyed
// (implying that all descendent POAs have also been destroyed).
-
TAO_Root_POA *root = 0;
+ TAO_POAManager_Factory* factory = 0;
{
ACE_GUARD (ACE_Lock, ace_mon, this->lock ());
if (this->root_ == 0)
return;
root = this->root_;
this->root_ = 0;
+ if (this->poa_manager_factory_ == 0)
+ return;
+ factory = this->poa_manager_factory_;
+ this->poa_manager_factory_ = 0;
}
CORBA::Boolean etherealize_objects = 1;
root->destroy (etherealize_objects,
@@ -699,6 +702,7 @@ TAO_Object_Adapter::close (int wait_for_completion
ACE_ENV_ARG_PARAMETER);
ACE_CHECK;
::CORBA::release (root);
+ ::CORBA::release (factory);
}
void
diff --git a/TAO/tao/PortableServer/Object_Adapter.h b/TAO/tao/PortableServer/Object_Adapter.h
index edcdda83bc7..6d36e4631a4 100644
--- a/TAO/tao/PortableServer/Object_Adapter.h
+++ b/TAO/tao/PortableServer/Object_Adapter.h
@@ -50,6 +50,7 @@ class TAO_POA_Manager;
class TAO_TSS_Resources;
class TAO_Transport;
class TAO_Servant_Dispatcher;
+class TAO_POAManager_Factory;
namespace TAO
{
@@ -493,6 +494,9 @@ private:
/// The Root POA
TAO_Root_POA *root_;
+ /// The POAManager factory.
+ TAO_POAManager_Factory *poa_manager_factory_;
+
/// The default validator and the beginning of the chain of
/// policy validators.
TAO_POA_Default_Policy_Validator default_validator_;
diff --git a/TAO/tao/PortableServer/POAManager.cpp b/TAO/tao/PortableServer/POAManager.cpp
index 8a8055d8c23..1c92bb471e0 100644
--- a/TAO/tao/PortableServer/POAManager.cpp
+++ b/TAO/tao/PortableServer/POAManager.cpp
@@ -1,6 +1,7 @@
// $Id$
#include "tao/PortableServer/POAManager.h"
+#include "tao/PortableServer/POAManagerFactory.h"
#include "tao/PortableServer/Root_POA.h"
#include "tao/PortableServer/poa_macros.h"
#include "tao/Server_Strategy_Factory.h"
@@ -17,23 +18,36 @@ ACE_RCSID (PortableServer,
TAO_BEGIN_VERSIONED_NAMESPACE_DECL
-TAO_POA_Manager::TAO_POA_Manager (TAO_Object_Adapter &object_adapter)
+TAO_POA_Manager::TAO_POA_Manager (
+ TAO_Object_Adapter &object_adapter,
+ const char * id,
+ const ::CORBA::PolicyList &policies,
+ PortableServer::POAManagerFactory_ptr poa_manager_factory)
: state_ (PortableServer::POAManager::HOLDING),
lock_ (object_adapter.lock ()),
poa_collection_ (),
object_adapter_ (object_adapter),
- poa_manager_id_ (this->generate_manager_id ())
+ id_ (id == 0 ? this->generate_manager_id () : CORBA::string_dup (id)),
+ poa_manager_factory_ (* (dynamic_cast <TAO_POAManager_Factory*> (poa_manager_factory))),
+ policies_ (policies)
{
+ poa_manager_factory->_add_ref ();
}
TAO_POA_Manager::~TAO_POA_Manager (void)
{
+ if (TAO_debug_level > 0)
+ {
+ ACE_DEBUG ((LM_DEBUG, "(%P|%t)~TAO_POA_Manager : %s\n", this->id_.in ()));
+ }
+ poa_manager_factory_._remove_ref ();
}
-PortableInterceptor::AdapterManagerId
-TAO_POA_Manager::get_manager_id (ACE_ENV_SINGLE_ARG_DECL_NOT_USED)
+char *
+TAO_POA_Manager::get_id (ACE_ENV_SINGLE_ARG_DECL)
+ ACE_THROW_SPEC ((CORBA::SystemException))
{
- return this->poa_manager_id_;
+ return CORBA::string_dup (this->id_.in ());
}
void
@@ -162,7 +176,7 @@ TAO_POA_Manager::adapter_manager_state_changed (PortableServer::POAManager::Stat
if (ior_adapter)
{
- ior_adapter->adapter_manager_state_changed (TAO_POA_Manager::poa_manager_id_,
+ ior_adapter->adapter_manager_state_changed (this->id_.in (),
adapter_state
ACE_ENV_ARG_PARAMETER);
ACE_CHECK;
@@ -303,7 +317,7 @@ TAO_POA_Manager::remove_poa (TAO_Root_POA *poa)
{
if (this->poa_collection_.is_empty ())
{
- ::CORBA::release (this);
+ this->poa_manager_factory_.remove_poamanager (this);
}
}
diff --git a/TAO/tao/PortableServer/POAManager.h b/TAO/tao/PortableServer/POAManager.h
index 056efb7578c..5e90d177cc2 100644
--- a/TAO/tao/PortableServer/POAManager.h
+++ b/TAO/tao/PortableServer/POAManager.h
@@ -42,7 +42,13 @@ TAO_BEGIN_VERSIONED_NAMESPACE_DECL
// Forward decl.
class TAO_Root_POA;
class TAO_Object_Adapter;
+class TAO_POAManager_Factory;
+namespace PortableServer
+{
+ class POAManagerFactory;
+ typedef POAManagerFactory *POAManagerFactory_ptr;
+}
class TAO_PortableServer_Export TAO_POA_Manager :
public PortableServer::POAManager,
@@ -80,11 +86,15 @@ public:
PortableServer::POAManager::State get_state (ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS)
ACE_THROW_SPEC ((CORBA::SystemException));
- TAO_POA_Manager (TAO_Object_Adapter &object_adapter);
+ char *get_id (ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC ((CORBA::SystemException));
- ~TAO_POA_Manager (void);
+ TAO_POA_Manager (TAO_Object_Adapter &object_adapter,
+ const char * id,
+ const ::CORBA::PolicyList & policies,
+ PortableServer::POAManagerFactory_ptr poa_manager_factory);
- PortableInterceptor::AdapterManagerId get_manager_id (ACE_ENV_SINGLE_ARG_DECL);
+ ~TAO_POA_Manager (void);
/// Check the state of this POA manager
void check_state (ACE_ENV_SINGLE_ARG_DECL);
@@ -96,6 +106,8 @@ public:
ACE_ENV_SINGLE_ARG_DECL
);
+ CORBA::PolicyList& get_policies ();
+
protected:
void activate_i (ACE_ENV_SINGLE_ARG_DECL)
@@ -134,13 +146,6 @@ protected:
int register_poa (TAO_Root_POA *poa);
- /**
- * Generate an AdapterManagerId for this POAManager.
- * @return A value that uniquely identifies the POAManager within a
- * given process.
- */
- PortableInterceptor::AdapterManagerId generate_manager_id (void) const;
-
protected:
PortableServer::POAManager::State state_;
@@ -153,8 +158,21 @@ protected:
TAO_Object_Adapter &object_adapter_;
- PortableInterceptor::AdapterManagerId poa_manager_id_;
+ CORBA::String_var id_;
+
+ TAO_POAManager_Factory& poa_manager_factory_;
+
+ CORBA::PolicyList policies_;
+
+private :
+ /**
+ * Generate an id for this POAManager.
+ * @return A value that uniquely identifies the POAManager within a
+ * given process.
+ * @note: The id_ has the ownership of the memory allocated in this method.
+ */
+ char* generate_manager_id (void) const;
};
TAO_END_VERSIONED_NAMESPACE_DECL
diff --git a/TAO/tao/PortableServer/POAManager.i b/TAO/tao/PortableServer/POAManager.i
index 19adb23dd8f..5dad4c14de5 100644
--- a/TAO/tao/PortableServer/POAManager.i
+++ b/TAO/tao/PortableServer/POAManager.i
@@ -84,7 +84,7 @@ TAO_POA_Manager::get_state (ACE_ENV_SINGLE_ARG_DECL)
return this->get_state_i ();
}
-ACE_INLINE PortableInterceptor::AdapterManagerId
+ACE_INLINE char*
TAO_POA_Manager::generate_manager_id (void) const
{
// The AdapterManagerId must be unique across all Adapter Managers
@@ -101,7 +101,7 @@ TAO_POA_Manager::generate_manager_id (void) const
// shifting of 64 bit addresses is performed since the
// TAO_POA_Manager object is not large enough to allow that trick.
- PortableInterceptor::AdapterManagerId id = 0;
+ CORBA::Long id = 0;
// Note that we reinterpret_cast to an "unsigned long" instead of
// CORBA::ULong since we need to first cast to an integer large
@@ -109,14 +109,10 @@ TAO_POA_Manager::generate_manager_id (void) const
// 64-bit platforms.
if (sizeof (this) == 4) // 32 bit address
- id =
- static_cast <PortableInterceptor::AdapterManagerId>
- (reinterpret_cast <ptrdiff_t> (this));
+ id = reinterpret_cast <ptrdiff_t> (this);
else if (sizeof (this) == 8) // 64 bit address -- use lower 32 bits
- id =
- static_cast <PortableInterceptor::AdapterManagerId>
- (reinterpret_cast <ptrdiff_t> (this) & 0xFFFFFFFFu);
+ id = reinterpret_cast <ptrdiff_t> (this) & 0xFFFFFFFFu;
// @@ If we ever hit a platform where neither of the above cases are
// satisfied, we're up the creek!
@@ -126,7 +122,16 @@ TAO_POA_Manager::generate_manager_id (void) const
// // ORB, or perhaps specific to the process.
// id = ...GENERATE_ID_ATOMICALLY...; // Fallback
- return id;
+ char* buf = new char [25];
+ ACE_OS::sprintf (buf, "POAManager%d", id);
+ return buf;
}
+ACE_INLINE
+CORBA::PolicyList& TAO_POA_Manager::get_policies ()
+{
+ return this->policies_;
+}
+
+
TAO_END_VERSIONED_NAMESPACE_DECL
diff --git a/TAO/tao/PortableServer/POAManager.pidl b/TAO/tao/PortableServer/POAManager.pidl
index 6c9f72580be..c678575ac30 100644
--- a/TAO/tao/PortableServer/POAManager.pidl
+++ b/TAO/tao/PortableServer/POAManager.pidl
@@ -50,6 +50,8 @@ module PortableServer
raises(AdapterInactive);
State get_state ();
+
+ string get_id();
};
};
diff --git a/TAO/tao/PortableServer/POAManagerC.h b/TAO/tao/PortableServer/POAManagerC.h
index 9d767071182..7de37664de8 100644
--- a/TAO/tao/PortableServer/POAManagerC.h
+++ b/TAO/tao/PortableServer/POAManagerC.h
@@ -248,6 +248,13 @@ namespace PortableServer
CORBA::SystemException
)) = 0;
+ virtual char * get_id (
+ ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS
+ )
+ ACE_THROW_SPEC ((
+ ::CORBA::SystemException
+ )) = 0;
+
// TAO_IDL - Generated from
// be\be_visitor_interface/interface_ch.cpp:210
diff --git a/TAO/tao/PortableServer/POAManagerFactory.cpp b/TAO/tao/PortableServer/POAManagerFactory.cpp
index 25d6b0bdc28..2b86ca3a829 100644
--- a/TAO/tao/PortableServer/POAManagerFactory.cpp
+++ b/TAO/tao/PortableServer/POAManagerFactory.cpp
@@ -128,7 +128,7 @@ TAO_POAManager_Factory::find (
(*iterator)->get_id (ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_CHECK_RETURN (::PortableServer::POAManager::_nil());
- if (ACE_OS::strcmp (id, poamanagerid) == 0)
+ if (ACE_OS::strcmp (id, poamanagerid.in()) == 0)
{
poamanager = PortableServer::POAManager::_duplicate (*iterator);
break;
diff --git a/TAO/tao/PortableServer/PortableServer.h b/TAO/tao/PortableServer/PortableServer.h
index 4c27f187332..256499a7456 100644
--- a/TAO/tao/PortableServer/PortableServer.h
+++ b/TAO/tao/PortableServer/PortableServer.h
@@ -41,6 +41,7 @@ TAO_END_VERSIONED_NAMESPACE_DECL
#include "tao/PortableServer/PortableServerC.h"
#undef TAO_PORTABLESERVER_SAFE_INCLUDE
#include "tao/PortableServer/POAManagerC.h"
+#include "tao/PortableServer/POAManagerFactoryC.h"
#include "tao/PortableServer/PS_CurrentC.h"
#include "tao/PortableServer/PortableServer_Functions.h"
#include "tao/PortableServer/PortableServer_WFunctions.h"
diff --git a/TAO/tao/PortableServer/PortableServer.pidl b/TAO/tao/PortableServer/PortableServer.pidl
index 938c7edeaec..50000e9bcb8 100644
--- a/TAO/tao/PortableServer/PortableServer.pidl
+++ b/TAO/tao/PortableServer/PortableServer.pidl
@@ -74,9 +74,12 @@ module PortableServer
const CORBA::PolicyType SERVANT_RETENTION_POLICY_ID = 21;
const CORBA::PolicyType REQUEST_PROCESSING_POLICY_ID = 22;
- // Forward declaration
+ // Forward declaration POAManager interface.
local interface POAManager;
+ // Forward declaration POAManagerFactory interface.
+ local interface POAManagerFactory;
+
// Forward declaration AdapterActivator interface.
local interface AdapterActivator;
@@ -146,6 +149,7 @@ module PortableServer
readonly attribute POA the_parent;
readonly attribute POAList the_children;
readonly attribute POAManager the_POAManager;
+ readonly attribute POAManagerFactory the_POAManagerFactory;
attribute AdapterActivator the_activator;
// Servant Manager registration:
diff --git a/TAO/tao/PortableServer/PortableServerC.h b/TAO/tao/PortableServer/PortableServerC.h
index f84d9eeaa47..80c5bdc4fcc 100644
--- a/TAO/tao/PortableServer/PortableServerC.h
+++ b/TAO/tao/PortableServer/PortableServerC.h
@@ -197,6 +197,25 @@ namespace PortableServer
#endif /* end #if !defined */
+#if !defined (_PORTABLESERVER_POAMANAGERFACTORY__VAR_OUT_CH_)
+#define _PORTABLESERVER_POAMANAGERFACTORY__VAR_OUT_CH_
+
+ class POAManagerFactory;
+ typedef POAManagerFactory *POAManagerFactory_ptr;
+
+ typedef
+ TAO_Objref_Var_T<
+ POAManagerFactory
+ >
+ POAManagerFactory_var;
+
+ typedef
+ TAO_Objref_Out_T<
+ POAManagerFactory
+ >
+ POAManagerFactory_out;
+
+#endif /* end #if !defined */
// TAO_IDL - Generated from
// be\be_interface.cpp:598
@@ -978,6 +997,13 @@ namespace PortableServer
CORBA::SystemException
)) = 0;
+ virtual ::PortableServer::POAManagerFactory_ptr the_POAManagerFactory (
+ ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS
+ )
+ ACE_THROW_SPEC ((
+ CORBA::SystemException
+ )) = 0;
+
// TAO_IDL - Generated from
// be\be_visitor_operation/operation_ch.cpp:46
diff --git a/TAO/tao/PortableServer/Regular_POA.cpp b/TAO/tao/PortableServer/Regular_POA.cpp
index 7383d7bd9cf..08f4965c8e7 100644
--- a/TAO/tao/PortableServer/Regular_POA.cpp
+++ b/TAO/tao/PortableServer/Regular_POA.cpp
@@ -12,7 +12,7 @@ ACE_RCSID (PortableServer,
TAO_BEGIN_VERSIONED_NAMESPACE_DECL
TAO_Regular_POA::TAO_Regular_POA (const TAO_Root_POA::String &name,
- TAO_POA_Manager &poa_manager,
+ PortableServer::POAManager_ptr poa_manager,
const TAO_POA_Policy_Set &policies,
TAO_Root_POA *parent,
ACE_Lock &lock,
diff --git a/TAO/tao/PortableServer/Regular_POA.h b/TAO/tao/PortableServer/Regular_POA.h
index 7a6d3c2289c..eddd7bf3205 100644
--- a/TAO/tao/PortableServer/Regular_POA.h
+++ b/TAO/tao/PortableServer/Regular_POA.h
@@ -39,7 +39,7 @@ class TAO_PortableServer_Export TAO_Regular_POA
{
public:
TAO_Regular_POA (const String &name,
- TAO_POA_Manager &poa_manager,
+ PortableServer::POAManager_ptr poa_manager,
const TAO_POA_Policy_Set &policies,
TAO_Root_POA *parent,
ACE_Lock &lock,
diff --git a/TAO/tao/PortableServer/Root_POA.cpp b/TAO/tao/PortableServer/Root_POA.cpp
index 2ec60bb2e41..1ec42159b3c 100644
--- a/TAO/tao/PortableServer/Root_POA.cpp
+++ b/TAO/tao/PortableServer/Root_POA.cpp
@@ -19,6 +19,7 @@
#include "tao/PortableServer/AdapterActivatorC.h"
#include "tao/PortableServer/Non_Servant_Upcall.h"
#include "tao/PortableServer/POAManager.h"
+#include "tao/PortableServer/POAManagerFactory.h"
#include "tao/PortableServer/ServantManagerC.h"
#include "tao/PortableServer/poa_macros.h"
#include "tao/PortableServer/POA_Guard.h"
@@ -30,6 +31,7 @@
#include "tao/PortableServer/ServantRetentionStrategy.h"
#include "tao/PortableServer/ImplicitActivationStrategy.h"
#include "tao/PortableServer/ThreadStrategy.h"
+#include "tao/PortableServer/Acceptor_Filter_Factory.h"
#include "tao/StringSeqC.h"
#include "tao/PortableInterceptorC.h"
@@ -199,7 +201,7 @@ TAO_Root_POA::set_obj_ref_factory (
}
TAO_Root_POA::TAO_Root_POA (const TAO_Root_POA::String &name,
- TAO_POA_Manager &poa_manager,
+ PortableServer::POAManager_ptr poa_manager,
const TAO_POA_Policy_Set &policies,
TAO_Root_POA *parent,
ACE_Lock &lock,
@@ -208,7 +210,8 @@ TAO_Root_POA::TAO_Root_POA (const TAO_Root_POA::String &name,
TAO_Object_Adapter *object_adapter
ACE_ENV_ARG_DECL)
: name_ (name),
- poa_manager_ (poa_manager),
+ poa_manager_ (* (dynamic_cast <TAO_POA_Manager*> (poa_manager))),
+ poa_manager_factory_ (* (object_adapter->poa_manager_factory_)),
tagged_component_ (),
tagged_component_id_ (),
profile_id_array_ (0),
@@ -232,6 +235,7 @@ TAO_Root_POA::TAO_Root_POA (const TAO_Root_POA::String &name,
wait_for_completion_pending_ (0),
waiting_destruction_ (0),
servant_deactivation_condition_ (thread_lock),
+ filter_factory_ (0),
caller_key_to_object_ (0),
servant_for_key_to_object_ (0)
{
@@ -311,6 +315,10 @@ TAO_Root_POA::TAO_Root_POA (const TAO_Root_POA::String &name,
TAO_Root_POA::~TAO_Root_POA (void)
{
+ if (TAO_debug_level > 0)
+ {
+ ACE_DEBUG ((LM_DEBUG, "(%P|%t)~TAO_Root_POA : %s\n", this->the_name ()));
+ }
}
void
@@ -399,41 +407,53 @@ TAO_Root_POA::create_POA_i (const char *adapter_name,
// created and associated with the new POA. Otherwise, the specified
// POAManager object is associated with the new POA. The POAManager
// object can be obtained using the attribute name the_POAManager.
- TAO_POA_Manager* tao_poa_manager = 0;
- PortableServer::POAManager_var safe_poa_manager;
+
+ PortableServer::POAManager_var the_poa_manager;
+
if (CORBA::is_nil (poa_manager))
{
- ACE_NEW_THROW_EX (tao_poa_manager,
- TAO_POA_Manager (this->object_adapter ()),
- CORBA::NO_MEMORY ());
+ PortableServer::POA_var poa = PortableServer::POA::_duplicate (this);
+ PortableServer::POA_var root_poa;
+
+ // Find the RootPOA by traversing the POA hierarchy until the
+ // RootPOA is reached. The RootPOA has no parent.
+ while (!CORBA::is_nil (poa.in ()))
+ {
+ root_poa = poa;
+ poa = poa->the_parent (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK_RETURN (PortableServer::POA::_nil ());
+ }
+
+ // Get the POAManagerFactory instance owned by RootPOA.
+ PortableServer::POAManagerFactory_var tao_poa_manager_factory
+ = root_poa->the_POAManagerFactory ();
+
+ CORBA::PolicyList empty_policies;
+ // The POAManager name will be generated when the POAManager instance
+ // is created.
+ the_poa_manager
+ = tao_poa_manager_factory->create_POAManager (0,
+ empty_policies
+ ACE_ENV_ARG_PARAMETER);
ACE_CHECK_RETURN (PortableServer::POA::_nil ());
- safe_poa_manager = tao_poa_manager;
}
else
{
- // This is the POAManager that was passed in. Do not put it in the
- // safe_poa_manager as we do not want it to be destroyed in case
- // an exception is thrown during the create_POA_i() method.
- tao_poa_manager = dynamic_cast<TAO_POA_Manager *> (poa_manager);
+ the_poa_manager = PortableServer::POAManager::_duplicate (poa_manager);
}
PortableServer::POA_var poa = this->create_POA_i (adapter_name,
- *tao_poa_manager,
+ the_poa_manager.in (),
tao_policies
ACE_ENV_ARG_PARAMETER);
ACE_CHECK_RETURN (PortableServer::POA::_nil ());
- // Release the POA_Manager_var since we got here without error. The
- // TAO_Regular_POA object takes ownership of the POA_Manager object
- // (actually it shares the ownership with its peers).
- (void) safe_poa_manager._retn ();
-
return poa._retn ();
}
TAO_Root_POA *
TAO_Root_POA::new_POA (const String &name,
- TAO_POA_Manager &poa_manager,
+ PortableServer::POAManager_ptr poa_manager,
const TAO_POA_Policy_Set &policies,
TAO_Root_POA *parent,
ACE_Lock &lock,
@@ -462,7 +482,7 @@ TAO_Root_POA::new_POA (const String &name,
PortableServer::POA_ptr
TAO_Root_POA::create_POA_i (const TAO_Root_POA::String &adapter_name,
- TAO_POA_Manager &poa_manager,
+ PortableServer::POAManager_ptr poa_manager,
const TAO_POA_Policy_Set &policies
ACE_ENV_ARG_DECL)
ACE_THROW_SPEC ((CORBA::SystemException,
@@ -2252,13 +2272,22 @@ TAO_Root_POA::key_to_stub_i (const TAO::ObjectKey &key,
ACE_ENV_ARG_PARAMETER);
ACE_CHECK_RETURN (0);
- TAO_Default_Acceptor_Filter filter;
+ if (this->filter_factory_ == 0)
+ this->filter_factory_
+ = ACE_Dynamic_Service<TAO_Acceptor_Filter_Factory>::instance ("TAO_Acceptor_Filter_Factory");
+
+ TAO_Acceptor_Filter* filter =
+ this->filter_factory_->create_object (this->poa_manager_);
+
+ // Give ownership to the auto pointer.
+ auto_ptr<TAO_Acceptor_Filter> new_filter (filter);
+
TAO_Stub *data =
this->create_stub_object (
key,
type_id,
client_exposed_policies._retn (),
- &filter,
+ filter,
this->orb_core_.lane_resources ().acceptor_registry ()
ACE_ENV_ARG_PARAMETER);
ACE_CHECK_RETURN (0);
@@ -2486,7 +2515,8 @@ TAO_Root_POA::find_servant_priority (
TAO::ORT_Adapter_Factory *
TAO_Root_POA::ORT_adapter_factory (void)
{
- return ACE_Dynamic_Service<TAO::ORT_Adapter_Factory>::instance (
+ return ACE_Dynamic_Service<TAO::ORT_Adapter_Factory>::instance
+ (orb_core_.configuration (),
TAO_Root_POA::ort_adapter_factory_name ());
}
@@ -2532,8 +2562,8 @@ TAO_Root_POA::ORT_adapter_i (void)
ACE_CATCHANY
{
ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION,
- "Cannot initialize the "
- "object_reference_template_adapter");
+ "(%P|%t) Cannot initialize the "
+ "object_reference_template_adapter\n");
}
ACE_ENDTRY;
ACE_CHECK_RETURN (0);
@@ -2862,13 +2892,14 @@ TAO_Root_POA::the_POAManager (ACE_ENV_SINGLE_ARG_DECL_NOT_USED)
return PortableServer::POAManager::_duplicate (&this->poa_manager_);
}
-PortableInterceptor::AdapterManagerId
-TAO_Root_POA::get_manager_id (ACE_ENV_SINGLE_ARG_DECL)
+PortableServer::POAManagerFactory_ptr
+TAO_Root_POA::the_POAManagerFactory (ACE_ENV_SINGLE_ARG_DECL_NOT_USED)
ACE_THROW_SPEC ((CORBA::SystemException))
{
- return this->poa_manager_.get_manager_id (ACE_ENV_SINGLE_ARG_PARAMETER);
+ return PortableServer::POAManagerFactory::_duplicate (&this->poa_manager_factory_);
}
+
CORBA::ORB_ptr
TAO_Root_POA::_get_orb (ACE_ENV_SINGLE_ARG_DECL_NOT_USED)
{
diff --git a/TAO/tao/PortableServer/Root_POA.h b/TAO/tao/PortableServer/Root_POA.h
index 59d8e490c0c..eb6502c9ad1 100644
--- a/TAO/tao/PortableServer/Root_POA.h
+++ b/TAO/tao/PortableServer/Root_POA.h
@@ -68,9 +68,11 @@ TAO_BEGIN_VERSIONED_NAMESPACE_DECL
// Forward Declaration
class TAO_Acceptor_Filter;
+class TAO_Acceptor_Filter_Factory;
class TAO_Acceptor_Registry;
class TAO_IORInfo;
class TAO_Regular_POA;
+class TAO_POAManager_Factory;
namespace PortableInterceptor
{
@@ -208,11 +210,8 @@ public:
ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS)
ACE_THROW_SPEC ((CORBA::SystemException));
- /// @todo At the moment to POAManagerFactory is implemented and the
- /// POAManager has the get_id method this can be zapped, IORInfo can
- /// then just call get_id
- PortableInterceptor::AdapterManagerId get_manager_id (
- ACE_ENV_SINGLE_ARG_DECL)
+ PortableServer::POAManagerFactory_ptr the_POAManagerFactory (
+ ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS)
ACE_THROW_SPEC ((CORBA::SystemException));
/// This method returns the adapter_name as a sequence of strings of
@@ -359,7 +358,7 @@ public:
);
TAO_Root_POA (const String &name,
- TAO_POA_Manager &poa_manager,
+ PortableServer::POAManager_ptr poa_manager,
const TAO_POA_Policy_Set &policies,
TAO_Root_POA *parent,
ACE_Lock &lock,
@@ -605,7 +604,7 @@ protected:
/// Template method for creating new POA's of this type.
virtual TAO_Root_POA *new_POA (const String &name,
- TAO_POA_Manager &poa_manager,
+ PortableServer::POAManager_ptr poa_manager,
const TAO_POA_Policy_Set &policies,
TAO_Root_POA *parent,
ACE_Lock &lock,
@@ -625,7 +624,7 @@ protected:
PortableServer::POA::InvalidPolicy));
PortableServer::POA_ptr create_POA_i (const String &adapter_name,
- TAO_POA_Manager &poa_manager,
+ PortableServer::POAManager_ptr poa_manager,
const TAO_POA_Policy_Set &policies
ACE_ENV_ARG_DECL)
ACE_THROW_SPEC ((CORBA::SystemException,
@@ -879,8 +878,10 @@ protected:
String name_;
- /// The POA Manager belonging to this POA
+ /// Reference to the POAManager that this poa assicuates with.
TAO_POA_Manager &poa_manager_;
+ /// Reference to the POAManagerFactory that generate the POAManager.
+ TAO_POAManager_Factory& poa_manager_factory_;
IOP::TaggedComponentList tagged_component_;
@@ -942,6 +943,8 @@ protected:
TAO_SYNCH_CONDITION servant_deactivation_condition_;
+ TAO_Acceptor_Filter_Factory * filter_factory_;
+
public:
// @todo Temporarily for servant retention
CORBA::ULong caller_key_to_object_;
diff --git a/TAO/tao/PortableServer/Servant_Dispatcher.h b/TAO/tao/PortableServer/Servant_Dispatcher.h
index d2741f46546..10c062e52d1 100644
--- a/TAO/tao/PortableServer/Servant_Dispatcher.h
+++ b/TAO/tao/PortableServer/Servant_Dispatcher.h
@@ -36,6 +36,12 @@ class TAO_Root_POA;
class TAO_ORB_Core;
class TAO_ServerRequest;
+namespace PortableServer
+{
+ class POAManager;
+ typedef POAManager *POAManager_ptr;
+}
+
/**
* @class TAO_Servant_Dispatcher
*
@@ -70,7 +76,7 @@ public:
/// Factory method for creating new POA's.
virtual TAO_Root_POA *create_Root_POA (
const ACE_CString &name,
- TAO_POA_Manager &poa_manager,
+ PortableServer::POAManager_ptr poa_manager,
const TAO_POA_Policy_Set &policies,
ACE_Lock &lock,
TAO_SYNCH_MUTEX &thread_lock,
diff --git a/TAO/tao/Profile.cpp b/TAO/tao/Profile.cpp
index 9879ff26ef4..6807655a876 100644
--- a/TAO/tao/Profile.cpp
+++ b/TAO/tao/Profile.cpp
@@ -10,6 +10,7 @@
#include "tao/CDR.h"
#include "tao/SystemException.h"
#include "tao/PolicyC.h"
+#include "tao/Endpoint.h"
#include "ace/ACE.h"
#include "ace/OS_NS_string.h"
@@ -254,8 +255,8 @@ TAO_Profile::decode (TAO_InputCDR& cdr)
encap_len));
}
- // Decode any additional endpoints per profile. (At the present,
- // only RTCORBA takes advantage of this feature.)
+ // Decode any additional endpoints per profile. This is used by RTCORBA
+ // and by IIOP when TAG_ALTERNATE_IIOP_ADDRESS components are present.
if (this->decode_endpoints () == -1)
{
return -1;
@@ -728,6 +729,36 @@ TAO_Profile::is_equivalent (const TAO_Profile *other)
return result;
}
+CORBA::Boolean
+TAO_Profile::compare_key (const TAO_Profile *other) const
+{
+ return (this->ref_object_key_ == other->ref_object_key_) ||
+ ((this->ref_object_key_ != 0 &&
+ other->ref_object_key_ != 0 &&
+ this->ref_object_key_->object_key() ==
+ other->ref_object_key_->object_key()));
+}
+
+TAO_Endpoint *
+TAO_Profile::first_filtered_endpoint (void)
+{
+ return this->endpoint()->next_filtered(this->orb_core_,0);
+}
+
+TAO_Endpoint *
+TAO_Profile::next_filtered_endpoint (TAO_Endpoint *source)
+{
+ if (source == 0)
+ return this->first_filtered_endpoint();
+ return this->endpoint()->next_filtered(this->orb_core_,this->endpoint());
+}
+
+void
+TAO_Profile::add_generic_endpoint (TAO_Endpoint *)
+{
+ // noop for the base type
+}
+
TAO_Service_Callbacks::Profile_Equivalence
TAO_Profile::is_equivalent_hook (const TAO_Profile *other)
{
@@ -760,6 +791,12 @@ TAO_Profile::encode_alternate_endpoints(void)
return 0;
}
+void
+TAO_Profile::remove_generic_endpoint (TAO_Endpoint *)
+{
+ // default for virtual methods, thus a no-op
+}
+
//@@ TAO_PROFILE_SPL_COMMENT_HOOK_END
//@@ TAO_PROFILE_SPL_METHODS_ADD_HOOK
@@ -898,6 +935,8 @@ TAO_Unknown_Profile::create_profile_body (TAO_OutputCDR &) const
return;
}
+
+
// *************************************************************
// Operators for TAO_opaque encoding and decoding
// *************************************************************
diff --git a/TAO/tao/Profile.h b/TAO/tao/Profile.h
index d31e55b6257..700b257c6ec 100644
--- a/TAO/tao/Profile.h
+++ b/TAO/tao/Profile.h
@@ -206,7 +206,7 @@ public:
virtual int encode_alternate_endpoints (void);
/**
- * Return pointer to this profile's endpoint. If the profile
+ * Return a pointer to this profile's endpoint. If the profile
* contains more than one endpoint, i.e., a list, the method returns
* the head of the list.
*/
@@ -215,6 +215,33 @@ public:
/// Return how many endpoints this profile contains.
virtual CORBA::ULong endpoint_count (void) const = 0;
+ /**
+ * Return the first endpoint in the list that matches some filtering
+ * constraint, such as IPv6 compatibility for IIOP endpoints. This
+ * method is implemented in terms of TAO_Endpoint;:next_filtered().
+ */
+ TAO_Endpoint *first_filtered_endpoint (void);
+
+ /// Return the next filtered endpoint in the list after the one
+ /// passed in. This method is implemented in terms of
+ /// TAO_Endpoint;:next_filtered(). If the supplied source endpoint
+ /// is null, this returns the first filtered endpoint.
+ TAO_Endpoint *next_filtered_endpoint (TAO_Endpoint *source);
+
+ /**
+ * Remove the provided endpoint from the profile. Some
+ * subclasses of TAO_Profile already have a protocol-specific
+ * version of remove_endpoint, but this generic interface is
+ * required. The default implementation is a no-op. Protocol
+ * maintainers wishing to add support for the EndpointPolicy must
+ * implement remove_generic_endpoint to call their protocol-specific
+ * version of remove_endpoint
+ */
+ virtual void remove_generic_endpoint (TAO_Endpoint *ep);
+
+ /// Add a protocol-agnostic endpoint
+ virtual void add_generic_endpoint (TAO_Endpoint *ep);
+
/// Verify profile equivalance.
/**
* Two profiles are equivalent if their tag, object_key, version
@@ -227,6 +254,12 @@ public:
*/
CORBA::Boolean is_equivalent (const TAO_Profile* other_profile);
+ /**
+ * Compare the object key for this profile with that of
+ * another. This is weaker than is_equivalent
+ */
+ CORBA::Boolean compare_key (const TAO_Profile *other) const;
+
/// Return a hash value for this object.
virtual CORBA::ULong hash (CORBA::ULong max
ACE_ENV_ARG_DECL) = 0;
diff --git a/TAO/tao/Profile_Transport_Resolver.cpp b/TAO/tao/Profile_Transport_Resolver.cpp
index 123dc6c1425..8f87bb6f619 100644
--- a/TAO/tao/Profile_Transport_Resolver.cpp
+++ b/TAO/tao/Profile_Transport_Resolver.cpp
@@ -14,6 +14,7 @@
#include "tao/Transport_Connector.h"
#include "tao/Endpoint.h"
#include "tao/SystemException.h"
+#include "tao/Client_Strategy_Factory.h"
#include "ace/Countdown_Time.h"
@@ -119,7 +120,6 @@ namespace TAO
}
}
-
bool
Profile_Transport_Resolver::try_connect (
TAO_Transport_Descriptor_Interface *desc,
@@ -127,6 +127,28 @@ namespace TAO
ACE_ENV_ARG_DECL
)
{
+ return this->try_connect_i (desc,max_time_value,0 ACE_ENV_ARG_PARAMETER);
+ };
+
+ bool
+ Profile_Transport_Resolver::try_parallel_connect (
+ TAO_Transport_Descriptor_Interface *desc,
+ ACE_Time_Value *max_time_value
+ ACE_ENV_ARG_DECL
+ )
+ {
+ return this->try_connect_i (desc,max_time_value,1 ACE_ENV_ARG_PARAMETER);
+ };
+
+
+ bool
+ Profile_Transport_Resolver::try_connect_i (
+ TAO_Transport_Descriptor_Interface *desc,
+ ACE_Time_Value *max_time_value,
+ bool parallel
+ ACE_ENV_ARG_DECL
+ )
+ {
TAO_Connector_Registry *conn_reg =
this->stub_->orb_core ()->connector_registry (
ACE_ENV_SINGLE_ARG_PARAMETER);
@@ -147,28 +169,30 @@ namespace TAO
bool const is_conn_timeout =
this->get_connection_timeout (connection_timeout);
+ ACE_Time_Value *max_wait_time =
+ is_conn_timeout ? &connection_timeout : max_time_value;
- ACE_Time_Value *max_wait_time = 0;
-
- if (is_conn_timeout == true)
+ if (parallel)
{
- max_wait_time = &connection_timeout;
+ this->transport_ =
+ conn_reg->get_connector (desc->endpoint ()->tag ())->
+ parallel_connect (this,
+ desc,
+ max_wait_time
+ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK_RETURN (false);
}
else
{
- max_wait_time = max_time_value;
- }
-
-
// Obtain a connection.
this->transport_ =
- conn_reg->get_connector (desc->endpoint ()->tag ())->connect (
- this,
+ conn_reg->get_connector (desc->endpoint ()->tag ())->
+ connect (this,
desc,
max_wait_time
ACE_ENV_ARG_PARAMETER);
ACE_CHECK_RETURN (false);
-
+ }
// A timeout error occurred.
// If the user has set a roundtrip timeout policy, throw a timeout
// exception. Otherwise, just fall through and return false to
@@ -193,6 +217,20 @@ namespace TAO
}
bool
+ Profile_Transport_Resolver::use_parallel_connect (void) const
+ {
+ TAO_ORB_Core *oc = this->stub_->orb_core();
+ return (oc->orb_params()->use_parallel_connects()
+#if 0 // it was decided that even with blocked connects
+ // parallel connects could be useful, at least for cache
+ // processing.
+ oc->client_factory()->connect_strategy() !=
+ TAO_Client_Strategy_Factory::TAO_BLOCKED_CONNECT
+#endif /* 0 */
+ );
+ }
+
+ bool
Profile_Transport_Resolver::get_connection_timeout (
ACE_Time_Value &max_wait_time)
{
diff --git a/TAO/tao/Profile_Transport_Resolver.h b/TAO/tao/Profile_Transport_Resolver.h
index 5ec4889a76b..34cef016395 100644
--- a/TAO/tao/Profile_Transport_Resolver.h
+++ b/TAO/tao/Profile_Transport_Resolver.h
@@ -130,13 +130,27 @@ namespace TAO
/// released back to the cache.
void transport_released (void) const;
- /// This is a callback method used by the endpoint selectors, to
+ /// This is a callback method used by the endpoint selectors to
/// delegate the responsibility of reserving a transport from the
- /// connection cache for this invocation.
+ /// connection cache for this invocation. When the descriptor
+ /// contains more than one endpoint (as part of a linked list) and
+ /// the parallel flag is true then the connector will look for a
+ /// connection on any of the endpoints if it supports that
+ /// behavior, otherwise an ENOTSUP errno will be set and the
+ /// method will return false.
bool try_connect (TAO_Transport_Descriptor_Interface *desc,
ACE_Time_Value *val
ACE_ENV_ARG_DECL);
+ bool try_parallel_connect (TAO_Transport_Descriptor_Interface *desc,
+ ACE_Time_Value *val
+ ACE_ENV_ARG_DECL);
+
+ /// This method wraps a call to the orb core to see if parallel
+ /// connection attempts are even desired. This is controlled by
+ /// the -ORBUseParallelConnects 1|0 commandline option.
+ bool use_parallel_connect (void) const;
+
/// Initialize the inconsistent policy list that this object has
/// cached.
void init_inconsistent_policies (ACE_ENV_SINGLE_ARG_DECL)
@@ -152,6 +166,10 @@ namespace TAO
bool get_connection_timeout (ACE_Time_Value &max_wait_time);
private:
+ bool try_connect_i (TAO_Transport_Descriptor_Interface *desc,
+ ACE_Time_Value *val,
+ bool parallel
+ ACE_ENV_ARG_DECL);
/// Target object
mutable CORBA::Object *obj_;
diff --git a/TAO/tao/RTPortableServer/RT_POA.cpp b/TAO/tao/RTPortableServer/RT_POA.cpp
index 6d4baacc932..7cfc74d470f 100644
--- a/TAO/tao/RTPortableServer/RT_POA.cpp
+++ b/TAO/tao/RTPortableServer/RT_POA.cpp
@@ -38,7 +38,7 @@ ACE_RCSID (RTPortableServer,
TAO_BEGIN_VERSIONED_NAMESPACE_DECL
TAO_RT_POA::TAO_RT_POA (const TAO_Root_POA::String &name,
- TAO_POA_Manager &poa_manager,
+ PortableServer::POAManager_ptr poa_manager,
const TAO_POA_Policy_Set &policies,
TAO_Root_POA *parent,
ACE_Lock &lock,
@@ -71,7 +71,7 @@ TAO_RT_POA::~TAO_RT_POA (void)
TAO_Root_POA *
TAO_RT_POA::new_POA (const String &name,
- TAO_POA_Manager &poa_manager,
+ PortableServer::POAManager_ptr poa_manager,
const TAO_POA_Policy_Set &policies,
TAO_Root_POA *parent,
ACE_Lock &lock,
diff --git a/TAO/tao/RTPortableServer/RT_POA.h b/TAO/tao/RTPortableServer/RT_POA.h
index 5ae1c845166..2e255935f4b 100644
--- a/TAO/tao/RTPortableServer/RT_POA.h
+++ b/TAO/tao/RTPortableServer/RT_POA.h
@@ -256,7 +256,7 @@ public:
ACE_ENV_ARG_DECL);
TAO_RT_POA (const String &name,
- TAO_POA_Manager &poa_manager,
+ PortableServer::POAManager_ptr poa_manager,
const TAO_POA_Policy_Set &policies,
TAO_Root_POA *parent,
ACE_Lock &lock,
@@ -273,7 +273,7 @@ protected:
/// Template method for creating new POA's of this type.
virtual TAO_Root_POA *new_POA (const String &name,
- TAO_POA_Manager &poa_manager,
+ PortableServer::POAManager_ptr poa_manager,
const TAO_POA_Policy_Set &policies,
TAO_Root_POA *parent,
ACE_Lock &lock,
diff --git a/TAO/tao/RTPortableServer/RT_Servant_Dispatcher.cpp b/TAO/tao/RTPortableServer/RT_Servant_Dispatcher.cpp
index 9273b3d716c..fc64eb1e52c 100644
--- a/TAO/tao/RTPortableServer/RT_Servant_Dispatcher.cpp
+++ b/TAO/tao/RTPortableServer/RT_Servant_Dispatcher.cpp
@@ -372,7 +372,7 @@ TAO_RT_Servant_Dispatcher::post_invoke (TAO_Root_POA &poa,
TAO_Root_POA *
TAO_RT_Servant_Dispatcher::create_Root_POA (const ACE_CString &name,
- TAO_POA_Manager &poa_manager,
+ PortableServer::POAManager_ptr poa_manager,
const TAO_POA_Policy_Set &policies,
ACE_Lock &lock,
TAO_SYNCH_MUTEX &thread_lock,
diff --git a/TAO/tao/RTPortableServer/RT_Servant_Dispatcher.h b/TAO/tao/RTPortableServer/RT_Servant_Dispatcher.h
index 138523ff62a..2e3af3ce333 100644
--- a/TAO/tao/RTPortableServer/RT_Servant_Dispatcher.h
+++ b/TAO/tao/RTPortableServer/RT_Servant_Dispatcher.h
@@ -63,7 +63,7 @@ public:
/// Factory method for creating new POA's.
TAO_Root_POA *create_Root_POA (const ACE_CString &name,
- TAO_POA_Manager &poa_manager,
+ PortableServer::POAManager_ptr poa_manager,
const TAO_POA_Policy_Set &policies,
ACE_Lock &lock,
TAO_SYNCH_MUTEX &thread_lock,
diff --git a/TAO/tao/Reactive_Connect_Strategy.cpp b/TAO/tao/Reactive_Connect_Strategy.cpp
index 0883b3ee91c..17a9d2d642a 100644
--- a/TAO/tao/Reactive_Connect_Strategy.cpp
+++ b/TAO/tao/Reactive_Connect_Strategy.cpp
@@ -3,6 +3,7 @@
#include "tao/ORB_Core.h"
#include "tao/debug.h"
#include "tao/Transport.h"
+#include "tao/LF_Multi_Event.h"
#include "ace/Synch_Options.h"
@@ -41,9 +42,14 @@ TAO_Reactive_Connect_Strategy::synch_options (ACE_Time_Value *timeout,
}
int
-TAO_Reactive_Connect_Strategy::wait (TAO_Connection_Handler *ch,
- ACE_Time_Value *max_wait_time)
+TAO_Reactive_Connect_Strategy::wait_i (TAO_LF_Event *ev,
+ TAO_Transport *,
+ ACE_Time_Value * max_wait_time)
{
+ int result = 0;
+ if (ev == 0)
+ return -1;
+
if (TAO_debug_level > 2)
{
ACE_DEBUG ((LM_DEBUG,
@@ -51,12 +57,10 @@ TAO_Reactive_Connect_Strategy::wait (TAO_Connection_Handler *ch,
ACE_TEXT ("connection completion - wait ()\n")));
}
- int result = 0;
-
ACE_DECLARE_NEW_CORBA_ENV;
ACE_TRY
{
- while (ch->keep_waiting ())
+ while (ev->keep_waiting ())
{
result =
this->orb_core_->run (max_wait_time, 1 ACE_ENV_ARG_PARAMETER);
@@ -84,7 +88,7 @@ TAO_Reactive_Connect_Strategy::wait (TAO_Connection_Handler *ch,
ACE_ENDTRY;
// Set the result.
- if (ch->error_detected () && result != -1)
+ if (result != -1 && ev->error_detected ())
{
result = -1;
}
@@ -92,15 +96,4 @@ TAO_Reactive_Connect_Strategy::wait (TAO_Connection_Handler *ch,
return result;
}
-int
-TAO_Reactive_Connect_Strategy::wait (TAO_Transport *t,
- ACE_Time_Value *val)
-{
- if (t == 0)
- return -1;
-
- return this->wait (t->connection_handler (),
- val);
-}
-
TAO_END_VERSIONED_NAMESPACE_DECL
diff --git a/TAO/tao/Reactive_Connect_Strategy.h b/TAO/tao/Reactive_Connect_Strategy.h
index 305b5e9576e..694bbb49560 100644
--- a/TAO/tao/Reactive_Connect_Strategy.h
+++ b/TAO/tao/Reactive_Connect_Strategy.h
@@ -28,8 +28,6 @@ ACE_END_VERSIONED_NAMESPACE_DECL
TAO_BEGIN_VERSIONED_NAMESPACE_DECL
-class TAO_Connector;
-
/**
* @class TAO_Reactive_Connect_Strategy
*
@@ -53,12 +51,8 @@ public:
virtual void synch_options (ACE_Time_Value *val,
ACE_Synch_Options &opt);
- virtual int wait (TAO_Connection_Handler *ch,
- ACE_Time_Value *val);
-
-
- virtual int wait (TAO_Transport *t,
- ACE_Time_Value *val);
+protected:
+ virtual int wait_i (TAO_LF_Event *ch, TAO_Transport *, ACE_Time_Value *val);
};
diff --git a/TAO/tao/Strategies/OC_Endpoint_Selector_Loader.cpp b/TAO/tao/Strategies/OC_Endpoint_Selector_Loader.cpp
index c250cd76240..314ec97354b 100644
--- a/TAO/tao/Strategies/OC_Endpoint_Selector_Loader.cpp
+++ b/TAO/tao/Strategies/OC_Endpoint_Selector_Loader.cpp
@@ -1,3 +1,13 @@
+// =================================================================
+/**
+ * @file OC_Endpoint_Selector_Loader.cpp
+ *
+ * $Id$
+ *
+ * @author Phil Mesnier <mesnier_p@ociweb.com>
+ *
+ */
+// =================================================================
// $Id$
#include "tao/Strategies/OC_Endpoint_Selector_Loader.h"
@@ -9,11 +19,10 @@ ACE_RCSID (tao,
TAO_BEGIN_VERSIONED_NAMESPACE_DECL
-TAO_OC_Endpoint_Selector_Loader::TAO_OC_Endpoint_Selector_Loader (void)
+int
+TAO_OC_Endpoint_Selector_Loader::init (void)
{
-#if defined (TAO_AS_STATIC_LIBS)
- ACE_Service_Config::process_directive (ace_svc_desc_TAO_OC_Endpoint_Selector_Factory);
-#endif /* TAO_AS_STATIC_LIBS */
+ return ACE_Service_Config::process_directive (ace_svc_desc_TAO_OC_Endpoint_Selector_Factory);
}
TAO_END_VERSIONED_NAMESPACE_DECL
diff --git a/TAO/tao/Strategies/OC_Endpoint_Selector_Loader.h b/TAO/tao/Strategies/OC_Endpoint_Selector_Loader.h
index 5edc517027d..a19f9cf5b1e 100644
--- a/TAO/tao/Strategies/OC_Endpoint_Selector_Loader.h
+++ b/TAO/tao/Strategies/OC_Endpoint_Selector_Loader.h
@@ -49,11 +49,12 @@ class TAO_Optimized_Connection_Endpoint_Selector;
class TAO_Strategies_Export TAO_OC_Endpoint_Selector_Loader
{
public:
- TAO_OC_Endpoint_Selector_Loader (void);
+ static int init(void);
};
-
-static TAO_OC_Endpoint_Selector_Loader _TAO_oc_endpoint_selector_loader;
+static int
+TAO_Requires_OC_Endpoint_Selector_Loader =
+ TAO_OC_Endpoint_Selector_Loader::init ();
TAO_END_VERSIONED_NAMESPACE_DECL
diff --git a/TAO/tao/Strategies/Optimized_Connection_Endpoint_Selector.cpp b/TAO/tao/Strategies/Optimized_Connection_Endpoint_Selector.cpp
index dae584e8152..ad864ad1b9f 100644
--- a/TAO/tao/Strategies/Optimized_Connection_Endpoint_Selector.cpp
+++ b/TAO/tao/Strategies/Optimized_Connection_Endpoint_Selector.cpp
@@ -27,7 +27,7 @@ TAO_Optimized_Connection_Endpoint_Selector::TAO_Optimized_Connection_Endpoint_Se
if (TAO_debug_level)
{
ACE_DEBUG ((LM_DEBUG,
- ACE_TEXT ("TAO(%P|%t) Optimized Connection Enpoint Selector:")
+ ACE_TEXT ("TAO(%P|%t) Optimized Connection Enpoint Selector: ")
ACE_TEXT ("Initializing timeout hook tv = %d sec, %d usec\n"),
tv.sec(), tv.usec()));
}
diff --git a/TAO/tao/TAO_Internal.cpp b/TAO/tao/TAO_Internal.cpp
index d288fbf7e6c..297fa56eaa3 100644
--- a/TAO/tao/TAO_Internal.cpp
+++ b/TAO/tao/TAO_Internal.cpp
@@ -48,33 +48,71 @@ ACE_RCSID (tao,
namespace
{
+
+ /**
+ * Parses the supplied command-line arguments to extract any that
+ * apply to the process (globally)
+ *
+ * @brief Modifies the argc to reflect any arguments it has
+ * "consumed"
+ */
+ int
+ parse_global_args_i (int &argc,
+ char **argv,
+ CORBA::StringSeq &svc_config_argv);
+
/**
- * Initialize the ACE Service Configurator. This is a one-shot
- * method, i.e., it can be called multiple times but it will only do
- * its work once. It does, however, track the number of times it's
- * called (see @c open_services()). It is fully thread-safe.
+ * Initialize the ACE Service Configurator with the process-global
+ * services (available to any ORB).
*
* @return @c 0 if successful, @c -1 with @c errno set if failure.
*
* @note You can provide your program a set of default `svc.conf'
* entries by setting @a ignore_default_svc_conf_file to
* non-zero and use @c default_svc_conf_entries() before
- * calling @c open_services(). In addition, you can @a
+ * calling @c open_global_services(). In addition, you can @a
* skip_service_config_open altogether, which used to be
* important when the ORB is linked in via the
- * ACE_Service_Configurator, since the
- * ACE_Service_Configurator was non-reentrant. However, the
- * ACE_Service_Configurator is now reentrant meaning that it
- * is really no longer necessary to do so.
+ * ACE_Service_Config, since the ACE_Service_Config was
+ * non-reentrant. However, the ACE_Service_Config is now
+ * reentrant meaning that it is really no longer necessary to
+ * do so.
+ */
+ void register_global_services_i (ACE_Service_Gestalt * pcfg);
+ int open_global_services_i (ACE_Service_Gestalt* theone,
+ int & argc,
+ char ** argv,
+ bool skip_service_config_open);
+
+ /**
+ * Parses the supplied command-line arguments to extract any
+ * instance-specific ones.
+ *
+ * @brief Modifies the argc to reflect any arguments it has
+ * "consumed"
+ */
+ int
+ parse_private_args_i (int &argc,
+ char **argv,
+ CORBA::StringSeq & svc_config_argv,
+ bool & skip_service_config_open);
+
+ /**
+ * Initialize ORB-local (private) ACE Service Configurator
+ * repository.
+ *
+ * @return @c 0 if successful, @c -1 with @c errno set if failure.
+ *
*/
- int open_services_i (int & argc,
- char ** argv,
- bool ignore_default_svc_conf_file = false,
- bool skip_service_config_open = false);
+ int open_private_services_i (ACE_Service_Gestalt* pcfg,
+ int & argc,
+ char ** argv,
+ bool skip_service_config_open = false);
- /// Number of times open_services() has been called. Incremented by
- /// open_services(), and decremented by close_services().
/**
+ * Number of times open_services() has been called. Incremented by
+ * open_global_services_i(), and decremented by close_services().
+ *
* @note In/decrement operations are atomic.
*/
long service_open_count = 0;
@@ -90,7 +128,9 @@ namespace
TAO_BEGIN_VERSIONED_NAMESPACE_DECL
int
-TAO::ORB::open_services (int &argc, ACE_TCHAR **argv)
+TAO::ORB::open_services (ACE_Service_Gestalt* pcfg,
+ int &argc,
+ ACE_TCHAR **argv)
{
// Construct an argument vector specific to the Service
// Configurator.
@@ -105,7 +145,6 @@ TAO::ORB::open_services (int &argc, ACE_TCHAR **argv)
argv0 = ACE_TEXT_TO_CHAR_OUT (argv[0]);
}
- CORBA::ULong len = 0;
svc_config_argv.length (1);
svc_config_argv[0] = argv0.c_str ();
@@ -117,157 +156,66 @@ TAO::ORB::open_services (int &argc, ACE_TCHAR **argv)
// -Ossama
bool skip_service_config_open = false;
-#if defined (TAO_DEBUG) && !defined (ACE_HAS_WINCE)
- // Make it a little easier to debug programs using this code.
+ // Extract any ORB options from the argument vector.
+ if (parse_private_args_i (argc,
+ argv,
+ svc_config_argv,
+ skip_service_config_open) == -1)
+ return -1;
+ else
{
- TAO_debug_level = ACE_Env_Value<u_int> ("TAO_ORB_DEBUG", 0);
+ ACE_MT (ACE_GUARD_RETURN (TAO_SYNCH_RECURSIVE_MUTEX,
+ guard,
+ *ACE_Static_Object_Lock::instance (),
+ -1));
- char * const value = ACE_OS::getenv ("TAO_ORB_DEBUG");
+ service_open_count++;
- if (value != 0)
+ ACE_Service_Gestalt * theone = ACE_Service_Config::global ();
+ if (pcfg != theone)
+ {
+ int status = open_global_services_i (theone, argc, argv, skip_service_config_open);
+ if (status == -1)
{
- TAO_debug_level = ACE_OS::atoi (value);
-
- if (TAO_debug_level <= 0)
- {
- TAO_debug_level = 1;
- }
-
- ACE_DEBUG ((LM_DEBUG,
- ACE_TEXT ("TAO_debug_level == %d\n"),
- TAO_debug_level));
+ if (TAO_debug_level > 0)
+ ACE_ERROR_RETURN ((LM_DEBUG,
+ ACE_LIB_TEXT ("TAO (%P|%t) Failed to ")
+ ACE_LIB_TEXT("open process-wide service configuration\n")),
+ -1);
+ return -1;
}
- }
-#endif /* TAO_DEBUG && !ACE_HAS_WINCE */
-
- // Extract the Service Configurator ORB options from the argument
- // vector.
- ACE_Arg_Shifter arg_shifter (argc, argv);
+ }
- while (arg_shifter.is_anything_left ())
+ int svc_config_argc = svc_config_argv.length ();
+ int status =
+ open_private_services_i (pcfg,
+ svc_config_argc,
+ svc_config_argv.get_buffer (),
+ skip_service_config_open);
+ if (status == -1)
{
- const ACE_TCHAR *current_arg = 0;
-
- // Start with the parameterless flags.
- if (arg_shifter.cur_arg_strncasecmp
- (ACE_TEXT ("-ORBSkipServiceConfigOpen")) == 0)
- {
- skip_service_config_open = true;
-
- arg_shifter.consume_arg ();
- }
- else if (arg_shifter.cur_arg_strncasecmp (ACE_TEXT ("-ORBDebug")) == 0)
- {
- // later, replace all of these
- // warning this turns on a daemon
- ACE::debug (1);
- arg_shifter.consume_arg ();
- }
- else if (0 != (current_arg = arg_shifter.get_the_parameter
- (ACE_TEXT ("-ORBDebugLevel"))))
- {
- TAO_debug_level =
- ACE_OS::atoi (current_arg);
-
- arg_shifter.consume_arg ();
- }
- else if (arg_shifter.cur_arg_strncasecmp (ACE_TEXT ("-ORBDaemon")) == 0)
- {
- // Be a daemon
-
- len = svc_config_argv.length ();
- svc_config_argv.length (len + 1);
-
- svc_config_argv[len] = CORBA::string_dup ("-b");
-
- arg_shifter.consume_arg ();
- }
- // Continue with flags that accept parameters.
- else if (0 != (current_arg = arg_shifter.get_the_parameter (ACE_TEXT ("-ORBSvcConfDirective"))))
- {
- len = svc_config_argv.length ();
- svc_config_argv.length (len + 2); // 2 arguments to add
-
- // This is used to pass arguments to the Service
- // Configurator using the "command line" to provide
- // configuration information rather than using a svc.conf
- // file. Pass the "-S" to the service configurator.
- svc_config_argv[len] = CORBA::string_dup ("-S");
- svc_config_argv[len + 1] = CORBA::string_dup (current_arg);
-
- arg_shifter.consume_arg ();
- }
- else if (0 != (current_arg = arg_shifter.get_the_parameter (ACE_TEXT ("-ORBSvcConf"))))
- {
- // Specify the name of the svc.conf file to be used.
-
- // Proceeds only if the configuration file exists.
- FILE * const conf_file = ACE_OS::fopen (current_arg, ACE_TEXT ("r"));
-
- if (conf_file == 0)
- {
- // Assigning EINVAL to errno to make an exception
- // thrown. calling code does not throw an exception if
- // the errno is set to ENOENT for some reason.
- errno = EINVAL;
-
- ACE_ERROR_RETURN ((LM_ERROR,
- ACE_TEXT ("TAO (%P|%t) Service Configurator ")
- ACE_TEXT ("unable to open file %s\n"),
- current_arg),
- -1);
-
- }
- else
- {
- ACE_OS::fclose (conf_file);
- }
-
- len = svc_config_argv.length ();
- svc_config_argv.length (len + 2); // 2 arguments to add
-
- svc_config_argv[len] = CORBA::string_dup ("-f");
- svc_config_argv[len + 1] = CORBA::string_dup (current_arg);
-
- arg_shifter.consume_arg();
- }
- else if (0 != (current_arg = arg_shifter.get_the_parameter (ACE_TEXT ("-ORBServiceConfigLoggerKey"))))
- {
- len = svc_config_argv.length ();
- svc_config_argv.length (len + 2); // 2 arguments to add
-
- svc_config_argv[len] = CORBA::string_dup ("-k");
- svc_config_argv[len + 1] = CORBA::string_dup (current_arg);
-
- arg_shifter.consume_arg ();
- }
- // Can't interpret this argument. Move on to the next argument.
- else
- {
- // Any arguments that don't match are ignored so that the
- // caller can still use them.
- arg_shifter.ignore_arg ();
- }
+ if (TAO_debug_level > 0)
+ ACE_ERROR_RETURN ((LM_DEBUG,
+ ACE_TEXT ("TAO (%P|%t) Failed to ")
+ ACE_TEXT("open orb service configuration\n")),
+ -1);
+ return -1;
}
- int svc_config_argc = svc_config_argv.length ();
- return open_services_i (svc_config_argc,
- svc_config_argv.get_buffer (),
- 0, // @@ What about this argument?
- skip_service_config_open);
+ return 0;
+ }
}
int
-TAO::ORB::close_services (void)
+TAO::ORB::close_services (ACE_Service_Gestalt* pcfg)
{
ACE_MT (ACE_GUARD_RETURN (TAO_SYNCH_RECURSIVE_MUTEX,
guard,
*ACE_Static_Object_Lock::instance (),
-1));
+ service_open_count--;
- --service_open_count;
-
- return 0;
+ return pcfg->close ();
}
void
@@ -285,32 +233,78 @@ TAO_END_VERSIONED_NAMESPACE_DECL
// -----------------------------------------------------
namespace
{
+
+ ///
+
int
- open_services_i (int & argc,
- char ** argv,
- bool ignore_default_svc_conf_file,
- bool skip_service_config_open)
+ open_global_services_i (ACE_Service_Gestalt * theone,
+ int & argc,
+ ACE_TCHAR ** argv,
+ bool skip_service_config_open)
+ {
+ // Construct an argument vector specific to the process-wide
+ // (global) Service Configurator instance.
+ CORBA::StringSeq global_svc_config_argv;
+
+ // Be certain to copy the program name so that service configurator
+ // has something to skip!
+ ACE_CString argv0 ("");
+
+ if (argc > 0 && argv != 0)
+ {
+ argv0 = ACE_TEXT_ALWAYS_CHAR (argv[0]);
+ }
+
+ global_svc_config_argv.length (1);
+ global_svc_config_argv[0] = argv0.c_str ();
+
+ if (parse_global_args_i (argc, argv, global_svc_config_argv) == -1)
+ return -1;
+
+ ACE_Service_Config_Guard guard (theone);
+ register_global_services_i (theone);
+
+ int global_svc_config_argc = global_svc_config_argv.length ();
+ if (!skip_service_config_open)
+ {
+ return theone->open (global_svc_config_argc,
+ global_svc_config_argv.get_buffer ());
+ }
+ return 0;
+ }
+
+
+ ///
+
+ int
+ open_private_services_i (ACE_Service_Gestalt * pcfg,
+ int & argc,
+ ACE_TCHAR ** argv,
+ bool skip_service_config_open)
{
#if defined (TAO_PLATFORM_SVC_CONF_FILE_NOTSUP)
- ignore_default_svc_conf_file = true;
+ bool ignore_default_svc_conf_file = true;
+#else
+ bool ignore_default_svc_conf_file = false;
#endif /* TAO_PLATFORM_SVC_CONF_FILE_NOTSUP */
- {
- ACE_MT (ACE_GUARD_RETURN (TAO_SYNCH_RECURSIVE_MUTEX,
- guard,
- *ACE_Static_Object_Lock::instance (),
- -1));
+ if (skip_service_config_open)
+ return 0;
- if (service_open_count++ != 0) // Atomic increment
- return 0;
- }
+ return pcfg->open (argc,
+ argv,
+ ACE_DEFAULT_LOGGER_KEY,
+ 0, // Don't ignore static services.
+ ignore_default_svc_conf_file);
+ }
- ACE_Service_Config::process_directive (
- ace_svc_desc_TAO_Default_Resource_Factory);
- ACE_Service_Config::process_directive (
- ace_svc_desc_TAO_Default_Client_Strategy_Factory);
- ACE_Service_Config::process_directive (
- ace_svc_desc_TAO_Default_Server_Strategy_Factory);
+ /// @brief registers all process-wide (global) services, available to all ORBs
+ void
+ register_global_services_i (ACE_Service_Gestalt * pcfg)
+ {
+ pcfg->process_directive (ace_svc_desc_TAO_Default_Resource_Factory);
+ pcfg->process_directive (ace_svc_desc_TAO_Default_Client_Strategy_Factory);
+ pcfg->process_directive (ace_svc_desc_TAO_Default_Server_Strategy_Factory);
// Configure the IIOP factory. You do *NOT* need modify this
// code to add your own protocol, instead simply add the
@@ -321,125 +315,273 @@ namespace
//
// where PN is the name of your protocol and LIB is the base
// name of the shared library that implements the protocol.
+
#if defined (TAO_HAS_IIOP) && (TAO_HAS_IIOP != 0)
- ACE_Service_Config::process_directive (
- ace_svc_desc_TAO_IIOP_Protocol_Factory);
+ pcfg->process_directive (ace_svc_desc_TAO_IIOP_Protocol_Factory);
#endif /* TAO_HAS_IIOP && TAO_HAS_IIOP != 0 */
// add descriptor to list of static objects.
- ACE_Service_Config::process_directive (
- ace_svc_desc_TAO_MCAST_Parser);
- ACE_Service_Config::process_directive (
- ace_svc_desc_TAO_CORBANAME_Parser);
- ACE_Service_Config::process_directive (
- ace_svc_desc_TAO_CORBALOC_Parser);
- ACE_Service_Config::process_directive (
- ace_svc_desc_TAO_FILE_Parser);
- ACE_Service_Config::process_directive (
- ace_svc_desc_TAO_DLL_Parser);
- ACE_Service_Config::process_directive (
- ace_svc_desc_TAO_Default_Stub_Factory);
- ACE_Service_Config::process_directive (
- ace_svc_desc_TAO_Default_Endpoint_Selector_Factory);
- ACE_Service_Config::process_directive (
- ace_svc_desc_TAO_Default_Protocols_Hooks);
- ACE_Service_Config::process_directive (
- ace_svc_desc_TAO_Default_Thread_Lane_Resources_Manager_Factory);
- ACE_Service_Config::process_directive (
- ace_svc_desc_TAO_Default_Collocation_Resolver);
-
- int result = 0;
-
- if (!skip_service_config_open)
- {
- // Copy command line parameter not to use original.
- ACE_Argv_Type_Converter command_line (argc, argv);
-
- result =
- ACE_Service_Config::open (command_line.get_argc(),
- command_line.get_TCHAR_argv(),
- ACE_DEFAULT_LOGGER_KEY,
- 0, // Don't ignore static services.
- ignore_default_svc_conf_file);
- }
+ pcfg->process_directive (ace_svc_desc_TAO_MCAST_Parser);
+ pcfg->process_directive (ace_svc_desc_TAO_CORBANAME_Parser);
+ pcfg->process_directive (ace_svc_desc_TAO_CORBALOC_Parser);
+ pcfg->process_directive (ace_svc_desc_TAO_FILE_Parser);
+ pcfg->process_directive (ace_svc_desc_TAO_DLL_Parser);
+ pcfg->process_directive (ace_svc_desc_TAO_Default_Stub_Factory);
+ pcfg->process_directive (ace_svc_desc_TAO_Default_Endpoint_Selector_Factory);
+ pcfg->process_directive (ace_svc_desc_TAO_Default_Protocols_Hooks);
+ pcfg->process_directive (ace_svc_desc_TAO_Default_Thread_Lane_Resources_Manager_Factory);
+ pcfg->process_directive (ace_svc_desc_TAO_Default_Collocation_Resolver);
+
+ // @@ What the heck do these things do and do we need to avoid
+ // calling them if we're not invoking the svc.conf file?
+ // @@ They are needed for platforms that have no file system,
+ // like VxWorks.
+ if (resource_factory_args != 0)
+ {
+ pcfg->process_directive
+ (ACE_TEXT_CHAR_TO_TCHAR (resource_factory_args));
+ }
+
+ if (client_strategy_factory_args != 0)
+ {
+ pcfg->process_directive
+ (ACE_TEXT_CHAR_TO_TCHAR (client_strategy_factory_args));
+ }
+
+ if (server_strategy_factory_args != 0)
+ {
+ pcfg->process_directive
+ (ACE_TEXT_CHAR_TO_TCHAR (server_strategy_factory_args));
+ }
// If available, allow the Adapter Factory to setup.
ACE_Service_Object *adapter_factory =
- ACE_Dynamic_Service<TAO_Adapter_Factory>::instance (
- TAO_ORB_Core::poa_factory_name ().c_str());
+ ACE_Dynamic_Service<ACE_Service_Object>::instance
+ (pcfg, TAO_ORB_Core::poa_factory_name ().c_str());
if (adapter_factory != 0)
- {
- adapter_factory->init (0, 0);
- }
+ {
+ adapter_factory->init (0, 0);
+ }
ACE_Service_Object * const pi_server_loader =
- ACE_Dynamic_Service<ACE_Service_Object>::instance ("PI_Server_Loader");
+ ACE_Dynamic_Service<ACE_Service_Object>::instance (pcfg, "PI_Server_Loader");
if (pi_server_loader != 0)
- {
- pi_server_loader->init (0, 0);
- }
+ {
+ pi_server_loader->init (0, 0);
+ }
ACE_Service_Object * const bidir_loader =
- ACE_Dynamic_Service<ACE_Service_Object>::instance ("BiDirGIOP_Loader");
+ ACE_Dynamic_Service<ACE_Service_Object>::instance (pcfg, "BiDirGIOP_Loader");
if (bidir_loader != 0)
- {
- bidir_loader->init (0, 0);
- }
+ {
+ bidir_loader->init (0, 0);
+ }
ACE_Service_Object * const messaging_loader =
- ACE_Dynamic_Service<ACE_Service_Object>::instance ("Messaging_Loader");
+ ACE_Dynamic_Service<ACE_Service_Object>::instance (pcfg, "Messaging_Loader");
if (messaging_loader != 0)
- {
- messaging_loader->init (0, 0);
- }
+ {
+ messaging_loader->init (0, 0);
+ }
// Handle RTCORBA library special case. Since RTCORBA needs
// its init method call to register several hooks, call it
// here if it hasn't already been called.
ACE_Service_Object * const rt_loader =
- ACE_Dynamic_Service<ACE_Service_Object>::instance ("RT_ORB_Loader");
+ ACE_Dynamic_Service<ACE_Service_Object>::instance (pcfg, "RT_ORB_Loader");
if (rt_loader != 0)
- {
- rt_loader->init (0, 0);
- }
+ {
+ rt_loader->init (0, 0);
+ }
ACE_Service_Object * const rtscheduler_loader =
- ACE_Dynamic_Service<ACE_Service_Object>::instance ("RTScheduler_Loader");
+ ACE_Dynamic_Service<ACE_Service_Object>::instance (pcfg, "RTScheduler_Loader");
if (rtscheduler_loader != 0)
+ {
+ rtscheduler_loader->init (0, 0);
+ }
+
+ } /* register_additional_services_i */
+
+
+ int
+ parse_private_args_i (int &argc,
+ char **argv,
+ CORBA::StringSeq &svc_config_argv,
+ bool & skip_service_config_open)
+ {
+ // Extract the Service Configurator ORB options from the argument
+ // vector.
+ ACE_Arg_Shifter arg_shifter (argc, argv);
+
+ CORBA::ULong len = 0;
+ while (arg_shifter.is_anything_left ())
+ {
+ const ACE_TCHAR *current_arg = 0;
+
+ // Start with the parameterless flags.
+ if (arg_shifter.cur_arg_strncasecmp
+ (ACE_TEXT ("-ORBSkipServiceConfigOpen")) == 0)
{
- rtscheduler_loader->init (0, 0);
+ skip_service_config_open = true;
+
+ arg_shifter.consume_arg ();
}
+ // Continue with flags that accept parameters.
+ else if (0 != (current_arg = arg_shifter.get_the_parameter (ACE_TEXT ("-ORBSvcConfDirective"))))
+ {
+ len = svc_config_argv.length ();
+ svc_config_argv.length (len + 2); // 2 arguments to add
- // @@ What the heck do these things do and do we need to avoid
- // calling them if we're not invoking the svc.conf file?
- // @@ They are needed for platforms that have no file system,
- // like VxWorks.
- if (resource_factory_args != 0)
+ // This is used to pass arguments to the Service
+ // Configurator using the "command line" to provide
+ // configuration information rather than using a svc.conf
+ // file. Pass the "-S" to the service configurator.
+ svc_config_argv[len] = CORBA::string_dup ("-S");
+ svc_config_argv[len + 1] = CORBA::string_dup (ACE_TEXT_ALWAYS_CHAR(current_arg));
+
+ arg_shifter.consume_arg ();
+ }
+ else if (0 != (current_arg = arg_shifter.get_the_parameter (ACE_TEXT ("-ORBSvcConf"))))
+ {
+ // Specify the name of the svc.conf file to be used.
+
+ // Proceeds only if the configuration file exists.
+ FILE * const conf_file = ACE_OS::fopen (current_arg, ACE_TEXT ("r"));
+
+ if (conf_file == 0)
+ {
+ // Assigning EINVAL to errno to make an exception
+ // thrown. calling code does not throw an exception if
+ // the errno is set to ENOENT for some reason.
+ errno = EINVAL;
+
+ ACE_ERROR_RETURN ((LM_ERROR,
+ ACE_TEXT ("TAO (%P|%t) Service Configurator ")
+ ACE_TEXT ("unable to open file %s\n"),
+ current_arg),
+ -1);
+
+ }
+ else
+ {
+ ACE_OS::fclose (conf_file);
+ }
+
+ len = svc_config_argv.length ();
+ svc_config_argv.length (len + 2); // 2 arguments to add
+
+ svc_config_argv[len] = CORBA::string_dup ("-f");
+ svc_config_argv[len + 1] = CORBA::string_dup (ACE_TEXT_ALWAYS_CHAR(current_arg));
+
+ arg_shifter.consume_arg();
+ }
+ else if (0 != (current_arg = arg_shifter.get_the_parameter (ACE_TEXT ("-ORBServiceConfigLoggerKey"))))
+ {
+ len = svc_config_argv.length ();
+ svc_config_argv.length (len + 2); // 2 arguments to add
+
+ svc_config_argv[len] = CORBA::string_dup ("-k");
+ svc_config_argv[len + 1] = CORBA::string_dup (ACE_TEXT_ALWAYS_CHAR(current_arg));
+
+ arg_shifter.consume_arg ();
+ }
+ // Can't interpret this argument. Move on to the next argument.
+ else
{
- ACE_Service_Config::process_directive (
- ACE_TEXT_TO_TCHAR_IN (resource_factory_args));
+ // Any arguments that don't match are ignored so that the
+ // caller can still use them.
+ arg_shifter.ignore_arg ();
}
+ }
- if (client_strategy_factory_args != 0)
+ return 0;
+
+ } /* parse_private_args_i */
+
+ int
+ parse_global_args_i (int &argc,
+ char **argv,
+ CORBA::StringSeq &svc_config_argv)
+ {
+
+#if defined (TAO_DEBUG) && !defined (ACE_HAS_WINCE)
+ // Make it a little easier to debug programs using this code.
+ {
+ TAO_debug_level = ACE_Env_Value<u_int> ("TAO_ORB_DEBUG", 0);
+
+ char * const value = ACE_OS::getenv ("TAO_ORB_DEBUG");
+
+ if (value != 0)
{
- ACE_Service_Config::process_directive (
- ACE_TEXT_TO_TCHAR_IN (client_strategy_factory_args));
+ TAO_debug_level = ACE_OS::atoi (value);
+
+ if (TAO_debug_level <= 0)
+ {
+ TAO_debug_level = 1;
+ }
+
+ ACE_DEBUG ((LM_DEBUG,
+ ACE_TEXT ("TAO_debug_level == %d\n"),
+ TAO_debug_level));
}
+ }
+#endif /* TAO_DEBUG && !ACE_HAS_WINCE */
- if (server_strategy_factory_args != 0)
+
+ // Extract the Service Configurator ORB options from the argument
+ // vector.
+ ACE_Arg_Shifter arg_shifter (argc, argv);
+ CORBA::ULong len = 0;
+
+ while (arg_shifter.is_anything_left ())
+ {
+ const ACE_TCHAR *current_arg = 0;
+ if (arg_shifter.cur_arg_strncasecmp (ACE_TEXT ("-ORBDebug")) == 0)
{
- ACE_Service_Config::process_directive (
- ACE_TEXT_TO_TCHAR_IN (server_strategy_factory_args));
+ // later, replace all of these
+ // warning this turns on a daemon
+ ACE::debug (1);
+ arg_shifter.consume_arg ();
}
+ else if (0 != (current_arg = arg_shifter.get_the_parameter
+ (ACE_TEXT ("-ORBDebugLevel"))))
+ {
+ TAO_debug_level =
+ ACE_OS::atoi (current_arg);
- return result;
- }
-}
+ arg_shifter.consume_arg ();
+ }
+ else if (arg_shifter.cur_arg_strncasecmp (ACE_TEXT ("-ORBDaemon")) == 0)
+ {
+ // Be a daemon
+
+ len = svc_config_argv.length ();
+ svc_config_argv.length (len + 1);
+
+ svc_config_argv[len] = CORBA::string_dup ("-b");
+ arg_shifter.consume_arg ();
+ }
+ // Can't interpret this argument. Move on to the next argument.
+ else
+ {
+ // Any arguments that don't match are ignored so that the
+ // caller can still use them.
+ arg_shifter.ignore_arg ();
+ }
+ }
+
+ return 0;
+
+ } /* parse_global_args_i */
+
+
+}
// TAO_BEGIN_VERSIONED_NAMESPACE_DECL -- ended prior to anonymous namespace.
diff --git a/TAO/tao/TAO_Internal.h b/TAO/tao/TAO_Internal.h
index e528980821c..3a40ef07bd6 100644
--- a/TAO/tao/TAO_Internal.h
+++ b/TAO/tao/TAO_Internal.h
@@ -24,6 +24,11 @@
# pragma once
#endif /* ACE_LACKS_PRAGMA_ONCE */
+ACE_BEGIN_VERSIONED_NAMESPACE_DECL
+/// Forward declaration
+class ACE_Service_Gestalt;
+ACE_END_VERSIONED_NAMESPACE_DECL
+
TAO_BEGIN_VERSIONED_NAMESPACE_DECL
namespace TAO
@@ -38,13 +43,14 @@ namespace TAO
*/
namespace ORB
{
- /// Extract ACE Service Configurator arguments from the given
- /// argument vector, and initialize the ACE Service Configurator.
/**
+ * Extract ACE Service Configurator arguments from the given
+ * argument vector, and initialize the ACE Service Configurator.
+ *
* @note This method should be called before the ORB Core is
* initialized, and before any ORBInitializers are invoked.
*/
- int open_services (int& argc, ACE_TCHAR** argv);
+ int open_services (ACE_Service_Gestalt* cfg, int& argc, ACE_TCHAR** argv);
/**
* The complement to @c open_services(), this will perform
@@ -52,13 +58,16 @@ namespace TAO
* should be called as many times as @c open_services(), and will
* only actually close things down on the last call. It is fully
* thread-safe.
+ *
* @return @c 0 if successful, @c -1 with @c errno set if
* failure.
*/
- int close_services (void);
+ int close_services (ACE_Service_Gestalt* pcfg);
- /// Set default @c `svc.conf' content. This call has no effect if
- /// This function must be called before first ORB initialization.
+ /**
+ * Set default @c `svc.conf' content.
+ * This function must be called before first ORB initialization.
+ */
void default_svc_conf_entries (char const * rf_args,
char const * ssf_args,
char const * csf_args);
diff --git a/TAO/tao/Transport.cpp b/TAO/tao/Transport.cpp
index 1d067684b6c..3c130b10691 100644
--- a/TAO/tao/Transport.cpp
+++ b/TAO/tao/Transport.cpp
@@ -1224,6 +1224,7 @@ TAO_Transport::send_asynchronous_message_i (TAO_Stub *stub,
if (this->queue_message_i(message_block) == -1)
{
+ if (TAO_debug_level > 0)
ACE_DEBUG ((LM_DEBUG,
ACE_TEXT ("TAO (%P|%t) - Transport[%d]::send_asynchronous_message_i, ")
ACE_TEXT ("cannot queue message for ")
@@ -2335,7 +2336,6 @@ TAO_Transport::post_open (size_t id)
ace_mon,
*this->handler_lock_,
false);
-
this->is_connected_ = true;
}
diff --git a/TAO/tao/Transport_Connector.cpp b/TAO/tao/Transport_Connector.cpp
index 0d6c1ee6692..0b2b433813d 100644
--- a/TAO/tao/Transport_Connector.cpp
+++ b/TAO/tao/Transport_Connector.cpp
@@ -7,11 +7,14 @@
#include "tao/Thread_Lane_Resources.h"
#include "tao/debug.h"
#include "tao/Connect_Strategy.h"
+#include "tao/LF_Multi_Event.h"
#include "tao/Client_Strategy_Factory.h"
#include "tao/Connection_Handler.h"
#include "tao/Profile_Transport_Resolver.h"
#include "tao/Wait_Strategy.h"
#include "tao/SystemException.h"
+#include "tao/Endpoint.h"
+#include "tao/Base_Transport_Property.h"
#include "ace/OS_NS_string.h"
@@ -242,6 +245,81 @@ TAO_Connector::make_mprofile (const char *string,
return 0; // Success
}
+int
+TAO_Connector::supports_parallel_connects(void) const
+{
+ return 0; // by default, we don't support parallel connection attempts;
+}
+
+TAO_Transport*
+TAO_Connector::make_parallel_connection (TAO::Profile_Transport_Resolver *,
+ TAO_Transport_Descriptor_Interface &,
+ ACE_Time_Value *)
+{
+ return 0;
+}
+
+
+TAO_Transport*
+TAO_Connector::parallel_connect (TAO::Profile_Transport_Resolver *r,
+ TAO_Transport_Descriptor_Interface *desc,
+ ACE_Time_Value *timeout
+ ACE_ENV_ARG_DECL_NOT_USED)
+{
+ if (this->supports_parallel_connects() == 0)
+ {
+ errno = ENOTSUP;
+ return 0;
+ }
+
+ errno = 0; // need to clear errno to ensure a stale enotsup is not set
+ if (desc == 0)
+ return 0;
+ unsigned int endpoint_count = 0;
+ TAO_Endpoint *root_ep = desc->endpoint();
+ for (TAO_Endpoint *ep = root_ep->next_filtered (this->orb_core(),0);
+ ep != 0;
+ ep = ep->next_filtered(this->orb_core(),root_ep))
+ if (this->set_validate_endpoint (ep) == 0)
+ ++endpoint_count;
+ if (endpoint_count == 0)
+ return 0;
+
+ TAO_Transport *base_transport = 0;
+
+ TAO::Transport_Cache_Manager &tcm =
+ this->orb_core ()->lane_resources ().transport_cache ();
+
+ // Iterate through the endpoints. Since find_transport takes a
+ // Transport Descriptor rather than an endpoint, we must create a
+ // local TDI for each endpoint. The first one found will be used.
+ for (TAO_Endpoint *ep = root_ep->next_filtered (this->orb_core(),0);
+ ep != 0;
+ ep = ep->next_filtered(this->orb_core(),root_ep))
+ {
+ TAO_Base_Transport_Property desc2(ep,0);
+ if (tcm.find_transport (&desc2,
+ base_transport) == 0)
+ {
+ if (TAO_debug_level)
+ ACE_DEBUG ((LM_DEBUG,
+ ACE_TEXT ("(%P|%t) TAO_Connector::parallel_connect: ")
+ ACE_TEXT ("found a transport [%d]\n"),
+ base_transport->id()));
+ return base_transport;
+ }
+ }
+
+ // Now we have searched the cache on all endpoints and come up
+ // empty. We need to initiate connections on each of the
+ // endpoints. Presumably only one will have a route and will succeed,
+ // and the rest will fail. This requires the use of asynch
+ // connection establishment. Maybe a custom wait strategy is needed
+ // at this point to register several potential transports so that
+ // when one succeeds the rest are cancelled or closed.
+
+ return this->make_parallel_connection (r,*desc,timeout);
+}
TAO_Transport*
TAO_Connector::connect (TAO::Profile_Transport_Resolver *r,
@@ -280,8 +358,8 @@ TAO_Connector::connect (TAO::Profile_Transport_Resolver *r,
if (TAO_debug_level > 4)
ACE_DEBUG ((LM_DEBUG,
- "TAO (%P|%t) - Transport_Connector::connect, "
- "opening Transport[%d] in TAO_CLIENT_ROLE\n",
+ ACE_TEXT("(%P|%t) Transport_Connector::connect, ")
+ ACE_TEXT("opening Transport[%d] in TAO_CLIENT_ROLE\n"),
t->id ()));
// Call post connect hook. If the post_connect_hook () returns
@@ -315,10 +393,13 @@ TAO_Connector::connect (TAO::Profile_Transport_Resolver *r,
"TAO_UNSPECIFIED_ROLE" ));
}
- // If connected return..
+ // If connected return.
if (base_transport->is_connected ())
return base_transport;
+ // It it possible to get a transport from the cache that is not
+ // connected? If not, then the following code is bogus. We cannot
+ // wait for a connection to complete on a transport in the cache.
if (!this->wait_for_connection_completion (r,
base_transport,
timeout))
@@ -432,10 +513,100 @@ TAO_Connector::wait_for_connection_completion (
}
}
+ // Connection not ready yet but we can use this transport, if
+ // we need a connected one we will block later to make sure
+ // it is connected
+ return true;
+}
+
+bool
+TAO_Connector::wait_for_connection_completion (
+ TAO::Profile_Transport_Resolver *r,
+ TAO_Transport *&the_winner,
+ TAO_Transport **transport,
+ unsigned int count,
+ TAO_LF_Multi_Event *mev,
+ ACE_Time_Value *timeout)
+{
+ if (TAO_debug_level > 2)
+ {
+ ACE_DEBUG ((LM_DEBUG,
+ ACE_TEXT("(%P|%t) Transport_Connector::")
+ ACE_TEXT("wait_for_connection_completion, ")
+ ACE_TEXT("waiting for connection completion on ")
+ ACE_TEXT("%d transports, ["),
+ count));
+ for (unsigned int i = 0; i < count; i++)
+ ACE_DEBUG ((LM_DEBUG,
+ ACE_TEXT("%d%s"),transport[i]->id(),
+ (i < (count -1) ? ", " : "]\n")));
+ }
+
+ // If we don't need to block for a transport just set the timeout to
+ // be zero.
+ ACE_Time_Value tmp_zero (ACE_Time_Value::zero);
+ if (!r->blocked_connect ())
+ {
+ timeout = &tmp_zero;
+ }
+
+ int result = this->active_connect_strategy_->wait (mev,timeout);
+ the_winner = 0;
+
+ if (result != -1)
+ {
+ the_winner = mev->winner()->transport();
+ if (TAO_debug_level > 2)
+ ACE_DEBUG ((LM_DEBUG,
+ ACE_TEXT("(%P|%t) Transport_Connector::")
+ ACE_TEXT("wait_for_connection_completion, ")
+ ACE_TEXT("transport [%d]\n"),
+ the_winner->id ()));
+ }
+ else if (errno == ETIME)
+ {
+ // this is the most difficult case. In this situation, there is no
+ // nominated by the Multi_Event. The best we can do is pick one of
+ // the pending connections.
+ // Of course, this shouldn't happen in any case, since the wait
+ // strategy is called with a timeout value of 0.
+ for (unsigned int i = 0; i < count; i++)
+ if (!transport[i]->connection_handler()->is_closed())
+ {
+ the_winner = transport[i];
+ break;
+ }
+ }
+
+ // It is possible that we have more than one connection that happened
+ // to complete, or that none completed. Therefore we need to traverse
+ // the list and ensure that all of the losers are closed.
+ for (unsigned int i = 0; i < count; i++)
+ {
+ if (transport[i] != the_winner)
+ this->check_connection_closure (transport[i]->connection_handler());
+ // since we are doing this on may connections, the result isn't
+ // particularly important.
+ }
+
+ // In case of errors.
+ if (the_winner == 0)
+ {
+ // Report that making the connection failed, don't print errno
+ // because we touched the reactor and errno could be changed
+ if (TAO_debug_level > 2)
+ ACE_ERROR ((LM_ERROR,
+ ACE_TEXT ("(%P|%t) Transport_Connector::")
+ ACE_TEXT ("wait_for_connection_completion, failed\n")
+ ));
+
+ return false;
+ }
+
// Fix for a subtle problem. What happens if we are supposed to do
// blocked connect but the transport is NOT connected? Force close
// the connections
- if (r->blocked_connect () && !transport->is_connected ())
+ if (r->blocked_connect () && !the_winner->is_connected ())
{
if (TAO_debug_level > 2)
ACE_DEBUG ((LM_DEBUG,
@@ -446,8 +617,8 @@ TAO_Connector::wait_for_connection_completion (
// Forget the return value. We are busted anyway. Try our best
// here.
- (void) this->cancel_svc_handler (transport->connection_handler ());
- transport = 0;
+ (void) this->cancel_svc_handler (the_winner->connection_handler ());
+ the_winner = 0;
return false;
}
diff --git a/TAO/tao/Transport_Connector.h b/TAO/tao/Transport_Connector.h
index e29d0b251b3..f457ee5ec9a 100644
--- a/TAO/tao/Transport_Connector.h
+++ b/TAO/tao/Transport_Connector.h
@@ -41,6 +41,7 @@ class TAO_ORB_Core;
class TAO_Connect_Strategy;
class TAO_Transport;
class TAO_Connection_Handler;
+class TAO_LF_Multi_Event;
namespace TAO
{
@@ -121,6 +122,14 @@ public:
ACE_Time_Value *timeout
ACE_ENV_ARG_DECL);
+ /// A variation on connect that will try simultanious connections
+ /// on all endpoints listed in the desc.
+ virtual TAO_Transport* parallel_connect (
+ TAO::Profile_Transport_Resolver *r,
+ TAO_Transport_Descriptor_Interface *desc,
+ ACE_Time_Value *timeout
+ ACE_ENV_ARG_DECL);
+
/// Create a profile for this protocol and initialize it based on the
/// encapsulation in @a cdr
virtual TAO_Profile *create_profile (
@@ -137,6 +146,10 @@ public:
//@@ TAO_CONNECTOR_SPL_PUBLIC_METHODS_ADD_HOOK
protected:
+ /// A flag indicating the actual connector supports parallel connection
+ /// attempts. The base implementation alwayse returns 0. Override to return
+ /// non-zero if parallel connection attempts may be tried.
+ virtual int supports_parallel_connects (void) const;
/// Create a profile with a given endpoint.
virtual TAO_Profile *make_profile (ACE_ENV_SINGLE_ARG_DECL) = 0;
@@ -151,6 +164,13 @@ protected:
TAO_Transport_Descriptor_Interface &desc,
ACE_Time_Value *timeout) = 0;
+ /// Make a connection using - not a pure virtual since not all
+ /// protocols support this.
+ virtual TAO_Transport* make_parallel_connection (
+ TAO::Profile_Transport_Resolver *r,
+ TAO_Transport_Descriptor_Interface &desc,
+ ACE_Time_Value *timeout);
+
/// Cancel the passed cvs handler from the connector
virtual int cancel_svc_handler (
TAO_Connection_Handler *svc_handler) = 0;
@@ -175,6 +195,17 @@ protected:
TAO_Transport *&transport,
ACE_Time_Value *timeout);
+ /// In the case of a parallel connection attempt, we take an array of
+ /// transports, and wait on any of them. When the first one completes,
+ /// the rest are closed.
+ virtual bool wait_for_connection_completion(
+ TAO::Profile_Transport_Resolver *r,
+ TAO_Transport *&the_winner,
+ TAO_Transport **transport,
+ unsigned int count,
+ TAO_LF_Multi_Event *mev,
+ ACE_Time_Value *timeout);
+
/// Set the ORB Core pointer
void orb_core (TAO_ORB_Core *orb_core);
diff --git a/TAO/tao/Transport_Descriptor_Interface.cpp b/TAO/tao/Transport_Descriptor_Interface.cpp
index a58af5ac064..9db80555cf8 100644
--- a/TAO/tao/Transport_Descriptor_Interface.cpp
+++ b/TAO/tao/Transport_Descriptor_Interface.cpp
@@ -15,7 +15,7 @@ TAO_BEGIN_VERSIONED_NAMESPACE_DECL
TAO_Transport_Descriptor_Interface::~TAO_Transport_Descriptor_Interface (void)
{
- if (this->endpoint_from_heap_)
+ if (this->release_)
{
delete this->endpoint_;
}
diff --git a/TAO/tao/Transport_Descriptor_Interface.h b/TAO/tao/Transport_Descriptor_Interface.h
index 0934238d072..7cc891fecff 100644
--- a/TAO/tao/Transport_Descriptor_Interface.h
+++ b/TAO/tao/Transport_Descriptor_Interface.h
@@ -73,7 +73,7 @@ protected:
/// Constructor
TAO_Transport_Descriptor_Interface (TAO_Endpoint *endpoint,
- CORBA::Boolean flag = 0);
+ CORBA::Boolean take_ownership = 0);
/// The base property of the connection ie. the peer's endpoint
TAO_Endpoint *endpoint_;
@@ -83,7 +83,7 @@ protected:
/// Is the endpoint allocated on the heap? If so, we will have to
/// delete it when we destruct ourselves.
- CORBA::Boolean endpoint_from_heap_;
+ CORBA::Boolean release_;
};
TAO_END_VERSIONED_NAMESPACE_DECL
diff --git a/TAO/tao/Transport_Descriptor_Interface.inl b/TAO/tao/Transport_Descriptor_Interface.inl
index 6d1bbcb6d56..4e667f946a9 100644
--- a/TAO/tao/Transport_Descriptor_Interface.inl
+++ b/TAO/tao/Transport_Descriptor_Interface.inl
@@ -7,10 +7,10 @@ TAO_BEGIN_VERSIONED_NAMESPACE_DECL
ACE_INLINE
TAO_Transport_Descriptor_Interface::TAO_Transport_Descriptor_Interface (
TAO_Endpoint *endpoint,
- CORBA::Boolean flag)
+ CORBA::Boolean take_ownership)
: endpoint_ (endpoint),
bidir_flag_ (false),
- endpoint_from_heap_ (flag)
+ release_ (take_ownership)
{
}
@@ -18,7 +18,7 @@ ACE_INLINE
TAO_Transport_Descriptor_Interface::TAO_Transport_Descriptor_Interface (void)
: endpoint_ (0),
bidir_flag_ (false),
- endpoint_from_heap_ (false)
+ release_ (false)
{
}
diff --git a/TAO/tao/Unbounded_Sequence_CDR_T.h b/TAO/tao/Unbounded_Sequence_CDR_T.h
index 5c5d2cc982e..d942e07e9f3 100644
--- a/TAO/tao/Unbounded_Sequence_CDR_T.h
+++ b/TAO/tao/Unbounded_Sequence_CDR_T.h
@@ -12,6 +12,7 @@
*/
#include "tao/orbconf.h"
+#include "tao/SystemException.h"
TAO_BEGIN_VERSIONED_NAMESPACE_DECL
@@ -363,6 +364,8 @@ namespace TAO {
namespace TAO {
template <typename stream>
bool marshal_sequence(stream & strm, const TAO::unbounded_value_sequence <CORBA::Short> & source) {
+ if (0 == &source)
+ ACE_THROW_RETURN (::CORBA::BAD_PARAM(0, CORBA::COMPLETED_MAYBE), false);
::CORBA::ULong const length = source.length ();
if (!(strm << length)) {
return false;
@@ -372,6 +375,8 @@ namespace TAO {
template <typename stream>
bool marshal_sequence(stream & strm, const TAO::unbounded_value_sequence <CORBA::Long> & source) {
+ if (0 == &source)
+ ACE_THROW_RETURN (::CORBA::BAD_PARAM(0, CORBA::COMPLETED_MAYBE), false);
::CORBA::ULong const length = source.length ();
if (!(strm << length)) {
return false;
@@ -381,6 +386,8 @@ namespace TAO {
template <typename stream>
bool marshal_sequence(stream & strm, const TAO::unbounded_value_sequence <CORBA::ULong> & source) {
+ if (0 == &source)
+ ACE_THROW_RETURN (::CORBA::BAD_PARAM(0, CORBA::COMPLETED_MAYBE), false);
::CORBA::ULong const length = source.length ();
if (!(strm << length)) {
return false;
@@ -390,6 +397,8 @@ namespace TAO {
template <typename stream>
bool marshal_sequence(stream & strm, const TAO::unbounded_value_sequence <CORBA::UShort> & source) {
+ if (0 == &source)
+ ACE_THROW_RETURN (::CORBA::BAD_PARAM(0, CORBA::COMPLETED_MAYBE), false);
::CORBA::ULong const length = source.length ();
if (!(strm << length)) {
return false;
@@ -400,6 +409,8 @@ namespace TAO {
#if (TAO_NO_COPY_OCTET_SEQUENCES == 1)
template <typename stream>
bool marshal_sequence(stream & strm, const TAO::unbounded_value_sequence <CORBA::Octet> & source) {
+ if (0 == &source)
+ ACE_THROW_RETURN (::CORBA::BAD_PARAM(0, CORBA::COMPLETED_MAYBE), false);
::CORBA::ULong const length = source.length ();
if (!(strm << length)) {
return false;
@@ -412,6 +423,8 @@ namespace TAO {
#else
template <typename stream>
bool marshal_sequence(stream & strm, const TAO::unbounded_value_sequence <CORBA::Octet> & source) {
+ if (0 == &source)
+ ACE_THROW_RETURN (::CORBA::BAD_PARAM(0, CORBA::COMPLETED_MAYBE), false);
::CORBA::ULong const length = source.length ();
if (!(strm << length)) {
return false;
@@ -422,6 +435,8 @@ namespace TAO {
template <typename stream>
bool marshal_sequence(stream & strm, const TAO::unbounded_value_sequence <CORBA::Char> & source) {
+ if (0 == &source)
+ ACE_THROW_RETURN (::CORBA::BAD_PARAM(0, CORBA::COMPLETED_MAYBE), false);
::CORBA::ULong const length = source.length ();
if (!(strm << length)) {
return false;
@@ -432,6 +447,8 @@ namespace TAO {
# if defined (ACE_HAS_WCHAR) || defined (ACE_HAS_XPG4_MULTIBYTE_CHAR)
template <typename stream>
bool marshal_sequence(stream & strm, const TAO::unbounded_value_sequence <CORBA::WChar> & source) {
+ if (0 == &source)
+ ACE_THROW_RETURN (::CORBA::BAD_PARAM(0, CORBA::COMPLETED_MAYBE), false);
::CORBA::ULong const length = source.length ();
if (!(strm << length)) {
return false;
@@ -442,6 +459,8 @@ namespace TAO {
template <typename stream>
bool marshal_sequence(stream & strm, const TAO::unbounded_value_sequence <CORBA::Float> & source) {
+ if (0 == &source)
+ ACE_THROW_RETURN (::CORBA::BAD_PARAM(0, CORBA::COMPLETED_MAYBE), false);
::CORBA::ULong const length = source.length ();
if (!(strm << length)) {
return false;
@@ -451,6 +470,8 @@ namespace TAO {
template <typename stream>
bool marshal_sequence(stream & strm, const TAO::unbounded_value_sequence <CORBA::Double> & source) {
+ if (0 == &source)
+ ACE_THROW_RETURN (::CORBA::BAD_PARAM(0, CORBA::COMPLETED_MAYBE), false);
::CORBA::ULong const length = source.length ();
if (!(strm << length)) {
return false;
@@ -460,6 +481,8 @@ namespace TAO {
template <typename stream>
bool marshal_sequence(stream & strm, const TAO::unbounded_value_sequence <CORBA::ULongLong> & source) {
+ if (0 == &source)
+ ACE_THROW_RETURN (::CORBA::BAD_PARAM(0, CORBA::COMPLETED_MAYBE), false);
::CORBA::ULong const length = source.length ();
if (!(strm << length)) {
return false;
@@ -469,6 +492,8 @@ namespace TAO {
template <typename stream>
bool marshal_sequence(stream & strm, const TAO::unbounded_value_sequence <CORBA::LongDouble> & source) {
+ if (0 == &source)
+ ACE_THROW_RETURN (::CORBA::BAD_PARAM(0, CORBA::COMPLETED_MAYBE), false);
::CORBA::ULong const length = source.length ();
if (!(strm << length)) {
return false;
@@ -478,6 +503,8 @@ namespace TAO {
template <typename stream>
bool marshal_sequence(stream & strm, const TAO::unbounded_value_sequence <CORBA::Boolean> & source) {
+ if (0 == &source)
+ ACE_THROW_RETURN (::CORBA::BAD_PARAM(0, CORBA::COMPLETED_MAYBE), false);
::CORBA::ULong const length = source.length ();
if (!(strm << length)) {
return false;
@@ -487,6 +514,8 @@ namespace TAO {
template <typename stream, typename value_t>
bool marshal_sequence(stream & strm, const TAO::unbounded_value_sequence <value_t> & source) {
+ if (0 == &source)
+ ACE_THROW_RETURN (::CORBA::BAD_PARAM(0, CORBA::COMPLETED_MAYBE), false);
::CORBA::ULong const length = source.length ();
if (!(strm << length)) {
return false;
@@ -501,6 +530,8 @@ namespace TAO {
template <typename stream, typename charT>
bool marshal_sequence(stream & strm, const TAO::details::unbounded_basic_string_sequence <charT> & source) {
+ if (0 == &source)
+ ACE_THROW_RETURN (::CORBA::BAD_PARAM(0, CORBA::COMPLETED_MAYBE), false);
::CORBA::ULong const length = source.length ();
if (!(strm << length)) {
return false;
@@ -516,6 +547,8 @@ namespace TAO {
template <typename stream, typename object_t, typename object_t_var>
bool marshal_sequence(stream & strm, const TAO::unbounded_object_reference_sequence<object_t, object_t_var> & source) {
typedef typename TAO::unbounded_object_reference_sequence<object_t, object_t_var>::object_type objec_t;
+ if (0 == &source)
+ ACE_THROW_RETURN (::CORBA::BAD_PARAM(0, CORBA::COMPLETED_MAYBE), false);
::CORBA::ULong const length = source.length ();
if (!(strm << length)) {
return false;
diff --git a/TAO/tao/Valuetype/AbstractBase.cpp b/TAO/tao/Valuetype/AbstractBase.cpp
index a28c7ae4ef7..8fdaae3432a 100644
--- a/TAO/tao/Valuetype/AbstractBase.cpp
+++ b/TAO/tao/Valuetype/AbstractBase.cpp
@@ -400,6 +400,12 @@ CORBA::AbstractBase::_tao_unmarshal_v (TAO_InputCDR &)
return false;
}
+CORBA::Boolean
+CORBA::AbstractBase::_tao_match_formal_type (ptrdiff_t ) const
+{
+ return 0;
+}
+
CORBA::ValueBase *
CORBA::AbstractBase::_tao_to_value (void)
{
diff --git a/TAO/tao/Valuetype/AbstractBase.h b/TAO/tao/Valuetype/AbstractBase.h
index cc00f37a969..339d2918d8f 100644
--- a/TAO/tao/Valuetype/AbstractBase.h
+++ b/TAO/tao/Valuetype/AbstractBase.h
@@ -91,6 +91,7 @@ namespace CORBA
virtual const char* _tao_obv_repository_id (void) const;
virtual CORBA::Boolean _tao_marshal_v (TAO_OutputCDR &strm) const;
virtual CORBA::Boolean _tao_unmarshal_v (TAO_InputCDR &strm);
+ virtual CORBA::Boolean _tao_match_formal_type (ptrdiff_t ) const;
/// Memmory management operations
virtual void _add_ref (void);
diff --git a/TAO/tao/Valuetype/StringValueC.cpp b/TAO/tao/Valuetype/StringValueC.cpp
index 836192bc71a..848cf644b2e 100644
--- a/TAO/tao/Valuetype/StringValueC.cpp
+++ b/TAO/tao/Valuetype/StringValueC.cpp
@@ -112,6 +112,12 @@ CORBA::StringValue::_tao_obv_repository_id (void) const
return this->_tao_obv_static_repository_id ();
}
+void
+CORBA::StringValue::_tao_obv_truncatable_repo_ids (Repository_Id_List& ids) const
+{
+ ids.push_back (this->_tao_obv_static_repository_id ());
+}
+
CORBA::Boolean
CORBA::StringValue::_tao_unmarshal (
TAO_InputCDR &strm,
@@ -195,6 +201,12 @@ CORBA::WStringValue::_tao_obv_repository_id (void) const
return this->_tao_obv_static_repository_id ();
}
+void
+CORBA::WStringValue::_tao_obv_truncatable_repo_ids (Repository_Id_List& ids) const
+{
+ ids.push_back (this->_tao_obv_static_repository_id ());
+}
+
CORBA::Boolean
CORBA::WStringValue::_tao_unmarshal (
TAO_InputCDR &strm,
@@ -353,7 +365,7 @@ operator>>= (
CORBA::Boolean
operator<< (
TAO_OutputCDR &strm,
- const CORBA::StringValue *_tao_valuebox
+ CORBA::StringValue *_tao_valuebox
)
{
return
@@ -381,7 +393,7 @@ operator>> (
CORBA::Boolean
operator<< (
TAO_OutputCDR &strm,
- const CORBA::WStringValue *_tao_valuebox
+ CORBA::WStringValue *_tao_valuebox
)
{
return
diff --git a/TAO/tao/Valuetype/StringValueC.h b/TAO/tao/Valuetype/StringValueC.h
index a0b9b69b3a8..fa8d1e68cab 100644
--- a/TAO/tao/Valuetype/StringValueC.h
+++ b/TAO/tao/Valuetype/StringValueC.h
@@ -70,49 +70,50 @@ TAO_BEGIN_VERSIONED_NAMESPACE_DECL
namespace CORBA
{
-
+
// TAO_IDL - Generated from
// c:\projects\ace_cvs\ace_wrappers\tao\tao_idl\be\be_visitor_valuebox/valuebox_ch.cpp:52
#if !defined (_CORBA_STRINGVALUE_CH_)
#define _CORBA_STRINGVALUE_CH_
-
+
class StringValue;
-
+
typedef
TAO_Value_Var_T<
StringValue
>
StringValue_var;
-
+
typedef
TAO_Value_Out_T<
StringValue
>
StringValue_out;
-
+
class TAO_Valuetype_Export StringValue
: public virtual CORBA::DefaultValueRefCountBase
{
public:
-
+
static StringValue* _downcast (CORBA::ValueBase *);
CORBA::ValueBase * _copy_value (void);
-
+
virtual const char* _tao_obv_repository_id (void) const;
-
+ virtual void _tao_obv_truncatable_repo_ids (Repository_Id_List &) const;
+
static const char* _tao_obv_static_repository_id (void);
-
+
static CORBA::Boolean _tao_unmarshal (
TAO_InputCDR &,
StringValue *&
);
-
-
-
+
+
+
// TAO_IDL - Generated from
// c:\projects\ace_cvs\ace_wrappers\tao\tao_idl\be\be_visitor_valuebox/valuebox_ch.cpp:403
-
+
// constructors
StringValue (void);
StringValue (CORBA::Char * val);
@@ -121,95 +122,97 @@ namespace CORBA
StringValue (const StringValue& val);
// assignment operators
StringValue& operator= (CORBA::Char * val);
-
+
StringValue& operator= (const CORBA::Char * val);
-
+
StringValue& operator= (const CORBA::String_var& var);
-
+
// accessor
const CORBA::Char * _value (void) const;
-
+
// modifiers
void _value (CORBA::Char * val);
void _value (const CORBA::Char * val);
void _value (const CORBA::String_var& var);
-
+
// access to the boxed value for method signatures
const CORBA::Char * _boxed_in (void) const;
CORBA::Char *& _boxed_inout (void);
CORBA::Char *& _boxed_out (void);
// allows access and modification using a slot.
char & operator[] (CORBA::ULong slot);
-
+
// allows only accessing thru a slot.
char operator[] (CORBA::ULong slot) const;
-
+
private:
CORBA::String_var _pd_value;
-
-
+
+
// TAO_IDL - Generated from
// c:\projects\ace_cvs\ace_wrappers\tao\tao_idl\be\be_visitor_valuebox/valuebox_ch.cpp:115
-
+
protected:
virtual ~StringValue (void);
virtual CORBA::Boolean _tao_marshal_v (TAO_OutputCDR &) const;
virtual CORBA::Boolean _tao_unmarshal_v (TAO_InputCDR &);
-
+ virtual CORBA::Boolean _tao_match_formal_type (ptrdiff_t ) const;
+
private:
void operator= (const StringValue & val);
-
+
};
#endif /* end #if !defined */
-
+
// TAO_IDL - Generated from
// c:\projects\ace_cvs\ace_wrappers\tao\tao_idl\be\be_visitor_typecode/typecode_decl.cpp:44
-
+
extern TAO_Valuetype_Export ::CORBA::TypeCode_ptr const _tc_StringValue;
-
+
// TAO_IDL - Generated from
// c:\projects\ace_cvs\ace_wrappers\tao\tao_idl\be\be_visitor_valuebox/valuebox_ch.cpp:52
#if !defined (_CORBA_WSTRINGVALUE_CH_)
#define _CORBA_WSTRINGVALUE_CH_
-
+
class WStringValue;
-
+
typedef
TAO_Value_Var_T<
WStringValue
>
WStringValue_var;
-
+
typedef
TAO_Value_Out_T<
WStringValue
>
WStringValue_out;
-
+
class TAO_Valuetype_Export WStringValue
: public virtual CORBA::DefaultValueRefCountBase
{
public:
-
+
static WStringValue* _downcast (CORBA::ValueBase *);
CORBA::ValueBase * _copy_value (void);
-
+
virtual const char* _tao_obv_repository_id (void) const;
-
+ virtual void _tao_obv_truncatable_repo_ids (Repository_Id_List &) const;
+
static const char* _tao_obv_static_repository_id (void);
-
+
static CORBA::Boolean _tao_unmarshal (
TAO_InputCDR &,
WStringValue *&
);
-
-
-
+
+
+
// TAO_IDL - Generated from
// c:\projects\ace_cvs\ace_wrappers\tao\tao_idl\be\be_visitor_valuebox/valuebox_ch.cpp:403
-
+
// constructors
WStringValue (void);
WStringValue (CORBA::WChar * val);
@@ -218,51 +221,52 @@ namespace CORBA
WStringValue (const WStringValue& val);
// assignment operators
WStringValue& operator= (CORBA::WChar * val);
-
+
WStringValue& operator= (const CORBA::WChar * val);
-
+
WStringValue& operator= (const CORBA::WString_var& var);
-
+
// accessor
const CORBA::WChar * _value (void) const;
-
+
// modifiers
void _value (CORBA::WChar * val);
void _value (const CORBA::WChar * val);
void _value (const CORBA::WString_var& var);
-
+
// access to the boxed value for method signatures
const CORBA::WChar * _boxed_in (void) const;
CORBA::WChar *& _boxed_inout (void);
CORBA::WChar *& _boxed_out (void);
// allows access and modification using a slot.
CORBA::WChar & operator[] (CORBA::ULong slot);
-
+
// allows only accessing thru a slot.
CORBA::WChar operator[] (CORBA::ULong slot) const;
-
+
private:
CORBA::WString_var _pd_value;
-
-
+
+
// TAO_IDL - Generated from
// c:\projects\ace_cvs\ace_wrappers\tao\tao_idl\be\be_visitor_valuebox/valuebox_ch.cpp:115
-
+
protected:
virtual ~WStringValue (void);
virtual CORBA::Boolean _tao_marshal_v (TAO_OutputCDR &) const;
virtual CORBA::Boolean _tao_unmarshal_v (TAO_InputCDR &);
-
+ virtual CORBA::Boolean _tao_match_formal_type (ptrdiff_t ) const;
+
private:
void operator= (const WStringValue & val);
-
+
};
#endif /* end #if !defined */
-
+
// TAO_IDL - Generated from
// c:\projects\ace_cvs\ace_wrappers\tao\tao_idl\be\be_visitor_typecode/typecode_decl.cpp:44
-
+
extern TAO_Valuetype_Export ::CORBA::TypeCode_ptr const _tc_WStringValue;
// TAO_IDL - Generated from
@@ -324,5 +328,3 @@ TAO_END_VERSIONED_NAMESPACE_DECL
#include /**/ "ace/post.h"
#endif /* ifndef */
-
-
diff --git a/TAO/tao/Valuetype/StringValueC.inl b/TAO/tao/Valuetype/StringValueC.inl
index 04fc7a36098..a7b1df82545 100644
--- a/TAO/tao/Valuetype/StringValueC.inl
+++ b/TAO/tao/Valuetype/StringValueC.inl
@@ -142,8 +142,6 @@ CORBA::StringValue::_tao_marshal_v (TAO_OutputCDR & strm) const
return (strm << this->_pd_value);
}
-
-
// TAO_IDL - Generated from
// c:\projects\ace_cvs\ace_wrappers\tao\tao_idl\be\be_visitor_valuebox/valuebox_ci.cpp:60
ACE_INLINE const char*
@@ -158,7 +156,12 @@ CORBA::StringValue::_tao_unmarshal_v (TAO_InputCDR & )
return 1;
}
-
+ACE_INLINE CORBA::Boolean
+CORBA::StringValue::_tao_match_formal_type (ptrdiff_t formal_type_id) const
+{
+ return formal_type_id ==
+ reinterpret_cast<ptrdiff_t> (&CORBA::StringValue::_downcast);
+}
// TAO_IDL - Generated from
// c:\projects\ace_cvs\ace_wrappers\tao\tao_idl\be\be_visitor_valuebox/valuebox_ci.cpp:332
@@ -290,5 +293,11 @@ CORBA::WStringValue::_tao_unmarshal_v (TAO_InputCDR & )
return 1;
}
+ACE_INLINE CORBA::Boolean
+CORBA::WStringValue::_tao_match_formal_type (ptrdiff_t formal_type_id) const
+{
+ return formal_type_id ==
+ reinterpret_cast<ptrdiff_t> (&CORBA::WStringValue::_downcast);
+}
TAO_END_VERSIONED_NAMESPACE_DECL
diff --git a/TAO/tao/Valuetype/ValueBase.cpp b/TAO/tao/Valuetype/ValueBase.cpp
index d7c325203d8..fbcd805a704 100644
--- a/TAO/tao/Valuetype/ValueBase.cpp
+++ b/TAO/tao/Valuetype/ValueBase.cpp
@@ -13,6 +13,7 @@
#include "tao/ORB_Core.h"
#include "tao/debug.h"
#include "ace/OS_NS_string.h"
+#include "ace/CORBA_macros.h"
#if !defined (__ACE_INLINE__)
# include "tao/Valuetype/ValueBase.inl"
@@ -48,11 +49,25 @@ CORBA::remove_ref (CORBA::ValueBase *val)
// ***********************************************************************
+TAO_ChunkInfo::TAO_ChunkInfo(CORBA::Boolean do_chunking,
+ CORBA::Long init_level)
+ : chunking_(do_chunking),
+ value_nesting_level_(init_level),
+ chunk_size_pos_ (0),
+ length_to_chunk_octets_pos_ (0),
+ chunk_octets_end_pos_ (0)
+{
+}
+
CORBA::ValueBase::ValueBase (void)
+ : is_truncatable_(0),
+ chunking_(0)
{
}
-CORBA::ValueBase::ValueBase (const ValueBase&)
+CORBA::ValueBase::ValueBase (const ValueBase& val)
+ : is_truncatable_(val.is_truncatable_),
+ chunking_(val.chunking_)
{
}
@@ -89,29 +104,17 @@ CORBA::ValueBase::_tao_any_destructor (void *x)
// (see CORBA 2.3 GIOP 15.3.4)
-CORBA::Boolean
-CORBA::ValueBase::_tao_marshal (TAO_OutputCDR &strm,
- const CORBA::ValueBase *this_,
- ptrdiff_t /* formal_type_id */)
-{
- CORBA::Boolean retval = true;
- // %! yet much to do ... look for +++ !
+// %! yet much to do ... look for +++ !
+
// 1. Is 'this' yet marshalled ? (->1a)
// If not then mark 'this' as marshalled. (->2) +++
// Or is it null ? (write null_ref and return ok)
// 1a. Put indirection and return successfull.
- if (this_ == 0)
- {
- retval = strm.write_ulong (0);
- // write TAO_OBV_GIOP_Flags::Null_ref
- return retval;
- }
-
// 2. if (chunking) and we are in a chunk (look in strm),
// end the chunk by writing its length at its start.
- // This is the responsibility of the CDR stream. +++
+ // This is the responsibility of the CDR stream.
// But if nothing is writtern in this chunk yet,
// we want to overwrite the place of the dummy blocksize-tag
// with our <value-tag>.
@@ -120,41 +123,33 @@ CORBA::ValueBase::_tao_marshal (TAO_OutputCDR &strm,
// 3. Build <value-tag>, which states if chunking is used
// and if type information ((list of) repository id(s))
// is provided. The latter is necessary if the formal_type_id
- // is unequal the 'true derived' type of this object. +++
-
- CORBA::ULong value_tag = TAO_OBV_GIOP_Flags::Value_tag_base
- | TAO_OBV_GIOP_Flags::Type_info_single;
-
- retval = strm.write_ulong (value_tag);
-
- if (! retval)
- {
- return retval;
- }
+ // is unequal the 'true derived' type of this object.
// 4. Marshal type information.
- retval = strm.write_string (this_->_tao_obv_repository_id ());
-
- if (! retval)
- {
- return retval;
- }
-
- // 5. if (chunking) let room for a blocksize-tag. (i.e. write ULong)
+ // 5. if (chunking) let room for a blocksize-tag. (i.e. write Long)
// 6. Now marshal state members. (%! Problem when state is empty
// and chunked encoding is used.)
- retval = this_->_tao_marshal_v (strm);
-
// 7. if (chunking) let strm overwrite the last blocksize tag
- // with its concrete value. +++
+ // with its concrete value.
+
// 8. if (chunking) write an end tag, or (optimization) let the CDR
// care for collecting all end tags of nested values (e.g. linked
- // list), so that only one end tag at all must be written. +++
+ // list), so that only one end tag at all must be written.
- return retval;
+CORBA::Boolean
+CORBA::ValueBase::_tao_marshal (TAO_OutputCDR &strm,
+ const CORBA::ValueBase *this_,
+ ptrdiff_t formal_type_id)
+{
+ if ( ! write_special_value (strm, this_))
+ {
+ return write_value (strm, this_, formal_type_id);
+ }
+
+ return true;
}
@@ -175,10 +170,8 @@ CORBA::ValueBase::_tao_unmarshal (TAO_InputCDR &strm,
// new_object->_tao_unmarshal_v ()
// new_object->_tao_unmarshal_post ()
- CORBA::ValueFactory_var factory;
CORBA::Boolean retval =
CORBA::ValueBase::_tao_unmarshal_pre (strm,
- factory.out (),
new_object,
0);
@@ -187,22 +180,11 @@ CORBA::ValueBase::_tao_unmarshal (TAO_InputCDR &strm,
return false;
}
- if (factory.in () != 0)
- {
- new_object = factory->create_for_unmarshal ();
-
- if (new_object == 0)
- {
- return false; // %! except.?
- }
-
- retval = new_object->_tao_unmarshal_v (strm);
-
- if (retval == 0)
+ if (new_object != 0)
{
+ if (! new_object->_tao_unmarshal_v (strm))
return false;
}
- }
// Now base must be null or point to the unmarshaled object.
// Align the pointer to the right subobject.
@@ -213,13 +195,11 @@ CORBA::ValueBase::_tao_unmarshal (TAO_InputCDR &strm,
CORBA::Boolean
CORBA::ValueBase::_tao_unmarshal_pre (TAO_InputCDR &strm,
- CORBA::ValueFactory &factory,
CORBA::ValueBase *&valuetype,
const char * const repo_id)
-{ // %! dont leak on error case !
- // %! postconditions
- CORBA::Boolean retval = true;
- factory = 0;
+{
+ CORBA::ValueFactory factory = 0;
+
// %! yet much to do ... look for +++ !
// 1. Get the <value-tag> (else it may be <indirection-tag> or <null-ref>).
@@ -230,32 +210,11 @@ CORBA::ValueBase::_tao_unmarshal_pre (TAO_InputCDR &strm,
// type mismatch gets by undetected, if the CDR stream fakes.
// So the type should be checked ... +++
- CORBA::ULong value_tag;
-
- if (!strm.read_ulong (value_tag))
- {
- return false;
- }
-
- if (TAO_OBV_GIOP_Flags::is_null_ref (value_tag))
- {
- valuetype = 0;
- return true;
- // ok, null reference unmarshaled
- }
// 2. Now at this point it must be a <value-tag> (error else).
// if (chunking) check that any last chunk ends with matching
// size. If not raise marshal exception.
// Increase the nesting level of valuetypes.
- if (!TAO_OBV_GIOP_Flags::is_value_tag (value_tag))
- {
- ACE_DEBUG ((LM_DEBUG,
- ACE_TEXT ("!CORBA::ValueBase::_tao_unmarshal_pre ")
- ACE_TEXT ("not value_tag\n")));
- return false;
- }
-
// 3. if (chunking) read and record the blocksize-tag.
// 4. Unmarshal type information and lookup factory.
@@ -263,102 +222,110 @@ CORBA::ValueBase::_tao_unmarshal_pre (TAO_InputCDR &strm,
// from the <value-tag>, then use the repository id parameter
// (it _must_ be right).
- TAO_ORB_Core *orb_core = strm.orb_core ();
+ CORBA::Long valuetag;
+ Repository_Id_List ids;
- if (orb_core == 0)
- {
- orb_core = TAO_ORB_Core_instance ();
+ if (! strm.read_long(valuetag))
+ return false;
- if (TAO_debug_level > 0)
+ if (TAO_OBV_GIOP_Flags::is_indirection_tag (valuetag))
{
- ACE_DEBUG ((LM_WARNING,
- "TAO (%P|%t) WARNING: extracting valuetype using "
- "default ORB_Core\n"));
- }
+ //@@TODO: read indirection value.
+ if (TAO_debug_level > 0)
+ ACE_ERROR ((LM_ERROR,
+ ACE_TEXT ("TAO does not currently support valuetype indirecton\n")));
+ return false;
}
-
- if (TAO_OBV_GIOP_Flags::has_no_type_info (value_tag))
+ else if (TAO_OBV_GIOP_Flags::is_null_ref (valuetag))
+ {
+ // null reference is unmarshalled.
+ valuetype = 0;
+ return true;
+ }
+ else if (TAO_OBV_GIOP_Flags::has_single_type_info (valuetag))
+ {
+ ACE_CString id;
+ if (! strm.read_string(id))
+ return false;
+ ids.push_back (id);
+ }
+ else if (TAO_OBV_GIOP_Flags::has_list_type_info (valuetag))
{
- factory = orb_core->orb ()->lookup_value_factory (repo_id);
+ if (! read_repository_ids(strm, ids))
+ return false;
+ }
+ else if (TAO_OBV_GIOP_Flags::has_no_type_info (valuetag))
+ {
+ ids.push_back (repo_id);
}
else
{
- CORBA::String_var repo_id_stream;
-
- CORBA::ULong length = 0;
+ if (TAO_debug_level > 0)
+ ACE_ERROR ((LM_ERROR,
+ ACE_TEXT ("TAO (%P|%t) unknown value tag: %x\n"), valuetag));
+ return false;
+ }
- if (!strm.read_ulong (length))
- {
- return false;
- }
+ TAO_ORB_Core *orb_core = strm.orb_core ();
- // 'length' may not be the repo id length - it could be the
- // FFFFFFF indirection marker instead
- if (TAO_OBV_GIOP_Flags::is_indirection_tag (length))
- {
- CORBA::Long offset;
+ if (orb_core == 0)
+ {
+ orb_core = TAO_ORB_Core_instance ();
- // Read the negative byte offset
- if (!strm.read_long (offset) || offset >= 0)
+ if (TAO_debug_level > 0)
{
- return false;
+ ACE_DEBUG ((LM_WARNING,
+ "TAO (%P|%t) WARNING: extracting valuetype using "
+ "default ORB_Core\n"));
}
+ }
- // Cribbed from tc_demarshal_indirection in Typecode_CDR_Extraction.cpp
- TAO_InputCDR indir_stream (strm.rd_ptr () + offset - sizeof (CORBA::Long),
- (-offset) + sizeof (CORBA::Long),
- strm.byte_order ());
-
- if (!indir_stream.good_bit ())
- {
- return false;
- }
+ CORBA::Boolean require_truncation = false;
+ CORBA::Boolean chunking = TAO_OBV_GIOP_Flags::is_chunked (valuetag);
- indir_stream.read_string(repo_id_stream.inout ());
- }
- else
+ CORBA::ULong num_ids = ids.size ();
+ // Find the registered factory for this unmarshalling valuetype. If any
+ // factory for the valuetype in its truncatable derivation hierarchy
+ // is registered, the factory is used to create value for unmarshalling.
+ for (CORBA::ULong i = 0; i < num_ids; ++i)
+ {
+ factory = orb_core->orb ()->lookup_value_factory (ids[i].c_str ());
+ if (factory != 0)
{
- if (length > 0 && length <= strm.length ())
+ if (i != 0 && chunking)
{
- ACE_NEW_RETURN (repo_id_stream.inout (),
- ACE_CDR::Char[length],
- 0);
- if (!strm.read_char_array (repo_id_stream.inout (), length))
- {
- return false;
- }
- }
- else if (length == 0)
- {
- ACE_NEW_RETURN (repo_id_stream.inout (),
- ACE_CDR::Char[1],
- 0);
- ACE_OS::strcpy (const_cast <char *&> (repo_id_stream.inout ()), "");
- }
- else
- {
- return false;
+ require_truncation = true;
}
+ break;
}
-
- factory =
- orb_core->orb ()->lookup_value_factory (repo_id_stream.in ());
}
if (factory == 0)
{
if (TAO_debug_level > 0)
{
- ACE_ERROR ((LM_ERROR,
- ACE_TEXT ("(%N:%l) ERROR: OBV factory is null for <%s>!\n"),
- repo_id));
+ ACE_DEBUG ((LM_DEBUG,
+ ACE_TEXT ("TAO (%P|%t) OBV factory is null, id = %s\n"), repo_id));
}
ACE_THROW_RETURN (CORBA::MARSHAL (CORBA::OMGVMCID | 1,
CORBA::COMPLETED_MAYBE),
false);
+ }
+
+
+ valuetype = factory->create_for_unmarshal ();
+
+ if (require_truncation)
+ valuetype->truncation_hook ();
+
+ if (valuetype == 0)
+ {
+ return false; // %! except.?
}
- return retval;
+ valuetype->chunking_ = chunking;
+
+ return true;
}
CORBA::Boolean
@@ -388,11 +355,11 @@ CORBA::ValueBase::_tao_validate_box_type (TAO_InputCDR &strm,
const char * const repo_id_expected,
CORBA::Boolean & null_object)
{
- CORBA::ULong value_tag;
+ CORBA::Long value_tag;
// todo: no handling for indirection yet
- if (!strm.read_ulong (value_tag))
+ if (!strm.read_long (value_tag))
{
return false;
}
@@ -442,10 +409,6 @@ CORBA::ValueBase::_tao_validate_box_type (TAO_InputCDR &strm,
{ // Repository ids matched as expected
return true;
}
- else
- { // Unequal repository ids
- return false;
- }
}
if (TAO_OBV_GIOP_Flags::has_list_type_info (value_tag))
@@ -458,6 +421,354 @@ CORBA::ValueBase::_tao_validate_box_type (TAO_InputCDR &strm,
}
+// =================== methods for chunking ====================
+
+
+CORBA::Boolean
+CORBA::ValueBase::write_special_value(TAO_OutputCDR &strm,
+ const CORBA::ValueBase *value)
+{
+ // If the 'value' is null then write the null value to the stream.
+ if (value == 0)
+ {
+ return strm.write_long (TAO_OBV_GIOP_Flags::Null_tag);
+ }
+ //@@TODO: Check if the value is already written to stream. If it is then
+ // put indirection and return successful, otherwise does nothing
+ // and returns false.
+ else
+ {
+ // value not handled by this method - other code will write the value.
+ return false;
+ }
+}
+
+
+CORBA::Boolean
+CORBA::ValueBase::write_value(TAO_OutputCDR &strm,
+ const CORBA::ValueBase * value,
+ ptrdiff_t formal_type_id)
+{
+ if (! value->write_value_header (strm, formal_type_id))
+ return false;
+
+ if (! value->_tao_marshal_v (strm))
+ return false;
+
+ return true;
+}
+
+
+CORBA::Boolean
+CORBA::ValueBase::write_value_header(TAO_OutputCDR &strm,
+ ptrdiff_t formal_type_id) const
+{
+#if defined (TAO_HAS_OPTIMIMIZED_VALUETYPE_MARSHALING)
+ // this case allows TAO to avoid marshaling the typeID for values
+ // where the actual type matches the formal type (ie not a derived
+ // type).
+ //
+ // I would much prefer that there be a way to have a -ORB option to
+ // control this behavior, but for now there is no reference to the
+ // ORB Core available during marshaling (there is during unmarshaling)
+ // and no other way to communicate such configuration values.
+
+ CORBA::Boolean is_formal_type =
+ this->_tao_match_formal_type (formal_type_id);
+#else
+ // Unfortunately, all versions of tao prior to TAO 1.5.2 did not
+ // support unmarshaling of valuetypes that did not explicitly
+ // marshal the type id. At least it is benign to always encode the
+ // typecode value, even if it can be a little verbose.
+ CORBA::Boolean is_formal_type =
+ false;
+ ACE_UNUSED_ARG (formal_type_id);
+#endif /* TAO_HAS_OPTIMIMIZED_VALUETYPE_MARSHALING */
+
+ // Get the list of repository ids for this valuetype.
+ Repository_Id_List repository_ids;
+ this->_tao_obv_truncatable_repo_ids (repository_ids);
+ CORBA::Long num_ids = static_cast <CORBA::Long> (repository_ids.size ());
+
+ // Build <value-tag>, which states if chunking is used
+ // and if type information ((list of) repository id(s))
+ // is provided. The latter is necessary if the formal_type_id
+ // is unequal the 'true derived' type of this object.
+ CORBA::Long valuetag = TAO_OBV_GIOP_Flags::Value_tag_base;
+
+ // Truncatable value type, must use chunking and list all repository
+ // ids in its "truncatable" derivation hierarchy.
+ if (this->is_truncatable_ || this->chunking_)
+ valuetag |= TAO_OBV_GIOP_Flags::Chunking_tag_sigbits;
+
+ if (!is_formal_type || this->is_truncatable_)
+ valuetag |= TAO_OBV_GIOP_Flags::Type_info_single;
+
+ if (num_ids > 1)
+ valuetag |= TAO_OBV_GIOP_Flags::Type_info_list;
+
+ // Write <value-tag>.
+ if (! strm.write_long (valuetag))
+ {
+ return false;
+ }
+
+ if (num_ids > 1 && !strm.write_long (num_ids))
+ return false;
+
+ if (this->is_truncatable_ ||
+ !is_formal_type ||
+ num_ids > 1)
+ {
+ // Marshal type information.
+ for( CORBA::Long i = 0; i < num_ids; ++i )
+ {
+ if (! strm.write_string (repository_ids[i]))
+ return false;
+ }
+ }
+
+ return true;
+}
+
+// this method is called by the IDL generated _tao_marshal_state() method.
+CORBA::Boolean
+TAO_ChunkInfo::start_chunk(TAO_OutputCDR &strm)
+{
+ // If chunking, reserve the space for the chunk size of next chunk
+ // and increase the nesting level.
+ if (this->chunking_)
+ {
+ if (! reserve_chunk_size(strm))
+ return false;
+ this->value_nesting_level_ ++;
+ }
+ return true;
+}
+
+// this method is called by the IDL generated _tao_marshal_state() method.
+CORBA::Boolean
+TAO_ChunkInfo::end_chunk(TAO_OutputCDR &strm)
+{
+ if (this->chunking_)
+ {
+ // Write actual chunk size at the reserved chunk size place.
+ if (! this->write_previous_chunk_size(strm))
+ return false;
+
+ // Write an end tag which is negation of value_nesting_level_.
+ if (! strm.write_long(- this->value_nesting_level_))
+ return false;
+
+ // -- this->value_nesting_level_;
+ if ( -- this->value_nesting_level_ == 0 )
+ {
+ // ending chunk for outermost value
+ this->chunking_ = false;
+ }
+ }
+ return true;
+}
+
+
+CORBA::Boolean
+TAO_ChunkInfo::write_previous_chunk_size(TAO_OutputCDR &strm)
+{
+ if (this->chunk_size_pos_ != 0)
+ {
+ // Calculate the chunk size.
+ CORBA::Long chunk_size = strm.total_length () - this->length_to_chunk_octets_pos_;
+
+ // This should not happen since this is called in end_chunk() and
+ // the idl generated code always have the matched start_chunk() and
+ // end_chunk() pair. There is always data written to the stream between
+ // the start_chunk() and end_chunk() calls.
+ if (chunk_size == 0)
+ return false;
+
+ // Write the actual chunk size to the reserved chunk size position
+ // in the stream.
+ if (! strm.replace (chunk_size, this->chunk_size_pos_))
+ return false;
+
+ // We finish writing the actual chunk size, now we need reset the state.
+ this->chunk_size_pos_ = 0;
+ this->length_to_chunk_octets_pos_ = 0;
+ }
+
+ return true;
+}
+
+
+CORBA::Boolean
+TAO_ChunkInfo::reserve_chunk_size(TAO_OutputCDR &strm)
+{
+ // This is called in the start_chunk().
+ // Reserve the chunk size the first time the start_chunk () is called
+ // if there are several start_chunk () called continuously without
+ // calling end_chunk (). This could happen in the _tao_marshal_state()
+ // in the most derived valuetype.
+
+ if (this->chunk_size_pos_ == 0)
+ {
+ // Align the wr_ptr before we reserve the space for chunk size.
+ strm.align_write_ptr (ACE_CDR::LONG_SIZE);
+ // Remember begin of the chunk (at chunk size position) that is needed
+ // when we write back actual chunk size to the stream.
+ this->chunk_size_pos_ = strm.current ()->wr_ptr ();
+
+ // Insert four bytes here as a place-holder, we need to go back
+ // later and write the actual size.
+ if (! strm.write_long (0))
+ return false;
+
+ // Remember length before writing chunk data. This is used to calculate
+ // the actual size of the chunk.
+ this->length_to_chunk_octets_pos_ = strm.total_length ();
+ }
+
+ return true;
+}
+
+CORBA::Boolean
+TAO_ChunkInfo::handle_chunking (TAO_InputCDR &strm)
+{
+ if (!this->chunking_)
+ return true;
+ char* the_rd_ptr = strm.start()->rd_ptr ();
+
+ //This case could happen if a handle_chunking() reads a chunk size
+ //and then calls the handle_chunking() again without reading the chunk data.
+ //The handle_chunking() called continuously without reading the chunk data
+ //only happens at the beginning of _tao_unmarshal_state() in a valuetype
+ //that has parents.
+ if (the_rd_ptr < this->chunk_octets_end_pos_)
+ {
+ this->value_nesting_level_ ++;
+ return true;
+ }
+
+ //Safty check if reading is out of range of current chunk.
+ if (this->chunk_octets_end_pos_ != 0 && the_rd_ptr > this->chunk_octets_end_pos_)
+ return false;
+
+ // Read a long value that might be an endtag, the chunk size or the value tag
+ // of the nested valuetype.
+ CORBA::Long tag;
+ if (! strm.read_long(tag))
+ return false;
+
+ if (tag < 0)
+ {
+ // tag is an end tag
+ if (-tag > this->value_nesting_level_)
+ {
+ ACE_ERROR_RETURN ((LM_ERROR,
+ ACE_TEXT ("%P|%t) received end tag %d > value_nesting_level %d\n"),
+ -tag, this->value_nesting_level_),
+ false);
+ }
+ this->value_nesting_level_ = - tag;
+ this->value_nesting_level_--;
+
+
+ this->chunk_octets_end_pos_ = 0;
+
+ // Continue reading so that we can read the outmost endtag. This would
+ // simplify the implementation in the derived valuetype.
+ if (this->value_nesting_level_ > 0)
+ {
+ this->handle_chunking(strm);
+ }
+ }
+ else if (tag < TAO_OBV_GIOP_Flags::Value_tag_base)
+ {
+ // Read the chunk size of another chunk.
+ this->chunk_octets_end_pos_ = strm.rd_ptr () + tag;
+ this->value_nesting_level_ ++;
+ }
+ else // (tag >= 0x7fffff00)
+ {
+ // This should not happen since the valuetag of the nested values are always
+ // unmarshalled in the ValueBase::_tao_unmarshal_pre().
+ return false;
+ }
+
+ return true;
+}
+
+
+CORBA::Boolean
+TAO_ChunkInfo::skip_chunks (TAO_InputCDR &strm)
+{
+ if (!this->chunking_)
+ return true;
+
+ // This function is called after reading data of the truncated parent and
+ // skips the remaining chunks until the outmost endtag (-1).
+ // The tag read here is suppoused to be an endtag.
+ CORBA::Long tag;
+ if (! strm.read_long(tag))
+ return false;
+
+ // end of the whole valuetype.
+ if (tag == -1)
+ return true;
+ else if (tag < 0)
+ {
+ // continue skip the chunk.
+ return this->skip_chunks (strm);
+ }
+ else if (tag < TAO_OBV_GIOP_Flags::Value_tag_base)
+ {
+ // Read the chunk size and move forward to skip the data.
+ ACE_Message_Block* current = const_cast<ACE_Message_Block*>(strm.start ());
+ current->rd_ptr (tag);
+ return this->skip_chunks (strm);
+ }
+ else
+ return false;
+}
+
+CORBA::Boolean
+CORBA::ValueBase::read_repository_ids(ACE_InputCDR& strm, Repository_Id_List& ids)
+{
+ CORBA::Long num_ids;
+ if (! strm.read_long(num_ids))
+ return false;
+
+ if (num_ids == TAO_OBV_GIOP_Flags::Indirection_tag)
+ {
+ //@@TODO: read indirection repository ids and return true.
+ return false;
+ }
+ else
+ {
+ //@@TODO: map repository id for indirection
+ for (CORBA::Long i = 0; i < num_ids; i ++)
+ {
+ ACE_CString id;
+ if (! strm.read_string(id))
+ return false;
+ ids.push_back (id);
+ }
+ }
+
+ return true;
+}
+
+
+void
+CORBA::ValueBase::truncation_hook ()
+{
+#if defined (ACE_HAS_EXCEPTIONS)
+ ACE_THROW (CORBA::INTERNAL ());
+#else
+ ACE_OS::abort ();
+#endif /* ACE_HAS_EXCEPTIONS */
+}
+
+
// ================== Typecode initializations ==================
namespace TAO
@@ -575,11 +886,11 @@ CORBA::DefaultValueRefCountBase::_tao_refcount_value (void)
CORBA::Boolean
operator<< (TAO_OutputCDR &strm,
- const CORBA::ValueBase *_tao_valuetype)
+ CORBA::ValueBase *_tao_valuetype)
{
return CORBA::ValueBase::_tao_marshal (
strm,
- const_cast<CORBA::ValueBase *> (_tao_valuetype),
+ _tao_valuetype,
reinterpret_cast<ptrdiff_t> (&CORBA::ValueBase::_downcast)
);
}
diff --git a/TAO/tao/Valuetype/ValueBase.h b/TAO/tao/Valuetype/ValueBase.h
index 55360627f05..1b1880cadc9 100644
--- a/TAO/tao/Valuetype/ValueBase.h
+++ b/TAO/tao/Valuetype/ValueBase.h
@@ -35,6 +35,7 @@
#include "ace/Thread_Mutex.h"
#include "ace/Atomic_Op.h"
#include "ace/Null_Mutex.h"
+#include "ace/Vector_T.h"
#if defined (TAO_EXPORT_MACRO)
#undef TAO_EXPORT_MACRO
@@ -43,6 +44,66 @@
TAO_BEGIN_VERSIONED_NAMESPACE_DECL
+class TAO_Valuetype_Export TAO_ChunkInfo
+{
+public:
+ TAO_ChunkInfo(CORBA::Boolean do_chunking = 0, CORBA::Long init_level = 0);
+
+ /// Methods to support chunking.
+ /// Note: These methods are called for both chunking and non-chunking
+ /// valuetype. These methods checks the chunking_ flag. If it's
+ /// set to be false the methods return true rightaway.
+
+ /// Methods for marshalling a valuetype.
+
+ /// This is called in the _tao_marshal_state (). This method reserves
+ /// space for the chunk size of the next chunk and also increments the
+ /// nesting level. The reservasion actually occurs the first time that
+ /// the start_chunk is called if there are multiple continuous start_chunk()
+ /// calls without the close_chunk() called in between.
+ CORBA::Boolean start_chunk(TAO_OutputCDR &strm);
+
+ /// This is called in the _tao_marshal_state (). This method writes the
+ /// actual chunk size to the reserved chunk size space and writes an end
+ /// tag with the negation value of current nesting level. A start_chunk()
+ /// needs an end_chunk() to close the current chunk. It's also needed for
+ /// writing the outmost endtag to the stream.
+ CORBA::Boolean end_chunk(TAO_OutputCDR &strm);
+
+ /// Methods for unmarshalling a valuetype.
+
+ /// This is called in the _tao_unmarshal_state () to read the chunk
+ /// size or an end tag.
+ CORBA::Boolean handle_chunking (TAO_InputCDR &strm);
+ /// This is called in the _tao_unmarshal_state () to skip the rest
+ /// chunks until the outmost endtag (-1) if the value is truncated
+ /// to its truncatable parent.
+ CORBA::Boolean skip_chunks (TAO_InputCDR &strm);
+ /// This is called in end_chunk(). It writes the actual chunk size to the
+ /// reserved chunk size space.
+ CORBA::Boolean write_previous_chunk_size(TAO_OutputCDR &strm);
+ /// Reserve space for chunk size. The memory in the stream will be
+ /// overwritten after all the chunk data is written. This method
+ /// only allows the reservasion being made once if the reserved
+ /// space has not been overwritten.
+ CORBA::Boolean reserve_chunk_size(TAO_OutputCDR &strm);
+
+ /// A flag to indicate that this instance is actually involved in a chunked
+ /// or truncatable valuetype.
+ CORBA::Boolean chunking_;
+
+ /// The level of nesting valuetypes.
+ CORBA::Long value_nesting_level_;
+ /// The starting position of the size of current chunk.
+ char* chunk_size_pos_;
+ /// The length of CDR stream from the begining to the current
+ /// chunk data starting position. Used to calculate the chunk size
+ /// across multiple chained ACE_Message_Blocks.
+ size_t length_to_chunk_octets_pos_;
+ /// The end position of current chunk.
+ char* chunk_octets_end_pos_;
+};
+
namespace CORBA
{
class ValueFactoryBase;
@@ -63,8 +124,12 @@ namespace CORBA
class TAO_Valuetype_Export ValueBase
{
public:
+ friend class TAO_ChunkInfo;
+
typedef ValueBase* _ptr_type;
typedef ValueBase_var _var_type;
+ typedef ACE_Vector < ACE_CString > Repository_Id_List;
+
// reference counting
/// %! virtual CORBA::ValueBase* _copy_value (void) = 0;
@@ -79,7 +144,16 @@ namespace CORBA
static void _tao_any_destructor (void *);
/// TAO extension
- virtual const char* _tao_obv_repository_id (void) const = 0;
+
+ /// Return the repository id of this valuetype.
+ virtual const char * _tao_obv_repository_id (void) const = 0;
+
+ /// Give the list of the RepositoryIds in the valuetype "truncatable"
+ /// inheritance hierarchy. List the id of this valuetype as first
+ /// RepositoryID and go up the "truncatable" derivation hierarchy.
+ /// Note the truncatable repo ids only list the truncatable base types
+ /// to which this type is safe to truncate, not all its parents.
+ virtual void _tao_obv_truncatable_repo_ids (Repository_Id_List &) const = 0;
// TAO internal --------------------------
@@ -101,9 +175,9 @@ namespace CORBA
/// Both used internally and are called from T::_tao_unmarshal ()
static CORBA::Boolean _tao_unmarshal_pre (TAO_InputCDR &strm,
- ValueFactory &,
ValueBase *&,
const char * const repo_id);
+
CORBA::Boolean _tao_unmarshal_post (TAO_InputCDR &strm);
/// Check repository id for value box type against what is
@@ -121,11 +195,49 @@ namespace CORBA
/// called after obtaining the fresh object from create_for_unmarshal ()
virtual CORBA::Boolean _tao_unmarshal_v (TAO_InputCDR &) = 0;
+ /// Notify the truncated parent valuetype to skip the rest of the chunks
+ /// when unmarshalling a value from its derived valuetype.
+ /// This is called when the factory for the most derived valuetype (in
+ /// the repository id list) does not exist and a truncated parent factory
+ /// is registered.
+ virtual void truncation_hook ();
+
protected:
ValueBase (void);
ValueBase (const ValueBase&);
virtual ~ValueBase (void);
+ /// This flag is set to be true when the valuetype defined
+ /// in the idl has the truncatable parent.
+ CORBA::Boolean is_truncatable_;
+
+ /// This flag is set to be true when marshalling uses chunking.
+ /// According to spec, the truncatable valuetype should use chunking
+ /// and it can be used for marshalling large valuetype. In current
+ /// implementation, we just use chunking for the truncatable valuetype.
+ CORBA::Boolean chunking_;
+
+ /// Compare the supplied formal type identifier with our actual type.
+ /// This is used during marshaling of valuetypes to detect when it is
+ /// appropriate to not explicitly marshal the typecode for the value.
+ virtual CORBA::Boolean _tao_match_formal_type (ptrdiff_t ) const = 0;
+
+ private:
+ /// Write some special values such as null value or indirection value.
+ static CORBA::Boolean write_special_value(TAO_OutputCDR &strm, const CORBA::ValueBase * value);
+ /// Write whole value.
+ static CORBA::Boolean write_value(TAO_OutputCDR &strm,
+ const CORBA::ValueBase * value,
+ ptrdiff_t formal_type_id);
+
+ /// Write the header of the value which includes the valuetag, number of
+ /// repository ids and list of repository ids.
+ CORBA::Boolean write_value_header(TAO_OutputCDR &strm,
+ ptrdiff_t formal_type_id) const;
+
+ /// Read the repository ids from the CDR input stream.
+ static CORBA::Boolean read_repository_ids(ACE_InputCDR& strm, Repository_Id_List& ids);
+
private:
ValueBase & operator= (const ValueBase &);
@@ -192,25 +304,28 @@ namespace CORBA
*/
namespace TAO_OBV_GIOP_Flags
{
- const CORBA::ULong Value_tag_base = 0x7fffff00L;
- const CORBA::ULong Value_tag_sigbits = 0xffffff00L;
- const CORBA::ULong Codebase_url = 1;
- const CORBA::ULong Type_info_sigbits = 0x00000006L;
- const CORBA::ULong Type_info_none = 0;
- const CORBA::ULong Type_info_single = 2;
- const CORBA::ULong Type_info_list = 6;
-
- TAO_NAMESPACE_INLINE_FUNCTION CORBA::Boolean is_null_ref (CORBA::ULong);
- TAO_NAMESPACE_INLINE_FUNCTION CORBA::Boolean is_value_tag (CORBA::ULong);
- TAO_NAMESPACE_INLINE_FUNCTION CORBA::Boolean has_codebase_url (CORBA::ULong);
- TAO_NAMESPACE_INLINE_FUNCTION CORBA::Boolean has_no_type_info (CORBA::ULong);
- TAO_NAMESPACE_INLINE_FUNCTION CORBA::Boolean has_single_type_info (CORBA::ULong);
- TAO_NAMESPACE_INLINE_FUNCTION CORBA::Boolean has_list_type_info (CORBA::ULong);
- TAO_NAMESPACE_INLINE_FUNCTION CORBA::Boolean is_chunked (CORBA::ULong);
- TAO_NAMESPACE_INLINE_FUNCTION CORBA::Boolean is_indirection_tag (CORBA::ULong);
- TAO_NAMESPACE_INLINE_FUNCTION CORBA::Boolean is_indirection (CORBA::ULong);
- TAO_NAMESPACE_INLINE_FUNCTION CORBA::Boolean is_block_size (CORBA::ULong);
- TAO_NAMESPACE_INLINE_FUNCTION CORBA::Boolean is_end_tag (CORBA::ULong);
+ const CORBA::Long Value_tag_base = 0x7fffff00L;
+ const CORBA::Long Value_tag_sigbits = 0xffffff00L;
+ const CORBA::Long Codebase_url = 1;
+ const CORBA::Long Type_info_sigbits = 0x00000006L;
+ const CORBA::Long Type_info_none = 0;
+ const CORBA::Long Type_info_single = 2;
+ const CORBA::Long Type_info_list = 6;
+ const CORBA::Long Chunking_tag_sigbits = 0x00000008L;
+ const CORBA::Long Indirection_tag = 0x7fffffffL;
+ const CORBA::Long Null_tag = 0x00000000L;
+
+ TAO_NAMESPACE_INLINE_FUNCTION CORBA::Boolean is_null_ref (CORBA::Long);
+ TAO_NAMESPACE_INLINE_FUNCTION CORBA::Boolean is_value_tag (CORBA::Long);
+ TAO_NAMESPACE_INLINE_FUNCTION CORBA::Boolean has_codebase_url (CORBA::Long);
+ TAO_NAMESPACE_INLINE_FUNCTION CORBA::Boolean has_no_type_info (CORBA::Long);
+ TAO_NAMESPACE_INLINE_FUNCTION CORBA::Boolean has_single_type_info (CORBA::Long);
+ TAO_NAMESPACE_INLINE_FUNCTION CORBA::Boolean has_list_type_info (CORBA::Long);
+ TAO_NAMESPACE_INLINE_FUNCTION CORBA::Boolean is_chunked (CORBA::Long);
+ TAO_NAMESPACE_INLINE_FUNCTION CORBA::Boolean is_indirection_tag (CORBA::Long);
+ TAO_NAMESPACE_INLINE_FUNCTION CORBA::Boolean is_indirection (CORBA::Long);
+ TAO_NAMESPACE_INLINE_FUNCTION CORBA::Boolean is_block_size (CORBA::Long);
+ TAO_NAMESPACE_INLINE_FUNCTION CORBA::Boolean is_end_tag (CORBA::Long);
}
TAO_Valuetype_Export CORBA::Boolean
diff --git a/TAO/tao/Valuetype/ValueBase.inl b/TAO/tao/Valuetype/ValueBase.inl
index 2d15b4a0d19..d51a47bab83 100644
--- a/TAO/tao/Valuetype/ValueBase.inl
+++ b/TAO/tao/Valuetype/ValueBase.inl
@@ -7,69 +7,71 @@
TAO_BEGIN_VERSIONED_NAMESPACE_DECL
ACE_INLINE CORBA::Boolean
-TAO_OBV_GIOP_Flags::is_null_ref (CORBA::ULong tag)
+TAO_OBV_GIOP_Flags::is_null_ref (CORBA::Long tag)
{
- return (tag == 0);
+ return (tag == Null_tag);
}
ACE_INLINE CORBA::Boolean
-TAO_OBV_GIOP_Flags::is_value_tag (CORBA::ULong tag)
+TAO_OBV_GIOP_Flags::is_value_tag (CORBA::Long tag)
{
return ((tag & Value_tag_sigbits) == 0x7FFFFF00L);
}
ACE_INLINE CORBA::Boolean
-TAO_OBV_GIOP_Flags:: has_codebase_url (CORBA::ULong tag)
+TAO_OBV_GIOP_Flags:: has_codebase_url (CORBA::Long tag)
{
return (CORBA::Boolean) (tag & Codebase_url);
}
ACE_INLINE CORBA::Boolean
-TAO_OBV_GIOP_Flags::has_no_type_info (CORBA::ULong tag)
+TAO_OBV_GIOP_Flags::has_no_type_info (CORBA::Long tag)
{
return ((tag & Type_info_sigbits) == Type_info_none);
}
ACE_INLINE CORBA::Boolean
-TAO_OBV_GIOP_Flags::has_single_type_info (CORBA::ULong tag)
+TAO_OBV_GIOP_Flags::has_single_type_info (CORBA::Long tag)
{
return ((tag & Type_info_sigbits) == Type_info_single);
}
ACE_INLINE CORBA::Boolean
-TAO_OBV_GIOP_Flags::has_list_type_info (CORBA::ULong tag)
+TAO_OBV_GIOP_Flags::has_list_type_info (CORBA::Long tag)
{
return ((tag & Type_info_sigbits) == Type_info_list);
}
ACE_INLINE CORBA::Boolean
-TAO_OBV_GIOP_Flags:: is_chunked (CORBA::ULong tag)
+TAO_OBV_GIOP_Flags:: is_chunked (CORBA::Long tag)
{
return (CORBA::Boolean) (tag & 8);
}
ACE_INLINE CORBA::Boolean
-TAO_OBV_GIOP_Flags::is_indirection_tag (CORBA::ULong tag)
+TAO_OBV_GIOP_Flags::is_indirection_tag (CORBA::Long tag)
{
- return (tag == 0xFFFFFFFFL);
+ return (static_cast<unsigned>(tag) == 0xFFFFFFFFL);
}
ACE_INLINE CORBA::Boolean
-TAO_OBV_GIOP_Flags::is_indirection (CORBA::ULong value)
+TAO_OBV_GIOP_Flags::is_indirection (CORBA::Long value)
{
- return (0x80000000L < value && value <= (0xFFFFFFFFL - 4));
+ return (0x80000000L < static_cast<unsigned>(value) &&
+ static_cast<unsigned>(value) <= (0xFFFFFFFFL - 4));
}
ACE_INLINE CORBA::Boolean
-TAO_OBV_GIOP_Flags::is_block_size (CORBA::ULong value)
+TAO_OBV_GIOP_Flags::is_block_size (CORBA::Long value)
{
- return (0 < value && value < 0x7FFFFF00L);
+ return (0 < static_cast<unsigned>(value) &&
+ static_cast<unsigned>(value) < 0x7FFFFF00L);
}
ACE_INLINE CORBA::Boolean
-TAO_OBV_GIOP_Flags::is_end_tag (CORBA::ULong tag)
+TAO_OBV_GIOP_Flags::is_end_tag (CORBA::Long tag)
{
- return (0x80000000L < tag);
+ return (0x80000000L < (unsigned)tag);
}
TAO_END_VERSIONED_NAMESPACE_DECL
diff --git a/TAO/tao/Valuetype/Value_CORBA_methods.h b/TAO/tao/Valuetype/Value_CORBA_methods.h
index 352c981ac76..dde1c2837b7 100644
--- a/TAO/tao/Valuetype/Value_CORBA_methods.h
+++ b/TAO/tao/Valuetype/Value_CORBA_methods.h
@@ -32,6 +32,7 @@
TAO_BEGIN_VERSIONED_NAMESPACE_DECL
+
namespace CORBA
{
class ValueBase;
diff --git a/TAO/tao/default_client.cpp b/TAO/tao/default_client.cpp
index bc6d38cf6ab..6076024c440 100644
--- a/TAO/tao/default_client.cpp
+++ b/TAO/tao/default_client.cpp
@@ -331,6 +331,12 @@ TAO_Default_Client_Strategy_Factory::create_wait_strategy (TAO_Transport *transp
return ws;
}
+TAO_Client_Strategy_Factory::Connect_Strategy
+TAO_Default_Client_Strategy_Factory::connect_strategy (void) const
+{
+ return this->connect_strategy_;
+}
+
TAO_Connect_Strategy *
TAO_Default_Client_Strategy_Factory::create_connect_strategy (TAO_ORB_Core *orb_core)
{
diff --git a/TAO/tao/default_client.h b/TAO/tao/default_client.h
index db6544d166d..e1660fb2041 100644
--- a/TAO/tao/default_client.h
+++ b/TAO/tao/default_client.h
@@ -62,6 +62,7 @@ public:
virtual TAO_Connect_Strategy *create_connect_strategy (TAO_ORB_Core *);
virtual ACE_Lock *create_ft_service_retention_id_lock (void);
virtual bool use_cleanup_options (void) const;
+ virtual Connect_Strategy connect_strategy (void) const;
protected:
void report_option_value_error (const ACE_TCHAR* option_name,
@@ -97,13 +98,6 @@ private:
/// The wait-for-reply strategy.
Wait_Strategy wait_strategy_;
- enum Connect_Strategy
- {
- TAO_BLOCKED_CONNECT,
- TAO_REACTIVE_CONNECT,
- TAO_LEADER_FOLLOWER_CONNECT
- };
-
/// The connection initiation strategy.
Connect_Strategy connect_strategy_;
diff --git a/TAO/tao/default_resource.cpp b/TAO/tao/default_resource.cpp
index 59447bdb234..0680aa55925 100644
--- a/TAO/tao/default_resource.cpp
+++ b/TAO/tao/default_resource.cpp
@@ -62,11 +62,14 @@ TAO_Default_Resource_Factory::TAO_Default_Resource_Factory (void)
, wchar_codeset_descriptor_ (0)
, resource_usage_strategy_ (TAO_Resource_Factory::TAO_EAGER)
, drop_replies_ (true)
+ , principal_(0)
{
#if TAO_USE_LAZY_RESOURCE_USAGE_STRATEGY == 1
this->resource_usage_strategy_ =
TAO_Resource_Factory::TAO_LAZY;
#endif /*TAO_USE_LAZY_RESOURCE_USAGE_STRATEGY*/
+
+
}
TAO_Default_Resource_Factory::~TAO_Default_Resource_Factory (void)
@@ -90,6 +93,8 @@ TAO_Default_Resource_Factory::~TAO_Default_Resource_Factory (void)
delete codeset_manager_;
codeset_manager_ = 0;
+
+ delete principal_;
}
int
@@ -102,7 +107,8 @@ TAO_Default_Resource_Factory::init (int argc, ACE_TCHAR *argv[])
// are useless
if (this->factory_disabled_) {
ACE_DEBUG ((LM_WARNING,
- ACE_TEXT ("TAO (%P|%t) Warning: Resource_Factory options ignored\n")
+ ACE_TEXT ("TAO (%P|%t) Warning: Resource_Factory options ")
+ ACE_TEXT ("ignored\n")
ACE_TEXT ("Default Resource Factory is disabled\n")));
return 0;
}
@@ -171,7 +177,8 @@ TAO_Default_Resource_Factory::init (int argc, ACE_TCHAR *argv[])
-1);
if (pset->insert (item) == -1)
ACE_ERROR ((LM_ERROR,
- ACE_TEXT ("(%P|%t) Unable to add protocol factories for %s: %m\n"),
+ ACE_TEXT ("(%P|%t) Unable to add protocol factories ")
+ ACE_TEXT ("for %s: %m\n"),
argv[curarg]));
}
}
@@ -239,7 +246,8 @@ TAO_Default_Resource_Factory::init (int argc, ACE_TCHAR *argv[])
// note is being written during 1.2.3 timeframe.
ACE_DEBUG ((LM_DEBUG,
ACE_TEXT ("(%P|%t) This option would be deprecated \n")
- ACE_TEXT ("(%P|%t) Please use -ORBConnectionPurgingStrategy instead \n")));
+ ACE_TEXT ("(%P|%t) Please use -ORBConnectionPurgingStrategy ")
+ ACE_TEXT ("instead \n")));
if (curarg < argc)
{
@@ -1184,6 +1192,9 @@ TAO_Default_Resource_Factory::codeset_manager(void)
""));
factory =
ACE_Dynamic_Service<TAO_Codeset_Manager_Factory_Base>::instance ("TAO_Codeset");
+
+ principal_ = new ACE_Dynamic_Service_Dependency (ACE_TEXT ("TAO_Codeset"));
+
#endif
}
if (factory == 0)
diff --git a/TAO/tao/default_resource.h b/TAO/tao/default_resource.h
index aef5e545fd7..8f022479fc5 100644
--- a/TAO/tao/default_resource.h
+++ b/TAO/tao/default_resource.h
@@ -17,6 +17,7 @@
#include /**/ "ace/pre.h"
#include "ace/Service_Config.h"
+#include "ace/Dynamic_Service_Dependency.h"
#if !defined (ACE_LACKS_PRAGMA_ONCE)
# pragma once
@@ -257,6 +258,12 @@ private:
/// Flag to indicate whether replies should be dropped during ORB
/// shutdown.
bool drop_replies_;
+
+ // Makes a dependency on a specific dynamic service ("TAO_Codeset") explicit.
+ // It helps to keep the corresponding DLL around until the last instance
+ // is destroyed. Note that failure to delete the instances will "pin" the
+ // DLL in memory, preventing it from being unloaded on demand.
+ ACE_Dynamic_Service_Dependency *principal_;
};
TAO_END_VERSIONED_NAMESPACE_DECL
diff --git a/TAO/tao/orbconf.h b/TAO/tao/orbconf.h
index 61cf7bfb65b..b6e8ed7613b 100644
--- a/TAO/tao/orbconf.h
+++ b/TAO/tao/orbconf.h
@@ -735,7 +735,9 @@ enum TAO_Cached_Policy_Type
TAO_CACHED_POLICY_BIDIRECTIONAL_GIOP,
- TAO_CACHED_POLICY_MAX_CACHED
+ TAO_CACHED_POLICY_MAX_CACHED,
+
+ TAO_CACHED_POLICY_ENDPOINT
};
// This enum provides a mask that represent the scope at which a given
diff --git a/TAO/tao/params.cpp b/TAO/tao/params.cpp
index a06608bedb2..f4bc363777f 100644
--- a/TAO/tao/params.cpp
+++ b/TAO/tao/params.cpp
@@ -14,7 +14,6 @@ ACE_RCSID (tao,
params,
"$Id$")
-
TAO_BEGIN_VERSIONED_NAMESPACE_DECL
TAO_ORB_Parameters::TAO_ORB_Parameters (void)
@@ -25,6 +24,7 @@ TAO_ORB_Parameters::TAO_ORB_Parameters (void)
, sock_sndbuf_size_ (ACE_DEFAULT_MAX_SOCKET_BUFSIZ)
, nodelay_ (1)
, sock_keepalive_ (0)
+ , sock_dontroute_ (0)
, cdr_memcpy_tradeoff_ (ACE_DEFAULT_CDR_MEMCPY_TRADEOFF)
, max_message_size_ (0) // Disable outgoing GIOP fragments by default
, use_lite_protocol_ (0)
@@ -37,6 +37,8 @@ TAO_ORB_Parameters::TAO_ORB_Parameters (void)
, scope_policy_ (THR_SCOPE_PROCESS)
, single_read_optimization_ (1)
, shared_profile_ (0)
+ , use_parallel_connects_ (false)
+ , parallel_connect_delay_ (0)
, pref_network_ ()
, disable_rt_collocation_resolver_ (false)
, enforce_preferred_interfaces_ (false)
diff --git a/TAO/tao/params.h b/TAO/tao/params.h
index c65f9177e91..efefb62845f 100644
--- a/TAO/tao/params.h
+++ b/TAO/tao/params.h
@@ -89,6 +89,10 @@ public:
int sock_keepalive (void);
void sock_keepalive (int);
+ /// Set/Get whether we should set SO_DONTROUTE on the socket or not.
+ int sock_dontroute (void);
+ void sock_dontroute (int);
+
/**
* Octet sequences are marshalled without doing any copies, we
* simply append a block to the CDR message block chain. When the
@@ -175,6 +179,16 @@ public:
int shared_profile (void) const;
void shared_profile (int x);
+ /// Want to use parallel connection attempts when profiles have multiple
+ /// endpoints.
+ bool use_parallel_connects(void) const;
+ void use_parallel_connects (bool x);
+
+ /// The milliseconds delay used to stagger individual connection starts
+ /// when using parallel connects.
+ unsigned long parallel_connect_delay (void) const;
+ void parallel_connect_delay (unsigned long x);
+
/// Mutators and accessors for rt_collocation_resolver
bool disable_rt_collocation_resolver (void) const;
void disable_rt_collocation_resolver (bool);
@@ -240,9 +254,12 @@ private:
/// 1 if we're using TCP_NODELAY and 0 otherwise.
int nodelay_;
- /// 1 if we're using SO_KEEPALIV and 0 otherwise (default 0).
+ /// 1 if we're using SO_KEEPALIVE and 0 otherwise (default 0).
int sock_keepalive_;
+ /// 1 if we're using SO_DONTROUTE and 0 otherwise (default 0).
+ int sock_dontroute_;
+
/// Control the strategy for copying vs. appeding octet sequences in
/// CDR streams.
int cdr_memcpy_tradeoff_;
@@ -304,6 +321,16 @@ private:
/// Shared Profile - Use the same profile for multiple endpoints
int shared_profile_;
+ /// Use Parallel Connects - Try to connect to all endpoints in a
+ /// shared profile at once, use the first to complete.
+ int use_parallel_connects_;
+
+ /// When using parallel connects, this delay is used to stagger connection
+ /// attempts. This gives a trade-off between opening more potential
+ /// connections than necessary vs increasing the potential time before
+ /// a good connection is discovered. Time is expressed in milliseconds.
+ unsigned long parallel_connect_delay_;
+
/// Preferred network interfaces as a string
ACE_CString pref_network_;
diff --git a/TAO/tao/params.i b/TAO/tao/params.i
index d900d18a967..04e3f7575ec 100644
--- a/TAO/tao/params.i
+++ b/TAO/tao/params.i
@@ -163,6 +163,18 @@ TAO_ORB_Parameters::sock_keepalive (int x)
}
ACE_INLINE int
+TAO_ORB_Parameters::sock_dontroute (void)
+{
+ return this->sock_dontroute_;
+}
+
+ACE_INLINE void
+TAO_ORB_Parameters::sock_dontroute (int x)
+{
+ this->sock_dontroute_ = x;
+}
+
+ACE_INLINE int
TAO_ORB_Parameters::ace_sched_policy (void) const
{
return this->ace_sched_policy_;
@@ -218,6 +230,30 @@ TAO_ORB_Parameters::single_read_optimization (int x)
this->single_read_optimization_ = x;
}
+ACE_INLINE bool
+TAO_ORB_Parameters::use_parallel_connects (void) const
+{
+ return this->use_parallel_connects_;
+}
+
+ACE_INLINE void
+TAO_ORB_Parameters::use_parallel_connects (bool x)
+{
+ this->use_parallel_connects_ = x;
+}
+
+ACE_INLINE unsigned long
+TAO_ORB_Parameters::parallel_connect_delay (void) const
+{
+ return this->parallel_connect_delay_;
+}
+
+ACE_INLINE void
+TAO_ORB_Parameters::parallel_connect_delay (unsigned long x)
+{
+ this->parallel_connect_delay_ = x;
+}
+
ACE_INLINE int
TAO_ORB_Parameters::shared_profile (void) const
{
diff --git a/TAO/tao/tao.mpc b/TAO/tao/tao.mpc
index 8d9939c6a09..c514e95d123 100644
--- a/TAO/tao/tao.mpc
+++ b/TAO/tao/tao.mpc
@@ -113,6 +113,7 @@ project(TAO) : acelib, core, tao_output, taodefaults, pidl, extra_core {
LF_Follower_Auto_Adder.cpp
LF_Follower_Auto_Ptr.cpp
LF_Invocation_Event.cpp
+ LF_Multi_Event.cpp
LF_Strategy.cpp
LF_Strategy_Complete.cpp
LocalObject.cpp
@@ -235,6 +236,7 @@ project(TAO) : acelib, core, tao_output, taodefaults, pidl, extra_core {
}
Header_Files {
+ Array_Traits_T.h
Abstract_Servant_Base.h
Acceptor_Filter.h
Acceptor_Impl.h
@@ -262,6 +264,16 @@ project(TAO) : acelib, core, tao_output, taodefaults, pidl, extra_core {
Block_Flushing_Strategy.h
BooleanSeqC.h
BooleanSeqS.h
+ Bounded_Array_Allocation_Traits.h
+ Bounded_Array_Sequence_T.h
+ Bounded_Basic_String_Sequence_T.h
+ Bounded_Object_Reference_Sequence_T.h
+ Bounded_Reference_Allocation_Traits.h
+ Bounded_Sequence_CDR_T.h
+ Bounded_String_Sequence_T.h
+ Bounded_Value_Allocation_Traits_T.h
+ Bounded_Value_Sequence_T.h
+ Bounded_Wstring_Sequence_T.h
Buffer_Allocator_T.h
Buffering_Constraint_Policy.h
Cache_Entries.h
@@ -326,6 +338,7 @@ project(TAO) : acelib, core, tao_output, taodefaults, pidl, extra_core {
FloatSeqC.h
FloatSeqS.h
Flushing_Strategy.h
+ Generic_Sequence_T.h
GIOPC.h
GIOP_Message_Base.h
GIOP_Message_Generator_Parser_10.h
@@ -402,7 +415,10 @@ project(TAO) : acelib, core, tao_output, taodefaults, pidl, extra_core {
Object_Proxy_Broker.h
Object_Ref_Table.h
Object_T.h
+ Object_Reference_Sequence_Element_T.h
Objref_VarOut_T.h
+ Object_Reference_Traits_Base_T.h
+ Object_Reference_Traits_T.h
OctetSeqC.h
OctetSeqS.h
operation_details.h
@@ -444,6 +460,7 @@ project(TAO) : acelib, core, tao_output, taodefaults, pidl, extra_core {
Protocols_Hooks.h
Pseudo_VarOut_T.h
Queued_Message.h
+ Range_Checking_T.h
Reactive_Connect_Strategy.h
Reactive_Flushing_Strategy.h
Refcounted_ObjectKey.h
@@ -455,6 +472,7 @@ project(TAO) : acelib, core, tao_output, taodefaults, pidl, extra_core {
Resume_Handle.h
Seq_Out_T.h
Seq_Var_T.h
+ Sequence_T.h
Server_Strategy_Factory.h
Service_Callbacks.h
Service_Context.h
@@ -468,6 +486,10 @@ project(TAO) : acelib, core, tao_output, taodefaults, pidl, extra_core {
StringSeqC.h
StringSeqS.h
String_Alloc.h
+ String_Manager_T.h
+ String_Sequence_Element_T.h
+ String_Traits_Base_T.h
+ String_Traits_T.h
Stub_Factory.h
Stub.h
Synch_Invocation.h
@@ -508,9 +530,22 @@ project(TAO) : acelib, core, tao_output, taodefaults, pidl, extra_core {
ULongLongSeqS.h
ULongSeqC.h
ULongSeqS.h
+ Unbounded_Array_Allocation_Traits_T.h
+ Unbounded_Array_Sequence_T.h
+ Unbounded_Basic_String_Sequence_T.h
+ Unbounded_Object_Reference_Sequence_T.h
+ Unbounded_Octet_Sequence_T.h
+ Unbounded_Octet_Sequence_T.h
+ Unbounded_Reference_Allocation_Traits_T.h
+ Unbounded_Sequence_CDR_T.h
+ Unbounded_String_Sequence_T.h
+ Unbounded_Value_Allocation_Traits_T.h
+ Unbounded_Value_Sequence_T.h
+ Unbounded_Wstring_Sequence_T.h
UserException.h
UShortSeqC.h
UShortSeqS.h
+ Value_Traits_T.h
Valuetype_Adapter.h
Valuetype_Adapter_Factory.h
Var_Array_Argument_T.h
diff --git a/TAO/tests/AMI/ami_test.idl b/TAO/tests/AMI/ami_test.idl
index 82256ab3c10..ffdc66d63d5 100644
--- a/TAO/tests/AMI/ami_test.idl
+++ b/TAO/tests/AMI/ami_test.idl
@@ -15,7 +15,7 @@
-module A
+module A
{
exception DidTheRightThing {
long id;
@@ -24,15 +24,15 @@ module A
interface AMI_Test
{
- long foo (out long out_l,
+ long foo (out long out_l,
in long in_l,
in string in_str)
raises (DidTheRightThing);
-
+
attribute long yadda;
-
+
oneway void shutdown ();
-
+
void inout_arg_test (inout string str);
};
diff --git a/TAO/tests/Bug_1676_Regression/client.cpp b/TAO/tests/Bug_1676_Regression/client.cpp
index 2e2ec401a29..9687e3ec488 100644
--- a/TAO/tests/Bug_1676_Regression/client.cpp
+++ b/TAO/tests/Bug_1676_Regression/client.cpp
@@ -33,6 +33,8 @@ parse_args (int argc, char *argv[])
return 0;
}
+void get_stringList2(Test::Hello_var hello);
+
int
main (int argc, char *argv[])
{
@@ -63,7 +65,7 @@ main (int argc, char *argv[])
ACE_DEBUG ((LM_DEBUG, "\n(%P|%t) - get_stringList\n"));
- Test::StringList_var seq =
+ Test::StringList_var seq =
hello->get_stringList (ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_TRY_CHECK;
@@ -71,7 +73,7 @@ main (int argc, char *argv[])
CORBA::String_var the_string = CORBA::string_dup ((*seq)[i]);
ACE_DEBUG ((LM_DEBUG, "(%P|%t) - string returned <%s>\n",
the_string.in ()));
- }
+ }
ACE_DEBUG ((LM_DEBUG, "\n(%P|%t) - get_stringList2 with initialization\n"));
@@ -83,18 +85,11 @@ main (int argc, char *argv[])
CORBA::String_var the_string = seq2.in()[i];
ACE_DEBUG ((LM_DEBUG, "(%P|%t) - string returned <%s>\n",
the_string.in ()));
- }
+ }
ACE_DEBUG ((LM_DEBUG, "\n(%P|%t) - get_stringList2 without initialization\n"));
- hello->get_stringList2(false, seq2.out());
- ACE_TRY_CHECK;
-
- for (CORBA::ULong i = 0; i<seq2->length(); i++) {
- CORBA::String_var the_string = seq2.in()[i];
- ACE_DEBUG ((LM_DEBUG, "(%P|%t) - string returned <%s>\n",
- the_string.in ()));
- }
+ get_stringList2(hello);
ACE_DEBUG ((LM_DEBUG, "\n(%P|%t) - mod_stringList\n"));
@@ -123,3 +118,34 @@ main (int argc, char *argv[])
return 0;
}
+
+void get_stringList2(Test::Hello_var hello)
+{
+ Test::StringList_var seq2;
+
+ ACE_TRY_NEW_ENV
+ {
+ // Shutdown the ORB and block until the shutdown is complete.
+ hello->get_stringList2(false, seq2.out());
+ ACE_TRY_CHECK;
+
+ for (CORBA::ULong i = 0; i<seq2->length(); i++) {
+ CORBA::String_var the_string = seq2.in()[i];
+ ACE_DEBUG ((LM_DEBUG, "(%P|%t) - string returned <%s>\n",
+ the_string.in ()));
+ }
+ }
+ ACE_CATCH(CORBA::BAD_PARAM, ex)
+ {
+ ACE_DEBUG ((LM_DEBUG, "(%P|%t) - catched expected exception BAD_PARAM\n"));
+ }
+ ACE_CATCHANY
+ {
+ ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION,
+ "get_stringList2");
+ }
+ ACE_ENDTRY;
+
+
+ return;
+}
diff --git a/TAO/tests/DLL_ORB/Test_Client_Module.cpp b/TAO/tests/DLL_ORB/Test_Client_Module.cpp
index 9deb390c8ee..0408425d5b4 100644
--- a/TAO/tests/DLL_ORB/Test_Client_Module.cpp
+++ b/TAO/tests/DLL_ORB/Test_Client_Module.cpp
@@ -90,7 +90,7 @@ Test_Client_Module::init (int argc, char *argv[])
// Initialize the ORB.
this->orb_ = CORBA::ORB_init (new_argc,
new_argv.get_buffer (),
- ""
+ "CLIENT"
ACE_ENV_ARG_PARAMETER);
ACE_TRY_CHECK;
@@ -142,33 +142,8 @@ Test_Client_Module::init (int argc, char *argv[])
int
Test_Client_Module::fini (void)
{
- ACE_DECLARE_NEW_CORBA_ENV;
- ACE_TRY
- {
- // Make sure the ORB is destroyed.
- if (!CORBA::is_nil (this->orb_.in ()))
- {
- this->orb_->destroy (ACE_ENV_SINGLE_ARG_PARAMETER);
- ACE_TRY_CHECK;
- }
- }
- ACE_CATCHANY
- {
- ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION,
- ACE_TEXT ("Test_Client_Module::fini"));
- return -1;
- }
- ACE_ENDTRY;
- ACE_CHECK_RETURN (-1);
-
- // This is a bit of a hack. The ORB Core's lifetime is tied to the
- // lifetime of an object reference. We need to wipe out all object
- // references before we call fini() on the TAO_Singleton_Manager.
- //
- // Note that this is only necessary if the default resource factory
- // is used, i.e. one isn't explicitly loaded prior to initializing
- // the ORB.
- (void) this->test_.out ();
+ ACE_DEBUG ((LM_INFO,
+ "Client is being finalized.\n"));
// ------------------------------------------------------------
// Pre-Test_Client_Module termination steps.
@@ -197,6 +172,31 @@ Test_Client_Module::svc (void)
/// Shutdown the remote ORB.
this->test_->shutdown (ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_TRY_CHECK;
+
+ // Make sure the ORB is destroyed here - before the thread
+ // exits, because it may be holding global resources, owned by
+ // the Object Manager (thru its core, which is in turn owned by
+ // the ORB table; which is owned by the Object Manager).
+ // Otherwise the Object Manager will have clobbered them by the
+ // time it gets to destroy the ORB Table, which calls our
+ // fini(). Had we destroyed the ORB in our fini(), its core
+ // fininalization would have required access to those already
+ // deleted resources.
+ if (!CORBA::is_nil (this->orb_.in ()))
+ {
+ this->orb_->destroy (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+ }
+
+ // This is a bit of a hack. The ORB Core's lifetime is tied to the
+ // lifetime of an object reference. We need to wipe out all object
+ // references before we call fini() on the TAO_Singleton_Manager.
+ //
+ // Note that this is only necessary if the default resource factory
+ // is used, i.e. one isn't explicitly loaded prior to initializing
+ // the ORB.
+ (void) this->test_.out ();
+
}
ACE_CATCHANY
{
diff --git a/TAO/tests/DLL_ORB/Test_Server_Module.cpp b/TAO/tests/DLL_ORB/Test_Server_Module.cpp
index 09604d041e7..bb590b53b1e 100644
--- a/TAO/tests/DLL_ORB/Test_Server_Module.cpp
+++ b/TAO/tests/DLL_ORB/Test_Server_Module.cpp
@@ -91,7 +91,7 @@ Test_Server_Module::init (int argc, char *argv[])
// Initialize the ORB.
this->orb_ = CORBA::ORB_init (new_argc,
new_argv.get_buffer (),
- 0
+ "SERVER"
ACE_ENV_ARG_PARAMETER);
ACE_TRY_CHECK;
@@ -169,24 +169,8 @@ Test_Server_Module::init (int argc, char *argv[])
int
Test_Server_Module::fini (void)
{
- ACE_DECLARE_NEW_CORBA_ENV;
- ACE_TRY
- {
- // Make sure the ORB is destroyed.
- if (!CORBA::is_nil (this->orb_.in ()))
- {
- this->orb_->destroy (ACE_ENV_SINGLE_ARG_PARAMETER);
- ACE_TRY_CHECK;
- }
- }
- ACE_CATCHANY
- {
- ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION,
- ACE_TEXT ("Test_Server_Module::fini"));
- return -1;
- }
- ACE_ENDTRY;
- ACE_CHECK_RETURN (-1);
+ ACE_DEBUG ((LM_INFO,
+ "Server is being finalized.\n"));
// ------------------------------------------------------------
// Pre-Test_Server_Module termination steps.
@@ -211,6 +195,24 @@ Test_Server_Module::svc (void)
// Run the ORB event loop in its own thread.
this->orb_->run (ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_TRY_CHECK;
+
+ ACE_DEBUG ((LM_INFO,
+ "Server is being destroyed.\n"));
+
+ // Make sure the ORB is destroyed here - before the thread
+ // exits, because it may be holding global resources, owned by
+ // the Object Manager (thru its core, which is in turn owned by
+ // the ORB table; which is owned by the Object Manager).
+ // Otherwise the Object Manager will have clobbered them by the
+ // time it gets to destroy the ORB Table, which calls our
+ // fini(). Had we destroyed the ORB in our fini(), its core
+ // fininalization would have required access to those already
+ // deleted resources.
+ if (!CORBA::is_nil (this->orb_.in ()))
+ {
+ this->orb_->destroy (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+ }
}
ACE_CATCHANY
{
diff --git a/TAO/tests/ORT/ORT_test_IORInterceptor.cpp b/TAO/tests/ORT/ORT_test_IORInterceptor.cpp
index 33ecd4d3399..7a7a3a2943e 100644
--- a/TAO/tests/ORT/ORT_test_IORInterceptor.cpp
+++ b/TAO/tests/ORT/ORT_test_IORInterceptor.cpp
@@ -82,7 +82,7 @@ ORT_test_IORInterceptor::components_established (
void
ORT_test_IORInterceptor::adapter_manager_state_changed (
- PortableInterceptor::AdapterManagerId,
+ const char * id,
PortableInterceptor::AdapterState
ACE_ENV_ARG_DECL_NOT_USED)
ACE_THROW_SPEC ((CORBA::SystemException))
diff --git a/TAO/tests/ORT/ORT_test_IORInterceptor.h b/TAO/tests/ORT/ORT_test_IORInterceptor.h
index 65ef1bf0f4e..14e17c49529 100644
--- a/TAO/tests/ORT/ORT_test_IORInterceptor.h
+++ b/TAO/tests/ORT/ORT_test_IORInterceptor.h
@@ -66,7 +66,7 @@ public:
ACE_THROW_SPEC ((CORBA::SystemException));
virtual void adapter_manager_state_changed (
- PortableInterceptor::AdapterManagerId id,
+ const char * id,
PortableInterceptor::AdapterState state
ACE_ENV_ARG_DECL_WITH_DEFAULTS)
ACE_THROW_SPEC ((CORBA::SystemException));
diff --git a/TAO/tests/POA/README b/TAO/tests/POA/README
index a62f8269c50..9d4a03425d2 100644
--- a/TAO/tests/POA/README
+++ b/TAO/tests/POA/README
@@ -81,3 +81,17 @@ Object Adapter (POA) interfaces and their usage scenarios.
This program tests that nested non-servant upcalls are
handled correctly.
+ . POAManagerFactory
+
+ The program tests the POAManagerFactory interface. Test may
+ be run by hand using "POAManagerFactory -v" to get a verbose
+ report of individual tests being run.
+
+ . EndpointPolicy
+
+ Tests for the endpoint policy, the server listens on two
+ endpoints, one with an alias rendering it unreachable. The
+ server uses the endpoint policy to create two IORs, one with
+ the only the good endpoint and another with only the bad. The
+ client expects to reach the good ior and expects to fail with
+ the bad ior.
diff --git a/TAO/tests/Param_Test/svc.conf b/TAO/tests/Param_Test/svc.conf
index f2f882ba2f4..d63ac264118 100644
--- a/TAO/tests/Param_Test/svc.conf
+++ b/TAO/tests/Param_Test/svc.conf
@@ -3,5 +3,5 @@
# Please read $TAO_ROOT/docs/Options.html for details.
#
-static Resource_Factory "-ORBNativeWCharCodeset 0x00010109"
+#static Resource_Factory "-ORBNativeWCharCodeset 0x00010109"
static Server_Strategy_Factory "-ORBtablesize 128"
diff --git a/TAO/tests/Portable_Interceptors/IORInterceptor/FOO_IORInterceptor.cpp b/TAO/tests/Portable_Interceptors/IORInterceptor/FOO_IORInterceptor.cpp
index b8c44b203e0..c29013285ff 100644
--- a/TAO/tests/Portable_Interceptors/IORInterceptor/FOO_IORInterceptor.cpp
+++ b/TAO/tests/Portable_Interceptors/IORInterceptor/FOO_IORInterceptor.cpp
@@ -181,7 +181,7 @@ FOO_IORInterceptor::components_established (
void
FOO_IORInterceptor::adapter_manager_state_changed (
- PortableInterceptor::AdapterManagerId ,
+ const char *,
PortableInterceptor::AdapterState
ACE_ENV_ARG_DECL_NOT_USED)
ACE_THROW_SPEC ((CORBA::SystemException))
diff --git a/TAO/tests/Portable_Interceptors/IORInterceptor/FOO_IORInterceptor.h b/TAO/tests/Portable_Interceptors/IORInterceptor/FOO_IORInterceptor.h
index 699083a8fde..4fc980070d1 100644
--- a/TAO/tests/Portable_Interceptors/IORInterceptor/FOO_IORInterceptor.h
+++ b/TAO/tests/Portable_Interceptors/IORInterceptor/FOO_IORInterceptor.h
@@ -78,7 +78,7 @@ public:
ACE_THROW_SPEC ((CORBA::SystemException));
virtual void adapter_manager_state_changed (
- PortableInterceptor::AdapterManagerId id,
+ const char * id,
PortableInterceptor::AdapterState state
ACE_ENV_ARG_DECL_WITH_DEFAULTS)
ACE_THROW_SPEC ((
diff --git a/TAO/tests/Sequence_Unit_Tests/Sequence_Unit_Tests.mpc b/TAO/tests/Sequence_Unit_Tests/Sequence_Unit_Tests.mpc
index b747a2264b8..b763787544e 100644
--- a/TAO/tests/Sequence_Unit_Tests/Sequence_Unit_Tests.mpc
+++ b/TAO/tests/Sequence_Unit_Tests/Sequence_Unit_Tests.mpc
@@ -31,6 +31,14 @@ project(*Bounded_String) : taoexe {
}
}
+project(*UB_Arr_Seq): taoexe, boost_unit_test_framework {
+ exename = unbounded_array_sequence_ut
+ Source_Files {
+ mock_array.cpp
+ unbounded_array_sequence_ut.cpp
+ }
+}
+
project(*Obj_Ref_Seq_Elem): taoexe, boost_unit_test_framework {
exename = object_reference_sequence_element_ut
Source_Files {
diff --git a/TAO/tests/Smart_Proxies/Benchmark/client.cpp b/TAO/tests/Smart_Proxies/Benchmark/client.cpp
index 6867bd8560d..9be492b2cf3 100644
--- a/TAO/tests/Smart_Proxies/Benchmark/client.cpp
+++ b/TAO/tests/Smart_Proxies/Benchmark/client.cpp
@@ -151,8 +151,6 @@ ACE_TMAIN (int argc, ACE_TCHAR *argv[])
Smart_Test_Factory,
-1);
- // To make KAI Compiler happy as it considers <test_factory> to be
- // an unused variable.
ACE_UNUSED_ARG (test_factory);
}
diff --git a/TAO/tests/Smart_Proxies/Policy/client.cpp b/TAO/tests/Smart_Proxies/Policy/client.cpp
index e8853ed58ea..04331a0df03 100644
--- a/TAO/tests/Smart_Proxies/Policy/client.cpp
+++ b/TAO/tests/Smart_Proxies/Policy/client.cpp
@@ -137,8 +137,6 @@ ACE_TMAIN (int argc, ACE_TCHAR *argv[])
Smart_Test_Factory (one_shot_factory),
-1);
- // To make KAI Compiler happy as it considers <test_factory> to be
- // an unused variable.
ACE_UNUSED_ARG (test_factory);
run_test (orb.in (), 1);
diff --git a/TAO/tests/Smart_Proxies/client.cpp b/TAO/tests/Smart_Proxies/client.cpp
index 94dd6b472c0..312191a87f5 100644
--- a/TAO/tests/Smart_Proxies/client.cpp
+++ b/TAO/tests/Smart_Proxies/client.cpp
@@ -86,8 +86,6 @@ ACE_TMAIN (int argc, ACE_TCHAR *argv[])
Smart_Test_Factory,
-1);
- // To make KAI Compiler happy as it considers <test_factory> to be
- // an unused variable.
ACE_UNUSED_ARG (test_factory);
Test_var server =
diff --git a/TAO/tests/Smart_Proxies/dtor/client.cpp b/TAO/tests/Smart_Proxies/dtor/client.cpp
index 9429a29675d..73afdac32dc 100644
--- a/TAO/tests/Smart_Proxies/dtor/client.cpp
+++ b/TAO/tests/Smart_Proxies/dtor/client.cpp
@@ -60,8 +60,6 @@ int ACE_TMAIN (int argc, ACE_TCHAR* argv[])
Test_Smart_Factory,
-1);
- // To make KAI Compiler happy as it considers <test_factory> to be
- // an unused variable.
ACE_UNUSED_ARG (test_factory);
Test_var server =
diff --git a/THANKS b/THANKS
index 931b45b7a58..5315b60830d 100644
--- a/THANKS
+++ b/THANKS
@@ -2100,6 +2100,7 @@ Qingbo Cai <qingbo dot cai at case dot edu>
David White <david dot white dot 7 at gmail dot com>
Jason Zhang <zzm9981 at 163 dot com>
Mark Paulus <mark dot paulus at mci dot com>
+Martin Cornelius <Martin at Cornelius at smiths-heimann dot com>
I would particularly like to thank Paul Stephenson, who worked with me
at Ericsson in the early 1990's. Paul devised the recursive Makefile
diff --git a/ace/ACE.cpp b/ace/ACE.cpp
index af89390c667..4548d7596bd 100644
--- a/ace/ACE.cpp
+++ b/ace/ACE.cpp
@@ -164,7 +164,8 @@ ACE::compiler_beta_version (void)
char
ACE::debug (void)
{
- return ACE::debug_;
+ static const char* debug = ACE_OS::getenv ("ACE_DEBUG");
+ return ACE::debug_ != 0 ? ACE::debug_ : (debug != 0 ? (*debug - '0'): 0);
}
void
diff --git a/ace/ATM_Addr.h b/ace/ATM_Addr.h
index c3f112e8c1c..551b5ca1b5c 100644
--- a/ace/ATM_Addr.h
+++ b/ace/ATM_Addr.h
@@ -74,7 +74,7 @@ public:
u_char selector = DEFAULT_SELECTOR);
/**
- * Creates an <ACE_ATM_Addr> from an ATMSAPAddress structure. This
+ * Creates an ACE_ATM_Addr from an ATMSAPAddress structure. This
* is vendor specific (FORE systems). May need to change when other
* vendors are supported.
*/
@@ -82,7 +82,7 @@ public:
u_char selector = DEFAULT_SELECTOR);
/**
- * Initializes an <ACE_ATM_Addr> from the <sap> which can be
+ * Initializes an ACE_ATM_Addr from the <sap> which can be
* "atm-address" (e.g.,
* "47.0005.80.ffe100.0000.f20f.2200.0020480694f9.00") or "hostname"
* (e.g., "frisbee.cs.wustl.edu").
@@ -98,12 +98,12 @@ public:
/// t_atm_sap_addr.SVE_tag_addr, t_atm_sap_addr.SVE_tag_selector)
void init (u_char selector = DEFAULT_SELECTOR);
- /// Initializes from another <ACE_ATM_Addr>.
+ /// Initializes from another ACE_ATM_Addr.
int set (const ACE_ATM_Addr &,
u_char selector = DEFAULT_SELECTOR);
/**
- * Initializes an <ACE_ATM_Addr> from an ATMSAPAddress/sockaddr_atm
+ * Initializes an ACE_ATM_Addr from an ATMSAPAddress/sockaddr_atm
* structure. This is vendor specific (FORE systems). May need to
* change when other vendors are supported.
*/
@@ -111,7 +111,7 @@ public:
u_char selector = DEFAULT_SELECTOR);
/**
- * Initializes an <ACE_ATM_Addr> from the <sap> which can be
+ * Initializes an ACE_ATM_Addr from the <sap> which can be
* "atm-address" (e.g.,
* "47.0005.80.ffe100.0000.f20f.2200.0020480694f9.00") or "hostname"
* (e.g., "frisbee.cs.wustl.edu").
@@ -120,7 +120,7 @@ public:
u_char selector = DEFAULT_SELECTOR);
/**
- * Initializes an <ACE_ATM_Addr> from the <sap> which can be
+ * Initializes an ACE_ATM_Addr from the <sap> which can be
* "atm-address" (e.g.,
* "47.0005.80.ffe100.0000.f20f.2200.0020480694f9.00") or "hostname"
* (e.g., "frisbee.cs.wustl.edu").
diff --git a/ace/Array_Map.h b/ace/Array_Map.h
index 3425e917d4c..06729141183 100644
--- a/ace/Array_Map.h
+++ b/ace/Array_Map.h
@@ -219,7 +219,7 @@ public:
/// Remove range of elements [@a first, @a last) from the map.
/**
- * @note [@a first, @last) must be valid range within the map.
+ * @note [@a first, @a last) must be valid range within the map.
*/
void erase (iterator first, iterator last);
diff --git a/ace/Atomic_Op_T.h b/ace/Atomic_Op_T.h
index 89703186356..549ee67274b 100644
--- a/ace/Atomic_Op_T.h
+++ b/ace/Atomic_Op_T.h
@@ -112,7 +112,7 @@ public:
* Returns a reference to the underlying <ACE_LOCK>. This makes it
* possible to acquire the lock explicitly, which can be useful in
* some cases if you instantiate the <ACE_Atomic_Op_Ex> with an
- * <ACE_Recursive_Mutex> or <ACE_Process_Mutex>. @note the right
+ * ACE_Recursive_Mutex or ACE_Process_Mutex. @note the right
* name would be lock_, but HP/C++ will choke on that!
*/
ACE_LOCK &mutex (void);
@@ -211,8 +211,8 @@ public:
/**
* Returns a reference to the underlying <ACE_LOCK>. This makes it
* possible to acquire the lock explicitly, which can be useful in
- * some cases if you instantiate the <ACE_Atomic_Op> with an
- * <ACE_Recursive_Mutex> or <ACE_Process_Mutex>.
+ * some cases if you instantiate the ACE_Atomic_Op with an
+ * ACE_Recursive_Mutex or ACE_Process_Mutex.
*
* @deprecated This member function is deprecated and so may go away in
* the future. If you need access to the underlying mutex, consider
diff --git a/ace/Base_Thread_Adapter.h b/ace/Base_Thread_Adapter.h
index b4425f32896..9eda6e877a5 100644
--- a/ace/Base_Thread_Adapter.h
+++ b/ace/Base_Thread_Adapter.h
@@ -29,6 +29,8 @@
#if (defined (ACE_HAS_VERSIONED_NAMESPACE) && ACE_HAS_VERSIONED_NAMESPACE == 1)
# define ACE_THREAD_ADAPTER_NAME ACE_PREPROC_CONCATENATE(ACE_VERSIONED_NAMESPACE_NAME, _ace_thread_adapter)
+#else
+# define ACE_THREAD_ADAPTER_NAME ace_thread_adapter
#endif /* ACE_HAS_VERSIONED_NAMESPACE == 1 */
// Run the thread entry point for the ACE_Thread_Adapter. This must
@@ -125,7 +127,7 @@ protected:
# endif /* ACE_HAS_WIN32_STRUCTURAL_EXCEPTIONS */
);
/// Inherit the logging features if the parent thread has an
- /// <ACE_Log_Msg>.
+ /// ACE_Log_Msg.
void inherit_log_msg (void);
private:
diff --git a/ace/CDR_Base.h b/ace/CDR_Base.h
index 1caa81333ad..3721b8f4ec2 100644
--- a/ace/CDR_Base.h
+++ b/ace/CDR_Base.h
@@ -38,7 +38,6 @@
#include "ace/Basic_Types.h"
#include "ace/Default_Constants.h"
-#include "ace/If_Then_Else.h"
ACE_BEGIN_VERSIONED_NAMESPACE_DECL
@@ -168,15 +167,13 @@ public:
* avoid complaints from all compilers is to define them all.
*/
//@{
- typedef ACE::If_Then_Else<(sizeof (bool) == 1),
- bool,
- unsigned char>::result_type Boolean;
# if !defined (ACE_CDR_WCHAR_OVERRIDE) || defined(ACE_USES_WCHAR)
# undef ACE_CDR_WCHAR_OVERRIDE
# define ACE_CDR_WCHAR_OVERRIDE wchar_t
# endif
+ typedef bool Boolean;
typedef unsigned char Octet;
typedef char Char;
typedef ACE_CDR_WCHAR_OVERRIDE WChar;
diff --git a/ace/CDR_Stream.cpp b/ace/CDR_Stream.cpp
index 2ca41fe93ed..afc43abc05b 100644
--- a/ace/CDR_Stream.cpp
+++ b/ace/CDR_Stream.cpp
@@ -613,6 +613,30 @@ ACE_OutputCDR::write_array (const void *x,
return false;
}
+
+ACE_CDR::Boolean
+ACE_OutputCDR::replace (ACE_CDR::Long x, char* loc)
+{
+ if (this->find (loc) == 0)
+ return false;
+
+#if !defined (ACE_ENABLE_SWAP_ON_WRITE)
+ *reinterpret_cast<ACE_CDR::Long*> (loc) = x;
+#else
+ if (!strm->do_byte_swap ())
+ {
+ *reinterpret_cast<ACE_CDR::Long *> (loc) = x;
+ }
+ else
+ {
+ ACE_CDR::swap_4 (reinterpret_cast<const char*> (&x), loc);
+ }
+#endif /* ACE_ENABLE_SWAP_ON_WRITE */
+
+ return true;
+}
+
+
ACE_CDR::Boolean
ACE_OutputCDR::write_boolean_array (const ACE_CDR::Boolean* x,
ACE_CDR::ULong length)
@@ -632,6 +656,23 @@ ACE_OutputCDR::write_boolean_array (const ACE_CDR::Boolean* x,
return this->good_bit ();
}
+
+ACE_Message_Block*
+ACE_OutputCDR::find (char* loc)
+{
+ ACE_Message_Block* mb = 0;
+ for (mb = &this->start_; mb != 0; mb = mb->cont ())
+ {
+ if (loc <= mb->wr_ptr () && loc >= mb->rd_ptr ())
+ {
+ break;
+ }
+ }
+
+ return mb;
+}
+
+
// ****************************************************************
ACE_InputCDR::ACE_InputCDR (const char *buf,
diff --git a/ace/CDR_Stream.h b/ace/CDR_Stream.h
index 3c245ab945b..d6e7560e7fe 100644
--- a/ace/CDR_Stream.h
+++ b/ace/CDR_Stream.h
@@ -219,6 +219,11 @@ public:
ACE_CDR::Boolean write_double (const ACE_CDR::Double &x);
ACE_CDR::Boolean write_longdouble (const ACE_CDR::LongDouble &x);
+ // Overwrite the stream at the specified location that is previously
+ // written as a long type placeholder. There is no alignment required
+ // since the alignment is done before writing the long type placeholder.
+ ACE_CDR::Boolean replace (ACE_CDR::Long x, char* loc);
+
/// For string we offer methods that accept a precomputed length.
ACE_CDR::Boolean write_string (const ACE_CDR::Char *x);
ACE_CDR::Boolean write_string (ACE_CDR::ULong len,
@@ -393,7 +398,13 @@ public:
/// Set the underlying GIOP version..
int get_version (ACE_CDR::Octet &major,
ACE_CDR::Octet &minor);
+
private:
+
+ // Find the message block in the chain of message blocks
+ // that the provide location locates.
+ ACE_Message_Block* find (char* loc);
+
/// disallow copying...
ACE_OutputCDR (const ACE_OutputCDR& rhs);
ACE_OutputCDR& operator= (const ACE_OutputCDR& rhs);
diff --git a/ace/Cached_Connect_Strategy_T.h b/ace/Cached_Connect_Strategy_T.h
index f04392846cb..4d928e57f54 100644
--- a/ace/Cached_Connect_Strategy_T.h
+++ b/ace/Cached_Connect_Strategy_T.h
@@ -40,7 +40,7 @@ ACE_BEGIN_VERSIONED_NAMESPACE_DECL
* subsequent re-use of unused, but available, connections.
*
* <Cached_Connect_Strategy> is intended to be used as a
- * plug-in connection strategy for <ACE_Strategy_Connector>.
+ * plug-in connection strategy for ACE_Strategy_Connector.
* It's added value is re-use of established connections and
* tweaking the role of the cache as per the caching strategy.
*/
@@ -191,7 +191,7 @@ protected:
* maximum size.
*
* <Bounded_Cached_Connect_Strategy> is intended to be used as a
- * plug-in connection strategy for <ACE_Strategy_Connector>.
+ * plug-in connection strategy for ACE_Strategy_Connector.
* It's added value is re-use of established connections and
* tweaking the role of the cache as per the caching strategy.
* Thanks to Edan Ayal <edana@bandwiz.com> for contributing this
diff --git a/ace/Capabilities.h b/ace/Capabilities.h
index a970722e803..609f3ddaa06 100644
--- a/ace/Capabilities.h
+++ b/ace/Capabilities.h
@@ -124,12 +124,12 @@ protected:
* This is a container class for ACE Capabilities
* values. Currently exist three different capability values:
* <ACE_IntCapEntry> (integer), <ACE_BoolCapEntry> (bool) and
- * <ACE_StringCapEntry> (String). An <ACE_Capabilities> is a
+ * <ACE_StringCapEntry> (String). An ACE_Capabilities is a
* unordered set of pair = (<String>, <ACE_CapEntry> *). Where
* the first component is the name of capability and the second
* component is a pointer to the capability value container. A
- * <FILE> is a container for <ACE_Capabilities>, the
- * <ACE_Capabilities> has a name in the file, as a termcap file.
+ * <FILE> is a container for ACE_Capabilities, the
+ * ACE_Capabilities has a name in the file, as a termcap file.
*/
class ACE_Export ACE_Capabilities
{
diff --git a/ace/Cleanup.h b/ace/Cleanup.h
index 37e46b7e7cb..bd1f9c2e23c 100644
--- a/ace/Cleanup.h
+++ b/ace/Cleanup.h
@@ -30,9 +30,10 @@
#if (defined (ACE_HAS_VERSIONED_NAMESPACE) && ACE_HAS_VERSIONED_NAMESPACE == 1)
# include "ace/Global_Macros.h"
# define ACE_CLEANUP_DESTROYER_NAME ACE_PREPROC_CONCATENATE(ACE_VERSIONED_NAMESPACE_NAME, _ace_cleanup_destroyer)
+#else
+# define ACE_CLEANUP_DESTROYER_NAME ace_cleanup_destroyer
#endif /* ACE_HAS_VERSIONED_NAMESPACE == 1 */
-
ACE_BEGIN_VERSIONED_NAMESPACE_DECL
/**
diff --git a/ace/DLL.cpp b/ace/DLL.cpp
index 00363d51bbf..62f85a19ebe 100644
--- a/ace/DLL.cpp
+++ b/ace/DLL.cpp
@@ -46,6 +46,33 @@ ACE_DLL::ACE_DLL (const ACE_DLL &rhs)
this->error ()));
}
+// Assignment operator
+
+const ACE_DLL &
+ACE_DLL::operator= (const ACE_DLL &rhs)
+{
+ ACE_TRACE ("ACE_DLL::operator= (const ACE_DLL &)");
+
+ open_mode_ = 0;
+ dll_name_ = 0;
+ close_handle_on_destruction_=0;
+ dll_handle_=0;
+ error_=0;
+
+ if (rhs.dll_name_
+ // This will automatically up the refcount and initialize *this
+ && this->open (rhs.dll_name_,
+ rhs.open_mode_,
+ rhs.close_handle_on_destruction_) != 0
+ && ACE::debug ())
+ ACE_ERROR ((LM_ERROR,
+ ACE_LIB_TEXT ("ACE_DLL::operator=: error: %s\n"),
+ this->error ()));
+
+ return *this;
+}
+
+
// If the library name and the opening mode are specified than on
// object creation the library is implicitly opened.
diff --git a/ace/DLL.h b/ace/DLL.h
index 022521ae6a7..ae1e882f01d 100644
--- a/ace/DLL.h
+++ b/ace/DLL.h
@@ -57,6 +57,10 @@ public:
*/
explicit ACE_DLL (int close_handle_on_destruction = 1);
+ /// Allow assignment
+ const ACE_DLL& operator= (const ACE_DLL &rhs);
+
+
/**
* This constructor performs the actions of open() during construction.
* @param dll_name The name or path of the DLL to load.
@@ -156,10 +160,8 @@ private:
ACE_SHLIB_HANDLE handle = 0);
- // Disallow assignment since we don't handle it.
- void operator= (const ACE_DLL &);
-
-private:
+ //private:
+public:
/// Open mode.
int open_mode_;
diff --git a/ace/DLL_Manager.cpp b/ace/DLL_Manager.cpp
index 783b524c5a2..ce2c3d9cf4d 100644
--- a/ace/DLL_Manager.cpp
+++ b/ace/DLL_Manager.cpp
@@ -54,10 +54,6 @@ ACE_DLL_Handle::open (const ACE_TCHAR *dll_name,
ACE_TRACE ("ACE_DLL_Handle::open");
ACE_MT (ACE_GUARD_RETURN (ACE_Thread_Mutex, ace_mon, this->lock_, 0));
- //ACE_DEBUG ((LM_DEBUG, ACE_LIB_TEXT ("dll_name: %s; open_mode: %d \n"),
- // dll_name,
- // open_mode));
-
if (this->dll_name_)
{
// Once dll_name_ has been set, it can't be changed..
@@ -65,7 +61,7 @@ ACE_DLL_Handle::open (const ACE_TCHAR *dll_name,
{
if (ACE::debug ())
ACE_ERROR ((LM_ERROR,
- ACE_LIB_TEXT ("ACE_DLL_Handle::open: error, ")
+ ACE_LIB_TEXT ("(%P|%t) DLL_Handle::open: error, ")
ACE_LIB_TEXT ("tried to reopen %s with name %s\n"),
this->dll_name_,
dll_name));
@@ -86,10 +82,6 @@ ACE_DLL_Handle::open (const ACE_TCHAR *dll_name,
this->handle_ = handle;
else
{
- if (ACE::debug ())
- ACE_DEBUG ((LM_DEBUG, ACE_LIB_TEXT ("ACE_DLL_Handle::open: calling dlopen on ")
- ACE_LIB_TEXT ("\"%s\"\n"), dll_name));
-
/*
** Get the set of names to try loading. We need to do this to
** properly support the ability for a user to specify a simple,
@@ -129,18 +121,34 @@ ACE_DLL_Handle::open (const ACE_TCHAR *dll_name,
ACE_TString *name = 0;
while (name_iter.next (name))
{
- if (ACE::debug ())
+ if (ACE::debug () > 1)
ACE_DEBUG ((LM_DEBUG,
- ACE_LIB_TEXT ("ACE_DLL_Handle::open: Trying to open DLL %s with %s name\n"),
- this->dll_name_,
- name->c_str ()));
+ ACE_LIB_TEXT ("(%P|%t) ACE_DLL_Handle::open: ")
+ ACE_LIB_TEXT ("calling dlopen on ")
+ ACE_LIB_TEXT ("\"%s\"\n"), name->c_str ()));
// The ACE_SHLIB_HANDLE object is obtained.
this->handle_ = ACE_OS::dlopen (name->c_str (),
open_mode);
- if (this->handle_ != ACE_SHLIB_INVALID_HANDLE) // Good one
+
+ if (this->handle_ != ACE_SHLIB_INVALID_HANDLE) // Good one?
break;
+ // If errno is ENOENT we just skip over this one,
+ // anything else - like an undefined symbol, for
+ // instance must be flagged here or the next error will
+ // mask it.
+ // @TODO: If we've found our DLL _and_ it's
+ // broken, should we continue at all?
+ if (ACE::debug () && (errno != 0) && (errno != ENOENT))
+ ACE_ERROR ((LM_ERROR,
+ ACE_LIB_TEXT ("(%P|%t) ACE_DLL_Handle::open: ")
+ ACE_LIB_TEXT ("Attempt to open \'%s\' failed ")
+ ACE_LIB_TEXT ("(%d): %s\n"),
+ name->c_str (),
+ errno,
+ this->error ()->c_str ()));
+
#if defined (AIX)
// AIX often puts the shared library file (most often named
// shr.o) inside an archive library. If this is an archive
@@ -154,11 +162,35 @@ ACE_DLL_Handle::open (const ACE_TCHAR *dll_name,
aix_pathname[name->length ()] = '\0';
ACE_OS::strcat (aix_pathname, ACE_LIB_TEXT ("(shr.o)"));
open_mode |= RTLD_MEMBER;
+
+ if (ACE::debug () > 1)
+ ACE_DEBUG ((LM_DEBUG,
+ ACE_LIB_TEXT ("(%P|%t) ACE_DLL_Handle::open: ")
+ ACE_LIB_TEXT ("calling dlopen on ")
+ ACE_LIB_TEXT ("\"%s\"\n"), aix_pathname));
+
this->handle_ = ACE_OS::dlopen (aix_pathname, open_mode);
if (this->handle_ != ACE_SHLIB_INVALID_HANDLE)
break;
+
+ // If errno is ENOENT we just skip over this one, anything
+ // else - like an undefined symbol, for instance
+ // must be flagged here or the next error will mask it.
+ //
+ // @TODO: If we've found our DLL _and_ it's broken,
+ // should we continue at all?
+ if (ACE::debug () && (errno != 0) && (errno != ENOENT))
+ ACE_ERROR ((LM_ERROR,
+ ACE_LIB_TEXT ("(%P|%t) ACE_DLL_Handle::open: ")
+ ACE_LIB_TEXT ("Attempt to open \'%s\' failed")
+ ACE_LIB_TEXT (" (%d): %s\n"),
+ name->c_str (),
+ errno,
+ this->error ()->c_str ()));
+
}
#endif /* AIX */
+
name_iter.advance ();
}
@@ -166,7 +198,9 @@ ACE_DLL_Handle::open (const ACE_TCHAR *dll_name,
{
if (ACE::debug ())
ACE_ERROR ((LM_ERROR,
- ACE_LIB_TEXT ("ACE_DLL_Handle::open: Invalid handle when opening DLL %s: %s\n"),
+ ACE_LIB_TEXT ("(%P|%t) DLL_Handle::open: ")
+ ACE_LIB_TEXT ("Invalid handle while ")
+ ACE_LIB_TEXT ("opening DLL \"%s\": %s\n"),
this->dll_name_,
this->error ()->c_str ()));
@@ -174,11 +208,6 @@ ACE_DLL_Handle::open (const ACE_TCHAR *dll_name,
}
}
}
- if (ACE::debug ())
- ACE_DEBUG ((LM_DEBUG,
- ACE_LIB_TEXT ("ACE_DLL_Handle::open: loading %s (%d)\n"),
- this->dll_name_,
- this->handle_));
++this->refcount_;
return 0;
@@ -200,15 +229,25 @@ ACE_DLL_Handle::close (int unload)
else
this->refcount_ = 0;
+ if (ACE::debug () > 2)
+ ACE_DEBUG ((LM_DEBUG,
+ ACE_LIB_TEXT ("(%P|%t) DLL_Handle::close: ")
+ ACE_LIB_TEXT ("closing %s (%d), refcount is down to %d\n"),
+ this->dll_name_,
+ this->handle_,
+ this->refcount_));
+
if (this->refcount_ == 0 &&
this->handle_ != ACE_SHLIB_INVALID_HANDLE &&
unload == 1)
{
- if (ACE::debug ())
+ if (ACE::debug () > 1)
ACE_DEBUG ((LM_DEBUG,
- ACE_LIB_TEXT ("ACE_DLL_Handle::close: unloading %s (%d)\n"),
+ ACE_LIB_TEXT ("(%P|%t) DLL_Handle::close: ")
+ ACE_LIB_TEXT ("Unloading %s (%d)\n"),
this->dll_name_,
this->handle_));
+
// First remove any associated Framework Components.
ACE_Framework_Repository * frPtr= ACE_Framework_Repository::instance ();
@@ -221,9 +260,10 @@ ACE_DLL_Handle::close (int unload)
this->handle_ = ACE_SHLIB_INVALID_HANDLE;
}
- if (retval != 0 && ACE::debug ())
+ if (retval != 0)
ACE_ERROR ((LM_ERROR,
- ACE_LIB_TEXT ("ACE_DLL_Handle::close error: \"%s\".\n"),
+ ACE_LIB_TEXT ("(%P|%t) DLL_Handle::close: ")
+ ACE_LIB_TEXT ("failed with: \"%s\".\n"),
this->error ()->c_str ()));
return retval;
@@ -256,7 +296,8 @@ ACE_DLL_Handle::symbol (const ACE_TCHAR *sym_name, int ignore_errors)
{
if (ACE::debug ())
ACE_ERROR ((LM_ERROR,
- ACE_LIB_TEXT ("ACE_DLL_Handle::symbol (\"%s\") \"%s\".\n"),
+ ACE_LIB_TEXT ("(%P|%t) DLL_Handle::symbol (\"%s\") ")
+ ACE_LIB_TEXT (" failed with \"%s\".\n"),
auto_name.get (),
this->error ()->c_str ()));
@@ -277,9 +318,9 @@ ACE_DLL_Handle::get_handle (int become_owner)
if (this->refcount_ == 0 && become_owner != 0)
{
- if (ACE::debug ())
+ if (ACE::debug () > 1)
ACE_ERROR ((LM_ERROR,
- ACE_LIB_TEXT ("ACE_DLL_Handle::get_handle: ")
+ ACE_LIB_TEXT ("(%P|%t) DLL_Handle::get_handle: ")
ACE_LIB_TEXT ("cannot become owner, refcount == 0.\n")));
return ACE_SHLIB_INVALID_HANDLE;
@@ -293,12 +334,13 @@ ACE_DLL_Handle::get_handle (int become_owner)
this->handle_ = ACE_SHLIB_INVALID_HANDLE;
}
- ACE_DEBUG ((LM_DEBUG,
- ACE_LIB_TEXT ("ACE_DLL_Handle::get_handle: ")
- ACE_LIB_TEXT ("post call: handle %s, refcount %d\n"),
- this->handle_ == ACE_SHLIB_INVALID_HANDLE ?
+ if (ACE::debug () > 1)
+ ACE_DEBUG ((LM_DEBUG,
+ ACE_LIB_TEXT ("ACE_DLL_Handle::get_handle: ")
+ ACE_LIB_TEXT ("post call: handle %s, refcount %d\n"),
+ this->handle_ == ACE_SHLIB_INVALID_HANDLE ?
ACE_LIB_TEXT ("invalid") : ACE_LIB_TEXT ("valid"),
- this->refcount_));
+ this->refcount_));
return handle;
}
diff --git a/ace/Default_Constants.h b/ace/Default_Constants.h
index 05419382e97..b01ed091141 100644
--- a/ace/Default_Constants.h
+++ b/ace/Default_Constants.h
@@ -457,7 +457,7 @@
#endif /* ACE_MAX_DEFAULT_PORT */
// Default number of ACE_Event_Handlers supported by
-// <ACE_Timer_Heap>.
+// ACE_Timer_Heap.
# if !defined (ACE_DEFAULT_TIMERS)
# define ACE_DEFAULT_TIMERS _POSIX_TIMER_MAX
# endif /* ACE_DEFAULT_TIMERS */
diff --git a/ace/Dynamic_Service.cpp b/ace/Dynamic_Service.cpp
index dd0d8d0c679..9af5fdf2c65 100644
--- a/ace/Dynamic_Service.cpp
+++ b/ace/Dynamic_Service.cpp
@@ -25,6 +25,18 @@ ACE_Dynamic_Service<TYPE>::instance (const ACE_TCHAR *name)
return dynamic_cast<TYPE *> (svc_obj);
}
+
+template <class TYPE> TYPE *
+ACE_Dynamic_Service<TYPE>::instance (const ACE_Service_Gestalt* conf,
+ const ACE_TCHAR *name)
+{
+ ACE_Service_Object * svc_obj =
+ static_cast<ACE_Service_Object *> (ACE_Dynamic_Service_Base::instance (conf, name));
+ return dynamic_cast<TYPE *> (svc_obj);
+}
+
+
+
ACE_END_VERSIONED_NAMESPACE_DECL
#endif /* ACE_DYNAMIC_SERVICE_CPP */
diff --git a/ace/Dynamic_Service.h b/ace/Dynamic_Service.h
index 88ac4115c12..c9dcc8896c2 100644
--- a/ace/Dynamic_Service.h
+++ b/ace/Dynamic_Service.h
@@ -17,6 +17,7 @@
#include /**/ "ace/pre.h"
#include "ace/config-all.h"
+#include "ace/Global_Macros.h"
#if !defined (ACE_LACKS_PRAGMA_ONCE)
# pragma once
@@ -44,8 +45,27 @@ public:
/// Return instance using @a name to search the Service_Repository.
static TYPE* instance (const char *name);
+ static TYPE* instance (const ACE_Service_Gestalt* repo,
+ const ACE_TCHAR *name);
+
+#if defined (ACE_USES_WCHAR)
+
/// Return instance using @a name to search the Service_Repository.
- static TYPE* instance (const wchar_t *name);
+ static TYPE* instance (const ACE_ANTI_TCHAR *name);
+
+ static TYPE* instance (const ACE_Service_Gestalt* repo,
+ const ACE_ANTI_TCHAR *name);
+#endif // ACE_USES_WCHAR
+
+private:
+ ACE_UNIMPLEMENTED_FUNC
+ (ACE_Dynamic_Service ());
+
+ ACE_UNIMPLEMENTED_FUNC
+ (ACE_Dynamic_Service (const ACE_Dynamic_Service&));
+
+ ACE_UNIMPLEMENTED_FUNC
+ (ACE_Dynamic_Service& operator= (const ACE_Dynamic_Service&));
};
ACE_END_VERSIONED_NAMESPACE_DECL
diff --git a/ace/Dynamic_Service.inl b/ace/Dynamic_Service.inl
index 108ddd32a09..21fb05215e8 100644
--- a/ace/Dynamic_Service.inl
+++ b/ace/Dynamic_Service.inl
@@ -4,10 +4,22 @@
ACE_BEGIN_VERSIONED_NAMESPACE_DECL
+#if defined (ACE_USES_WCHAR)
+
template <class TYPE> ACE_INLINE TYPE *
ACE_Dynamic_Service<TYPE>::instance (const ACE_ANTI_TCHAR *name)
{
return instance (ACE_TEXT_TO_TCHAR_IN (name));
}
+template <class TYPE> ACE_INLINE TYPE *
+ACE_Dynamic_Service<TYPE>::instance (const ACE_Service_Gestalt* repo,
+ const ACE_ANTI_TCHAR *name)
+{
+ return instance (repo, ACE_TEXT_CHAR_TO_TCHAR (name));
+}
+
+
+#endif // ACE_USES_WCHAR
+
ACE_END_VERSIONED_NAMESPACE_DECL
diff --git a/ace/Dynamic_Service_Base.cpp b/ace/Dynamic_Service_Base.cpp
index bec17fb079f..8e55675c6ac 100644
--- a/ace/Dynamic_Service_Base.cpp
+++ b/ace/Dynamic_Service_Base.cpp
@@ -11,6 +11,7 @@ ACE_RCSID (ace,
ACE_BEGIN_VERSIONED_NAMESPACE_DECL
+
void
ACE_Dynamic_Service_Base::dump (void) const
{
@@ -23,24 +24,74 @@ ACE_Dynamic_Service_Base::dump (void) const
#endif /* ACE_HAS_DUMP */
}
-// Get the instance using <name>.
+// Get the instance using <name> for the current global
+// service configuration repository.
void *
ACE_Dynamic_Service_Base::instance (const ACE_TCHAR *name)
{
ACE_TRACE ("ACE_Dynamic_Service_Base::instance");
- const ACE_Service_Type *svc_rec;
+ return instance (ACE_Service_Config::current (), name);
+}
+
+
+// Find a service registration
+
+const ACE_Service_Type *
+ACE_Dynamic_Service_Base::find_i (const ACE_Service_Gestalt* &repo,
+ const ACE_TCHAR *name)
+{
+ ACE_TRACE ("ACE_Dynamic_Service_Base::find_i");
+ const ACE_Service_Type *svc_rec = 0;
+
+ ACE_Service_Gestalt* global = ACE_Service_Config::global ();
+
+ for ( ; repo->find (name, &svc_rec) == -1; repo = global)
+ {
+ // Check the static repo, too if different
+ if (repo == global)
+ break;
+ }
+
+ return svc_rec;
+}
+
+
+// Get the instance using <name> for specific configuration repository.
+
+void *
+ACE_Dynamic_Service_Base::instance (const ACE_Service_Gestalt* repo,
+ const ACE_TCHAR *name)
+{
+ ACE_TRACE ("ACE_Dynamic_Service_Base::instance");
+
+ void *obj = 0;
+ const ACE_Service_Type_Impl *type = 0;
+
+ const ACE_Service_Gestalt* repo_found = repo;
+
+ const ACE_Service_Type *svc_rec = find_i (repo_found, name);
+ if (svc_rec != 0)
+ {
+ type = svc_rec->type ();
+ if (type != 0)
+ obj = type->object ();
+ }
- if (ACE_Service_Repository::instance ()->find (name,
- &svc_rec) == -1)
- return 0;
+ if (ACE::debug ())
+ {
+ ACE_DEBUG ((LM_DEBUG,
+ ACE_LIB_TEXT ("(%P|%t) DSB::instance, repo=%@, name=%s, type=%@ => %@"),
+ repo->repo_, name, type, obj));
- const ACE_Service_Type_Impl *type = svc_rec->type ();
+ if (repo->repo_ != repo_found->repo_)
+ ACE_DEBUG ((LM_DEBUG, ACE_LIB_TEXT (" [in repo=%@]\n"),
+ repo_found->repo_));
+ else
+ ACE_DEBUG ((LM_DEBUG, ACE_LIB_TEXT ("\n")));
- if (type == 0)
- return 0;
+ }
- void * const obj = type->object ();
return obj;
}
diff --git a/ace/Dynamic_Service_Base.h b/ace/Dynamic_Service_Base.h
index 17b7c5dda2f..0db626a919f 100644
--- a/ace/Dynamic_Service_Base.h
+++ b/ace/Dynamic_Service_Base.h
@@ -24,6 +24,9 @@
ACE_BEGIN_VERSIONED_NAMESPACE_DECL
+class ACE_Service_Gestalt;
+class ACE_Service_Type;
+
/**
* @class ACE_Dynamic_Service_Base
*
@@ -34,13 +37,33 @@ ACE_BEGIN_VERSIONED_NAMESPACE_DECL
*/
class ACE_Export ACE_Dynamic_Service_Base
{
+
public:
/// Dump the current static of the object
void dump (void) const;
protected:
- /// Return instance using @a name to search the Service_Repository.
+ /// Return instance using @a name to search the (default) Service_Repository.
static void* instance (const ACE_TCHAR *name);
+
+ /// Return instance using @a name to search the specific @a repo instance.
+ static void* instance (const ACE_Service_Gestalt* repo,
+ const ACE_TCHAR *name);
+
+ /// No need to create, or assign instances of this class
+ ACE_Dynamic_Service_Base (void);
+ ~ACE_Dynamic_Service_Base (void);
+ const ACE_Dynamic_Service_Base& operator= (const ACE_Dynamic_Service_Base&);
+
+private:
+ /// Implement the service search policy, i.e. "look for the service first
+ /// locally and then globally"
+ static const ACE_Service_Type *find_i (const ACE_Service_Gestalt* &repo,
+ const ACE_TCHAR *name);
+
+ /// The dependency declaration class needs access to the service search
+ /// policy, implemented by find_i()
+ friend class ACE_Dynamic_Service_Dependency;
};
ACE_END_VERSIONED_NAMESPACE_DECL
diff --git a/ace/Global_Macros.h b/ace/Global_Macros.h
index 8487880e797..2f24a1c3646 100644
--- a/ace/Global_Macros.h
+++ b/ace/Global_Macros.h
@@ -570,7 +570,7 @@ ACE_Static_Svc_Descriptor ace_svc_desc_##SERVICE_CLASS = { NAME, TYPE, FN, FLAGS
class ACE_Static_Svc_##SERVICE_CLASS {\
public:\
ACE_Static_Svc_##SERVICE_CLASS() { \
- ACE_Service_Config::static_svcs ()->insert (\
+ ACE_Service_Config::insert (\
&ace_svc_desc_##SERVICE_CLASS); \
} \
};
@@ -583,7 +583,7 @@ ACE_Static_Svc_##SERVICE_CLASS ace_static_svc_##SERVICE_CLASS
class ACE_Static_Svc_##SERVICE_CLASS {\
public:\
ACE_Static_Svc_##SERVICE_CLASS() { \
- ACE_Service_Config::static_svcs ()->insert (\
+ ACE_Service_Config::insert (\
&ace_svc_desc_##SERVICE_CLASS); \
} \
};\
diff --git a/ace/Hash_Map_Manager_T.h b/ace/Hash_Map_Manager_T.h
index 23ce8d690ec..5bd83664298 100644
--- a/ace/Hash_Map_Manager_T.h
+++ b/ace/Hash_Map_Manager_T.h
@@ -308,8 +308,8 @@ public:
/**
* Returns a reference to the underlying <ACE_LOCK>. This makes it
* possible to acquire the lock explicitly, which can be useful in
- * some cases if you instantiate the <ACE_Atomic_Op> with an
- * <ACE_Recursive_Mutex> or <ACE_Process_Mutex>, or if you need to
+ * some cases if you instantiate the ACE_Atomic_Op with an
+ * ACE_Recursive_Mutex or ACE_Process_Mutex, or if you need to
* guard the state of an iterator.
* @note The right name would be <lock>, but HP/C++ will choke on that!
*/
diff --git a/ace/Log_Msg.h b/ace/Log_Msg.h
index bc890417445..40811d66d99 100644
--- a/ace/Log_Msg.h
+++ b/ace/Log_Msg.h
@@ -702,6 +702,8 @@ ACE_END_VERSIONED_NAMESPACE_DECL
#if (defined (ACE_HAS_VERSIONED_NAMESPACE) && ACE_HAS_VERSIONED_NAMESPACE == 1)
# define ACE_TSS_CLEANUP_NAME ACE_PREPROC_CONCATENATE(ACE_,ACE_PREPROC_CONCATENATE(ACE_VERSIONED_NAMESPACE_NAME, _TSS_cleanup))
+#else
+# define ACE_TSS_CLEANUP_NAME ACE_TSS_cleanup
#endif /* ACE_HAS_VERSIONED_NAMESPACE == 1 */
diff --git a/ace/Log_Msg_Callback.h b/ace/Log_Msg_Callback.h
index 2d3af46a1b3..182186ac1ae 100644
--- a/ace/Log_Msg_Callback.h
+++ b/ace/Log_Msg_Callback.h
@@ -42,7 +42,7 @@ class ACE_Log_Record;
*
* Remember that there is one Log_Msg object per thread.
* Therefore, you may need to register your callback object with
- * many <ACE_Log_Msg> objects (and have the correct
+ * many ACE_Log_Msg objects (and have the correct
* synchronization in the <log> method) or have a separate
* callback object per Log_Msg object. Moreover,
* <ACE_Log_Msg_Callbacks> are not inherited when a new thread
diff --git a/ace/Log_Msg_IPC.h b/ace/Log_Msg_IPC.h
index 2b05c02de02..b50b04c05ce 100644
--- a/ace/Log_Msg_IPC.h
+++ b/ace/Log_Msg_IPC.h
@@ -21,7 +21,7 @@
#endif /* ACE_LACKS_PRAGMA_ONCE */
// IPC conduit between sender and client daemon. This should be
-// included in the <ACE_Log_Msg> class, but due to "order of include"
+// included in the ACE_Log_Msg class, but due to "order of include"
// problems it can't be...
#if defined (ACE_HAS_STREAM_PIPES)
# include "ace/SPIPE_Connector.h"
diff --git a/ace/Map_Manager.h b/ace/Map_Manager.h
index 847c7167e2c..b4722c34864 100644
--- a/ace/Map_Manager.h
+++ b/ace/Map_Manager.h
@@ -262,8 +262,8 @@ public:
/**
* Returns a reference to the underlying <ACE_LOCK>. This makes it
* possible to acquire the lock explicitly, which can be useful in
- * some cases if you instantiate the <ACE_Atomic_Op> with an
- * <ACE_Recursive_Mutex> or <ACE_Process_Mutex>, or if you need to
+ * some cases if you instantiate the ACE_Atomic_Op with an
+ * ACE_Recursive_Mutex or ACE_Process_Mutex, or if you need to
* guard the state of an iterator.
* @note The right name would be <lock>, but HP/C++ will choke on that!
*/
diff --git a/ace/OS_NS_sys_sendfile.cpp b/ace/OS_NS_sys_sendfile.cpp
index ba731a71acd..79bf827770f 100644
--- a/ace/OS_NS_sys_sendfile.cpp
+++ b/ace/OS_NS_sys_sendfile.cpp
@@ -14,7 +14,7 @@ ACE_BEGIN_VERSIONED_NAMESPACE_DECL
ssize_t
ACE_OS::sendfile_emulation (ACE_HANDLE out_fd,
ACE_HANDLE in_fd,
- ACE_LOFF_T * offset,
+ off_t * offset,
size_t count)
{
// @@ We may want set up a signal lease (or oplock) if supported by
@@ -28,7 +28,7 @@ ACE_OS::sendfile_emulation (ACE_HANDLE out_fd,
(void) ACE_OS::munmap (buf, count);
if (r > 0)
- *offset += static_cast<ACE_LOFF_T> (r);
+ *offset += static_cast<off_t> (r);
return r;
}
diff --git a/ace/OS_NS_sys_sendfile.h b/ace/OS_NS_sys_sendfile.h
index c12cdf15c47..7cba788971a 100644
--- a/ace/OS_NS_sys_sendfile.h
+++ b/ace/OS_NS_sys_sendfile.h
@@ -21,7 +21,7 @@
# pragma once
#endif /* ACE_LACKS_PRAGMA_ONCE */
-#include "ace/os_include/sys/os_types.h"
+#include "ace/Basic_Types.h" /* For ssize_t and off_t. */
#if defined (ACE_EXPORT_MACRO)
# undef ACE_EXPORT_MACRO
@@ -33,17 +33,17 @@ ACE_BEGIN_VERSIONED_NAMESPACE_DECL
namespace ACE_OS
{
- /// Sendfile wrapper.
+ /// Finds the length of a string (char version).
ACE_NAMESPACE_INLINE_FUNCTION
ssize_t sendfile (ACE_HANDLE out_fd,
ACE_HANDLE in_fd,
- ACE_LOFF_T * offset,
+ off_t * offset,
size_t count);
#ifndef ACE_HAS_SENDFILE
extern ssize_t sendfile_emulation (ACE_HANDLE out_fd,
ACE_HANDLE in_fd,
- ACE_LOFF_T * offset,
+ off_t * offset,
size_t count);
#endif /* !ACE_HAS_SENDFILE */
diff --git a/ace/OS_NS_sys_sendfile.inl b/ace/OS_NS_sys_sendfile.inl
index 3a1a03b32da..1c468354b3e 100644
--- a/ace/OS_NS_sys_sendfile.inl
+++ b/ace/OS_NS_sys_sendfile.inl
@@ -2,16 +2,20 @@
//
// $Id$
+#ifdef ACE_HAS_SENDFILE
+# include <sys/sendfile.h>
+#endif /* ACE_HAS_SENDFILE */
+
ACE_BEGIN_VERSIONED_NAMESPACE_DECL
ACE_INLINE ssize_t
ACE_OS::sendfile (ACE_HANDLE out_fd,
ACE_HANDLE in_fd,
- ACE_LOFF_T * offset,
+ off_t * offset,
size_t count)
{
#ifdef ACE_HAS_SENDFILE
- return sendfile (out_fd, in_fd, offset, count);
+ return ::sendfile (out_fd, in_fd, offset, count);
#else
return ACE_OS::sendfile_emulation (out_fd, in_fd, offset, count);
#endif /* ACE_HAS_SENDFILE */
diff --git a/ace/POSIX_Asynch_IO.h b/ace/POSIX_Asynch_IO.h
index 57eb53e169c..8e6e0be88fd 100644
--- a/ace/POSIX_Asynch_IO.h
+++ b/ace/POSIX_Asynch_IO.h
@@ -151,18 +151,17 @@ protected:
/**
* @class ACE_POSIX_Asynch_Operation
*
- * @brief This class implements <ACE_Asynch_Operation> for all
+ * @brief This class implements ACE_Asynch_Operation for all
* implementations of Proactor (AIOCB, SIG, SUN)
- * Specific future implementations
- * can derive from this class.
+ * Specific future implementations can derive from this class.
*/
class ACE_Export ACE_POSIX_Asynch_Operation : public virtual ACE_Asynch_Operation_Impl
{
public:
/**
* Initializes the factory with information which will be used with
- * each asynchronous call. If (<handle> == ACE_INVALID_HANDLE),
- * <ACE_Handler::handle> will be called on the <handler> to get the
+ * each asynchronous call. If (@a handle == ACE_INVALID_HANDLE),
+ * @c ACE_Handler::handle will be called on the handler to get the
* correct handle. No need for the Proactor since the sub classes
* will know the correct implementation Proactor class, since this
* Operation class itself was created by the correct implementation
@@ -173,7 +172,7 @@ public:
const void *completion_key,
ACE_Proactor *proactor = 0);
- /// Check the documentation for <ACE_Asynch_Operation::cancel>.
+ /// Check the documentation for ACE_Asynch_Operation::cancel.
int cancel (void);
// = Access methods.
@@ -192,7 +191,7 @@ protected:
virtual ~ACE_POSIX_Asynch_Operation (void);
// This call is for the POSIX implementation. This method is used by
- // <ACE_Asynch_Operation> to store some information with the
+ // ACE_Asynch_Operation to store some information with the
// Proactor after an <aio_> call is issued, so that the Proactor can
// retreve this information to do <aio_return> and <aio_error>.
// Passing a '0' ptr returns the status, indicating whether there
@@ -587,11 +586,11 @@ private:
* @class ACE_POSIX_Asynch_Accept_Result
*
* @brief This is that class which will be passed back to the
- * <handler> when the asynchronous accept completes.
+ * handler when the asynchronous accept completes.
*
*
* This class has all the information necessary for the
- * <handler> to uniquiely identify the completion of the
+ * handler to uniquiely identify the completion of the
* asynchronous accept.
*/
class ACE_Export ACE_POSIX_Asynch_Accept_Result : public virtual ACE_Asynch_Accept_Result_Impl,
diff --git a/ace/POSIX_Proactor.h b/ace/POSIX_Proactor.h
index e56a2f28409..a1ff00288a3 100644
--- a/ace/POSIX_Proactor.h
+++ b/ace/POSIX_Proactor.h
@@ -614,8 +614,8 @@ protected:
* @class ACE_POSIX_Asynch_Timer
*
* @brief This class is posted to the completion port when a timer
- * expires. When the <complete method> of this object is
- * called, the <handler>'s <handle_timeout> method will be
+ * expires. When the @c complete() method of this object is
+ * called, the handler's @c handle_timeout() method will be
* called.
*/
class ACE_Export ACE_POSIX_Asynch_Timer : public ACE_POSIX_Asynch_Result
@@ -640,7 +640,7 @@ protected:
/// Destructor.
virtual ~ACE_POSIX_Asynch_Timer (void) {}
- /// This method calls the <handler>'s handle_timeout method.
+ /// This method calls the handler's handle_timeout method.
virtual void complete (size_t bytes_transferred,
int success,
const void *completion_key,
diff --git a/ace/Parse_Node.cpp b/ace/Parse_Node.cpp
index e442c5e4b65..8e83a510bb5 100644
--- a/ace/Parse_Node.cpp
+++ b/ace/Parse_Node.cpp
@@ -31,19 +31,21 @@ ACE_Stream_Node::dump (void) const
}
void
-ACE_Stream_Node::apply (int & yyerrno)
+ACE_Stream_Node::apply (ACE_Service_Gestalt *config, int &yyerrno)
{
ACE_TRACE ("ACE_Stream_Node::apply");
- if (ACE_Service_Config::initialize (this->node_->record (),
- this->node_->parameters ()) == -1)
+ if (config->initialize (this->node_->record (config),
+ this->node_->parameters ()) == -1)
++yyerrno;
+#ifndef ACE_NLOGGING
if (ACE::debug ())
ACE_DEBUG ((LM_DEBUG,
- ACE_LIB_TEXT ("did stream on %s, error = %d\n"),
+ ACE_LIB_TEXT ("(%P|%t) Did stream on %s, error = %d\n"),
this->node_->name (),
yyerrno));
+#endif /* ACE_NLOGGING */
}
ACE_ALLOC_HOOK_DEFINE (ACE_Parse_Node)
@@ -178,32 +180,37 @@ ACE_Resume_Node::~ACE_Resume_Node (void)
}
void
-ACE_Suspend_Node::apply (int & yyerrno)
+ACE_Suspend_Node::apply (ACE_Service_Gestalt *config, int &yyerrno)
{
ACE_TRACE ("ACE_Suspend_Node::apply");
- if (ACE_Service_Config::suspend (this->name ()) == -1)
+ if (config->suspend (this->name ()) == -1)
++yyerrno;
+#ifndef ACE_NLOGGING
if (ACE::debug ())
ACE_DEBUG ((LM_DEBUG,
ACE_LIB_TEXT ("did suspend on %s, error = %d\n"),
this->name (),
yyerrno));
+#endif /* ACE_NLOGGING */
}
void
-ACE_Resume_Node::apply (int & yyerrno)
+ACE_Resume_Node::apply (ACE_Service_Gestalt *config, int &yyerrno)
{
ACE_TRACE ("ACE_Resume_Node::apply");
- if (ACE_Service_Config::resume (this->name ()) == -1)
+
+ if (config->resume (this->name ()) == -1)
++yyerrno;
+#ifndef ACE_NLOGGING
if (ACE::debug ())
ACE_DEBUG ((LM_DEBUG,
ACE_LIB_TEXT ("did resume on %s, error = %d\n"),
this->name (),
yyerrno));
+#endif /* ACE_NLOGGING */
}
ACE_ALLOC_HOOK_DEFINE (ACE_Remove_Node)
@@ -227,48 +234,49 @@ ACE_Remove_Node::~ACE_Remove_Node (void)
}
void
-ACE_Remove_Node::apply (int & yyerrno)
+ACE_Remove_Node::apply (ACE_Service_Gestalt *config, int &yyerrno)
{
ACE_TRACE ("ACE_Remove_Node::apply");
- if (ACE_Service_Config::remove (this->name ()) == -1)
+
+ if (config->remove (this->name ()) == -1)
++yyerrno;
+#ifndef ACE_NLOGGING
if (ACE::debug ())
ACE_DEBUG ((LM_DEBUG,
- ACE_LIB_TEXT ("did remove on %s, error = %d\n"),
+ ACE_LIB_TEXT ("(%P|%t) ACE_Remove_Node::apply")
+ ACE_LIB_TEXT (" - did remove on %s, error = %d\n"),
this->name (),
yyerrno));
+#endif /* ACE_NLOGGING */
}
-ACE_Dynamic_Node::ACE_Dynamic_Node (const ACE_Service_Type *sr,
+
+ACE_Dynamic_Node::ACE_Dynamic_Node (ACE_Service_Type_Factory const *stf,
ACE_TCHAR *parms)
- : ACE_Static_Node (sr->name (), parms),
- record_ (sr)
+ : ACE_Static_Node (stf->name (), parms)
+ , factory_ (stf)
{
ACE_TRACE ("ACE_Dynamic_Node::ACE_Dynamic_Node");
}
-const ACE_Service_Type *
-ACE_Dynamic_Node::record (void) const
-{
- ACE_TRACE ("ACE_Dynamic_Node::record");
- return this->record_;
-}
-
void
-ACE_Dynamic_Node::apply (int & yyerrno)
+ACE_Dynamic_Node::apply (ACE_Service_Gestalt *config, int &yyerrno)
{
ACE_TRACE ("ACE_Dynamic_Node::apply");
- if (ACE_Service_Config::initialize (this->record (),
- this->parameters ()) == -1)
+ if (config->initialize (this->factory_.get (),
+ this->parameters ()) == -1)
++yyerrno;
+#ifndef ACE_NLOGGING
if (ACE::debug ())
ACE_DEBUG ((LM_DEBUG,
- ACE_LIB_TEXT ("did dynamic on %s, error = %d\n"),
+ ACE_LIB_TEXT ("(%P|%t) ACE_Dynamic_Node::apply")
+ ACE_LIB_TEXT (" - did dynamic on %s, error = %d\n"),
this->name (),
yyerrno));
+#endif /* ACE_NLOGGING */
}
ACE_ALLOC_HOOK_DEFINE (ACE_Dynamic_Node)
@@ -305,17 +313,15 @@ ACE_Static_Node::ACE_Static_Node (const ACE_TCHAR *nm,
}
const ACE_Service_Type *
-ACE_Static_Node::record (void) const
+ACE_Static_Node::record (const ACE_Service_Gestalt *config) const
{
ACE_TRACE ("ACE_Static_Node::record");
ACE_Service_Type *sr = 0;
- if (ACE_Service_Repository::instance()->find
- (this->name (),
- (const ACE_Service_Type **) &sr) == -1)
+ if (config->find (this->name (), (const ACE_Service_Type **) &sr) == -1)
return 0;
- else
- return sr;
+
+ return sr;
}
ACE_TCHAR *
@@ -326,18 +332,20 @@ ACE_Static_Node::parameters (void) const
}
void
-ACE_Static_Node::apply (int & yyerrno)
+ACE_Static_Node::apply (ACE_Service_Gestalt *config, int &yyerrno)
{
ACE_TRACE ("ACE_Static_Node::apply");
- if (ACE_Service_Config::initialize (this->name (),
+ if (config->initialize (this->name (),
this->parameters ()) == -1)
++yyerrno;
+#ifndef ACE_NLOGGING
if (ACE::debug ())
ACE_DEBUG ((LM_DEBUG,
ACE_LIB_TEXT ("did static on %s, error = %d\n"),
this->name (),
yyerrno));
+#endif /* ACE_NLOGGING */
}
ACE_Static_Node::~ACE_Static_Node (void)
@@ -346,6 +354,7 @@ ACE_Static_Node::~ACE_Static_Node (void)
delete[] this->parameters_;
}
+
ACE_ALLOC_HOOK_DEFINE (ACE_Location_Node)
void
@@ -389,13 +398,6 @@ ACE_Location_Node::pathname (const ACE_TCHAR *p)
this->pathname_ = p;
}
-void
-ACE_Location_Node::set_symbol (void *s)
-{
- ACE_TRACE ("ACE_Location_Node::set_symbol");
- this->symbol_ = s;
-}
-
int
ACE_Location_Node::dispose (void) const
{
@@ -408,10 +410,25 @@ ACE_Location_Node::open_dll (int & yyerrno)
{
ACE_TRACE ("ACE_Location_Node::open_dll");
+#ifndef ACE_NLOGGING
+ if (ACE::debug ())
+ ACE_DEBUG ((LM_DEBUG,
+ ACE_LIB_TEXT ("(%P|%t) LN::open_dll - path=%s\n"),
+ this->pathname ()));
+#endif /* ACE_NLOGGING */
+
if (-1 == this->dll_.open (this->pathname ()))
{
++yyerrno;
+#ifndef ACE_NLOGGING
+ ACE_TCHAR *errmsg = this->dll_.error ();
+ ACE_ERROR ((LM_ERROR,
+ ACE_LIB_TEXT ("(%P|%t) LN - DLL::open failed for %s: %s\n"),
+ this->pathname (),
+ errmsg ? errmsg : ACE_LIB_TEXT ("no error reported")));
+#endif /* ACE_NLOGGING */
+
return -1;
}
@@ -419,6 +436,13 @@ ACE_Location_Node::open_dll (int & yyerrno)
}
+void
+ACE_Location_Node::set_symbol (void *s)
+{
+ ACE_TRACE ("ACE_Location_Node::set_symbol");
+ this->symbol_ = s;
+}
+
ACE_ALLOC_HOOK_DEFINE (ACE_Object_Node)
void
@@ -439,7 +463,8 @@ ACE_Object_Node::ACE_Object_Node (const ACE_TCHAR *path,
}
void *
-ACE_Object_Node::symbol (int & yyerrno,
+ACE_Object_Node::symbol (ACE_Service_Gestalt *,
+ int &yyerrno,
ACE_Service_Object_Exterminator *)
{
ACE_TRACE ("ACE_Object_Node::symbol");
@@ -455,7 +480,7 @@ ACE_Object_Node::symbol (int & yyerrno,
#ifndef ACE_NLOGGING
ACE_TCHAR *errmsg = this->dll_.error ();
ACE_ERROR ((LM_ERROR,
- ACE_LIB_TEXT ("ACE_DLL::symbol failed for object %s: %s\n"),
+ ACE_LIB_TEXT ("DLL::symbol failed for object %s: %s\n"),
object_name,
errmsg ? errmsg : ACE_LIB_TEXT ("no error reported")));
#endif /* ACE_NLOGGING */
@@ -555,7 +580,8 @@ ACE_Function_Node::make_func_name (ACE_TCHAR const * func_name)
}
void *
-ACE_Function_Node::symbol (int & yyerrno,
+ACE_Function_Node::symbol (ACE_Service_Gestalt *,
+ int &yyerrno,
ACE_Service_Object_Exterminator *gobbler)
{
typedef ACE_Service_Object *(*ACE_Service_Factory_Ptr)
@@ -582,7 +608,8 @@ ACE_Function_Node::symbol (int & yyerrno,
#ifndef ACE_NLOGGING
ACE_TCHAR *errmsg = this->dll_.error ();
ACE_ERROR ((LM_ERROR,
- ACE_LIB_TEXT ("ACE_DLL::symbol failed for function %s: %s\n"),
+ ACE_LIB_TEXT ("DLL::symbol failed for function %s: ")
+ ACE_LIB_TEXT ("%s\n"),
function_name,
errmsg ? errmsg :
ACE_LIB_TEXT ("no error reported")));
@@ -635,7 +662,7 @@ ACE_Dummy_Node::ACE_Dummy_Node (const ACE_Static_Node *static_node,
}
void
-ACE_Dummy_Node::apply (int & yyerrno)
+ACE_Dummy_Node::apply (ACE_Service_Gestalt *, int &yyerrno)
{
ACE_TRACE ("ACE_Dummy_Node::apply");
@@ -645,8 +672,6 @@ ACE_Dummy_Node::apply (int & yyerrno)
ACE_LIB_TEXT ("did operations on stream %s, error = %d\n"),
this->name (),
yyerrno));
-#else
- ACE_UNUSED_ARG (yyerrno);
#endif /* ACE_NLOGGING */
}
@@ -677,32 +702,28 @@ ACE_Static_Function_Node::ACE_Static_Function_Node (const ACE_TCHAR *func_name)
}
void *
-ACE_Static_Function_Node::symbol (int & yyerrno,
+ACE_Static_Function_Node::symbol (ACE_Service_Gestalt *config,
+ int &yyerrno,
ACE_Service_Object_Exterminator *gobbler)
{
ACE_TRACE ("ACE_Static_Function_Node::symbol");
- void *(*func)(ACE_Service_Object_Exterminator *) = 0;
this->symbol_ = 0;
// Locate the factory function <function_name> in the statically
// linked svcs.
- ACE_Static_Svc_Descriptor **ssdp = 0;
- ACE_STATIC_SVCS &svcs = *ACE_Service_Config::static_svcs ();
- ACE_TCHAR *function_name = const_cast<ACE_TCHAR *> (this->function_name_);
-
- for (ACE_STATIC_SVCS_ITERATOR iter (svcs);
- iter.next (ssdp) != 0;
- iter.advance ())
- {
- ACE_Static_Svc_Descriptor *ssd = *ssdp;
- if (ACE_OS::strcmp (ssd->name_,
- function_name) == 0)
- func = (void *(*)(ACE_Service_Object_Exterminator*)) ssd->alloc_;
+ ACE_Static_Svc_Descriptor *ssd = 0;
+ if (config->find_static_svc_descriptor (this->function_name_, &ssd) == -1)
+ {
+ yyerrno++;
+ ACE_ERROR_RETURN ((LM_ERROR,
+ ACE_LIB_TEXT ("(%P|%t) No static service registered for function %s\n"),
+ this->function_name_),
+ 0);
}
- if (func == 0)
+ if (ssd->alloc_ == 0)
{
yyerrno++;
@@ -711,14 +732,15 @@ ACE_Static_Function_Node::symbol (int & yyerrno,
++yyerrno;
ACE_ERROR_RETURN ((LM_ERROR,
- ACE_LIB_TEXT ("no static service registered for function %s\n"),
- function_name),
+ ACE_LIB_TEXT ("(%P|%t) No static service factory ")
+ ACE_LIB_TEXT ("function registered for function %s\n"),
+ this->function_name_),
0);
}
}
// Invoke the factory function and record it's return value.
- this->symbol_ = (*func) (gobbler);
+ this->symbol_ = (*ssd->alloc_) (gobbler);
if (this->symbol_ == 0)
{
diff --git a/ace/Parse_Node.h b/ace/Parse_Node.h
index acb07deadc8..e97d841bfa1 100644
--- a/ace/Parse_Node.h
+++ b/ace/Parse_Node.h
@@ -25,6 +25,7 @@
#if (ACE_USES_CLASSIC_SVC_CONF == 1)
#include "ace/DLL.h"
+#include "ace/Svc_Conf.h"
ACE_BEGIN_VERSIONED_NAMESPACE_DECL
@@ -51,7 +52,9 @@ public:
ACE_Parse_Node *link (void) const;
void link (ACE_Parse_Node *);
- virtual void apply (int & yyerrno) = 0;
+
+ /// Will update the yyereno member and/or the corresponding configuration
+ virtual void apply (ACE_Service_Gestalt *cfg, int &yyerrno) = 0;
const ACE_TCHAR *name (void) const;
void print (void) const;
@@ -65,6 +68,10 @@ public:
private:
const ACE_TCHAR *name_;
ACE_Parse_Node *next_;
+
+private:
+ ACE_UNIMPLEMENTED_FUNC (ACE_Parse_Node (const ACE_Parse_Node&))
+ ACE_UNIMPLEMENTED_FUNC (ACE_Parse_Node& operator= (const ACE_Parse_Node&))
};
/**
@@ -82,13 +89,20 @@ public:
ACE_Suspend_Node (const ACE_TCHAR *name);
~ACE_Suspend_Node (void);
- virtual void apply (int & yyerrno);
+ virtual void apply (ACE_Service_Gestalt *cfg, int &yyerrno);
/// Dump the state of an object.
void dump (void) const;
/// Declare the dynamic allocation hooks.
ACE_ALLOC_HOOK_DECLARE;
+
+private:
+ ACE_UNIMPLEMENTED_FUNC
+ (ACE_Suspend_Node (const ACE_Suspend_Node&))
+
+ ACE_UNIMPLEMENTED_FUNC
+ (ACE_Suspend_Node& operator= (const ACE_Suspend_Node&))
};
/**
@@ -106,13 +120,17 @@ public:
ACE_Resume_Node (const ACE_TCHAR *name);
~ACE_Resume_Node (void);
- virtual void apply (int & yyerrno);
+ virtual void apply (ACE_Service_Gestalt *cfg, int &yyerrno);
/// Dump the state of an object.
void dump (void) const;
/// Declare the dynamic allocation hooks.
ACE_ALLOC_HOOK_DECLARE;
+
+private:
+ ACE_UNIMPLEMENTED_FUNC (ACE_Resume_Node (const ACE_Resume_Node&))
+ ACE_UNIMPLEMENTED_FUNC (ACE_Resume_Node& operator= (const ACE_Resume_Node&))
};
/**
@@ -130,13 +148,17 @@ public:
ACE_Remove_Node (const ACE_TCHAR *name);
~ACE_Remove_Node (void);
- virtual void apply (int & yyerrno);
+ virtual void apply (ACE_Service_Gestalt *cfg, int &yyerrno);
/// Dump the state of an object.
void dump (void) const;
/// Declare the dynamic allocation hooks.
ACE_ALLOC_HOOK_DECLARE;
+
+private:
+ ACE_UNIMPLEMENTED_FUNC (ACE_Remove_Node (const ACE_Remove_Node&))
+ ACE_UNIMPLEMENTED_FUNC (ACE_Remove_Node& operator= (const ACE_Remove_Node&))
};
/**
@@ -154,8 +176,9 @@ public:
ACE_Static_Node (const ACE_TCHAR *name, ACE_TCHAR *params = 0);
virtual ~ACE_Static_Node (void);
- virtual void apply (int & yyerrno);
- virtual const ACE_Service_Type *record (void) const;
+ virtual void apply (ACE_Service_Gestalt *cfg, int &yyerrno);
+ virtual const ACE_Service_Type *record (const ACE_Service_Gestalt *g) const;
+
ACE_TCHAR *parameters (void) const;
/// Dump the state of an object.
@@ -167,8 +190,15 @@ public:
private:
/// "Command-line" parameters.
ACE_TCHAR *parameters_;
+
+private:
+ ACE_UNIMPLEMENTED_FUNC (ACE_Static_Node (const ACE_Static_Node&))
+ ACE_UNIMPLEMENTED_FUNC (ACE_Static_Node& operator= (const ACE_Static_Node&))
};
+
+class ACE_Service_Type_Factory;
+
/**
* @class ACE_Dynamic_Node
*
@@ -181,11 +211,13 @@ private:
class ACE_Dynamic_Node : public ACE_Static_Node
{
public:
- ACE_Dynamic_Node (const ACE_Service_Type *, ACE_TCHAR *params);
+ ACE_Dynamic_Node (ACE_Service_Type_Factory const *, ACE_TCHAR *params);
+
+ // ACE_Dynamic_Node (const ACE_Service_Type *, ACE_TCHAR *params);
virtual ~ACE_Dynamic_Node (void);
- virtual const ACE_Service_Type *record (void) const;
- virtual void apply (int & yyerrno);
+ // virtual const ACE_Service_Type *record (void) const;
+ virtual void apply (ACE_Service_Gestalt *cfg, int &yyerrno);
/// Dump the state of an object.
void dump (void) const;
@@ -195,7 +227,14 @@ public:
private:
/// Pointer to a descriptor that describes this node.
- const ACE_Service_Type *record_;
+ ACE_Auto_Ptr<const ACE_Service_Type_Factory> factory_;
+
+private:
+ ACE_UNIMPLEMENTED_FUNC
+ (ACE_Dynamic_Node (const ACE_Dynamic_Node&))
+
+ ACE_UNIMPLEMENTED_FUNC
+ (ACE_Dynamic_Node& operator= (const ACE_Dynamic_Node&))
};
/**
@@ -213,7 +252,7 @@ public:
ACE_Stream_Node (const ACE_Static_Node *, const ACE_Parse_Node *);
virtual ~ACE_Stream_Node (void);
- virtual void apply (int & yyerrno);
+ virtual void apply (ACE_Service_Gestalt *cfg, int &yyerrno);
/// Dump the state of an object.
void dump (void) const;
@@ -225,6 +264,42 @@ private:
/// Linked list of modules that are part of the stream.
const ACE_Static_Node *node_;
const ACE_Parse_Node *mods_;
+
+private:
+ ACE_UNIMPLEMENTED_FUNC (ACE_Stream_Node (const ACE_Stream_Node&))
+ ACE_UNIMPLEMENTED_FUNC (ACE_Stream_Node& operator= (const ACE_Stream_Node&))
+};
+
+/**
+ * @class ACE_Dummy_Node
+ *
+ * @brief I forget why this is here... ;-)
+ * @brief Used in a special case of static STREAM definintion
+ *
+ * @note This class is only meant for INTERNAL use by ACE.
+ */
+class ACE_Dummy_Node : public ACE_Parse_Node
+{
+public:
+ ACE_Dummy_Node (const ACE_Static_Node *, const ACE_Parse_Node *);
+ ~ACE_Dummy_Node (void);
+
+ virtual void apply (ACE_Service_Gestalt *cfg, int &yyerrno);
+
+ /// Dump the state of an object.
+ void dump (void) const;
+
+ /// Declare the dynamic allocation hooks.
+ ACE_ALLOC_HOOK_DECLARE;
+
+private:
+ /// Linked list of modules that we're dealing with.
+ const ACE_Static_Node *node_;
+ const ACE_Parse_Node *mods_;
+
+private:
+ ACE_UNIMPLEMENTED_FUNC (ACE_Dummy_Node (const ACE_Dummy_Node&))
+ ACE_UNIMPLEMENTED_FUNC (ACE_Dummy_Node& operator= (const ACE_Dummy_Node&))
};
/**
@@ -240,15 +315,19 @@ class ACE_Location_Node
{
public:
ACE_Location_Node (void);
- virtual void *symbol (int & yyerrno,
- ACE_Service_Object_Exterminator * = 0) = 0;
- virtual void set_symbol (void *h);
const ACE_DLL &dll (void);
const ACE_TCHAR *pathname (void) const;
void pathname (const ACE_TCHAR *h);
int dispose (void) const;
virtual ~ACE_Location_Node (void);
+ virtual void set_symbol (void *h);
+
+ /// Will update the yyerrno member and/or corresponding configuration
+ /// repository
+ virtual void *symbol (ACE_Service_Gestalt *cfgptr,
+ int &yyerrno,
+ ACE_Service_Object_Exterminator * = 0) = 0;
/// Dump the state of an object.
void dump (void) const;
@@ -274,6 +353,13 @@ protected:
/// Symbol that we've obtained from the shared library.
void *symbol_;
+
+private:
+ ACE_UNIMPLEMENTED_FUNC
+ (ACE_Location_Node (const ACE_Location_Node&))
+
+ ACE_UNIMPLEMENTED_FUNC
+ (ACE_Location_Node& operator= (const ACE_Location_Node&))
};
/**
@@ -289,7 +375,8 @@ class ACE_Object_Node : public ACE_Location_Node
{
public:
ACE_Object_Node (const ACE_TCHAR *pathname, const ACE_TCHAR *obj_name);
- virtual void *symbol (int & yyerrno,
+ virtual void *symbol (ACE_Service_Gestalt *config,
+ int &yyerrno,
ACE_Service_Object_Exterminator * = 0);
virtual ~ACE_Object_Node (void);
@@ -302,6 +389,10 @@ public:
private:
/// Name of the object that we're parsing.
const ACE_TCHAR *object_name_;
+
+private:
+ ACE_UNIMPLEMENTED_FUNC (ACE_Object_Node (const ACE_Object_Node&))
+ ACE_UNIMPLEMENTED_FUNC (ACE_Object_Node& operator= (const ACE_Object_Node&))
};
/**
@@ -317,7 +408,8 @@ class ACE_Function_Node : public ACE_Location_Node
{
public:
ACE_Function_Node (const ACE_TCHAR *pathname, const ACE_TCHAR *func_name);
- virtual void *symbol (int & yyerrno,
+ virtual void *symbol (ACE_Service_Gestalt *config,
+ int &yyerrno,
ACE_Service_Object_Exterminator *gobbler = 0);
virtual ~ACE_Function_Node (void);
@@ -352,34 +444,13 @@ private:
/// Name of the function that we're parsing.
const ACE_TCHAR *function_name_;
-};
-
-/**
- * @class ACE_Dummy_Node
- *
- * @brief I forget why this is here... ;-)
- *
- * @note This class is only meant for INTERNAL use by ACE.
- *
- * @internal
- */
-class ACE_Dummy_Node : public ACE_Parse_Node
-{
-public:
- ACE_Dummy_Node (const ACE_Static_Node *, const ACE_Parse_Node *);
- ~ACE_Dummy_Node (void);
- virtual void apply (int & yyerrno);
-
- /// Dump the state of an object.
- void dump (void) const;
-
- /// Declare the dynamic allocation hooks.
- ACE_ALLOC_HOOK_DECLARE;
private:
- /// Linked list of modules that we're dealing with.
- const ACE_Static_Node *node_;
- const ACE_Parse_Node *mods_;
+ ACE_UNIMPLEMENTED_FUNC
+ (ACE_Function_Node (const ACE_Function_Node&))
+
+ ACE_UNIMPLEMENTED_FUNC
+ (ACE_Function_Node& operator= (const ACE_Function_Node&))
};
/**
@@ -397,7 +468,8 @@ class ACE_Static_Function_Node : public ACE_Location_Node
{
public:
explicit ACE_Static_Function_Node (const ACE_TCHAR *func_name);
- virtual void *symbol (int & yyerrno,
+ virtual void *symbol (ACE_Service_Gestalt *config,
+ int &yyerrno,
ACE_Service_Object_Exterminator * = 0);
virtual ~ACE_Static_Function_Node (void);
@@ -410,11 +482,14 @@ public:
private:
/// Name of the function that we're parsing.
const ACE_TCHAR *function_name_;
-};
-/// Global variable used to communicate between the parser and the main
-/// program.
-extern ACE_Service_Config *ace_this_svc;
+private:
+ ACE_UNIMPLEMENTED_FUNC
+ (ACE_Static_Function_Node (const ACE_Static_Function_Node&))
+
+ ACE_UNIMPLEMENTED_FUNC
+ (ACE_Static_Function_Node& operator= (const ACE_Static_Function_Node&))
+};
ACE_END_VERSIONED_NAMESPACE_DECL
diff --git a/ace/Process_Manager.cpp b/ace/Process_Manager.cpp
index f476fc04a10..5324903d8dd 100644
--- a/ace/Process_Manager.cpp
+++ b/ace/Process_Manager.cpp
@@ -354,7 +354,7 @@ ACE_Process_Manager::handle_signal (int,
{
ACE_MT (ACE_GUARD_RETURN (ACE_Recursive_Thread_Mutex, ace_mon, lock_, -1));
- ssize_t i = this->find_proc (proc);
+ ssize_t const i = this->find_proc (proc);
if (i == -1)
return -1;
#if 0
@@ -400,7 +400,7 @@ ACE_Process_Manager::register_handler (ACE_Event_Handler *eh,
return 0;
}
- ssize_t i = this->find_proc (pid);
+ ssize_t const i = this->find_proc (pid);
if (i == -1)
{
@@ -443,7 +443,7 @@ ACE_Process_Manager::spawn (ACE_Process *process,
{
ACE_TRACE ("ACE_Process_Manager::spawn");
- pid_t pid = process->spawn (options);
+ pid_t const pid = process->spawn (options);
// Only include the pid in the parent's table.
if (pid == ACE_INVALID_PID || pid == 0)
@@ -479,7 +479,7 @@ ACE_Process_Manager::spawn_n (size_t n,
i < n;
i++)
{
- pid_t pid = this->spawn (options, event_handler);
+ pid_t const pid = this->spawn (options, event_handler);
if (pid == ACE_INVALID_PID || pid == 0)
// We're in the child or something's gone wrong.
return pid;
@@ -521,7 +521,7 @@ ACE_Process_Manager::append_proc (ACE_Process *proc,
// automagically. Get a handle to this new Process and tell the
// Reactor we're interested in <handling_input> on it.
- ACE_Reactor *r = this->reactor ();
+ ACE_Reactor * const r = this->reactor ();
if (r != 0)
r->register_handler (this, proc->gethandle ());
#endif /* ACE_WIN32 */
@@ -556,7 +556,7 @@ ACE_Process_Manager::remove (pid_t pid)
ACE_MT (ACE_GUARD_RETURN (ACE_Recursive_Thread_Mutex, ace_mon, this->lock_, -1));
- ssize_t i = this->find_proc (pid);
+ ssize_t const i = this->find_proc (pid);
if (i != -1)
return this->remove_proc (i);
@@ -584,7 +584,7 @@ ACE_Process_Manager::remove_proc (size_t i)
}
#if defined (ACE_WIN32)
- ACE_Reactor *r = this->reactor ();
+ ACE_Reactor * const r = this->reactor ();
if (r != 0)
r->remove_handler (this->process_table_[i].process_->gethandle (),
ACE_Event_Handler::DONT_CALL);
@@ -643,7 +643,7 @@ ACE_Process_Manager::terminate (pid_t pid,
// Check for duplicates and bail out if they're already
// registered...
- ssize_t i = this->find_proc (pid);
+ ssize_t const i = this->find_proc (pid);
if (i == -1)
// set "no such process" error
@@ -655,16 +655,16 @@ ACE_Process_Manager::terminate (pid_t pid,
int
ACE_Process_Manager::set_scheduler (const ACE_Sched_Params & params,
- pid_t pid)
+ pid_t pid)
{
- ACE_TRACE ("ACE_Process_Manager::sched_setscheduler");
+ ACE_TRACE ("ACE_Process_Manager::set_scheduler");
ACE_MT (ACE_GUARD_RETURN (ACE_Recursive_Thread_Mutex,
ace_mon, this->lock_, -1));
// Check to see if the process identified by the given pid is managed by
// this instance of ACE_Process_Manager.
- ssize_t i = this->find_proc (pid);
+ ssize_t const i = this->find_proc (pid);
if (i == -1)
// set "no such process" error
@@ -676,14 +676,14 @@ ACE_Process_Manager::set_scheduler (const ACE_Sched_Params & params,
int
ACE_Process_Manager::set_scheduler_all (const ACE_Sched_Params & params)
{
- ACE_TRACE ("ACE_Process_Manager::setscheduler_all");
+ ACE_TRACE ("ACE_Process_Manager::set_scheduler_all");
ACE_MT (ACE_GUARD_RETURN (ACE_Recursive_Thread_Mutex,
ace_mon, this->lock_, -1));
- pid_t pid;
+
for (size_t i = 0; i < this->current_count_; ++i)
{
- pid = this->process_table_[i].process_->getpid ();
+ pid_t const pid = this->process_table_[i].process_->getpid ();
if (ACE_OS::sched_params (params, pid) != 0)
return -1;
}
@@ -740,7 +740,7 @@ ACE_Process_Manager::wait (const ACE_Time_Value &timeout)
while (this->current_count_ > 0)
{
- pid_t pid = this->wait (0, remaining);
+ pid_t const pid = this->wait (0, remaining);
if (pid == ACE_INVALID_PID) // wait() failed
return -1;
diff --git a/ace/RB_Tree.h b/ace/RB_Tree.h
index 5c63d0b51ee..16db8fc081d 100644
--- a/ace/RB_Tree.h
+++ b/ace/RB_Tree.h
@@ -370,8 +370,8 @@ public:
/**
* Returns a reference to the underlying <ACE_LOCK>. This makes it
* possible to acquire the lock explicitly, which can be useful in
- * some cases if you instantiate the <ACE_Atomic_Op> with an
- * <ACE_Recursive_Mutex> or <ACE_Process_Mutex>, or if you need to
+ * some cases if you instantiate the ACE_Atomic_Op with an
+ * ACE_Recursive_Mutex or ACE_Process_Mutex, or if you need to
* guard the state of an iterator.
* @note The right name would be <lock>, but HP/C++ will choke on that!
*/
diff --git a/ace/Service_Config.cpp b/ace/Service_Config.cpp
index e56b5b04489..97a109e5acf 100644
--- a/ace/Service_Config.cpp
+++ b/ace/Service_Config.cpp
@@ -6,29 +6,13 @@
#include "ace/Service_Config.inl"
#endif /* __ACE_INLINE__ */
-#include "ace/Svc_Conf.h"
-#include "ace/Get_Opt.h"
-#include "ace/ARGV.h"
-#include "ace/Malloc.h"
-#include "ace/Service_Manager.h"
-#include "ace/Service_Repository.h"
#include "ace/Service_Types.h"
-#include "ace/Containers.h"
-#include "ace/Auto_Ptr.h"
#include "ace/Reactor.h"
-#include "ace/Thread_Manager.h"
-#include "ace/DLL.h"
-#include "ace/XML_Svc_Conf.h"
-#include "ace/SString.h"
-
-#ifndef ACE_LACKS_UNIX_SIGNALS
-# include "ace/Signal.h"
-#endif /* !ACE_LACKS_UNIX_SIGNALS */
-
-#include "ace/OS_NS_stdio.h"
+#include "ace/Signal.h"
#include "ace/OS_NS_time.h"
#include "ace/OS_NS_unistd.h"
-#include "ace/OS_NS_sys_stat.h"
+#include "ace/Get_Opt.h"
+#include "ace/Service_Gestalt.h"
ACE_RCSID (ace,
Service_Config,
@@ -36,17 +20,43 @@ ACE_RCSID (ace,
ACE_BEGIN_VERSIONED_NAMESPACE_DECL
-ACE_ALLOC_HOOK_DEFINE (ACE_Service_Config)
-void
-ACE_Service_Config::dump (void) const
+///
+ACE_Service_Config_Guard::ACE_Service_Config_Guard (ACE_Service_Gestalt * psg)
+ : saved_ (ACE_Service_Config::current ())
{
-#if defined (ACE_HAS_DUMP)
- ACE_TRACE ("ACE_Service_Config::dump");
-#endif /* ACE_HAS_DUMP */
+ if (ACE::debug ())
+ ACE_DEBUG ((LM_DEBUG,
+ ACE_LIB_TEXT ("(%P|%t) SCG::ctor, repo=%@ - guard with %@\n"),
+ this->saved_->repo_,
+ psg->repo_));
+
+ if (saved_ != psg)
+ {
+ // Modify the TSS - no locking needed
+ (void)ACE_Service_Config::current (psg);
+ }
+}
+
+///
+ACE_Service_Config_Guard::~ACE_Service_Config_Guard (void)
+{
+ ACE_Service_Config::current (this->saved_);
+
+ if (ACE::debug ())
+ ACE_DEBUG ((LM_DEBUG,
+ ACE_LIB_TEXT ("(%P|%t) SCG::dtor, repo=%@ - un-guard\n"),
+ this->saved_->repo_));
}
-// ----------------------------------------
+
+ACE_ALLOC_HOOK_DEFINE (ACE_Service_Config)
+
+
+// A thread-specific storage to keep a pointer to the (current) global
+// configuration.
+ACE_TSS_TYPE (ACE_TSS_Type_Adapter <ACE_Service_Gestalt*>)
+ ACE_Service_Config::current_ (0);
// Set the signal handler to point to the handle_signal() function.
ACE_Sig_Adapter *ACE_Service_Config::signal_handler_ = 0;
@@ -54,40 +64,281 @@ ACE_Sig_Adapter *ACE_Service_Config::signal_handler_ = 0;
// Trigger a reconfiguration.
sig_atomic_t ACE_Service_Config::reconfig_occurred_ = 0;
- // = Set by command-line options.
+// = Set by command-line options.
+
+/// Pathname of file to write process id.
+ACE_TCHAR *ACE_Service_Config::pid_file_name_ = 0;
+
+/// Shall we become a daemon process?
int ACE_Service_Config::be_a_daemon_ = 0;
-int ACE_Service_Config::no_static_svcs_ = 1;
-ACE_TCHAR* ACE_Service_Config::pid_file_name_ = 0;
// Number of the signal used to trigger reconfiguration.
int ACE_Service_Config::signum_ = SIGHUP;
-// Indicates where to write the logging output. This is typically
-// either a STREAM pipe or a socket address.
-const ACE_TCHAR *ACE_Service_Config::logger_key_ = ACE_DEFAULT_LOGGER_KEY;
-// The ACE_Service_Manager static service object is now defined by the
-// ACE_Object_Manager, in Object_Manager.cpp.
+void
+ACE_Service_Config::dump (void) const
+{
+#if defined (ACE_HAS_DUMP)
+ ACE_TRACE ("ACE_Service_Config::dump");
+#endif /* ACE_HAS_DUMP */
+}
+
+int
+ACE_Service_Config::parse_args_i (int argc, ACE_TCHAR *argv[])
+{
+ ACE_TRACE ("ACE_Service_Config::parse_args_i");
+ ACE_Get_Opt getopt (argc,
+ argv,
+ ACE_LIB_TEXT ("bs:p:"),
+ 1); // Start at argv[1].
+
+ for (int c; (c = getopt ()) != -1; )
+ switch (c)
+ {
+ case 'p':
+ ACE_Service_Config::pid_file_name_ = getopt.opt_arg ();
+ break;
+ case 'b':
+ ACE_Service_Config::be_a_daemon_ = 1;
+ break;
+ case 's':
+ {
+ // There's no point in dealing with this on NT since it
+ // doesn't really support signals very well...
+#if !defined (ACE_LACKS_UNIX_SIGNALS)
+ ACE_Service_Config::signum_ =
+ ACE_OS::atoi (getopt.opt_arg ());
+
+ if (ACE_Reactor::instance ()->register_handler
+ (ACE_Service_Config::signum_,
+ ACE_Service_Config::signal_handler_) == -1)
+ ACE_ERROR_RETURN ((LM_ERROR,
+ ACE_LIB_TEXT ("cannot obtain signal handler\n")),
+ -1);
+#endif /* ACE_LACKS_UNIX_SIGNALS */
+ break;
+ }
+ }
+
+ return ACE_Service_Gestalt::parse_args_i (argc, argv);
+
+} /* parse_args_i () */
+
+
+int
+ACE_Service_Config::open_i (const ACE_TCHAR program_name[],
+ const ACE_TCHAR *logger_key,
+ bool ignore_static_svcs,
+ bool ignore_default_svc_conf_file,
+ bool ignore_debug_flag)
+{
+ int result = 0;
+ ACE_TRACE ("ACE_Service_Config::open_i");
+ ACE_Log_Msg *log_msg = ACE_LOG_MSG;
+
+ if (ACE::debug ())
+ ACE_DEBUG ((LM_DEBUG,
+ ACE_TEXT ("(%P|%t) SC::open_i - this=%@, opened=%d, ")
+ ACE_TEXT ("loadstatics=%d\n"),
+ this, this->is_opened_, this->no_static_svcs_));
+
+ // Guard against reentrant processing. For example,
+ // if the singleton gestalt (ubergestalt) was already open,
+ // do not open it again...
+ // The base class open_i increments this and we are
+ // forwarding to it, so we don't have to increment here.
+ if (this->is_opened_ != 0)
+ return 0;
+
+ // Check for things we need to do on a per-process basis and which
+ // may not be safe, or wise to do an a per instance basis
+
+ // Override any defaults, if required
+ this->no_static_svcs_ = ignore_static_svcs;
+
+ // Become a daemon before doing anything else.
+ if (this->be_a_daemon_)
+ ACE::daemonize ();
+
+ // Write process id to file.
+ if (this->pid_file_name_ != 0)
+ {
+ FILE* pidf = ACE_OS::fopen (this->pid_file_name_,
+ ACE_LIB_TEXT("w"));
+
+ if (pidf != 0)
+ {
+ ACE_OS::fprintf (pidf,
+ "%ld\n",
+ static_cast<long> (ACE_OS::getpid()));
+ ACE_OS::fclose (pidf);
+ }
+ }
+
+ u_long flags = log_msg->flags ();
+
+ // Only use STDERR if the caller hasn't already set the flags.
+ if (flags == 0)
+ flags = (u_long) ACE_Log_Msg::STDERR;
+
+ const ACE_TCHAR *key = logger_key;
+
+ if (key == 0 || ACE_OS::strcmp (key, ACE_DEFAULT_LOGGER_KEY) == 0)
+ // Only use the static <logger_key_> if the caller doesn't
+ // override it in the parameter list or if the key supplied is
+ // equal to the default static logger key.
+ key = this->logger_key_;
+ else
+ ACE_SET_BITS (flags, ACE_Log_Msg::LOGGER);
+
+ if (log_msg->open (program_name,
+ flags,
+ key) == -1)
+ result = -1;
+ else
+ {
+ if (ACE::debug ())
+ ACE_DEBUG ((LM_STARTUP,
+ ACE_LIB_TEXT ("starting up daemon %n\n")));
+
+ // Initialize the Service Repository (this will still work if
+ // user forgets to define an object of type ACE_Service_Config).
+ ACE_Service_Repository::instance (ACE_Service_Config::MAX_SERVICES);
+
+ // Initialize the ACE_Reactor (the ACE_Reactor should be the
+ // same size as the ACE_Service_Repository).
+ ACE_Reactor::instance ();
+
+ // There's no point in dealing with this on NT since it doesn't
+ // really support signals very well...
+#if !defined (ACE_LACKS_UNIX_SIGNALS)
+ // Only attempt to register a signal handler for positive
+ // signal numbers.
+ if (ACE_Service_Config::signum_ > 0)
+ {
+ ACE_Sig_Set ss;
+ ss.sig_add (ACE_Service_Config::signum_);
+ if (ACE_Reactor::instance ()->register_handler
+ (ss, ACE_Service_Config::signal_handler_) == -1)
+ ACE_ERROR ((LM_ERROR,
+ ACE_LIB_TEXT ("can't register signal handler\n")));
+ }
+#endif /* ACE_LACKS_UNIX_SIGNALS */
+ }
+
+ if (result == -1)
+ return -1;
+
+ if (this->init_svc_conf_file_queue () == -1)
+ return -1;
+
+ // Check if the default file exists before attempting to queue it
+ // for processing
+ if (!ignore_default_svc_conf_file)
+ {
+ FILE *fp = ACE_OS::fopen (ACE_DEFAULT_SVC_CONF,
+ ACE_LIB_TEXT ("r"));
+ ignore_default_svc_conf_file = (fp == 0);
+ if (fp != 0)
+ ACE_OS::fclose (fp);
+ }
+
+ if (!ignore_default_svc_conf_file
+ && this->svc_conf_file_queue_->is_empty ())
+ {
+ // Load the default "svc.conf" entry here if there weren't
+ // overriding -f arguments in <parse_args>.
+ if (this->svc_conf_file_queue_->enqueue_tail (ACE_TString (ACE_DEFAULT_SVC_CONF)) == -1)
+ {
+ ACE_ERROR_RETURN ((LM_ERROR,
+ ACE_LIB_TEXT ("%p\n"),
+ ACE_LIB_TEXT ("enqueuing ")
+ ACE_LIB_TEXT (ACE_DEFAULT_SVC_CONF)
+ ACE_LIB_TEXT(" file")),
+ -1);
+ }
+ }
+
+ return ACE_Service_Gestalt::open_i (program_name,
+ logger_key,
+ ignore_static_svcs,
+ ignore_default_svc_conf_file,
+ ignore_debug_flag);
+
+}
+
+/// Return the global configuration instance. Allways returns the same
+/// instance
+ACE_Service_Gestalt *
+ACE_Service_Config::global (void)
+{
+ return ACE_Singleton<ACE_Service_Config, ACE_SYNCH_MUTEX>::instance ();
+}
+
+///
+ACE_Service_Gestalt *
+ACE_Service_Config::instance (void)
+{
+ return ACE_Service_Config::current ();
+}
+
+/// Return the configuration instance, considered "global" in
+/// the current thread. This may be the same as instance(), but on some
+/// occasions, it may be a different one. For example, ACE_Service_Config_Guard
+/// provides a way of temporarily replacing the "current" configuration
+/// instance in the context of a thread.
+ACE_Service_Gestalt *
+ACE_Service_Config::current (void)
+{
+ ACE_Service_Gestalt *tmp = ACE_Service_Config::global ();
+
+ // If the Object_Manager is in transient state, the
+ // ACE_Service_Gestalt::current_ instance may not have been constructed
+ // yet (or may have been already destroyed). Either way there
+ // are no other threads.
+ if (ACE_Object_Manager::starting_up () || ACE_Object_Manager::shutting_down ())
+ return tmp;
-// Are we initialized already?
-int ACE_Service_Config::is_initialized_ = 0;
+ if (ACE_Service_Config::current_.ts_object () != 0)
+ return ACE_TSS_GET (current_, ACE_Service_Gestalt);
-// List of statically configured services.
+ // Stash a pointer to the global configuration, so it can be returned out
+ // of TSS the next time a thread asks for it
+ ACE_Service_Config::current (tmp);
-ACE_STATIC_SVCS *ACE_Service_Config::static_svcs_ = 0;
-ACE_SVC_QUEUE *ACE_Service_Config::svc_queue_ = 0;
-ACE_SVC_QUEUE *ACE_Service_Config::svc_conf_file_queue_ = 0;
+ return tmp;
+}
-ACE_STATIC_SVCS *
+/// A mutator to set the "current" (TSS) gestalt instance.
+int
+ACE_Service_Config::current (ACE_Service_Gestalt *newcurrent)
+{
+ *ACE_Service_Config::current_ = newcurrent;
+ return 0;
+}
+
+
+// Changed the interface of this method to return the gestalt instead of
+// the container, underlying the service repository and defined
+// ACE_Service_Gestalt::insert (ACE_Static_Svc_Descriptor*). This way the
+// existing source code can keep using ACE_Service_Config::static_svcs(),
+// however now it is not necessary to expose the repository storage *and*
+// it is much easier to debug service registration problems.
+ACE_Service_Gestalt *
ACE_Service_Config::static_svcs (void)
{
- if (ACE_Service_Config::static_svcs_ == 0)
- ACE_NEW_RETURN (ACE_Service_Config::static_svcs_,
- ACE_STATIC_SVCS,
- 0);
- return ACE_Service_Config::static_svcs_;
+ return ACE_Service_Config::current ();
}
+///
+int
+ACE_Service_Config::insert (ACE_Static_Svc_Descriptor* stsd)
+{
+ return ACE_Service_Config::current ()->insert (stsd);
+}
+
+
// Totally remove <svc_name> from the daemon by removing it from the
// ACE_Reactor, and unlinking it if necessary.
@@ -131,7 +382,9 @@ ACE_Service_Config::ACE_Service_Config (int ignore_static_svcs,
int signum)
{
ACE_TRACE ("ACE_Service_Config::ACE_Service_Config");
- ACE_Service_Config::no_static_svcs_ = ignore_static_svcs;
+
+ this->no_static_svcs_ = (ignore_static_svcs);
+
ACE_Service_Config::signum_ = signum;
// Initialize the Service Repository.
@@ -142,98 +395,6 @@ ACE_Service_Config::ACE_Service_Config (int ignore_static_svcs,
ACE_Reactor::instance ();
}
-int
-ACE_Service_Config::init_svc_conf_file_queue (void)
-{
- if (ACE_Service_Config::svc_conf_file_queue_ == 0)
- ACE_NEW_RETURN (ACE_Service_Config::svc_conf_file_queue_,
- ACE_SVC_QUEUE,
- -1);
- return 0;
-}
-
-// Handle the command-line options intended for the
-// ACE_Service_Config.
-
-int
-ACE_Service_Config::parse_args (int argc, ACE_TCHAR *argv[])
-{
- ACE_TRACE ("ACE_Service_Config::parse_args");
- ACE_Get_Arg_Opt<ACE_TCHAR> getopt (argc,
- argv,
- ACE_LIB_TEXT ("bdf:k:nyp:s:S:"),
- 1); // Start at argv[1].
-
- if (ACE_Service_Config::init_svc_conf_file_queue () == -1)
- return -1;
-
- for (int c; (c = getopt ()) != -1; )
- switch (c)
- {
- case 'b':
- ACE_Service_Config::be_a_daemon_ = 1;
- break;
- case 'd':
- ACE::debug (1);
- break;
- case 'f':
- if (ACE_Service_Config::svc_conf_file_queue_->enqueue_tail
- (ACE_TString (getopt.opt_arg ())) == -1)
- ACE_ERROR_RETURN ((LM_ERROR,
- ACE_LIB_TEXT ("%p\n"),
- ACE_LIB_TEXT ("enqueue_tail")),
- -1);
- break;
- case 'k':
- ACE_Service_Config::logger_key_ = getopt.opt_arg ();
- break;
- case 'n':
- ACE_Service_Config::no_static_svcs_ = 1;
- break;
- case 'y':
- ACE_Service_Config::no_static_svcs_ = 0;
- break;
- case 'p':
- ACE_Service_Config::pid_file_name_ = getopt.opt_arg ();
- break;
- case 's':
- {
- // There's no point in dealing with this on NT since it
- // doesn't really support signals very well...
-#if !defined (ACE_LACKS_UNIX_SIGNALS)
- ACE_Service_Config::signum_ =
- ACE_OS::atoi (getopt.opt_arg ());
-
- if (ACE_Reactor::instance ()->register_handler
- (ACE_Service_Config::signum_,
- ACE_Service_Config::signal_handler_) == -1)
- ACE_ERROR_RETURN ((LM_ERROR,
- ACE_LIB_TEXT ("cannot obtain signal handler\n")),
- -1);
-#endif /* ACE_LACKS_UNIX_SIGNALS */
- break;
- }
- case 'S':
- if (ACE_Service_Config::svc_queue_ == 0)
- ACE_NEW_RETURN (ACE_Service_Config::svc_queue_,
- ACE_SVC_QUEUE,
- -1);
- if (ACE_Service_Config::svc_queue_->enqueue_tail
- (ACE_TString (getopt.opt_arg ())) == -1)
- ACE_ERROR_RETURN ((LM_ERROR,
- ACE_LIB_TEXT ("%p\n"),
- ACE_LIB_TEXT ("enqueue_tail")),
- -1);
- break;
- default:
- if (ACE::debug () > 0)
- ACE_DEBUG ((LM_DEBUG,
- ACE_LIB_TEXT ("%c is not a ACE_Service_Config option\n"),
- c));
- }
-
- return 0;
-}
#if (ACE_USES_CLASSIC_SVC_CONF == 0)
ACE_Service_Type *
@@ -291,492 +452,6 @@ ACE_Service_Config::create_service_type_impl (const ACE_TCHAR *name,
}
-// Initialize and activate a statically linked service.
-
-int
-ACE_Service_Config::initialize (const ACE_TCHAR *svc_name,
- const ACE_TCHAR *parameters)
-{
- ACE_TRACE ("ACE_Service_Config::initialize");
- ACE_ARGV args (parameters);
- ACE_Service_Type *srp = 0;
-
- if (ACE::debug ())
- ACE_DEBUG ((LM_DEBUG,
- ACE_LIB_TEXT ("opening static service %s\n"),
- svc_name));
-
- if (ACE_Service_Repository::instance ()->find
- (svc_name,
- (const ACE_Service_Type **) &srp) == -1)
- ACE_ERROR_RETURN ((LM_ERROR,
- ACE_LIB_TEXT ("%s not found\n"),
- svc_name),
- -1);
- else if (srp->type ()->init (args.argc (),
- args.argv ()) == -1)
- {
- // Remove this entry.
- ACE_ERROR ((LM_ERROR,
- ACE_LIB_TEXT ("static initialization failed, %p\n"),
- svc_name));
- ACE_Service_Repository::instance ()->remove (svc_name);
- return -1;
- }
- else
- {
- srp->active (1);
- return 0;
- }
-}
-
-// Dynamically link the shared object file and retrieve a pointer to
-// the designated shared object in this file.
-
-int
-ACE_Service_Config::initialize (const ACE_Service_Type *sr,
- const ACE_TCHAR *parameters)
-{
- ACE_TRACE ("ACE_Service_Config::initialize");
- ACE_ARGV args (parameters);
-
- if (ACE::debug ())
- ACE_DEBUG ((LM_DEBUG,
- ACE_LIB_TEXT ("opening dynamic service %s\n"),
- sr->name ()));
-
- ACE_Service_Type *srp = 0;
- if (ACE_Service_Repository::instance ()->find
- (sr->name (),
- (const ACE_Service_Type **) &srp) >= 0)
- ACE_ERROR_RETURN ((LM_DEBUG,
- ACE_LIB_TEXT ("%s already installed, please remove first before reinstalling\n"),
- sr->name ()),
- 0);
-
- if (sr->type ()->init (args.argc (),
- args.argv ()) == -1)
- {
- ACE_ERROR ((LM_ERROR,
- ACE_LIB_TEXT ("dynamic initialization failed for %s\n"),
- sr->name ()));
- ACE_Service_Type *ps = 0;
- ACE_Service_Repository::instance ()->remove (sr->name (), &ps);
- // We just get ps to avoid having remove() delete it.
- return -1;
- }
-
- if (ACE_Service_Repository::instance ()->insert (sr) == -1)
- ACE_ERROR_RETURN ((LM_ERROR,
- ACE_LIB_TEXT ("insertion failed, %p\n"),
- sr->name ()),
- -1);
- return 0;
-}
-
-#if (ACE_USES_CLASSIC_SVC_CONF == 1)
-int
-ACE_Service_Config::process_directives_i (ACE_Svc_Conf_Param *param)
-{
- // AC 970827 Skip the heap check because yacc allocates a buffer
- // here which will be reported as a memory leak for some reason.
- ACE_NO_HEAP_CHECK
-
- ::ace_yyparse (param);
-
- if (param->yyerrno > 0)
- {
- // This is a hack, better errors should be provided...
- errno = EINVAL;
- return param->yyerrno;
- }
- else
- return 0;
-}
-#else
-ACE_XML_Svc_Conf *
-ACE_Service_Config::get_xml_svc_conf (ACE_DLL &xmldll)
-{
- if (xmldll.open (ACE_LIB_TEXT ("ACEXML_XML_Svc_Conf_Parser")) == -1)
- ACE_ERROR_RETURN ((LM_ERROR,
- ACE_LIB_TEXT ("Fail to open ACEXML_XML_Svc_Conf_Parser: %p\n"),
- "ACE_Service_Config::get_xml_svc_conf"),
- 0);
-
- void *foo;
- foo = xmldll.symbol (ACE_LIB_TEXT ("_ACEXML_create_XML_Svc_Conf_Object"));
-
- // Cast the void* to long first.
- long tmp = reinterpret_cast<long> (foo);
- ACE_XML_Svc_Conf::Factory factory =
- reinterpret_cast<ACE_XML_Svc_Conf::Factory> (tmp);
- if (factory == 0)
- ACE_ERROR_RETURN ((LM_ERROR,
- ACE_LIB_TEXT ("Unable to resolve factory: %p\n"),
- xmldll.error ()),
- 0);
-
- return factory ();
-}
-#endif /* ACE_USES_CLASSIC_SVC_CONF == 1 */
-
-int
-ACE_Service_Config::process_file (const ACE_TCHAR file[])
-{
- ACE_TRACE ("ACE_Service_Config::process_file");
-
-#if (ACE_USES_CLASSIC_SVC_CONF == 1)
- int result = 0;
-
- FILE *fp = ACE_OS::fopen (file,
- ACE_LIB_TEXT ("r"));
-
- if (fp == 0)
- {
- // Invalid svc.conf file. We'll report it here and break out of
- // the method.
- if (ACE::debug ())
- ACE_DEBUG ((LM_DEBUG,
- ACE_LIB_TEXT ("%p\n"),
- file));
-
- // Use stat to find out if the file exists. I didn't use access()
- // because stat is better supported on most non-unix platforms.
- ACE_stat exists;
- if (ACE_OS::stat (file, &exists) == 0)
- // If it exists, but we couldn't open it for reading then we
- // must not have permission to read it.
- errno = EPERM;
- else
- errno = ENOENT;
- result = -1;
- }
- else
- {
- ACE_Svc_Conf_Param f (fp);
-
- // Keep track of the number of errors.
- result = ACE_Service_Config::process_directives_i (&f);
-
- (void) ACE_OS::fclose (fp);
- }
- return result;
-#else
- ACE_DLL dll;
-
- auto_ptr<ACE_XML_Svc_Conf>
- xml_svc_conf (ACE_Service_Config::get_xml_svc_conf (dll));
-
- if (xml_svc_conf.get () == 0)
- return -1;
-
- return xml_svc_conf->parse_file (file);
-#endif /* ACE_USES_CLASSIC_SVC_CONF == 1 */
-}
-
-int
-ACE_Service_Config::process_directive (const ACE_TCHAR directive[])
-{
- ACE_TRACE ("ACE_Service_Config::process_directive");
-
- if (ACE::debug ())
- ACE_DEBUG ((LM_DEBUG,
- ACE_LIB_TEXT ("Service_Config::process_directive - %s\n"),
- directive));
-
-#if (ACE_USES_CLASSIC_SVC_CONF == 1)
- ACE_UNUSED_ARG (directive);
-
- ACE_Svc_Conf_Param d (directive);
-
- int result = ACE_Service_Config::process_directives_i (&d);
-
- return result;
-#else
- ACE_DLL dll;
-
- auto_ptr<ACE_XML_Svc_Conf>
- xml_svc_conf (ACE_Service_Config::get_xml_svc_conf (dll));
-
- if (xml_svc_conf.get () == 0)
- return -1;
-
- return xml_svc_conf->parse_string (directive);
-#endif /* ACE_USES_CLASSIC_SVC_CONF == 1 */
-}
-
-// Process service configuration requests as indicated in the queue of
-// svc.conf files.
-int
-ACE_Service_Config::process_directives (void)
-{
- ACE_TRACE ("ACE_Service_Config::process_directives");
-
- int result = 0;
-
- if (ACE_Service_Config::svc_conf_file_queue_ != 0)
- {
- ACE_TString *sptr = 0;
- ACE_SVC_QUEUE &queue = *ACE_Service_Config::svc_conf_file_queue_;
-
- // Iterate through all the svc.conf files.
- for (ACE_SVC_QUEUE_ITERATOR iter (queue);
- iter.next (sptr) != 0;
- iter.advance ())
- {
- int r = ACE_Service_Config::process_file (sptr->fast_rep ());
-
- if (r < 0)
- {
- result = r;
- break;
- }
-
- result += r;
- }
- }
-
- return result;
-}
-
-int
-ACE_Service_Config::process_commandline_directives (void)
-{
- int result = 0;
-
- if (ACE_Service_Config::svc_queue_ != 0)
- {
- ACE_TString *sptr = 0;
- ACE_SVC_QUEUE &queue = *ACE_Service_Config::svc_queue_;
-
- for (ACE_SVC_QUEUE_ITERATOR iter (queue);
- iter.next (sptr) != 0;
- iter.advance ())
- {
- // Process just a single directive.
- if (ACE_Service_Config::process_directive (sptr->fast_rep ()) != 0)
- {
- ACE_ERROR ((LM_ERROR,
- ACE_LIB_TEXT ("%p\n"),
- ACE_LIB_TEXT ("process_directive")));
- result = -1;
- }
- }
-
- delete ACE_Service_Config::svc_queue_;
- ACE_Service_Config::svc_queue_ = 0;
- }
-
- return result;
-}
-
-int
-ACE_Service_Config::process_directive (const ACE_Static_Svc_Descriptor &ssd,
- int force_replace)
-{
- if (!force_replace)
- {
- if (ACE_Service_Repository::instance ()->find (ssd.name_,
- 0, 0) >= 0)
- {
- // The service is already there, just return
- return 0;
- }
- }
-
- ACE_Service_Object_Exterminator gobbler;
- void *sym = (ssd.alloc_)(&gobbler);
-
- ACE_Service_Type_Impl *stp =
- ACE_Service_Config::create_service_type_impl (ssd.name_,
- ssd.type_,
- sym,
- ssd.flags_,
- gobbler);
- if (stp == 0)
- return 0;
-
-
- ACE_Service_Type *service_type;
- // This is just a temporary to force the compiler to use the right
- // constructor in ACE_Service_Type
- ACE_DLL tmp_dll;
-
- ACE_NEW_RETURN (service_type,
- ACE_Service_Type (ssd.name_,
- stp,
- tmp_dll,
- ssd.active_),
- -1);
-
- return ACE_Service_Repository::instance ()->insert (service_type);
-}
-
-// Add the default statically-linked services to the Service
-// Repository.
-
-int
-ACE_Service_Config::load_static_svcs (void)
-{
- ACE_TRACE ("ACE_Service_Config::load_static_svcs");
-
- ACE_Static_Svc_Descriptor **ssdp = 0;
- ACE_STATIC_SVCS &svcs = *ACE_Service_Config::static_svcs ();
-
- for (ACE_STATIC_SVCS_ITERATOR iter (svcs);
- iter.next (ssdp) != 0;
- iter.advance ())
- {
- ACE_Static_Svc_Descriptor *ssd = *ssdp;
-
- if (ACE_Service_Config::process_directive (*ssd, 1) == -1)
- return -1;
- }
- return 0;
-}
-
-// Performs an open without parsing command-line arguments.
-
-int
-ACE_Service_Config::open_i (const ACE_TCHAR program_name[],
- const ACE_TCHAR *logger_key,
- int ignore_default_svc_conf_file,
- int ignore_debug_flag)
-{
- int result = 0;
- ACE_TRACE ("ACE_Service_Config::open_i");
- ACE_Log_Msg *log_msg = ACE_LOG_MSG;
-
- // Record the current log setting upon entering this thread.
- u_long old_process_mask = log_msg->priority_mask
- (ACE_Log_Msg::PROCESS);
- u_long old_thread_mask = log_msg->priority_mask
- (ACE_Log_Msg::THREAD);
-
- if (ACE_Service_Config::is_initialized_ != 0)
- // Guard against reentrant processing!
- return 0;
- else
- ACE_Service_Config::is_initialized_++;
-
- if (ACE_Service_Config::init_svc_conf_file_queue () == -1)
- return -1;
- else if (!ignore_default_svc_conf_file
- && ACE_Service_Config::svc_conf_file_queue_->is_empty ()
- // Load the default "svc.conf" entry here if there weren't
- // overriding -f arguments in <parse_args>.
- && ACE_Service_Config::svc_conf_file_queue_->enqueue_tail
- (ACE_TString (ACE_DEFAULT_SVC_CONF)) == -1)
- ACE_ERROR_RETURN ((LM_ERROR,
- ACE_LIB_TEXT ("%p\n"),
- ACE_LIB_TEXT ("enqueue_tail")),
- -1);
-
- if (ignore_debug_flag == 0)
- {
- // If -d was included as a startup parameter, the user wants debug
- // information printed during service initialization.
- if (ACE::debug ())
- ACE_Log_Msg::enable_debug_messages ();
- else
- // The user has requested no debugging info.
- ACE_Log_Msg::disable_debug_messages ();
- }
-
- // Become a daemon before doing anything else.
- if (ACE_Service_Config::be_a_daemon_)
- ACE_Service_Config::start_daemon ();
-
- // Write process id to file.
- if (ACE_Service_Config::pid_file_name_ != 0)
- {
- FILE* pidf = ACE_OS::fopen (ACE_Service_Config::pid_file_name_,
- ACE_LIB_TEXT("w"));
-
- if (pidf != 0)
- {
- ACE_OS::fprintf (pidf,
- "%ld\n",
- static_cast<long> (ACE_OS::getpid()));
- ACE_OS::fclose (pidf);
- }
- }
-
- u_long flags = log_msg->flags ();
-
- if (flags == 0)
- // Only use STDERR if the caller hasn't already set the flags.
- flags = (u_long) ACE_Log_Msg::STDERR;
-
- const ACE_TCHAR *key = logger_key;
-
- if (key == 0 || ACE_OS::strcmp (key, ACE_DEFAULT_LOGGER_KEY) == 0)
- // Only use the static <logger_key_> if the caller doesn't
- // override it in the parameter list or if the key supplied is
- // equal to the default static logger key.
- key = ACE_Service_Config::logger_key_;
- else
- ACE_SET_BITS (flags, ACE_Log_Msg::LOGGER);
-
- if (log_msg->open (program_name,
- flags,
- key) == -1)
- result = -1;
- else
- {
- if (ACE::debug ())
- ACE_DEBUG ((LM_STARTUP,
- ACE_LIB_TEXT ("starting up daemon %n\n")));
-
- // Initialize the Service Repository (this will still work if
- // user forgets to define an object of type ACE_Service_Config).
- ACE_Service_Repository::instance (ACE_Service_Config::MAX_SERVICES);
-
- // Initialize the ACE_Reactor (the ACE_Reactor should be the
- // same size as the ACE_Service_Repository).
- ACE_Reactor::instance ();
-
- // There's no point in dealing with this on NT since it doesn't
- // really support signals very well...
-#if !defined (ACE_LACKS_UNIX_SIGNALS)
- // Only attempt to register a signal handler for positive
- // signal numbers.
- if (ACE_Service_Config::signum_ > 0)
- if (ACE_Reactor::instance ()->register_handler
- (ACE_Service_Config::signum_,
- ACE_Service_Config::signal_handler_) == -1)
- ACE_ERROR ((LM_ERROR,
- ACE_LIB_TEXT ("can't register signal handler\n")));
-#endif /* ACE_LACKS_UNIX_SIGNALS */
-
- // See if we need to load the static services.
- if (ACE_Service_Config::no_static_svcs_ == 0
- && ACE_Service_Config::load_static_svcs () == -1)
- result = -1;
- else
- {
- if (ACE_Service_Config::process_commandline_directives () == -1)
- result = -1;
- else
- result = ACE_Service_Config::process_directives ();
- }
- }
-
- {
- // Make sure to save/restore errno properly.
- ACE_Errno_Guard error (errno);
-
- if (ignore_debug_flag == 0)
- {
- // Reset debugging back to the way it was when we came into
- // into <open_i>.
- log_msg->priority_mask (old_process_mask, ACE_Log_Msg::PROCESS);
- log_msg->priority_mask (old_thread_mask, ACE_Log_Msg::THREAD);
- }
- }
-
- return result;
-}
ACE_Service_Config::ACE_Service_Config (const ACE_TCHAR program_name[],
const ACE_TCHAR *logger_key)
@@ -838,25 +513,7 @@ ACE_Service_Config::reconfigure (void)
int
ACE_Service_Config::close (void)
{
- ACE_TRACE ("ACE_Service_Config::close");
-
- ACE_Service_Config::is_initialized_--;
- if (ACE_Service_Config::is_initialized_ > 0)
- return 0;
-
- // Delete the service repository. All the objects inside the
- // service repository should already have been finalized.
- ACE_Service_Config::close_svcs ();
-
- // Delete the list fo svc.conf files
- delete ACE_Service_Config::svc_conf_file_queue_;
- ACE_Service_Config::svc_conf_file_queue_ = 0;
-
- // Delete the dynamically allocated static_svcs instance.
- delete ACE_Service_Config::static_svcs_;
- ACE_Service_Config::static_svcs_ = 0;
-
- return 0;
+ return ACE_Service_Config::current ()->close ();
}
int
@@ -912,20 +569,6 @@ ACE_Service_Config::reconfig_occurred (int config_occurred)
ACE_Service_Config::reconfig_occurred_ = config_occurred;
}
-// Become a daemon (i.e., run as a "background" process).
-
-int
-ACE_Service_Config::start_daemon (void)
-{
- ACE_TRACE ("ACE_Service_Config::start_daemon");
- return ACE::daemonize ();
-}
+// ************************************************************
ACE_END_VERSIONED_NAMESPACE_DECL
-
-// All the factory functions that allocate default statically linked
-// services should be placed below.
-
-// Allocate a Service Manager.
-
-ACE_FACTORY_DEFINE (ACE, ACE_Service_Manager)
diff --git a/ace/Service_Config.h b/ace/Service_Config.h
index 6fafb50408b..82b988d69d6 100644
--- a/ace/Service_Config.h
+++ b/ace/Service_Config.h
@@ -17,13 +17,12 @@
#include "ace/config-all.h"
#include "ace/Default_Constants.h"
+#include "ace/Service_Gestalt.h"
#if !defined (ACE_LACKS_PRAGMA_ONCE)
# pragma once
#endif /* ACE_LACKS_PRAGMA_ONCE */
-#include "ace/Unbounded_Queue.h"
-#include "ace/Unbounded_Set.h"
#include "ace/SString.h"
#include "ace/OS_NS_signal.h"
@@ -134,20 +133,8 @@ public:
bool operator!= (ACE_Static_Svc_Descriptor &) const;
};
-// Maintain a set of the statically linked service descriptors.
-typedef ACE_Unbounded_Set<ACE_Static_Svc_Descriptor *>
- ACE_STATIC_SVCS;
-typedef ACE_Unbounded_Set_Iterator<ACE_Static_Svc_Descriptor *>
- ACE_STATIC_SVCS_ITERATOR;
-
-// Maintain a queue of services to be configured from the
-// command-line.
-typedef ACE_Unbounded_Queue<ACE_TString>
- ACE_SVC_QUEUE;
-typedef ACE_Unbounded_Queue_Iterator<ACE_TString>
- ACE_SVC_QUEUE_ITERATOR;
-
#define ACE_Component_Config ACE_Service_Config
+
/**
* @class ACE_Service_Config
*
@@ -155,7 +142,22 @@ typedef ACE_Unbounded_Queue_Iterator<ACE_TString>
* configuration of services.
*
* The ACE_Service_Config uses the Monostate pattern. Therefore,
- * you can only have one of these instantiated per-process.
+ * you can only have one of these instantiated per-process. It
+ * represents the process-wide collection of services, which is
+ * typicaly shared among all other configurable entities. The only
+ * ACE_Service_Config instance is registered with and owned by the
+ * ACE_Object_Manager.
+ *
+ * By contrast, the ACE_Service_Gestalt represents the collection
+ * of services, pertaining to a configurable entity. Typicaly, a
+ * "configurable entity" is an instance, which owns an instance of
+ * ACE_Service_Gestalt in order to ensure full controll over the
+ * services it needs.
+ *
+ * Another facet of ACE_Service_Config is that for a given thread,
+ * it provides access to its current, process-global
+ * ACE_Service_Gestalt instance through its curent() method.
+ *
* @note The signal_handler_ static member is allocated by the
* ACE_Object_Manager. The ACE_Service_Config constructor
* uses signal_handler_. Therefore, if the program has any
@@ -164,13 +166,9 @@ typedef ACE_Unbounded_Queue_Iterator<ACE_TString>
* not eliminated, by _not_ #defining
* ACE_HAS_NONSTATIC_OBJECT_MANAGER.
*/
-class ACE_Export ACE_Service_Config
+class ACE_Export ACE_Service_Config: public ACE_Service_Gestalt
{
public:
- enum
- {
- MAX_SERVICES = ACE_DEFAULT_SERVICE_REPOSITORY_SIZE
- };
// = Initialization and termination methods.
@@ -180,7 +178,7 @@ public:
* registered when the repository is opened.
*/
ACE_Service_Config (int ignore_static_svcs = 1,
- size_t size = ACE_Service_Config::MAX_SERVICES,
+ size_t size = ACE_Service_Gestalt::MAX_SERVICES,
int signum = SIGHUP);
/**
@@ -191,9 +189,19 @@ public:
ACE_Service_Config (const ACE_TCHAR program_name[],
const ACE_TCHAR *logger_key = ACE_DEFAULT_LOGGER_KEY);
+ /// Perform user-specified close activities and remove dynamic
+ /// memory.
+ virtual ~ACE_Service_Config (void);
+
+
+protected:
+
/**
- * Performs an open without parsing command-line arguments. The
- * @a logger_key indicates where to write the logging output, which
+ * Performs an open without parsing command-line arguments.
+ * Implements whats different in the opening sequence
+ * for this class, as opposed to the base class.
+ *
+ * The @a logger_key indicates where to write the logging output, which
* is typically either a STREAM pipe or a socket address. If
* @a ignore_default_svc_conf_file is non-0 then the "svc.conf" file
* will be ignored. If @a ignore_debug_flag is non-0 then the
@@ -201,12 +209,56 @@ public:
* @c ACE_Log_Msg::priority_mask() appropriately. Returns number of
* errors that occurred on failure and 0 otherwise.
*/
- static int open_i (const ACE_TCHAR program_name[],
- const ACE_TCHAR *logger_key = ACE_DEFAULT_LOGGER_KEY,
- int ignore_default_svc_conf_file = 0,
- int ignore_debug_flag = 0);
+ virtual int open_i (const ACE_TCHAR program_name[],
+ const ACE_TCHAR *logger_key,
+ bool ignore_static_svcs,
+ bool ignore_default_svc_conf_file,
+ bool ignore_debug_flag);
/**
+ * Implements whats different in the command line parameter processing
+ * for this class, as opposed to the base class.
+ */
+ virtual int parse_args_i (int argc, ACE_TCHAR *argv[]);
+
+
+
+ /// = Static interfaces
+
+
+
+protected:
+
+ /// Mutator to set the (TSS) global instance. Intended for use by helper
+ /// classes, like ACE_Service_Config_Guard which when instantiated on the
+ /// stack, can temporarily change which gestalt instance is viewed as
+ /// global from the point of view of the static initializers in DLLs.
+ static int current (ACE_Service_Gestalt*);
+
+
+public:
+
+ /// If not yet initialized, creates a process-wide instance
+ /// global instance, which is registered with the ACE_Object_Manager,
+ /// via ACE_Singleton. Note that this is allways the same instance,
+ /// in contrast with current (), which may be different instance at
+ /// different times, dependent on the context.
+ static ACE_Service_Gestalt* global (void);
+
+
+ /// Accessor for the "current" service repository through a pointer
+ /// held in TSS.
+ static ACE_Service_Gestalt* current (void);
+
+ /// This is what the static service initializators are hard-wired
+ /// to use, so in order to keep interface changes to a minimum this
+ /// method merely forwards to current(). Thus it is possible to
+ /// temporarily replace what those initializers think is the global
+ /// service repository, for instance when dynamically loading a
+ /// service from a DLL, which in turn, contains its own static services.
+ static ACE_Service_Gestalt* instance (void);
+
+ /**
* Performs an open without parsing command-line arguments. The
* @a logger_key indicates where to write the logging output, which
* is typically either a STREAM pipe or a socket address. If
@@ -283,10 +335,6 @@ public:
int ignore_default_svc_conf_file = 0,
int ignore_debug_flag = 0);
- /// Perform user-specified close activities and remove dynamic
- /// memory.
- virtual ~ACE_Service_Config (void);
-
/// Tidy up and perform last rites when ACE_Service_Config is shut
/// down. This method calls <close_svcs>. Returns 0.
static int close (void);
@@ -315,11 +363,31 @@ public:
// semantics for the Reactor, Service_Repository, Thread_Manager,
// and Acceptor/Connector Strategy factory. Other portions of the
// system may need to access them at some point or another...
+
+ // = This is not strictly needed, anymore since the service configurator
+ // has been refactored to allow multiple service configuration
+ // instances (called gestalts). The interfaces, however were retained in for
+ // the sake of maintaining source-code compatibility.
+
// = Accessors and mutators for process-wide Singletons.
/// Returns a pointer to the list of statically linked services.
- static ACE_STATIC_SVCS *static_svcs (void);
+ ///
+ /// @deprecated - Same as instance(), but still useful in legacy code,
+ /// (notably, one that can not be easily modified) which uses the following
+ /// idiom for registering static services:
+ ///
+ /// ACE_Service_Config::static_svcs ()->insert (...);
+ static ACE_Service_Gestalt *static_svcs (void);
+
+ /// Insert a static service descriptor for processing on open_i(). The
+ /// corresponding ACE_STATIC_SVC_* macros were chaged to use this method
+ /// instead of obtaining a ptr to a container. See the note on static_svcs().
+ /// Added to prevent exposing the internal storage representation of the
+ /// services repository and provide a better way of debugging service
+ /// loading and registration problems.
+ static int insert (ACE_Static_Svc_Descriptor *svc);
// = Utility methods.
/// Dynamically link the shared object file and retrieve a pointer to
@@ -352,11 +420,11 @@ public:
#if defined (ACE_HAS_WINCE) && defined (ACE_USES_WCHAR)
// We must provide these function to bridge the Svc_Conf parser
// with ACE.
- static int initialize (const ACE_Service_Type *, char parameters[]);
- static int initialize (const char svc_name[], char parameters[]);
- static int resume (const char svc_name[]);
- static int suspend (const char svc_name[]);
- static int remove (const char svc_name[]);
+ static int initialize (const ACE_Service_Type *, ACE_ANTI_TCHAR []);
+ static int initialize (const char svc_name[], ACE_ANTI_TCHAR parameters[]);
+ static int resume (const ACE_ANTI_TCHAR svc_name[]);
+ static int suspend (const ACE_ANTI_TCHAR svc_name[]);
+ static int remove (const ACE_ANTI_TCHAR svc_name[]);
#endif /* ACE_HAS_WINCE */
/// Dump the state of an object.
@@ -426,12 +494,15 @@ public:
int active);
#endif /* ACE_USES_CLASSIC_SVC_CONF == 0 */
- static ACE_Service_Type_Impl *create_service_type_impl (const ACE_TCHAR *name,
- int type,
- void *symbol,
- u_int flags,
- ACE_Service_Object_Exterminator gobbler);
+ static ACE_Service_Type_Impl *
+ create_service_type_impl (const ACE_TCHAR *name,
+ int type,
+ void *symbol,
+ u_int flags,
+ ACE_Service_Object_Exterminator gobbler);
+
protected:
+
/// Process service configuration requests that were provided on the
/// command-line. Returns the number of errors that occurred.
static int process_commandline_directives (void);
@@ -442,7 +513,8 @@ protected:
/// that occurred.
static int process_directives_i (ACE_Svc_Conf_Param *param);
#else
- /// Helper function to dynamically link in the XML Service Configurator parser.
+ /// Helper function to dynamically link in the XML Service Configurator
+ /// parser.
static ACE_XML_Svc_Conf *get_xml_svc_conf (ACE_DLL &d);
#endif /* ACE_USES_CLASSIC_SVC_CONF == 1 */
@@ -453,23 +525,8 @@ protected:
/// ACE_Service_Repository.
static int load_static_svcs (void);
+
private:
- /// Indicates where to write the logging output. This is typically
- /// either a STREAM pipe or a socket address.
- static const ACE_TCHAR *logger_key_;
-
- /// Singleton repository of statically linked services.
- static ACE_STATIC_SVCS *static_svcs_;
-
- /// Queue of services specified on the command-line.
- static ACE_SVC_QUEUE *svc_queue_;
-
- /// Queue of svc.conf files specified on the command-line.
- /// @@ This should probably be made to handle unicode filenames...
- static ACE_SVC_QUEUE *svc_conf_file_queue_;
-
- /// Initialize the <svc_conf_file_queue_> if necessary.
- static int init_svc_conf_file_queue (void);
/// True if reconfiguration occurred.
static sig_atomic_t reconfig_occurred_;
@@ -481,25 +538,63 @@ private:
/// Pathname of file to write process id.
static ACE_TCHAR *pid_file_name_;
- /// Should we avoid loading the static services?
- static int no_static_svcs_;
-
/// Number of the signal used to trigger reconfiguration.
static int signum_;
/// Handles the reconfiguration signals.
static ACE_Sig_Adapter *signal_handler_;
- /**
- * Keep track of whether the ACE_Service_Config is already
- * initialized. If so, we can't allow <yyparse> to be called since
- * it's not reentrant. This variable is incremented by the
- * <ACE_Service_Config::open> method and decremented by the
- * <ACE_Service_Config::close> method.
- */
- static int is_initialized_;
+ /// Pointer to the Singleton (ACE_Cleanup) Gestalt instance.
+ /// There is thread-specific global instance pointer, which is used to
+ /// temporarily change which Gestalt instance is used for static service
+ /// registrations.
+ ///
+ /// A specific use case is a thread, which loads a _dynamic_ service from
+ /// a DLL. If the said DLL also contains additional _static_ services,
+ /// those *must* be registered with the same configuration repository as
+ /// the dynamic service. Otherwise, the DLL's static services would be
+ /// registered with the global Gestalt and may outlive the DLL that
+ /// contains their code and perhaps the memory in which they are in.
+ /// This is a problem because if the DLL gets unloaded (as it will, if
+ /// it was loaded in an instance of Gestalt), the DLL's memory will be
+ /// deallocated, but the global service repository will still "think"
+ /// it must finalize the (DLL's) static services - with disastrous
+ /// consequences, occurring in the post-main code (at_exit()).
+ static ACE_TSS< ACE_TSS_Type_Adapter <ACE_Service_Gestalt*> > current_;
+
+ /// This class needs the intimate access to be able to swap the
+ /// current TSS pointer for the global Gestalt.
+ friend class ACE_Service_Config_Guard;
+
+};
+
+/**
+ * @class ACE_Service_Config_Guard
+ *
+ * @brief A guard class, designed to be instantiated on the stack.
+ *
+ * Instantiating it with a specific configuration ensures any references to
+ * ACE_Service_Config::instance(), even when occuring in static constructors,
+ * will allways access the designated configuration instance.
+ * This comes very handy when a dynamic service also registers any static
+ * services of its own and their static factories.
+ */
+class ACE_Export ACE_Service_Config_Guard
+{
+public:
+ ACE_Service_Config_Guard (ACE_Service_Gestalt * psg);
+ ~ACE_Service_Config_Guard (void);
+
+private:
+ // Private AND not implemented to disable copying
+ ACE_Service_Config_Guard(const ACE_Service_Config_Guard&);
+ ACE_Service_Config_Guard& operator= (const ACE_Service_Config_Guard&);
+
+private:
+ ACE_Service_Gestalt* saved_;
};
+
ACE_END_VERSIONED_NAMESPACE_DECL
#if defined (__ACE_INLINE__)
diff --git a/ace/Service_Config.inl b/ace/Service_Config.inl
index 4dd09e802b0..9580ccc6c4f 100644
--- a/ace/Service_Config.inl
+++ b/ace/Service_Config.inl
@@ -17,14 +17,14 @@ ACE_Service_Config::open (const ACE_TCHAR program_name[],
int ignore_debug_flag)
{
ACE_TRACE ("ACE_Service_Config::open");
- ACE_Service_Config::no_static_svcs_ = ignore_static_svcs;
-
- return ACE_Service_Config::open_i (program_name,
+ return ACE_Service_Config::current()->open (program_name,
logger_key,
+ ignore_static_svcs,
ignore_default_svc_conf,
ignore_debug_flag);
}
+
ACE_INLINE int
ACE_Service_Config::open (int argc,
ACE_TCHAR *argv[],
@@ -34,18 +34,23 @@ ACE_Service_Config::open (int argc,
int ignore_debug_flag)
{
ACE_TRACE ("ACE_Service_Config::open");
- ACE_Service_Config::no_static_svcs_ = ignore_static_svcs;
-
- if (ACE_Service_Config::parse_args (argc,
- argv) == -1)
- return -1;
- else
- return ACE_Service_Config::open_i (argv[0],
+ return ACE_Service_Config::current()->open (argc,
+ argv,
logger_key,
+ ignore_static_svcs,
ignore_default_svc_conf,
ignore_debug_flag);
}
+// Handle the command-line options intended for the
+// ACE_Service_Config.
+
+ACE_INLINE int
+ACE_Service_Config::parse_args (int argc, ACE_TCHAR *argv[])
+{
+ return ACE_Service_Config::current ()->parse_args (argc, argv);
+}
+
// Compare two service descriptors for equality.
ACE_INLINE bool
@@ -68,36 +73,83 @@ ACE_Service_Config::signal_handler (ACE_Sig_Adapter *signal_handler)
signal_handler_ = signal_handler;
}
+// Initialize and activate a statically linked service.
+
+ACE_INLINE int
+ACE_Service_Config::initialize (const ACE_TCHAR *svc_name,
+ const ACE_TCHAR *parameters)
+{
+ ACE_TRACE ("ACE_Service_Config::initialize");
+ return ACE_Service_Config::current ()->initialize (svc_name,
+ parameters);
+}
+
+// Dynamically link the shared object file and retrieve a pointer to
+// the designated shared object in this file.
+
+ACE_INLINE int
+ACE_Service_Config::initialize (const ACE_Service_Type *sr,
+ const ACE_TCHAR *parameters)
+{
+ ACE_TRACE ("ACE_Service_Config::initialize");
+ return ACE_Service_Config::current ()->initialize (sr,
+ parameters);
+}
+
+
+ACE_INLINE int
+ACE_Service_Config::process_directive (const ACE_TCHAR directive[])
+{
+ return ACE_Service_Config::current ()->process_directive (directive);
+}
+
+// Process service configuration requests as indicated in the queue of
+// svc.conf files.
+ACE_INLINE int
+ACE_Service_Config::process_directives (void)
+{
+ return ACE_Service_Config::current ()->process_directives ();
+}
+
+ACE_INLINE int
+ACE_Service_Config::process_directive (const ACE_Static_Svc_Descriptor &ssd,
+ int force_replace)
+{
+ return ACE_Service_Config::current ()->process_directive (ssd,
+ force_replace);
+}
+
+
#if defined (ACE_HAS_WINCE) && defined (ACE_USES_WCHAR)
// We must provide these function to bridge Svc_Conf parser with ACE.
ACE_INLINE int
-ACE_Service_Config::initialize (const ACE_Service_Type *sp, char parameters[])
+ACE_Service_Config::initialize (const ACE_Service_Type *sp, ACE_ANTI_TCHAR parameters[])
{
return ACE_Service_Config::initialize (sp, ACE_TEXT_TO_TCHAR_IN (parameters));
}
ACE_INLINE int
-ACE_Service_Config::initialize (const char svc_name[], char parameters[])
+ACE_Service_Config::initialize (const ACE_ANTI_TCHAR svc_name[], ACE_ANTI_TCHAR parameters[])
{
return ACE_Service_Config::initialize (ACE_TEXT_TO_TCHAR_IN (svc_name),
ACE_TEXT_TO_TCHAR_IN (parameters));
}
ACE_INLINE int
-ACE_Service_Config::resume (const char svc_name[])
+ACE_Service_Config::resume (const ACE_ANTI_TCHAR svc_name[])
{
return ACE_Service_Config::resume (ACE_TEXT_TO_TCHAR_IN (svc_name));
}
ACE_INLINE int
-ACE_Service_Config::suspend (const char svc_name[])
+ACE_Service_Config::suspend (const ACE_ANTI_TCHAR svc_name[])
{
return ACE_Service_Config::suspend (ACE_TEXT_TO_TCHAR_IN (svc_name));
}
ACE_INLINE int
-ACE_Service_Config::remove (const char svc_name[])
+ACE_Service_Config::remove (const ACE_ANTI_TCHAR svc_name[])
{
return ACE_Service_Config::remove (ACE_TEXT_TO_TCHAR_IN (svc_name));
}
diff --git a/ace/Service_Gestalt.cpp b/ace/Service_Gestalt.cpp
index 456958ac732..28efeb2c21e 100644
--- a/ace/Service_Gestalt.cpp
+++ b/ace/Service_Gestalt.cpp
@@ -98,13 +98,7 @@ ACE_Service_Type_Forward_Declaration_Guard::~ACE_Service_Type_Forward_Declaratio
int ret = this->repo_->find (this->name_, &tmp, 0);
// We inserted it (as inactive), so we expect to find it, right?
- if (ret < 0 && ret != -2)
- {
- ACE_ERROR ((LM_WARNING,
- ACE_LIB_TEXT ("(%P|%t) FWDCL::end - Failed (%d) to find %s\n"),
- ret, this->name_));
- ACE_ASSERT (ret == -2 || ret >= 0);
- }
+ ACE_ASSERT (ret = -2 || ret >= 0);
if (tmp != 0 && tmp->type () != 0)
{
diff --git a/ace/Service_Object.cpp b/ace/Service_Object.cpp
index 00de5f6e056..87d5b655151 100644
--- a/ace/Service_Object.cpp
+++ b/ace/Service_Object.cpp
@@ -26,6 +26,18 @@ ACE_Service_Type::dump (void) const
#if defined (ACE_HAS_DUMP)
ACE_TRACE ("ACE_Service_Type::dump");
#endif /* ACE_HAS_DUMP */
+
+
+ // Using printf, since the log facility may not have
+ // been initialized yet
+ ACE_OS::fprintf(stderr,
+ "// [ST] dump, this=%p, name=%s, type=%p, so=%p, active=%d\n",
+ this,
+ this->name_,
+ this->type_,
+ (this->type_ != 0) ? this->type_->object () : 0,
+ this->active_);
+
}
ACE_Service_Type::ACE_Service_Type (const ACE_TCHAR *n,
@@ -60,7 +72,6 @@ ACE_Service_Type::ACE_Service_Type (const ACE_TCHAR *n,
ACE_Service_Type::~ACE_Service_Type (void)
{
ACE_TRACE ("ACE_Service_Type::~ACE_Service_Type");
-
this->fini ();
delete [] const_cast <ACE_TCHAR *> (this->name_);
@@ -72,7 +83,15 @@ ACE_Service_Type::fini (void)
if (!this->fini_already_called_)
{
this->fini_already_called_ = 1;
+ if (this->type_ != 0)
return this->type_->fini ();
+ else
+ return 1; // No implementation was found.
+ // Currently only makes sense for dummy ST, used to "reserve"
+ // a spot (kind of like forward-declarations) for a dynamic
+ // service. This is necessary to help enforce the correct
+ // finalization order, when such service also has any
+ // (dependent) static services
}
return 0;
}
diff --git a/ace/Service_Object.h b/ace/Service_Object.h
index 6101372c5f1..c206db17261 100644
--- a/ace/Service_Object.h
+++ b/ace/Service_Object.h
@@ -24,9 +24,12 @@
#include "ace/Event_Handler.h"
#include "ace/DLL.h"
+#include "ace/Service_Gestalt.h"
+
ACE_BEGIN_VERSIONED_NAMESPACE_DECL
#define ACE_Component ACE_Service_Object
+
/**
* @class ACE_Service_Object
*
@@ -38,7 +41,9 @@ ACE_BEGIN_VERSIONED_NAMESPACE_DECL
* ACE_Event_Handler, as well as being dynamically linked by
* the ACE_Service_Config (due to the <ACE_Shared_Object>).
*/
-class ACE_Export ACE_Service_Object : public ACE_Event_Handler, public ACE_Shared_Object
+class ACE_Export ACE_Service_Object
+ : public ACE_Event_Handler,
+ public ACE_Shared_Object
{
public:
// = Initialization and termination methods.
@@ -101,8 +106,10 @@ public:
void name (const ACE_TCHAR *);
const ACE_Service_Type_Impl *type (void) const;
- void type (const ACE_Service_Type_Impl *,
- int active = 1);
+ void type (const ACE_Service_Type_Impl *, int active = 1);
+
+ // Is this just a stub for the real thing?
+ bool is_forward_declaration (void) const;
int suspend (void) const;
int resume (void) const;
@@ -118,6 +125,9 @@ public:
/// Dump the state of an object.
void dump (void) const;
+ /// Get to the DLL's implentation
+ const ACE_DLL & dll () const;
+
/// Declare the dynamic allocation hooks.
ACE_ALLOC_HOOK_DECLARE;
@@ -128,7 +138,8 @@ private:
/// Pointer to C++ object that implements the svc.
const ACE_Service_Type_Impl *type_;
- /// ACE_DLL representing the shared object file (non-zero if dynamically linked).
+ /// ACE_DLL representing the shared object file (non-zero if
+ /// dynamically linked).
mutable ACE_DLL dll_;
/// 1 if svc is currently active, otherwise 0.
diff --git a/ace/Service_Object.inl b/ace/Service_Object.inl
index 23eb323085f..a675d4e942b 100644
--- a/ace/Service_Object.inl
+++ b/ace/Service_Object.inl
@@ -63,5 +63,10 @@ ACE_Service_Type::fini_called (void) const
return this->fini_already_called_;
}
+ACE_INLINE const ACE_DLL & ACE_Service_Type::dll () const
+{
+ return this->dll_;
+}
+
ACE_END_VERSIONED_NAMESPACE_DECL
diff --git a/ace/Service_Repository.cpp b/ace/Service_Repository.cpp
index 81feb3b233e..875dceb9842 100644
--- a/ace/Service_Repository.cpp
+++ b/ace/Service_Repository.cpp
@@ -10,6 +10,7 @@
#include "ace/Object_Manager.h"
#include "ace/Log_Msg.h"
#include "ace/ACE.h"
+#include "ace/OS_NS_unistd.h"
#include "ace/OS_NS_errno.h"
#include "ace/OS_NS_string.h"
@@ -67,6 +68,7 @@ ACE_Service_Repository::instance (int size /* = ACE_Service_Repository::DEFAULT_
}
}
+ // ACE_ASSERT (ACE_Service_Repository::svc_rep_ != 0);
return ACE_Service_Repository::svc_rep_;
}
@@ -149,16 +151,28 @@ ACE_Service_Repository::fini (void)
// order.
for (int i = this->current_size_ - 1; i >= 0; i--)
+ {
+ ACE_Service_Type *s =
+ const_cast<ACE_Service_Type *> (this->service_vector_[i]);
+
+ if (ACE::debug ())
{
- if (ACE::debug ())
- ACE_DEBUG ((LM_DEBUG,
- ACE_LIB_TEXT ("finalizing %s\n"),
- this->service_vector_[i]->name ()));
- ACE_Service_Type *s =
- const_cast<ACE_Service_Type *> (this->service_vector_[i]);
- // Collect errors.
- retval += s->fini ();
+ ACE_DEBUG ((LM_DEBUG,
+ ACE_LIB_TEXT ("(%P|%t) SR::fini, %@ [%d] (%d): "),
+ this, i, this->total_size_));
+ s->dump();
}
+
+ // Collect any errors.
+ int ret = s->fini ();
+ if (ACE::debug ()>1)
+ {
+ ACE_DEBUG ((LM_DEBUG,
+ ACE_LIB_TEXT ("(%P|%t) SR::fini, returned %d\n"),
+ ret));
+ }
+ retval += ret;
+ }
}
return (retval == 0) ? 0 : -1;
@@ -180,8 +194,22 @@ ACE_Service_Repository::close (void)
// compaction. However, the common case is not to remove
// services, so typically they are deleted in reverse order.
+ if(ACE::debug ())
+ ACE_DEBUG ((LM_DEBUG,
+ ACE_LIB_TEXT ("(%P|%t) SR::close, this=%@, size=%d\n"),
+ this,
+ this->current_size_));
+
for (int i = this->current_size_ - 1; i >= 0; i--)
{
+ if(ACE::debug ())
+ ACE_DEBUG ((LM_DEBUG,
+ ACE_LIB_TEXT ("(%P|%t) SR::close, this=%@, delete so[%d]=%@ (%s)\n"),
+ this,
+ i,
+ this->service_vector_[i],
+ this->service_vector_[i]->name ()));
+
ACE_Service_Type *s = const_cast<ACE_Service_Type *> (this->service_vector_[i]);
--this->current_size_;
delete s;
@@ -198,6 +226,8 @@ ACE_Service_Repository::close (void)
ACE_Service_Repository::~ACE_Service_Repository (void)
{
ACE_TRACE ("ACE_Service_Repository::~ACE_Service_Repository");
+ if(ACE::debug ())
+ ACE_DEBUG ((LM_DEBUG, "(%P|%t) SR::<dtor>, this=%@\n", this));
this->close ();
}
@@ -211,7 +241,7 @@ ACE_Service_Repository::~ACE_Service_Repository (void)
int
ACE_Service_Repository::find_i (const ACE_TCHAR name[],
const ACE_Service_Type **srp,
- int ignore_suspended)
+ int ignore_suspended) const
{
ACE_TRACE ("ACE_Service_Repository::find_i");
int i;
@@ -244,7 +274,7 @@ ACE_Service_Repository::find_i (const ACE_TCHAR name[],
int
ACE_Service_Repository::find (const ACE_TCHAR name[],
const ACE_Service_Type **srp,
- int ignore_suspended)
+ int ignore_suspended) const
{
ACE_TRACE ("ACE_Service_Repository::find");
ACE_MT (ACE_GUARD_RETURN (ACE_Recursive_Thread_Mutex, ace_mon, this->lock_, -1));
@@ -254,16 +284,20 @@ ACE_Service_Repository::find (const ACE_TCHAR name[],
// Insert the ACE_Service_Type SR into the repository. Note that
-// services may be inserted either resumed or suspended.
+// services may be inserted either resumed or suspended. Using same name
+// as in an existing service causes the delete () to be called for the old one,
+// i.e. make sure @code sr is allocated on the heap!
int
ACE_Service_Repository::insert (const ACE_Service_Type *sr)
{
ACE_TRACE ("ACE_Service_Repository::insert");
+
int return_value = -1;
ACE_Service_Type *s = 0;
{
+ // @TODO: Do we need a recursive mutex here?
ACE_MT (ACE_GUARD_RETURN (ACE_Recursive_Thread_Mutex, ace_mon, this->lock_, -1));
int i;
@@ -275,38 +309,49 @@ ACE_Service_Repository::insert (const ACE_Service_Type *sr)
// Replacing an existing entry
if (i < this->current_size_)
+ {
+ return_value = 0;
+ // Check for self-assignment...
+ if (sr != this->service_vector_[i])
{
- // Check for self-assignment...
- if (sr == this->service_vector_[i])
- {
- return_value = 0;
- }
- else
- {
- s = const_cast<ACE_Service_Type *> (this->service_vector_[i]);
- this->service_vector_[i] = sr;
- return_value = 0;
- }
+ s = const_cast<ACE_Service_Type *> (this->service_vector_[i]);
+ this->service_vector_[i] = sr;
}
+ }
// Adding a new entry.
else if (i < this->total_size_)
- {
- this->service_vector_[i] = sr;
- this->current_size_++;
- return_value = 0;
- }
+ {
+ this->service_vector_[i] = sr;
+ this->current_size_++;
+ return_value = 0;
+ }
+
+ if (ACE::debug ())
+ {
+ ACE_DEBUG ((LM_DEBUG,
+ "(%P|%t) SR::insert, repo=%@ [%d] (size=%d): ",
+ this,
+ i,
+ this->total_size_));
+ sr->dump();
+ }
}
- // delete outside the lock
+ // Delete outside the lock
if (s != 0)
+ {
+ if (ACE::debug () > 1)
{
- delete s;
+ ACE_DEBUG ((LM_DEBUG,
+ "(%P|%t) SR::insert, repo=%@ - destroying : ",
+ this));
+ s->dump();
}
+ delete s;
+ }
if (return_value == -1)
- {
- ACE_OS::last_error (ENOSPC);
- }
+ ACE_OS::last_error (ENOSPC);
return return_value;
}
@@ -345,11 +390,21 @@ ACE_Service_Repository::suspend (const ACE_TCHAR name[],
return this->service_vector_[i]->suspend ();
}
-// Completely remove a <name> entry from the Repository and
-// dynamically unlink it if it was originally dynamically linked.
-// Since the order of services in the Respository does not matter, we
-// simply overwrite the entry being deleted with the final entry in
-// the array and decrement the <current_size> by 1.
+
+/**
+ * @brief Completely remove a <name> entry from the Repository and
+ * dynamically unlink it if it was originally dynamically linked.
+ *
+ * Since the order of services in the Respository matters, we can't
+ * simply overwrite the entry being deleted with the last and
+ * decrement the <current_size> by 1 - we must "pack" the array. A
+ * good example of why the order matters is a dynamic service, in
+ * whose DLL there is at least one static service. In order to prevent
+ * SEGV during finalization, those static services must be finalized
+ * _before_the dynamic service that owns them. Otherwice the TEXT
+ * segment, containing the code for the static service's desructor may
+ * be unloaded with the DLL.
+ */
int
ACE_Service_Repository::remove (const ACE_TCHAR name[], ACE_Service_Type **ps)
@@ -360,16 +415,19 @@ ACE_Service_Repository::remove (const ACE_TCHAR name[], ACE_Service_Type **ps)
ACE_MT (ACE_GUARD_RETURN (ACE_Recursive_Thread_Mutex, ace_mon, this->lock_, -1));
int i = this->find_i (name, 0, 0);
+ // Not found
if (i == -1)
return -1;
+ // We need the old ptr to be delete outside the lock
s = const_cast<ACE_Service_Type *> (this->service_vector_[i]);
- --this->current_size_;
- if (this->current_size_ >= 1)
- this->service_vector_[i]
- = this->service_vector_[this->current_size_];
+ // Pack the array
+ --this->current_size_;
+ for (int j = i; j < this->current_size_; j++)
+ this->service_vector_[j] = this->service_vector_[j+1];
}
+
if (ps != 0)
*ps = s;
else
diff --git a/ace/Service_Repository.h b/ace/Service_Repository.h
index 1bda4000913..a8c677e7599 100644
--- a/ace/Service_Repository.h
+++ b/ace/Service_Repository.h
@@ -77,7 +77,8 @@ public:
int fini (void);
/// Get pointer to a process-wide ACE_Service_Repository.
- static ACE_Service_Repository *instance (int size = ACE_Service_Repository::DEFAULT_SIZE);
+ static ACE_Service_Repository *
+ instance (int size = ACE_Service_Repository::DEFAULT_SIZE);
/// Set pointer to a process-wide ACE_Service_Repository and return
/// existing pointer.
@@ -88,8 +89,8 @@ public:
// = Search structure operations (all acquire locks as necessary).
- /// Insert a new service record. Returns -1 when the service repository is full
- /// and 0 on success.
+ /// Insert a new service record. Returns -1 when the service repository
+ /// is full and 0 on success.
int insert (const ACE_Service_Type *);
/**
@@ -102,7 +103,7 @@ public:
*/
int find (const ACE_TCHAR name[],
const ACE_Service_Type **srp = 0,
- int ignore_suspended = 1);
+ int ignore_suspended = 1) const;
/// Remove an existing service record. If @a sr == 0, the service record
/// is deleted before control is returned to the caller. If @a sr != 0,
@@ -135,7 +136,7 @@ private:
/// held...
int find_i (const ACE_TCHAR service_name[],
const ACE_Service_Type ** = 0,
- int ignore_suspended = 1);
+ int ignore_suspended = 1) const;
/// Contains all the configured services.
const ACE_Service_Type **service_vector_;
@@ -154,7 +155,7 @@ private:
#if defined (ACE_MT_SAFE) && (ACE_MT_SAFE != 0)
/// Synchronization variable for the MT_SAFE Repository
- ACE_Recursive_Thread_Mutex lock_;
+ mutable ACE_Recursive_Thread_Mutex lock_;
#endif /* ACE_MT_SAFE */
};
diff --git a/ace/Service_Types.cpp b/ace/Service_Types.cpp
index 35140d29d4e..fec79c53824 100644
--- a/ace/Service_Types.cpp
+++ b/ace/Service_Types.cpp
@@ -103,6 +103,15 @@ ACE_Service_Object_Type::init (int argc, ACE_TCHAR *argv[]) const
ACE_Service_Object * const so =
static_cast<ACE_Service_Object *> (obj);
+ if (ACE::debug () > 2)
+ ACE_DEBUG ((LM_DEBUG,
+ ACE_LIB_TEXT ("(%P|%t) SOT::init, this=%@, ")
+ ACE_LIB_TEXT ("name=%s, flags=%d, so=%@\n"),
+ this,
+ this->name_,
+ this->flags_,
+ obj));
+
if (so == 0)
return -1;
else
@@ -116,6 +125,15 @@ ACE_Service_Object_Type::fini (void) const
void * const obj = this->object ();
+ if (ACE::debug () > 2)
+ ACE_DEBUG ((LM_DEBUG,
+ ACE_LIB_TEXT ("(%P|%t) SOT::fini - this=%@, ")
+ ACE_LIB_TEXT ("name=%s, flags=%d, so=%@\n"),
+ this,
+ this->name_,
+ this->flags_,
+ obj));
+
ACE_Service_Object * const so =
static_cast<ACE_Service_Object *> (obj);
@@ -123,6 +141,7 @@ ACE_Service_Object_Type::fini (void) const
{
so->fini ();
+ // @TODO: Why is this disabled?
#if 0
if (ACE_BIT_ENABLED (this->flags_,
ACE_Service_Type::DELETE_OBJ))
@@ -455,5 +474,6 @@ ACE_Stream_Type::find (const ACE_TCHAR *mod_name) const
return 0;
}
+// @@@ Eliminated ommented out explicit template instantiation code
ACE_END_VERSIONED_NAMESPACE_DECL
diff --git a/ace/Sock_Connect.cpp b/ace/Sock_Connect.cpp
index e0ff264da00..e2b316e1097 100644
--- a/ace/Sock_Connect.cpp
+++ b/ace/Sock_Connect.cpp
@@ -1101,7 +1101,7 @@ ACE::get_ip_interfaces (size_t &count,
return 0;
-#elif defined (__unix) || defined (__unix__) || defined (__Lynx__) || defined (_AIX) || (defined (ACE_VXWORKS) && (ACE_VXWORKS >= 0x600))
+#elif defined (__unix) || defined (__unix__) || defined (__Lynx__) || defined (_AIX) || (defined (ACE_VXWORKS) && (ACE_VXWORKS >= 0x600)) || defined (ACE_OPENVMS)
// COMMON (SVR4 and BSD) UNIX CODE
size_t num_ifs, num_ifs_found;
@@ -1370,7 +1370,7 @@ ACE::count_interfaces (ACE_HANDLE handle, size_t &how_many)
how_many = num_ifs;
return 0;
-#elif defined (__unix) || defined (__unix__) || defined (__Lynx__) || defined (_AIX) || (defined (ACE_VXWORKS) && (ACE_VXWORKS >= 0x600))
+#elif defined (__unix) || defined (__unix__) || defined (__Lynx__) || defined (_AIX) || (defined (ACE_VXWORKS) && (ACE_VXWORKS >= 0x600)) || defined (ACE_OPENVMS)
// Note: DEC CXX doesn't define "unix". BSD compatible OS: HP UX,
// AIX, SunOS 4.x perform some ioctls to retrieve ifconf list of
// ifreq structs no SIOCGIFNUM on SunOS 4.x, so use guess and scan
@@ -1479,7 +1479,7 @@ ACE::get_handle (void)
ACE_HANDLE handle = ACE_INVALID_HANDLE;
#if defined (sparc) && ! defined (CHORUS)
handle = ACE_OS::open ("/dev/udp", O_RDONLY);
-#elif defined (__unix) || defined (__unix__) || defined (__Lynx__) || defined (_AIX) || (defined (ACE_VXWORKS) && (ACE_VXWORKS >= 0x600))
+#elif defined (__unix) || defined (__unix__) || defined (__Lynx__) || defined (_AIX) || (defined (ACE_VXWORKS) && (ACE_VXWORKS >= 0x600)) || defined (ACE_OPENVMS)
// Note: DEC CXX doesn't define "unix" BSD compatible OS: HP UX,
// AIX, SunOS 4.x
diff --git a/ace/Strategies_T.h b/ace/Strategies_T.h
index 8171bf8b07f..b9e7e6b9139 100644
--- a/ace/Strategies_T.h
+++ b/ace/Strategies_T.h
@@ -414,13 +414,13 @@ protected:
* @class ACE_Process_Strategy
*
* @brief Defines the interface for specifying a concurrency strategy
- * for a <SVC_HANDLER> based on multiprocessing.
+ * for a @c SVC_HANDLER based on multiprocessing.
*
* This class provides a strategy that manages the creation of
* processes to handle requests from clients concurrently using a
* process-per-connection model. It behaves as a "process factory",
- * using <ACE::fork> to fork threads "on-demand" to run the service
- * specified by a user-supplied <SVC_HANDLER> in a separate process.
+ * using @c ACE::fork() to fork threads "on-demand" to run the service
+ * specified by a user-supplied @c SVC_HANDLER in a separate process.
*/
template <class SVC_HANDLER>
class ACE_Process_Strategy : public ACE_Concurrency_Strategy<SVC_HANDLER>
@@ -432,15 +432,15 @@ public:
// = Intialization and termination methods.
- /// Initialize the strategy. If <avoid_zombies> is non-0 then set a
- /// flag to <ACE::fork> to avoid zombies.
+ /// Initialize the strategy. If @a avoid_zombies is non-0 then set a
+ /// flag to ACE::fork() to avoid zombies.
ACE_Process_Strategy (size_t n_processes = 1,
ACE_Event_Handler *acceptor = 0,
ACE_Reactor * = 0,
int avoid_zombies = 0);
- /// Initialize the strategy. If <avoid_zombies> is non-0 then set a
- /// flag to <ACE::fork> to avoid zombies.
+ /// Initialize the strategy. If @a avoid_zombies is non-0 then set a
+ /// flag to ACE::fork() to avoid zombies.
virtual int open (size_t n_processes = 1,
ACE_Event_Handler *acceptor = 0,
ACE_Reactor * = 0,
@@ -450,9 +450,9 @@ public:
// = Factory method.
/**
- * Activate the <svc_handler> with an appropriate concurrency
+ * Activate the @a svc_handler with an appropriate concurrency
* strategy. This method activates the SVC_HANDLER by first forking
- * and then calling the <open> method of the SVC_HANDLER in the
+ * and then calling the @c open() method of the SVC_HANDLER in the
* child.
*/
virtual int activate_svc_handler (SVC_HANDLER *svc_handler,
@@ -471,15 +471,15 @@ protected:
size_t n_processes_;
/**
- * This is the <Acceptor> in the parent is listening on. We need to
+ * This is the @c Acceptor in the parent is listening on. We need to
* make sure that we remove it from the Reactor and close it down in
* the child.
*/
ACE_Event_Handler *acceptor_;
/**
- * This is the <Reactor> the child is using in conjunction with the
- * <Acceptor>. We need to remove the <Acceptor> from this <Reactor>
+ * This is the reactor the child is using in conjunction with the
+ * acceptor. We need to remove the acceptor from this reactor
* in the child.
*/
ACE_Reactor *reactor_;
@@ -509,13 +509,13 @@ public:
/// Default constructor.
ACE_Accept_Strategy (ACE_Reactor *reactor = ACE_Reactor::instance ());
- /// Initialize the <peer_acceptor_> with <local_addr>.
+ /// Initialize the @c peer_acceptor_ with @a local_addr.
ACE_Accept_Strategy (const ACE_PEER_ACCEPTOR_ADDR &local_addr,
int restart = 0,
ACE_Reactor *reactor = ACE_Reactor::instance ());
- /// Initialize the <peer_acceptor_> with <local_addr>, indicating
- /// whether to <reuse_addr> if it's already in use.
+ /// Initialize the <peer_acceptor_> with @a local_addr, indicating
+ /// whether to @a reuse_addr if it's already in use.
virtual int open (const ACE_PEER_ACCEPTOR_ADDR &local_addr,
int reuse_addr = 0);
@@ -822,7 +822,7 @@ protected:
* subsequent re-use of unused, but available, connections.
*
* <ACE_Cached_Connect_Strategy> is intended to be used as a
- * plug-in connection strategy for <ACE_Strategy_Connector>.
+ * plug-in connection strategy for ACE_Strategy_Connector.
* It's added value is re-use of established connections.
*/
template <class SVC_HANDLER, ACE_PEER_CONNECTOR_1, class MUTEX>
diff --git a/ace/Svc_Conf.h b/ace/Svc_Conf.h
index 4c14981caa3..4a0794a9077 100644
--- a/ace/Svc_Conf.h
+++ b/ace/Svc_Conf.h
@@ -28,13 +28,12 @@
#include "ace/Service_Config.h"
#include "ace/Parse_Node.h"
+#include "ace/Svc_Conf_Param.h"
+
#if (ACE_USES_CLASSIC_SVC_CONF == 1)
ACE_BEGIN_VERSIONED_NAMESPACE_DECL
-// Forward declarations.
-struct ace_yy_buffer_state;
-
// The following yylex() declarations require support for reentrant
// parser generation (e.g. from GNU Bison).
#if defined (DEBUGGING)
@@ -46,98 +45,11 @@ struct ace_yy_buffer_state;
#define ACE_YY_DECL extern "C" int ace_yylex (ACE_YYSTYPE *ace_yylval, void *ACE_YYLEX_PARAM)
#endif /* DEBUGGING */
-extern void ace_yy_delete_buffer (ace_yy_buffer_state *buffer);
-
-/**
- * @class ACE_Svc_Conf_Param
- *
- * @brief An instance of this object will be passed down to the
- * yyparse() and yylex() functions.
- *
- * This class retains the state for a given parse/scan. It primarily
- * makes it possible to hold the static object lock in the scanner
- * for as short a period of time as possible. The resulting finer
- * grained locking prevents deadlocks from occuring when scanning a
- * `svc.conf' file and activating an ACE_Task, for example, as a
- * result of processing the directives in that file.
- */
-class ACE_Svc_Conf_Param
-{
-public:
-
- enum SVC_CONF_PARAM_TYPE
- {
- /// The lexer will scan a file containing one or more directives.
- SVC_CONF_FILE,
-
- /// The lexer will scan a string containing a directive.
- SVC_CONF_DIRECTIVE
- };
-
- /// Constructor
- ACE_Svc_Conf_Param (FILE *file)
- : type (SVC_CONF_FILE),
- yyerrno (0),
- yylineno (1),
- buffer (0),
- obstack ()
- {
- source.file = file;
- }
-
- /// Constructor
- ACE_Svc_Conf_Param (const ACE_TCHAR *directive)
- : type (SVC_CONF_DIRECTIVE),
- yyerrno (0),
- yylineno (1),
- buffer (0),
- obstack ()
- {
- source.directive = directive;
- }
-
- ~ACE_Svc_Conf_Param (void)
- {
- ace_yy_delete_buffer (this->buffer);
- }
-
-public:
-
- union
- {
- /// FILE stream from which directives will be scanned and parsed.
- FILE *file;
-
- /// String containing directive that will be scanned and parsed.
- const ACE_TCHAR *directive;
-
- } source;
-
- /// Discriminant use to determine which union member to use.
- SVC_CONF_PARAM_TYPE type;
-
- /// Keeps track of the number of errors encountered so far.
- int yyerrno;
-
- /// Keeps track of the current line number for error-handling routine.
- int yylineno;
-
- /// Lexer buffer that corresponds to the current Service
- /// Configurator file/direct scan.
- ace_yy_buffer_state *buffer;
-
- /// Obstack used for efficient memory allocation when
- /// parsing/scanning a service configurator directive.
- ACE_Obstack_T<ACE_TCHAR> obstack;
-
-};
-
-// Parameter that is passed down to the yyparse() function, and
-// eventually to yylex().
-#define ACE_YYPARSE_PARAM ace_svc_conf_parameter
-#define ACE_YYLEX_PARAM ACE_YYPARSE_PARAM
-
-#define ACE_SVC_CONF_PARAM (static_cast<ACE_Svc_Conf_Param *> (ACE_YYLEX_PARAM))
+// Forward declarations
+class ACE_Location_Node;
+class ACE_Parse_Node;
+class ACE_Static_Node;
+class ACE_Service_Type_Factory;
// The following definition for the ACE_YYSTYPE must occur before
// ACE_YY_DECL is declared since ACE_YY_DECL expands to function
@@ -148,7 +60,7 @@ typedef union
ACE_Location_Node *location_node_;
ACE_Parse_Node *parse_node_;
ACE_Static_Node *static_node_;
- ACE_Service_Type *svc_record_;
+ ACE_Service_Type_Factory *svc_record_;
ACE_TCHAR *ident_;
} ACE_YYSTYPE;
diff --git a/ace/Svc_Conf.y b/ace/Svc_Conf.y
index cb159d68b2f..a3b5b7f7080 100644
--- a/ace/Svc_Conf.y
+++ b/ace/Svc_Conf.y
@@ -12,6 +12,8 @@
#include "ace/OS_NS_string.h"
+#include "ace/ace_wchar.h"
+
ACE_RCSID (ace,
Svc_Conf_y,
"$Id$")
@@ -19,18 +21,22 @@ ACE_RCSID (ace,
ACE_BEGIN_VERSIONED_NAMESPACE_DECL
// Prototypes.
-static ACE_Module_Type *ace_get_module (ACE_Static_Node *str_rec,
- ACE_Static_Node *svc_type,
- int & yyerrno);
-static ACE_Module_Type *ace_get_module (ACE_Static_Node *str_rec,
+
+static ACE_Module_Type *ace_get_module (const ACE_Service_Type *sr,
+ const ACE_Service_Type *sv,
+ int & ace_yyerrno);
+
+static ACE_Module_Type *ace_get_module (const ACE_Service_Type *sr,
const ACE_TCHAR *svc_name,
- int & yyerrno);
+ int & ace_yyerrno);
#define YYDEBUG_LEXER_TEXT (yytext[yyleng] = '\0', yytext)
// Force the pretty debugging code to compile.
// #define YYDEBUG 1
+ACE_END_VERSIONED_NAMESPACE_DECL
+
%}
%token ACE_DYNAMIC ACE_STATIC ACE_SUSPEND ACE_RESUME ACE_REMOVE ACE_USTREAM
@@ -57,7 +63,8 @@ svc_config_entries
{
if ($2 != 0)
{
- $2->apply (ACE_SVC_CONF_PARAM->yyerrno); delete $2;
+ $2->apply (ACE_SVC_CONF_PARAM->config, ACE_SVC_CONF_PARAM->yyerrno);
+ delete $2;
}
ACE_SVC_CONF_PARAM->obstack.release ();
}
@@ -170,11 +177,11 @@ module
ACE_Static_Node *module = $<static_node_>-1;
ACE_ARGV args (svc_type->parameters ());
- ACE_Module_Type *mt = ace_get_module (module,
- svc_type,
+ ACE_Module_Type *mt = ace_get_module (module->record (ACE_SVC_CONF_PARAM->config),
+ svc_type->record (ACE_SVC_CONF_PARAM->config),
ACE_SVC_CONF_PARAM->yyerrno);
ACE_Stream_Type *st =
- dynamic_cast<ACE_Stream_Type *> (const_cast<ACE_Service_Type_Impl *> (module->record ()->type ()));
+ dynamic_cast<ACE_Stream_Type *> (const_cast<ACE_Service_Type_Impl *> (module->record (ACE_SVC_CONF_PARAM->config)->type ()));
if (mt->init (args.argc (), args.argv ()) == -1
|| st->push (mt) == -1)
@@ -188,11 +195,12 @@ module
}
| static
{
- ACE_Module_Type *mt = ace_get_module ($<static_node_>-1,
+ ACE_Static_Node *sn = $<static_node_>-1;
+ ACE_Module_Type *mt = ace_get_module (sn->record (ACE_SVC_CONF_PARAM->config),
$<static_node_>1->name (),
ACE_SVC_CONF_PARAM->yyerrno);
- if (((ACE_Stream_Type *) ($<static_node_>-1)->record ()->type ())->push (mt) == -1)
+ if (((ACE_Stream_Type *) sn->record (ACE_SVC_CONF_PARAM->config)->type ())->push (mt) == -1)
{
ACE_ERROR ((LM_ERROR,
ACE_LIB_TEXT ("Problem with static\n")));
@@ -201,15 +209,17 @@ module
}
| suspend
{
- ACE_Module_Type *mt = ace_get_module ($<static_node_>-1,
- $<static_node_>1->name (),
+ ACE_Static_Node *sn = $<static_node_>-1;
+ ACE_Module_Type *mt = ace_get_module (sn->record (ACE_SVC_CONF_PARAM->config),
+ sn->name (),
ACE_SVC_CONF_PARAM->yyerrno);
if (mt != 0)
mt->suspend ();
}
| resume
{
- ACE_Module_Type *mt = ace_get_module ($<static_node_>-1,
+ ACE_Static_Node *sn = $<static_node_>-1;
+ ACE_Module_Type *mt = ace_get_module (sn->record (ACE_SVC_CONF_PARAM->config),
$<static_node_>1->name (),
ACE_SVC_CONF_PARAM->yyerrno);
if (mt != 0)
@@ -219,12 +229,12 @@ module
{
ACE_Static_Node *stream = $<static_node_>-1;
ACE_Static_Node *module = $<static_node_>1;
- ACE_Module_Type *mt = ace_get_module (stream,
+ ACE_Module_Type *mt = ace_get_module (stream->record (ACE_SVC_CONF_PARAM->config),
module->name (),
ACE_SVC_CONF_PARAM->yyerrno);
ACE_Stream_Type *st =
- dynamic_cast<ACE_Stream_Type *> (const_cast<ACE_Service_Type_Impl *> (stream->record ()->type ()));
+ dynamic_cast<ACE_Stream_Type *> (const_cast<ACE_Service_Type_Impl *> (stream->record (ACE_SVC_CONF_PARAM->config)->type ()));
if (mt != 0 && st->remove (mt) == -1)
{
ACE_ERROR ((LM_ERROR,
@@ -239,37 +249,7 @@ module
svc_location
: ACE_IDENT type svc_initializer status
{
- u_int flags
- = ACE_Service_Type::DELETE_THIS
- | ($3->dispose () == 0 ? 0 : ACE_Service_Type::DELETE_OBJ);
- ACE_Service_Object_Exterminator gobbler = 0;
- void *sym = $3->symbol (ACE_SVC_CONF_PARAM->yyerrno, &gobbler);
-
- if (sym != 0)
- {
- ACE_Service_Type_Impl *stp
- = ACE_Service_Config::create_service_type_impl ($1,
- $2,
- sym,
- flags,
- gobbler);
- if (stp == 0)
- ++ACE_SVC_CONF_PARAM->yyerrno;
-
- $$ = new ACE_Service_Type ($1,
- stp,
- $3->dll (),
- $4);
- }
- else
- {
- ACE_ERROR ((LM_ERROR,
- ACE_LIB_TEXT ("Unable to find service: %s\n"),
- $1));
- ++ACE_SVC_CONF_PARAM->yyerrno;
- $$ = 0;
- }
- delete $3;
+ $$ = new ACE_Service_Type_Factory ($1, $2, $3, $4);
}
;
@@ -330,6 +310,9 @@ pathname
;
%%
+
+ACE_BEGIN_VERSIONED_NAMESPACE_DECL
+
// Prints the error string to standard output. Cleans up the error
// messages.
@@ -353,11 +336,10 @@ yyerror (int yyerrno, int yylineno, const char *s)
// record.
static ACE_Module_Type *
-ace_get_module (ACE_Static_Node *str_rec,
+ace_get_module (const ACE_Service_Type *sr,
const ACE_TCHAR *svc_name,
int & yyerrno)
{
- const ACE_Service_Type *sr = str_rec->record ();
const ACE_Service_Type_Impl *type = sr->type ();
ACE_Stream_Type *st = sr == 0
? 0
@@ -369,7 +351,7 @@ ace_get_module (ACE_Static_Node *str_rec,
ACE_ERROR ((LM_ERROR,
ACE_LIB_TEXT ("cannot locate Module_Type %s in STREAM_Type %s\n"),
svc_name,
- str_rec->name ()));
+ sr->name ()));
yyerrno++;
}
@@ -377,24 +359,23 @@ ace_get_module (ACE_Static_Node *str_rec,
}
static ACE_Module_Type *
-ace_get_module (ACE_Static_Node *str_rec,
- ACE_Static_Node *svc_type,
+ace_get_module (const ACE_Service_Type *sr,
+ const ACE_Service_Type *sv,
int & yyerrno)
{
- const ACE_Service_Type *sr = str_rec->record ();
const ACE_Service_Type_Impl *type = sr->type ();
ACE_Stream_Type *st = sr == 0 ? 0 : (ACE_Stream_Type *) type;
- const ACE_Service_Type *sv = svc_type->record ();
+
type = sv->type ();
ACE_Module_Type *mt = (ACE_Module_Type *) type;
- const ACE_TCHAR *module_type_name = svc_type->name ();
+ const ACE_TCHAR *module_type_name = sr->name ();
if (sr == 0 || st == 0 || mt == 0)
{
ACE_ERROR ((LM_ERROR,
ACE_LIB_TEXT ("cannot locate Module_Type %s or STREAM_Type %s\n"),
module_type_name,
- str_rec->name ()));
+ sr->name ()));
yyerrno++;
}
diff --git a/ace/Svc_Conf_Tokens.h b/ace/Svc_Conf_Tokens.h
index 6fe46126fef..8c514a0a582 100644
--- a/ace/Svc_Conf_Tokens.h
+++ b/ace/Svc_Conf_Tokens.h
@@ -1,21 +1,81 @@
// $Id$
#ifndef BISON_SVC_CONF_TAB_H
# define BISON_SVC_CONF_TAB_H
+# define ACE_YYSTYPE_IS_DECLARED 1
+/* A Bison parser, made by GNU Bison 2.0. */
-# define ACE_DYNAMIC 257
-# define ACE_STATIC 258
-# define ACE_SUSPEND 259
-# define ACE_RESUME 260
-# define ACE_REMOVE 261
-# define ACE_USTREAM 262
-# define ACE_MODULE_T 263
-# define ACE_STREAM_T 264
-# define ACE_SVC_OBJ_T 265
-# define ACE_ACTIVE 266
-# define ACE_INACTIVE 267
-# define ACE_PATHNAME 268
-# define ACE_IDENT 269
-# define ACE_STRING 270
-
-
-#endif /* not BISON_SVC_CONF_TAB_H */
+/* Skeleton parser for Yacc-like parsing with Bison,
+ Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA. */
+
+/* As a special exception, when this file is copied by Bison into a
+ Bison output file, you may use that output file without restriction.
+ This special exception was added by the Free Software Foundation
+ in version 1.24 of Bison. */
+
+/* Tokens. */
+#ifndef ACE_YYTOKENTYPE
+# define ACE_YYTOKENTYPE
+ /* Put the tokens into the symbol table, so that GDB and other debuggers
+ know about them. */
+ enum ace_yytokentype {
+ ACE_DYNAMIC = 258,
+ ACE_STATIC = 259,
+ ACE_SUSPEND = 260,
+ ACE_RESUME = 261,
+ ACE_REMOVE = 262,
+ ACE_USTREAM = 263,
+ ACE_MODULE_T = 264,
+ ACE_STREAM_T = 265,
+ ACE_SVC_OBJ_T = 266,
+ ACE_ACTIVE = 267,
+ ACE_INACTIVE = 268,
+ ACE_PATHNAME = 269,
+ ACE_IDENT = 270,
+ ACE_STRING = 271
+ };
+#endif
+#define ACE_DYNAMIC 258
+#define ACE_STATIC 259
+#define ACE_SUSPEND 260
+#define ACE_RESUME 261
+#define ACE_REMOVE 262
+#define ACE_USTREAM 263
+#define ACE_MODULE_T 264
+#define ACE_STREAM_T 265
+#define ACE_SVC_OBJ_T 266
+#define ACE_ACTIVE 267
+#define ACE_INACTIVE 268
+#define ACE_PATHNAME 269
+#define ACE_IDENT 270
+#define ACE_STRING 271
+
+
+
+
+#if ! defined (ACE_YYSTYPE) && ! defined (ACE_YYSTYPE_IS_DECLARED)
+typedef int ACE_YYSTYPE;
+# define ace_yystype ACE_YYSTYPE /* obsolescent; will be withdrawn */
+# define ACE_YYSTYPE_IS_DECLARED 1
+# define ACE_YYSTYPE_IS_TRIVIAL 1
+#endif
+
+
+
+
+
+#endif /* ifndef BISON_SVC_CONF_TAB_H */
diff --git a/ace/Svc_Conf_y.cpp b/ace/Svc_Conf_y.cpp
index f8cb4551e48..0469977fe98 100644
--- a/ace/Svc_Conf_y.cpp
+++ b/ace/Svc_Conf_y.cpp
@@ -1,22 +1,93 @@
-/* A Bison parser, made from Svc_Conf.y
- by GNU bison 1.35. */
-
-#define ACE_YYBISON 1 /* Identify Bison output. */
-
-# define ACE_DYNAMIC 257
-# define ACE_STATIC 258
-# define ACE_SUSPEND 259
-# define ACE_RESUME 260
-# define ACE_REMOVE 261
-# define ACE_USTREAM 262
-# define ACE_MODULE_T 263
-# define ACE_STREAM_T 264
-# define ACE_SVC_OBJ_T 265
-# define ACE_ACTIVE 266
-# define ACE_INACTIVE 267
-# define ACE_PATHNAME 268
-# define ACE_IDENT 269
-# define ACE_STRING 270
+/* A Bison parser, made by GNU Bison 2.0. */
+
+/* Skeleton parser for Yacc-like parsing with Bison,
+ Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA. */
+
+/* As a special exception, when this file is copied by Bison into a
+ Bison output file, you may use that output file without restriction.
+ This special exception was added by the Free Software Foundation
+ in version 1.24 of Bison. */
+
+/* Written by Richard Stallman by simplifying the original so called
+ ``semantic'' parser. */
+
+/* All symbols defined below should begin with ace_yy or ACE_YY, to avoid
+ infringing on user name space. This should be done even for local
+ variables, as they might otherwise be expanded by user macros.
+ There are some unavoidable exceptions within include files to
+ define necessary library symbols; they are noted "INFRINGES ON
+ USER NAME SPACE" below. */
+
+/* Identify Bison output. */
+#define ACE_YYBISON 1
+
+/* Skeleton name. */
+#define ACE_YYSKELETON_NAME "yacc.c"
+
+/* Pure parsers. */
+#define ACE_YYPURE 1
+
+/* Using locations. */
+#define ACE_YYLSP_NEEDED 0
+
+
+
+/* Tokens. */
+#ifndef ACE_YYTOKENTYPE
+# define ACE_YYTOKENTYPE
+ /* Put the tokens into the symbol table, so that GDB and other debuggers
+ know about them. */
+ enum ace_yytokentype {
+ ACE_DYNAMIC = 258,
+ ACE_STATIC = 259,
+ ACE_SUSPEND = 260,
+ ACE_RESUME = 261,
+ ACE_REMOVE = 262,
+ ACE_USTREAM = 263,
+ ACE_MODULE_T = 264,
+ ACE_STREAM_T = 265,
+ ACE_SVC_OBJ_T = 266,
+ ACE_ACTIVE = 267,
+ ACE_INACTIVE = 268,
+ ACE_PATHNAME = 269,
+ ACE_IDENT = 270,
+ ACE_STRING = 271
+ };
+#endif
+#define ACE_DYNAMIC 258
+#define ACE_STATIC 259
+#define ACE_SUSPEND 260
+#define ACE_RESUME 261
+#define ACE_REMOVE 262
+#define ACE_USTREAM 263
+#define ACE_MODULE_T 264
+#define ACE_STREAM_T 265
+#define ACE_SVC_OBJ_T 266
+#define ACE_ACTIVE 267
+#define ACE_INACTIVE 268
+#define ACE_PATHNAME 269
+#define ACE_IDENT 270
+#define ACE_STRING 271
+
+
+
+
+/* Copy the first part of user declarations. */
// $Id$
@@ -32,41 +103,181 @@
#include "ace/OS_NS_string.h"
+#include "ace/ace_wchar.h"
+
ACE_RCSID (ace,
Svc_Conf_y,
"$Id$")
-
ACE_BEGIN_VERSIONED_NAMESPACE_DECL
// Prototypes.
-static ACE_Module_Type *ace_get_module (ACE_Static_Node *str_rec,
- ACE_Static_Node *svc_type,
- int & ace_yyerrno);
-static ACE_Module_Type *ace_get_module (ACE_Static_Node *str_rec,
+
+static ACE_Module_Type *ace_get_module (const ACE_Service_Type *sr,
+ const ACE_Service_Type *sv,
+ int & ace_ace_yyerrno);
+
+static ACE_Module_Type *ace_get_module (const ACE_Service_Type *sr,
const ACE_TCHAR *svc_name,
- int & ace_yyerrno);
+ int & ace_ace_yyerrno);
#define ACE_YYDEBUG_LEXER_TEXT (ace_yytext[ace_yyleng] = '\0', ace_yytext)
// Force the pretty debugging code to compile.
// #define ACE_YYDEBUG 1
+ACE_END_VERSIONED_NAMESPACE_DECL
+
+
+
+/* Enabling traces. */
#ifndef ACE_YYDEBUG
# define ACE_YYDEBUG 0
#endif
+/* Enabling verbose error messages. */
+#ifdef ACE_YYERROR_VERBOSE
+# undef ACE_YYERROR_VERBOSE
+# define ACE_YYERROR_VERBOSE 1
+#else
+# define ACE_YYERROR_VERBOSE 0
+#endif
+
+#if ! defined (ACE_YYSTYPE) && ! defined (ACE_YYSTYPE_IS_DECLARED)
+typedef int ACE_YYSTYPE;
+# define ace_yystype ACE_YYSTYPE /* obsolescent; will be withdrawn */
+# define ACE_YYSTYPE_IS_DECLARED 1
+# define ACE_YYSTYPE_IS_TRIVIAL 1
+#endif
+
+
+
+/* Copy the second part of user declarations. */
+
+
+/* Line 213 of yacc.c. */
+
+
+#if ! defined (ace_yyoverflow) || ACE_YYERROR_VERBOSE
+
+# ifndef ACE_YYFREE
+# define ACE_YYFREE free
+# endif
+# ifndef ACE_YYMALLOC
+# define ACE_YYMALLOC malloc
+# endif
+
+/* The parser invokes alloca or malloc; define the necessary symbols. */
+
+# ifdef ACE_YYSTACK_USE_ALLOCA
+# if ACE_YYSTACK_USE_ALLOCA
+# ifdef __GNUC__
+# define ACE_YYSTACK_ALLOC __builtin_alloca
+# else
+# define ACE_YYSTACK_ALLOC alloca
+# endif
+# endif
+# endif
+
+# ifdef ACE_YYSTACK_ALLOC
+ /* Pacify GCC's `empty if-body' warning. */
+# define ACE_YYSTACK_FREE(Ptr) do { /* empty */; } while (0)
+# else
+# if defined (__STDC__) || defined (__cplusplus)
+# include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
+# define ACE_YYSIZE_T size_t
+# endif
+# define ACE_YYSTACK_ALLOC ACE_YYMALLOC
+# define ACE_YYSTACK_FREE ACE_YYFREE
+# endif
+#endif /* ! defined (ace_yyoverflow) || ACE_YYERROR_VERBOSE */
+
+
+#if (! defined (ace_yyoverflow) \
+ && (! defined (__cplusplus) \
+ || (defined (ACE_YYSTYPE_IS_TRIVIAL) && ACE_YYSTYPE_IS_TRIVIAL)))
+
+/* A type that is properly aligned for any stack member. */
+union ace_yyalloc
+{
+ short int ace_yyss;
+ ACE_YYSTYPE ace_yyvs;
+ };
+/* The size of the maximum gap between one aligned stack and the next. */
+# define ACE_YYSTACK_GAP_MAXIMUM (sizeof (union ace_yyalloc) - 1)
-#define ACE_YYFINAL 66
-#define ACE_YYFLAG -32768
-#define ACE_YYNTBASE 23
+/* The size of an array large to enough to hold all stacks, each with
+ N elements. */
+# define ACE_YYSTACK_BYTES(N) \
+ ((N) * (sizeof (short int) + sizeof (ACE_YYSTYPE)) \
+ + ACE_YYSTACK_GAP_MAXIMUM)
-/* ACE_YYTRANSLATE(ACE_YYLEX) -- Bison token number corresponding to ACE_YYLEX. */
-#define ACE_YYTRANSLATE(x) ((unsigned)(x) <= 270 ? ace_yytranslate[x] : 43)
+/* Copy COUNT objects from FROM to TO. The source and destination do
+ not overlap. */
+# ifndef ACE_YYCOPY
+# if defined (__GNUC__) && 1 < __GNUC__
+# define ACE_YYCOPY(To, From, Count) \
+ __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
+# else
+# define ACE_YYCOPY(To, From, Count) \
+ do \
+ { \
+ register ACE_YYSIZE_T ace_yyi; \
+ for (ace_yyi = 0; ace_yyi < (Count); ace_yyi++) \
+ (To)[ace_yyi] = (From)[ace_yyi]; \
+ } \
+ while (0)
+# endif
+# endif
-/* ACE_YYTRANSLATE[ACE_YYLEX] -- Bison token number corresponding to ACE_YYLEX. */
-static const ACE_TCHAR ace_yytranslate[] =
+/* Relocate STACK from its old location to the new one. The
+ local variables ACE_YYSIZE and ACE_YYSTACKSIZE give the old and new number of
+ elements in the stack, and ACE_YYPTR gives the new location of the
+ stack. Advance ACE_YYPTR to a properly aligned location for the next
+ stack. */
+# define ACE_YYSTACK_RELOCATE(Stack) \
+ do \
+ { \
+ ACE_YYSIZE_T ace_yynewbytes; \
+ ACE_YYCOPY (&ace_yyptr->Stack, Stack, ace_yysize); \
+ Stack = &ace_yyptr->Stack; \
+ ace_yynewbytes = ace_yystacksize * sizeof (*Stack) + ACE_YYSTACK_GAP_MAXIMUM; \
+ ace_yyptr += ace_yynewbytes / sizeof (*ace_yyptr); \
+ } \
+ while (0)
+
+#endif
+
+#if defined (__STDC__) || defined (__cplusplus)
+ typedef signed char ace_yysigned_char;
+#else
+ typedef short int ace_yysigned_char;
+#endif
+
+/* ACE_YYFINAL -- State number of the termination state. */
+#define ACE_YYFINAL 2
+/* ACE_YYLAST -- Last index in ACE_YYTABLE. */
+#define ACE_YYLAST 62
+
+/* ACE_YYNTOKENS -- Number of terminals. */
+#define ACE_YYNTOKENS 23
+/* ACE_YYNNTS -- Number of nonterminals. */
+#define ACE_YYNNTS 21
+/* ACE_YYNRULES -- Number of rules. */
+#define ACE_YYNRULES 45
+/* ACE_YYNRULES -- Number of states. */
+#define ACE_YYNSTATES 66
+
+/* ACE_YYTRANSLATE(ACE_YYLEX) -- Bison symbol number corresponding to ACE_YYLEX. */
+#define ACE_YYUNDEFTOK 2
+#define ACE_YYMAXUTOK 271
+
+#define ACE_YYTRANSLATE(ACE_YYX) \
+ ((unsigned int) (ACE_YYX) <= ACE_YYMAXUTOK ? ace_yytranslate[ACE_YYX] : ACE_YYUNDEFTOK)
+
+/* ACE_YYTRANSLATE[ACE_YYLEX] -- Bison symbol number corresponding to ACE_YYLEX. */
+static const unsigned char ace_yytranslate[] =
{
0, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
@@ -93,290 +304,183 @@ static const ACE_TCHAR ace_yytranslate[] =
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 1, 3, 4, 5,
- 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
- 16
+ 2, 2, 2, 2, 2, 2, 1, 2, 3, 4,
+ 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
+ 15, 16
};
#if ACE_YYDEBUG
-static const short ace_yyprhs[] =
+/* ACE_YYPRHS[ACE_YYN] -- Index of the first RHS symbol of rule number ACE_YYN in
+ ACE_YYRHS. */
+static const unsigned char ace_yyprhs[] =
{
- 0, 0, 3, 6, 7, 9, 11, 13, 15, 17,
- 19, 23, 27, 30, 33, 36, 40, 41, 46, 48,
- 50, 51, 56, 57, 60, 61, 63, 65, 67, 69,
- 71, 76, 78, 80, 81, 85, 91, 96, 99, 102,
- 105, 107, 108, 110, 112
+ 0, 0, 3, 6, 9, 10, 12, 14, 16, 18,
+ 20, 22, 26, 30, 33, 36, 39, 43, 44, 49,
+ 51, 53, 54, 59, 60, 63, 64, 66, 68, 70,
+ 72, 74, 79, 81, 83, 84, 88, 94, 99, 102,
+ 105, 108, 110, 111, 113, 115
};
-static const short ace_yyrhs[] =
+
+/* ACE_YYRHS -- A `-1'-separated list of the rules' RHS. */
+static const ace_yysigned_char ace_yyrhs[] =
{
- 23, 24, 0, 23, 1, 0, 0, 25, 0, 26,
- 0, 27, 0, 28, 0, 29, 0, 30, 0, 3,
- 37, 41, 0, 4, 15, 41, 0, 5, 15, 0,
- 6, 15, 0, 7, 15, 0, 8, 32, 33, 0,
- 0, 8, 15, 31, 33, 0, 25, 0, 26, 0,
- 0, 17, 34, 35, 18, 0, 0, 35, 36, 0,
- 0, 25, 0, 26, 0, 27, 0, 28, 0, 29,
- 0, 15, 40, 39, 38, 0, 12, 0, 13, 0,
- 0, 42, 19, 15, 0, 42, 19, 15, 20, 21,
- 0, 19, 15, 20, 21, 0, 9, 22, 0, 11,
- 22, 0, 10, 22, 0, 16, 0, 0, 14, 0,
- 15, 0, 16, 0
+ 24, 0, -1, 24, 25, -1, 24, 1, -1, -1,
+ 26, -1, 27, -1, 28, -1, 29, -1, 30, -1,
+ 31, -1, 3, 38, 42, -1, 4, 15, 42, -1,
+ 5, 15, -1, 6, 15, -1, 7, 15, -1, 8,
+ 33, 34, -1, -1, 8, 15, 32, 34, -1, 26,
+ -1, 27, -1, -1, 17, 35, 36, 18, -1, -1,
+ 36, 37, -1, -1, 26, -1, 27, -1, 28, -1,
+ 29, -1, 30, -1, 15, 41, 40, 39, -1, 12,
+ -1, 13, -1, -1, 43, 19, 15, -1, 43, 19,
+ 15, 20, 21, -1, 19, 15, 20, 21, -1, 9,
+ 22, -1, 11, 22, -1, 10, 22, -1, 16, -1,
+ -1, 14, -1, 15, -1, 16, -1
};
-#endif
-
-#if ACE_YYDEBUG
-/* ACE_YYRLINE[ACE_YYN] -- source line where rule number ACE_YYN was defined. */
-static const short ace_yyrline[] =
+/* ACE_YYRLINE[ACE_YYN] -- source line where rule number ACE_YYN was defined. */
+static const unsigned short int ace_yyrline[] =
{
- 0, 55, 63, 67, 71, 72, 73, 74, 75, 76,
- 80, 90, 97, 104, 111, 118, 122, 122, 129, 132,
- 138, 138, 147, 151, 159, 163, 188, 201, 209, 217,
- 239, 276, 280, 284, 291, 295, 299, 306, 310, 314,
- 321, 322, 326, 327, 328
+ 0, 62, 62, 71, 75, 79, 80, 81, 82, 83,
+ 84, 88, 98, 105, 112, 119, 126, 130, 130, 137,
+ 140, 147, 146, 155, 159, 167, 171, 196, 210, 219,
+ 228, 250, 257, 261, 266, 272, 276, 280, 287, 291,
+ 295, 302, 303, 307, 308, 309
};
#endif
-
-#if (ACE_YYDEBUG) || defined ACE_YYERROR_VERBOSE
-
-/* ACE_YYTNAME[TOKEN_NUM] -- String name of the token TOKEN_NUM. */
-static const ACE_TCHAR *const ace_yytname[] =
+#if ACE_YYDEBUG || ACE_YYERROR_VERBOSE
+/* ACE_YYTNME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
+ First, the terminals, then, starting at ACE_YYNTOKENS, nonterminals. */
+static const char *const ace_yytname[] =
{
- "$", "error", "$undefined.", "ACE_DYNAMIC", "ACE_STATIC", "ACE_SUSPEND",
- "ACE_RESUME", "ACE_REMOVE", "ACE_USTREAM", "ACE_MODULE_T",
- "ACE_STREAM_T", "ACE_SVC_OBJ_T", "ACE_ACTIVE", "ACE_INACTIVE",
- "ACE_PATHNAME", "ACE_IDENT", "ACE_STRING", "'{'", "'}'", "':'", "'('",
- "')'", "'*'", "svc_config_entries", "svc_config_entry", "dynamic",
- "static", "suspend", "resume", "remove", "stream", "@1", "stream_ops",
- "stream_modules", "@2", "module_list", "module", "svc_location",
- "status", "svc_initializer", "type", "parameters_opt", "pathname", 0
+ "$end", "error", "$undefined", "ACE_DYNAMIC", "ACE_STATIC",
+ "ACE_SUSPEND", "ACE_RESUME", "ACE_REMOVE", "ACE_USTREAM", "ACE_MODULE_T",
+ "ACE_STREAM_T", "ACE_SVC_OBJ_T", "ACE_ACTIVE", "ACE_INACTIVE",
+ "ACE_PATHNAME", "ACE_IDENT", "ACE_STRING", "'{'", "'}'", "':'", "'('",
+ "')'", "'*'", "$accept", "svc_config_entries", "svc_config_entry",
+ "dynamic", "static", "suspend", "resume", "remove", "stream", "@1",
+ "stream_ops", "stream_modules", "@2", "module_list", "module",
+ "svc_location", "status", "svc_initializer", "type", "parameters_opt",
+ "pathname", 0
};
#endif
-/* ACE_YYR1[ACE_YYN] -- Symbol number of symbol that rule ACE_YYN derives. */
-static const short ace_yyr1[] =
+# ifdef ACE_YYPRINT
+/* ACE_YYTOKNUM[ACE_YYLEX-NUM] -- Internal token number corresponding to
+ token ACE_YYLEX-NUM. */
+static const unsigned short int ace_yytoknum[] =
{
- 0, 23, 23, 23, 24, 24, 24, 24, 24, 24,
- 25, 26, 27, 28, 29, 30, 31, 30, 32, 32,
- 34, 33, 33, 35, 35, 36, 36, 36, 36, 36,
- 37, 38, 38, 38, 39, 39, 39, 40, 40, 40,
- 41, 41, 42, 42, 42
+ 0, 256, 257, 258, 259, 260, 261, 262, 263, 264,
+ 265, 266, 267, 268, 269, 270, 271, 123, 125, 58,
+ 40, 41, 42
};
+# endif
-/* ACE_YYR2[ACE_YYN] -- Number of symbols composing right hand side of rule ACE_YYN. */
-static const short ace_yyr2[] =
+/* ACE_YYR1[ACE_YYN] -- Symbol number of symbol that rule ACE_YYN derives. */
+static const unsigned char ace_yyr1[] =
{
- 0, 2, 2, 0, 1, 1, 1, 1, 1, 1,
- 3, 3, 2, 2, 2, 3, 0, 4, 1, 1,
- 0, 4, 0, 2, 0, 1, 1, 1, 1, 1,
- 4, 1, 1, 0, 3, 5, 4, 2, 2, 2,
- 1, 0, 1, 1, 1
+ 0, 23, 24, 24, 24, 25, 25, 25, 25, 25,
+ 25, 26, 27, 28, 29, 30, 31, 32, 31, 33,
+ 33, 35, 34, 34, 36, 36, 37, 37, 37, 37,
+ 37, 38, 39, 39, 39, 40, 40, 40, 41, 41,
+ 41, 42, 42, 43, 43, 43
};
-/* ACE_YYDEFACT[S] -- default rule to reduce with in state S when ACE_YYTABLE
- doesn't specify something else to do. Zero means the default is an
- error. */
-static const short ace_yydefact[] =
+/* ACE_YYR2[ACE_YYN] -- Number of symbols composing right hand side of rule ACE_YYN. */
+static const unsigned char ace_yyr2[] =
{
- 3, 0, 2, 0, 0, 0, 0, 0, 0, 1,
- 4, 5, 6, 7, 8, 9, 0, 41, 41, 12,
- 13, 14, 16, 18, 19, 22, 0, 0, 0, 0,
- 40, 10, 11, 22, 20, 15, 37, 39, 38, 42,
- 43, 44, 0, 33, 0, 17, 24, 0, 31, 32,
- 30, 0, 0, 0, 34, 21, 25, 26, 27, 28,
- 29, 23, 36, 0, 35, 0, 0
+ 0, 2, 2, 2, 0, 1, 1, 1, 1, 1,
+ 1, 3, 3, 2, 2, 2, 3, 0, 4, 1,
+ 1, 0, 4, 0, 2, 0, 1, 1, 1, 1,
+ 1, 4, 1, 1, 0, 3, 5, 4, 2, 2,
+ 2, 1, 0, 1, 1, 1
};
-static const short ace_yydefgoto[] =
+/* ACE_YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
+ STATE-NUM when ACE_YYTABLE doesn't specify something else to do. Zero
+ means the default is an error. */
+static const unsigned char ace_yydefact[] =
{
- 1, 9, 10, 11, 12, 13, 14, 15, 33, 25,
- 35, 46, 52, 61, 17, 50, 43, 29, 31, 44
+ 4, 0, 1, 3, 0, 0, 0, 0, 0, 0,
+ 2, 5, 6, 7, 8, 9, 10, 0, 42, 42,
+ 13, 14, 15, 17, 19, 20, 23, 0, 0, 0,
+ 0, 41, 11, 12, 23, 21, 16, 38, 40, 39,
+ 43, 44, 45, 0, 34, 0, 18, 25, 0, 32,
+ 33, 31, 0, 0, 0, 35, 22, 26, 27, 28,
+ 29, 30, 24, 37, 0, 36
};
-static const short ace_yypact[] =
+/* ACE_YYDEFGOTO[NTERM-NUM]. */
+static const ace_yysigned_char ace_yydefgoto[] =
{
- -32768, 20,-32768, 1, 3, 7, 14, 18, 4,-32768,
- -32768,-32768,-32768,-32768,-32768,-32768, 21, 19, 19,-32768,
- -32768,-32768,-32768,-32768,-32768, -2, 12, 15, 16, -5,
- -32768,-32768,-32768, -2,-32768,-32768,-32768,-32768,-32768,-32768,
- -32768,-32768, 24, 0, 17,-32768,-32768, 22,-32768,-32768,
- -32768, 25, -1, 26, 23,-32768,-32768,-32768,-32768,-32768,
- -32768,-32768,-32768, 27,-32768, 41,-32768
+ -1, 1, 10, 11, 12, 13, 14, 15, 16, 34,
+ 26, 36, 47, 53, 62, 18, 51, 44, 30, 32,
+ 45
};
-static const short ace_yypgoto[] =
+/* ACE_YYPACT[STATE-NUM] -- Index in ACE_YYTABLE of the portion describing
+ STATE-NUM. */
+#define ACE_YYPACT_NINF -13
+static const ace_yysigned_char ace_yypact[] =
{
- -32768,-32768, -8, -7, -6, -3, 2,-32768,-32768,-32768,
- 28,-32768,-32768,-32768,-32768,-32768,-32768,-32768, 32,-32768
+ -13, 20, -13, -13, 1, 3, 7, 14, 18, 4,
+ -13, -13, -13, -13, -13, -13, -13, 21, 19, 19,
+ -13, -13, -13, -13, -13, -13, -2, 12, 15, 16,
+ -5, -13, -13, -13, -2, -13, -13, -13, -13, -13,
+ -13, -13, -13, 24, 0, 17, -13, -13, 22, -13,
+ -13, -13, 25, -1, 26, 23, -13, -13, -13, -13,
+ -13, -13, -13, -13, 27, -13
};
+/* ACE_YYPGOTO[NTERM-NUM]. */
+static const ace_yysigned_char ace_yypgoto[] =
+{
+ -13, -13, -13, -9, -8, -12, -7, -4, -13, -13,
+ -13, 28, -13, -13, -13, -13, -13, -13, -13, 31,
+ -13
+};
-#define ACE_YYLAST 61
-
-
-static const short ace_yytable[] =
+/* ACE_YYTABLE[ACE_YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If
+ positive, shift that token. If negative, reduce the rule which
+ number is the opposite. If zero, do what ACE_YYDEFACT says.
+ If ACE_YYTABLE_NINF, syntax error. */
+#define ACE_YYTABLE_NINF -1
+static const unsigned char ace_yytable[] =
{
- 23, 24, 3, 4, 5, 6, 7, 3, 4, 39,
- 40, 41, 48, 49, 42, 34, 16, 55, 18, 22,
- 65, 2, 19, 3, 4, 5, 6, 7, 8, 20,
- 26, 27, 28, 21, 36, 30, 51, 37, 38, 47,
- 54, 66, 53, 63, 56, 57, 58, 62, 64, 59,
- 32, 0, 0, 0, 60, 0, 0, 0, 0, 0,
- 0, 45
+ 24, 25, 4, 5, 6, 7, 8, 4, 5, 40,
+ 41, 42, 49, 50, 43, 35, 17, 56, 19, 23,
+ 2, 3, 20, 4, 5, 6, 7, 8, 9, 21,
+ 27, 28, 29, 22, 37, 31, 52, 38, 39, 48,
+ 55, 59, 54, 64, 57, 58, 60, 63, 65, 61,
+ 33, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 46
};
-static const short ace_yycheck[] =
+static const ace_yysigned_char ace_yycheck[] =
{
- 8, 8, 3, 4, 5, 6, 7, 3, 4, 14,
+ 9, 9, 3, 4, 5, 6, 7, 3, 4, 14,
15, 16, 12, 13, 19, 17, 15, 18, 15, 15,
0, 1, 15, 3, 4, 5, 6, 7, 8, 15,
9, 10, 11, 15, 22, 16, 19, 22, 22, 15,
- 15, 0, 20, 20, 52, 52, 52, 21, 21, 52,
- 18, -1, -1, -1, 52, -1, -1, -1, -1, -1,
- -1, 33
+ 15, 53, 20, 20, 53, 53, 53, 21, 21, 53,
+ 19, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, 34
};
-#define ACE_YYPURE 1
-
-/* -*-C-*- Note some compilers choke on comments on `#line' lines. */
-
-/* Skeleton output parser for bison,
-
- Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002 Free Software
- Foundation, Inc.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2, or (at your option)
- any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place - Suite 330,
- Boston, MA 02111-1307, USA. */
-
-/* As a special exception, when this file is copied by Bison into a
- Bison output file, you may use that output file without restriction.
- This special exception was added by the Free Software Foundation
- in version 1.24 of Bison. */
-
-/* This is the parser code that is written into each bison parser when
- the %semantic_parser declaration is not specified in the grammar.
- It was written by Richard Stallman by simplifying the hairy parser
- used when %semantic_parser is specified. */
-
-/* All symbols defined below should begin with ace_yy or ACE_YY, to avoid
- infringing on user name space. This should be done even for local
- variables, as they might otherwise be expanded by user macros.
- There are some unavoidable exceptions within include files to
- define necessary library symbols; they are noted "INFRINGES ON
- USER NAME SPACE" below. */
-
-#if ! defined (ace_yyoverflow) || defined (ACE_YYERROR_VERBOSE)
-
-/* The parser invokes alloca or malloc; define the necessary symbols. */
-
-# if ACE_YYSTACK_USE_ALLOCA
-# define ACE_YYSTACK_ALLOC alloca
-# else
-# ifndef ACE_YYSTACK_USE_ALLOCA
-# if defined (alloca) || defined (_ALLOCA_H)
-# define ACE_YYSTACK_ALLOC alloca
-# else
-# ifdef __GNUC__
-# define ACE_YYSTACK_ALLOC __builtin_alloca
-# endif
-# endif
-# endif
-# endif
-# ifdef ACE_YYSTACK_ALLOC
- /* Pacify GCC's `empty if-body' warning. */
-# define ACE_YYSTACK_FREE(Ptr) do { /* empty */; } while (0)
-# else
-# if defined (__STDC__) || defined (__cplusplus)
-ACE_END_VERSIONED_NAMESPACE_DECL
-# include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
-ACE_BEGIN_VERSIONED_NAMESPACE_DECL
-# define ACE_YYSIZE_T size_t
-# endif
-# define ACE_YYSTACK_ALLOC malloc
-# define ACE_YYSTACK_FREE free
-# endif
-#endif /* ! defined (ace_yyoverflow) || defined (ACE_YYERROR_VERBOSE) */
-
-
-#if (! defined (ace_yyoverflow) \
- && (! defined (__cplusplus) \
- || (ACE_YYLTYPE_IS_TRIVIAL && ACE_YYSTYPE_IS_TRIVIAL)))
-
-/* A type that is properly aligned for any stack member. */
-union ace_yyalloc
+/* ACE_YYSTOS[STATE-NUM] -- The (internal number of the) accessing
+ symbol of state STATE-NUM. */
+static const unsigned char ace_yystos[] =
{
- short ace_yyss;
- ACE_YYSTYPE ace_yyvs;
-# if ACE_YYLSP_NEEDED
- ACE_YYLTYPE ace_yyls;
-# endif
+ 0, 24, 0, 1, 3, 4, 5, 6, 7, 8,
+ 25, 26, 27, 28, 29, 30, 31, 15, 38, 15,
+ 15, 15, 15, 15, 26, 27, 33, 9, 10, 11,
+ 41, 16, 42, 42, 32, 17, 34, 22, 22, 22,
+ 14, 15, 16, 19, 40, 43, 34, 35, 15, 12,
+ 13, 39, 19, 36, 20, 15, 18, 26, 27, 28,
+ 29, 30, 37, 21, 20, 21
};
-/* The size of the maximum gap between one aligned stack and the next. */
-# define ACE_YYSTACK_GAP_MAX (sizeof (union ace_yyalloc) - 1)
-
-/* The size of an array large to enough to hold all stacks, each with
- N elements. */
-# if ACE_YYLSP_NEEDED
-# define ACE_YYSTACK_BYTES(N) \
- ((N) * (sizeof (short) + sizeof (ACE_YYSTYPE) + sizeof (ACE_YYLTYPE)) \
- + 2 * ACE_YYSTACK_GAP_MAX)
-# else
-# define ACE_YYSTACK_BYTES(N) \
- ((N) * (sizeof (short) + sizeof (ACE_YYSTYPE)) \
- + ACE_YYSTACK_GAP_MAX)
-# endif
-
-/* Copy COUNT objects from FROM to TO. The source and destination do
- not overlap. */
-# ifndef ACE_YYCOPY
-# if 1 < __GNUC__
-# define ACE_YYCOPY(To, From, Count) \
- __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
-# else
-# define ACE_YYCOPY(To, From, Count) \
- do \
- { \
- register ACE_YYSIZE_T ace_yyi; \
- for (ace_yyi = 0; ace_yyi < (Count); ace_yyi++) \
- (To)[ace_yyi] = (From)[ace_yyi]; \
- } \
- while (0)
-# endif
-# endif
-
-/* Relocate STACK from its old location to the new one. The
- local variables ACE_YYSIZE and ACE_YYSTACKSIZE give the old and new number of
- elements in the stack, and ACE_YYPTR gives the new location of the
- stack. Advance ACE_YYPTR to a properly aligned location for the next
- stack. */
-# define ACE_YYSTACK_RELOCATE(Stack) \
- do \
- { \
- ACE_YYSIZE_T ace_yynewbytes; \
- ACE_YYCOPY (&ace_yyptr->Stack, Stack, ace_yysize); \
- Stack = &ace_yyptr->Stack; \
- ace_yynewbytes = ace_yystacksize * sizeof (*Stack) + ACE_YYSTACK_GAP_MAX; \
- ace_yyptr += ace_yynewbytes / sizeof (*ace_yyptr); \
- } \
- while (0)
-
-#endif
-
-
#if ! defined (ACE_YYSIZE_T) && defined (__SIZE_TYPE__)
# define ACE_YYSIZE_T __SIZE_TYPE__
#endif
@@ -385,9 +489,7 @@ union ace_yyalloc
#endif
#if ! defined (ACE_YYSIZE_T)
# if defined (__STDC__) || defined (__cplusplus)
-ACE_END_VERSIONED_NAMESPACE_DECL
# include <stddef.h> /* INFRINGES ON USER NAME SPACE */
-ACE_BEGIN_VERSIONED_NAMESPACE_DECL
# define ACE_YYSIZE_T size_t
# endif
#endif
@@ -397,79 +499,99 @@ ACE_BEGIN_VERSIONED_NAMESPACE_DECL
#define ace_yyerrok (ace_yyerrstatus = 0)
#define ace_yyclearin (ace_yychar = ACE_YYEMPTY)
-#define ACE_YYEMPTY -2
+#define ACE_YYEMPTY (-2)
#define ACE_YYEOF 0
+
#define ACE_YYACCEPT goto ace_yyacceptlab
-#define ACE_YYABORT goto ace_yyabortlab
-#define ACE_YYERROR goto ace_yyerrlab1
+#define ACE_YYABORT goto ace_yyabortlab
+#define ACE_YYERROR goto ace_yyerrorlab
+
+
/* Like ACE_YYERROR except do call ace_yyerror. This remains here temporarily
to ease the transition to the new meaning of ACE_YYERROR, for GCC.
Once GCC version 2 has supplanted version 1, this can go. */
+
#define ACE_YYFAIL goto ace_yyerrlab
+
#define ACE_YYRECOVERING() (!!ace_yyerrstatus)
+
#define ACE_YYBACKUP(Token, Value) \
do \
if (ace_yychar == ACE_YYEMPTY && ace_yylen == 1) \
{ \
ace_yychar = (Token); \
ace_yylval = (Value); \
- ace_yychar1 = ACE_YYTRANSLATE (ace_yychar); \
+ ace_yytoken = ACE_YYTRANSLATE (ace_yychar); \
ACE_YYPOPSTACK; \
goto ace_yybackup; \
} \
else \
{ \
- ace_yyerror (ACE_SVC_CONF_PARAM->yyerrno, ACE_SVC_CONF_PARAM->yylineno, "syntax error: cannot back up"); \
+ ace_yyerror (ACE_SVC_CONF_PARAM->yyerrno, ACE_SVC_CONF_PARAM->yylineno, "syntax error: cannot back up");\
ACE_YYERROR; \
} \
while (0)
+
#define ACE_YYTERROR 1
#define ACE_YYERRCODE 256
-/* ACE_YYLLOC_DEFAULT -- Compute the default location (before the actions
- are run).
-
- When ACE_YYLLOC_DEFAULT is run, CURRENT is set the location of the
- first token. By default, to implement support for ranges, extend
- its range to the last symbol. */
+/* ACE_YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N].
+ If N is 0, then set CURRENT to the empty location which ends
+ the previous symbol: RHS[0] (always defined). */
+#define ACE_YYRHSLOC(Rhs, K) ((Rhs)[K])
#ifndef ACE_YYLLOC_DEFAULT
-# define ACE_YYLLOC_DEFAULT(Current, Rhs, N) \
- Current.last_line = Rhs[N].last_line; \
- Current.last_column = Rhs[N].last_column;
+# define ACE_YYLLOC_DEFAULT(Current, Rhs, N) \
+ do \
+ if (N) \
+ { \
+ (Current).first_line = ACE_YYRHSLOC (Rhs, 1).first_line; \
+ (Current).first_column = ACE_YYRHSLOC (Rhs, 1).first_column; \
+ (Current).last_line = ACE_YYRHSLOC (Rhs, N).last_line; \
+ (Current).last_column = ACE_YYRHSLOC (Rhs, N).last_column; \
+ } \
+ else \
+ { \
+ (Current).first_line = (Current).last_line = \
+ ACE_YYRHSLOC (Rhs, 0).last_line; \
+ (Current).first_column = (Current).last_column = \
+ ACE_YYRHSLOC (Rhs, 0).last_column; \
+ } \
+ while (0)
#endif
-/* ACE_YYLEX -- calling `ace_yylex' with the right arguments. */
+/* ACE_YY_LOCATION_PRINT -- Print the location on the stream.
+ This macro was not mandated originally: define only if we know
+ we won't break user code: when these are the locations we know. */
+
+#ifndef ACE_YY_LOCATION_PRINT
+# if ACE_YYLTYPE_IS_TRIVIAL
+# define ACE_YY_LOCATION_PRINT(File, Loc) \
+ ACE_OS::fprintf (File, "%d.%d-%d.%d", \
+ (Loc).first_line, (Loc).first_column, \
+ (Loc).last_line, (Loc).last_column)
+# else
+# define ACE_YY_LOCATION_PRINT(File, Loc) ((void) 0)
+# endif
+#endif
-#if ACE_YYPURE
-# if ACE_YYLSP_NEEDED
-# ifdef ACE_YYLEX_PARAM
-# define ACE_YYLEX ace_yylex (&ace_yylval, &ace_yylloc, ACE_YYLEX_PARAM)
-# else
-# define ACE_YYLEX ace_yylex (&ace_yylval, &ace_yylloc)
-# endif
-# else /* !ACE_YYLSP_NEEDED */
-# ifdef ACE_YYLEX_PARAM
-# define ACE_YYLEX ace_yylex (&ace_yylval, ACE_YYLEX_PARAM)
-# else
-# define ACE_YYLEX ace_yylex (&ace_yylval)
-# endif
-# endif /* !ACE_YYLSP_NEEDED */
-#else /* !ACE_YYPURE */
-# define ACE_YYLEX ace_yylex ()
-#endif /* !ACE_YYPURE */
+/* ACE_YYLEX -- calling `ace_yylex' with the right arguments. */
+
+#ifdef ACE_YYLEX_PARAM
+# define ACE_YYLEX ace_yylex (&ace_yylval, ACE_YYLEX_PARAM)
+#else
+# define ACE_YYLEX ace_yylex (&ace_yylval)
+#endif
/* Enable debugging if requested. */
#if ACE_YYDEBUG
# ifndef ACE_YYFPRINTF
-ACE_END_VERSIONED_NAMESPACE_DECL
# include <stdio.h> /* INFRINGES ON USER NAME SPACE */
-ACE_BEGIN_VERSIONED_NAMESPACE_DECL
# define ACE_YYFPRINTF ACE_OS::fprintf
# endif
@@ -478,13 +600,86 @@ do { \
if (ace_yydebug) \
ACE_YYFPRINTF Args; \
} while (0)
+
+# define ACE_YY_SYMBOL_PRINT(Title, Type, Value, Location) \
+do { \
+ if (ace_yydebug) \
+ { \
+ ACE_YYFPRINTF (stderr, "%s ", Title); \
+ ace_yysymprint (stderr, \
+ Type, Value); \
+ ACE_YYFPRINTF (stderr, "\n"); \
+ } \
+} while (0)
+
+/*------------------------------------------------------------------.
+| ace_yy_stack_print -- Print the state stack from its BOTTOM up to its |
+| TOP (included). |
+`------------------------------------------------------------------*/
+
+#if defined (__STDC__) || defined (__cplusplus)
+static void
+ace_yy_stack_print (short int *bottom, short int *top)
+#else
+static void
+ace_yy_stack_print (bottom, top)
+ short int *bottom;
+ short int *top;
+#endif
+{
+ ACE_YYFPRINTF (stderr, "Stack now");
+ for (/* Nothing. */; bottom <= top; ++bottom)
+ ACE_YYFPRINTF (stderr, " %d", *bottom);
+ ACE_YYFPRINTF (stderr, "\n");
+}
+
+# define ACE_YY_STACK_PRINT(Bottom, Top) \
+do { \
+ if (ace_yydebug) \
+ ace_yy_stack_print ((Bottom), (Top)); \
+} while (0)
+
+
+/*------------------------------------------------.
+| Report that the ACE_YYRULE is going to be reduced. |
+`------------------------------------------------*/
+
+#if defined (__STDC__) || defined (__cplusplus)
+static void
+ace_yy_reduce_print (int ace_yyrule)
+#else
+static void
+ace_yy_reduce_print (ace_yyrule)
+ int ace_yyrule;
+#endif
+{
+ int ace_yyi;
+ unsigned int ace_yylno = ace_yyrline[ace_yyrule];
+ ACE_YYFPRINTF (stderr, "Reducing stack by rule %d (line %u), ",
+ ace_yyrule - 1, ace_yylno);
+ /* Print the symbols being reduced, and their result. */
+ for (ace_yyi = ace_yyprhs[ace_yyrule]; 0 <= ace_yyrhs[ace_yyi]; ace_yyi++)
+ ACE_YYFPRINTF (stderr, "%s ", ace_yytname [ace_yyrhs[ace_yyi]]);
+ ACE_YYFPRINTF (stderr, "-> %s\n", ace_yytname [ace_yyr1[ace_yyrule]]);
+}
+
+# define ACE_YY_REDUCE_PRINT(Rule) \
+do { \
+ if (ace_yydebug) \
+ ace_yy_reduce_print (Rule); \
+} while (0)
+
/* Nonzero means print parse trace. It is left uninitialized so that
multiple parsers can coexist. */
int ace_yydebug;
#else /* !ACE_YYDEBUG */
# define ACE_YYDPRINTF(Args)
+# define ACE_YY_SYMBOL_PRINT(Title, Type, Value, Location)
+# define ACE_YY_STACK_PRINT(Bottom, Top)
+# define ACE_YY_REDUCE_PRINT(Rule)
#endif /* !ACE_YYDEBUG */
+
/* ACE_YYINITDEPTH -- initial size of the parser's stacks. */
#ifndef ACE_YYINITDEPTH
# define ACE_YYINITDEPTH 200
@@ -497,15 +692,13 @@ int ace_yydebug;
SIZE_MAX < ACE_YYSTACK_BYTES (ACE_YYMAXDEPTH)
evaluated with infinite-precision integer arithmetic. */
-#if ACE_YYMAXDEPTH == 0
-# undef ACE_YYMAXDEPTH
-#endif
-
#ifndef ACE_YYMAXDEPTH
# define ACE_YYMAXDEPTH 10000
#endif
-
-#ifdef ACE_YYERROR_VERBOSE
+
+
+
+#if ACE_YYERROR_VERBOSE
# ifndef ace_yystrlen
# if defined (__GLIBC__) && defined (_STRING_H)
@@ -514,13 +707,13 @@ int ace_yydebug;
/* Return the length of ACE_YYSTR. */
static ACE_YYSIZE_T
# if defined (__STDC__) || defined (__cplusplus)
-ace_yystrlen (const ACE_TCHAR *ace_yystr)
+ace_yystrlen (const char *ace_yystr)
# else
ace_yystrlen (ace_yystr)
- const ACE_TCHAR *ace_yystr;
+ const char *ace_yystr;
# endif
{
- register const ACE_TCHAR *ace_yys = ace_yystr;
+ register const char *ace_yys = ace_yystr;
while (*ace_yys++ != '\0')
continue;
@@ -536,17 +729,17 @@ ace_yystrlen (ace_yystr)
# else
/* Copy ACE_YYSRC to ACE_YYDEST, returning the address of the terminating '\0' in
ACE_YYDEST. */
-static ACE_TCHAR *
+static char *
# if defined (__STDC__) || defined (__cplusplus)
-ace_yystpcpy (ACE_TCHAR *ace_yydest, const ACE_TCHAR *ace_yysrc)
+ace_yystpcpy (ACE_TCHAR *ace_yydest, const char *ace_yysrc)
# else
ace_yystpcpy (ace_yydest, ace_yysrc)
- ACE_TCHAR *ace_yydest;
- const ACE_TCHAR *ace_yysrc;
+ char *ace_yydest;
+ const char *ace_yysrc;
# endif
{
- register ACE_TCHAR *ace_yyd = ace_yydest;
- register const ACE_TCHAR *ace_yys = ace_yysrc;
+ register char *ace_yyd = ace_yydest;
+ register const char *ace_yys = ace_yysrc;
while ((*ace_yyd++ = *ace_yys++) != '\0')
continue;
@@ -555,85 +748,139 @@ ace_yystpcpy (ace_yydest, ace_yysrc)
}
# endif
# endif
+
+#endif /* !ACE_YYERROR_VERBOSE */
+
+
+
+#if ACE_YYDEBUG
+/*--------------------------------.
+| Print this symbol on ACE_YYOUTPUT. |
+`--------------------------------*/
+
+#if defined (__STDC__) || defined (__cplusplus)
+static void
+ace_yysymprint (FILE *ace_yyoutput, int ace_yytype, ACE_YYSTYPE *ace_yyvaluep)
+#else
+static void
+ace_yysymprint (ace_yyoutput, ace_yytype, ace_yyvaluep)
+ FILE *ace_yyoutput;
+ int ace_yytype;
+ ACE_YYSTYPE *ace_yyvaluep;
+#endif
+{
+ /* Pacify ``unused variable'' warnings. */
+ (void) ace_yyvaluep;
+
+ if (ace_yytype < ACE_YYNTOKENS)
+ ACE_YYFPRINTF (ace_yyoutput, "token %s (", ace_yytname[ace_yytype]);
+ else
+ ACE_YYFPRINTF (ace_yyoutput, "nterm %s (", ace_yytname[ace_yytype]);
+
+
+# ifdef ACE_YYPRINT
+ if (ace_yytype < ACE_YYNTOKENS)
+ ACE_YYPRINT (ace_yyoutput, ace_yytoknum[ace_yytype], *ace_yyvaluep);
+# endif
+ switch (ace_yytype)
+ {
+ default:
+ break;
+ }
+ ACE_YYFPRINTF (ace_yyoutput, ")");
+}
+
+#endif /* ! ACE_YYDEBUG */
+/*-----------------------------------------------.
+| Release the memory associated to this symbol. |
+`-----------------------------------------------*/
+
+#if defined (__STDC__) || defined (__cplusplus)
+static void
+ace_yydestruct (const char *ace_yymsg, int ace_yytype, ACE_YYSTYPE *ace_yyvaluep)
+#else
+static void
+ace_yydestruct (ace_yymsg, ace_yytype, ace_yyvaluep)
+ const char *ace_yymsg;
+ int ace_yytype;
+ ACE_YYSTYPE *ace_yyvaluep;
#endif
-
+{
+ /* Pacify ``unused variable'' warnings. */
+ (void) ace_yyvaluep;
+ if (!ace_yymsg)
+ ace_yymsg = "Deleting";
+ ACE_YY_SYMBOL_PRINT (ace_yymsg, ace_yytype, ace_yyvaluep, ace_yylocationp);
-/* The user can define ACE_YYPARSE_PARAM as the name of an argument to be passed
- into ace_yyparse. The argument should have type void *.
- It should actually point to an object.
- Grammar actions can access the variable by casting it
- to the proper pointer type. */
+ switch (ace_yytype)
+ {
+
+ default:
+ break;
+ }
+}
+
+
+/* Prevent warnings from -Wmissing-prototypes. */
#ifdef ACE_YYPARSE_PARAM
# if defined (__STDC__) || defined (__cplusplus)
-# define ACE_YYPARSE_PARAM_ARG void *ACE_YYPARSE_PARAM
-# define ACE_YYPARSE_PARAM_DECL
+int ace_yyparse (void *ACE_YYPARSE_PARAM);
# else
-# define ACE_YYPARSE_PARAM_ARG ACE_YYPARSE_PARAM
-# define ACE_YYPARSE_PARAM_DECL void *ACE_YYPARSE_PARAM;
+int ace_yyparse ();
# endif
-#else /* !ACE_YYPARSE_PARAM */
-# define ACE_YYPARSE_PARAM_ARG
-# define ACE_YYPARSE_PARAM_DECL
-#endif /* !ACE_YYPARSE_PARAM */
-
-/* Prevent warning if -Wstrict-prototypes. */
-#ifdef __GNUC__
-# ifdef ACE_YYPARSE_PARAM
-int ace_yyparse (void *);
-# else
+#else /* ! ACE_YYPARSE_PARAM */
+#if defined (__STDC__) || defined (__cplusplus)
int ace_yyparse (void);
-# endif
+#else
+int ace_yyparse ();
#endif
+#endif /* ! ACE_YYPARSE_PARAM */
-/* ACE_YY_DECL_VARIABLES -- depending whether we use a pure parser,
- variables are global, or local to ACE_YYPARSE. */
-
-#define ACE_YY_DECL_NON_LSP_VARIABLES \
-/* The lookahead symbol. */ \
-int ace_yychar; \
- \
-/* The semantic value of the lookahead symbol. */ \
-ACE_YYSTYPE ace_yylval; \
- \
-/* Number of parse errors so far. */ \
-int ace_yynerrs;
-#if ACE_YYLSP_NEEDED
-# define ACE_YY_DECL_VARIABLES \
-ACE_YY_DECL_NON_LSP_VARIABLES \
- \
-/* Location data for the lookahead symbol. */ \
-ACE_YYLTYPE ace_yylloc;
-#else
-# define ACE_YY_DECL_VARIABLES \
-ACE_YY_DECL_NON_LSP_VARIABLES
-#endif
-/* If nonreentrant, generate the variables here. */
-#if !ACE_YYPURE
-ACE_YY_DECL_VARIABLES
-#endif /* !ACE_YYPURE */
+/*----------.
+| ace_yyparse. |
+`----------*/
+
+#ifdef ACE_YYPARSE_PARAM
+# if defined (__STDC__) || defined (__cplusplus)
+int ace_yyparse (void *ACE_YYPARSE_PARAM)
+# else
+int ace_yyparse (ACE_YYPARSE_PARAM)
+ void *ACE_YYPARSE_PARAM;
+# endif
+#else /* ! ACE_YYPARSE_PARAM */
+#if defined (__STDC__) || defined (__cplusplus)
+int
+ace_yyparse (void)
+#else
int
-ace_yyparse (ACE_YYPARSE_PARAM_ARG)
- ACE_YYPARSE_PARAM_DECL
+ace_yyparse ()
+
+#endif
+#endif
{
- /* If reentrant, generate the variables here. */
-#if ACE_YYPURE
- ACE_YY_DECL_VARIABLES
-#endif /* !ACE_YYPURE */
+ /* The look-ahead symbol. */
+int ace_yychar;
+
+/* The semantic value of the look-ahead symbol. */
+ACE_YYSTYPE ace_yylval;
+
+/* Number of syntax errors so far. */
+int ace_yynerrs;
register int ace_yystate;
register int ace_yyn;
int ace_yyresult;
/* Number of tokens to shift before error messages enabled. */
int ace_yyerrstatus;
- /* Lookahead token as an internal (translated) token number. */
- int ace_yychar1 = 0;
+ /* Look-ahead token as an internal (translated) token number. */
+ int ace_yytoken = 0;
/* Three stacks and their tools:
`ace_yyss': related to states,
@@ -643,41 +890,29 @@ ace_yyparse (ACE_YYPARSE_PARAM_ARG)
Refer to the stacks thru separate pointers, to allow ace_yyoverflow
to reallocate them elsewhere. */
- /* The state stack. */
- short ace_yyssa[ACE_YYINITDEPTH];
- short *ace_yyss = ace_yyssa;
- register short *ace_yyssp;
+ /* The state stack. */
+ short int ace_yyssa[ACE_YYINITDEPTH];
+ short int *ace_yyss = ace_yyssa;
+ register short int *ace_yyssp;
/* The semantic value stack. */
ACE_YYSTYPE ace_yyvsa[ACE_YYINITDEPTH];
ACE_YYSTYPE *ace_yyvs = ace_yyvsa;
register ACE_YYSTYPE *ace_yyvsp;
-#if ACE_YYLSP_NEEDED
- /* The location stack. */
- ACE_YYLTYPE ace_yylsa[ACE_YYINITDEPTH];
- ACE_YYLTYPE *ace_yyls = ace_yylsa;
- ACE_YYLTYPE *ace_yylsp;
-#endif
-#if ACE_YYLSP_NEEDED
-# define ACE_YYPOPSTACK (ace_yyvsp--, ace_yyssp--, ace_yylsp--)
-#else
-# define ACE_YYPOPSTACK (ace_yyvsp--, ace_yyssp--)
-#endif
- ACE_YYSIZE_T ace_yystacksize = ACE_YYINITDEPTH;
+#define ACE_YYPOPSTACK (ace_yyvsp--, ace_yyssp--)
+ ACE_YYSIZE_T ace_yystacksize = ACE_YYINITDEPTH;
/* The variables used to return semantic value and location from the
action routines. */
ACE_YYSTYPE ace_yyval;
-#if ACE_YYLSP_NEEDED
- ACE_YYLTYPE ace_yyloc;
-#endif
+
/* When reducing, the number of symbols on the RHS of the reduced
- rule. */
+ rule. */
int ace_yylen;
ACE_YYDPRINTF ((stderr, "Starting parse\n"));
@@ -694,9 +929,10 @@ ace_yyparse (ACE_YYPARSE_PARAM_ARG)
ace_yyssp = ace_yyss;
ace_yyvsp = ace_yyvs;
-#if ACE_YYLSP_NEEDED
- ace_yylsp = ace_yyls;
-#endif
+
+
+ ace_yyvsp[0] = ace_yylval;
+
goto ace_yysetstate;
/*------------------------------------------------------------.
@@ -711,181 +947,136 @@ ace_yyparse (ACE_YYPARSE_PARAM_ARG)
ace_yysetstate:
*ace_yyssp = ace_yystate;
- if (ace_yyssp >= ace_yyss + ace_yystacksize - 1)
+ if (ace_yyss + ace_yystacksize - 1 <= ace_yyssp)
{
/* Get the current used size of the three stacks, in elements. */
ACE_YYSIZE_T ace_yysize = ace_yyssp - ace_yyss + 1;
#ifdef ace_yyoverflow
{
- /* Give user a chance to reallocate the stack. Use copies of
- these so that the &'s don't force the real ones into
- memory. */
- ACE_YYSTYPE *ace_yyvs1 = ace_yyvs;
- short *ace_yyss1 = ace_yyss;
-
- /* Each stack pointer address is followed by the size of the
- data in use in that stack, in bytes. */
-# if ACE_YYLSP_NEEDED
- ACE_YYLTYPE *ace_yyls1 = ace_yyls;
- /* This used to be a conditional around just the two extra args,
- but that might be undefined if ace_yyoverflow is a macro. */
- ace_yyoverflow ("parser stack overflow",
- &ace_yyss1, ace_yysize * sizeof (*ace_yyssp),
- &ace_yyvs1, ace_yysize * sizeof (*ace_yyvsp),
- &ace_yyls1, ace_yysize * sizeof (*ace_yylsp),
- &ace_yystacksize);
- ace_yyls = ace_yyls1;
-# else
- ace_yyoverflow ("parser stack overflow",
- &ace_yyss1, ace_yysize * sizeof (*ace_yyssp),
- &ace_yyvs1, ace_yysize * sizeof (*ace_yyvsp),
- &ace_yystacksize);
-# endif
- ace_yyss = ace_yyss1;
- ace_yyvs = ace_yyvs1;
+ /* Give user a chance to reallocate the stack. Use copies of
+ these so that the &'s don't force the real ones into
+ memory. */
+ ACE_YYSTYPE *ace_yyvs1 = ace_yyvs;
+ short int *ace_yyss1 = ace_yyss;
+
+
+ /* Each stack pointer address is followed by the size of the
+ data in use in that stack, in bytes. This used to be a
+ conditional around just the two extra args, but that might
+ be undefined if ace_yyoverflow is a macro. */
+ ace_yyoverflow ("parser stack overflow",
+ &ace_yyss1, ace_yysize * sizeof (*ace_yyssp),
+ &ace_yyvs1, ace_yysize * sizeof (*ace_yyvsp),
+
+ &ace_yystacksize);
+
+ ace_yyss = ace_yyss1;
+ ace_yyvs = ace_yyvs1;
}
#else /* no ace_yyoverflow */
# ifndef ACE_YYSTACK_RELOCATE
goto ace_yyoverflowlab;
# else
/* Extend the stack our own way. */
- if (ace_yystacksize >= ACE_YYMAXDEPTH)
- goto ace_yyoverflowlab;
+ if (ACE_YYMAXDEPTH <= ace_yystacksize)
+ goto ace_yyoverflowlab;
ace_yystacksize *= 2;
- if (ace_yystacksize > ACE_YYMAXDEPTH)
- ace_yystacksize = ACE_YYMAXDEPTH;
+ if (ACE_YYMAXDEPTH < ace_yystacksize)
+ ace_yystacksize = ACE_YYMAXDEPTH;
{
- short *ace_yyss1 = ace_yyss;
- union ace_yyalloc *ace_yyptr =
- (union ace_yyalloc *) ACE_YYSTACK_ALLOC (ACE_YYSTACK_BYTES (ace_yystacksize));
- if (! ace_yyptr)
- goto ace_yyoverflowlab;
- ACE_YYSTACK_RELOCATE (ace_yyss);
- ACE_YYSTACK_RELOCATE (ace_yyvs);
-# if ACE_YYLSP_NEEDED
- ACE_YYSTACK_RELOCATE (ace_yyls);
-# endif
-# undef ACE_YYSTACK_RELOCATE
- if (ace_yyss1 != ace_yyssa)
- ACE_YYSTACK_FREE (ace_yyss1);
+ short int *ace_yyss1 = ace_yyss;
+ union ace_yyalloc *ace_yyptr =
+ (union ace_yyalloc *) ACE_YYSTACK_ALLOC (ACE_YYSTACK_BYTES (ace_yystacksize));
+ if (! ace_yyptr)
+ goto ace_yyoverflowlab;
+ ACE_YYSTACK_RELOCATE (ace_yyss);
+ ACE_YYSTACK_RELOCATE (ace_yyvs);
+
+# undef ACE_YYSTACK_RELOCATE
+ if (ace_yyss1 != ace_yyssa)
+ ACE_YYSTACK_FREE (ace_yyss1);
}
# endif
#endif /* no ace_yyoverflow */
ace_yyssp = ace_yyss + ace_yysize - 1;
ace_yyvsp = ace_yyvs + ace_yysize - 1;
-#if ACE_YYLSP_NEEDED
- ace_yylsp = ace_yyls + ace_yysize - 1;
-#endif
+
ACE_YYDPRINTF ((stderr, "Stack size increased to %lu\n",
- (unsigned long int) ace_yystacksize));
+ (unsigned long int) ace_yystacksize));
- if (ace_yyssp >= ace_yyss + ace_yystacksize - 1)
- ACE_YYABORT;
+ if (ace_yyss + ace_yystacksize - 1 <= ace_yyssp)
+ ACE_YYABORT;
}
ACE_YYDPRINTF ((stderr, "Entering state %d\n", ace_yystate));
goto ace_yybackup;
-
/*-----------.
| ace_yybackup. |
`-----------*/
ace_yybackup:
/* Do appropriate processing given the current state. */
-/* Read a lookahead token if we need one and don't already have one. */
+/* Read a look-ahead token if we need one and don't already have one. */
/* ace_yyresume: */
- /* First try to decide what to do without reference to lookahead token. */
+ /* First try to decide what to do without reference to look-ahead token. */
ace_yyn = ace_yypact[ace_yystate];
- if (ace_yyn == ACE_YYFLAG)
+ if (ace_yyn == ACE_YYPACT_NINF)
goto ace_yydefault;
- /* Not known => get a lookahead token if don't already have one. */
-
- /* ace_yychar is either ACE_YYEMPTY or ACE_YYEOF
- or a valid token in external form. */
+ /* Not known => get a look-ahead token if don't already have one. */
+ /* ACE_YYCHAR is either ACE_YYEMPTY or ACE_YYEOF or a valid look-ahead symbol. */
if (ace_yychar == ACE_YYEMPTY)
{
ACE_YYDPRINTF ((stderr, "Reading a token: "));
ace_yychar = ACE_YYLEX;
}
- /* Convert token to internal form (in ace_yychar1) for indexing tables with */
-
- if (ace_yychar <= 0) /* This means end of input. */
+ if (ace_yychar <= ACE_YYEOF)
{
- ace_yychar1 = 0;
- ace_yychar = ACE_YYEOF; /* Don't call ACE_YYLEX any more */
-
+ ace_yychar = ace_yytoken = ACE_YYEOF;
ACE_YYDPRINTF ((stderr, "Now at end of input.\n"));
}
else
{
- ace_yychar1 = ACE_YYTRANSLATE (ace_yychar);
-
-#if ACE_YYDEBUG
- /* We have to keep this `#if ACE_YYDEBUG', since we use variables
- which are defined only if `ACE_YYDEBUG' is set. */
- if (ace_yydebug)
- {
- ACE_YYFPRINTF (stderr, "Next token is %d (%s",
- ace_yychar, ace_yytname[ace_yychar1]);
- /* Give the individual parser a way to print the precise
- meaning of a token, for further debugging info. */
-# ifdef ACE_YYPRINT
- ACE_YYPRINT (stderr, ace_yychar, ace_yylval);
-# endif
- ACE_YYFPRINTF (stderr, ")\n");
- }
-#endif
+ ace_yytoken = ACE_YYTRANSLATE (ace_yychar);
+ ACE_YY_SYMBOL_PRINT ("Next token is", ace_yytoken, &ace_yylval, &ace_yylloc);
}
- ace_yyn += ace_yychar1;
- if (ace_yyn < 0 || ace_yyn > ACE_YYLAST || ace_yycheck[ace_yyn] != ace_yychar1)
+ /* If the proper action on seeing token ACE_YYTOKEN is to reduce or to
+ detect an error, take that action. */
+ ace_yyn += ace_yytoken;
+ if (ace_yyn < 0 || ACE_YYLAST < ace_yyn || ace_yycheck[ace_yyn] != ace_yytoken)
goto ace_yydefault;
-
ace_yyn = ace_yytable[ace_yyn];
-
- /* ace_yyn is what to do for this token type in this state.
- Negative => reduce, -ace_yyn is rule number.
- Positive => shift, ace_yyn is new state.
- New state is final state => don't bother to shift,
- just return success.
- 0, or most negative number => error. */
-
- if (ace_yyn < 0)
+ if (ace_yyn <= 0)
{
- if (ace_yyn == ACE_YYFLAG)
- goto ace_yyerrlab;
+ if (ace_yyn == 0 || ace_yyn == ACE_YYTABLE_NINF)
+ goto ace_yyerrlab;
ace_yyn = -ace_yyn;
goto ace_yyreduce;
}
- else if (ace_yyn == 0)
- goto ace_yyerrlab;
if (ace_yyn == ACE_YYFINAL)
ACE_YYACCEPT;
- /* Shift the lookahead token. */
- ACE_YYDPRINTF ((stderr, "Shifting token %d (%s), ",
- ace_yychar, ace_yytname[ace_yychar1]));
+ /* Shift the look-ahead token. */
+ ACE_YY_SYMBOL_PRINT ("Shifting", ace_yytoken, &ace_yylval, &ace_yylloc);
/* Discard the token being shifted unless it is eof. */
if (ace_yychar != ACE_YYEOF)
ace_yychar = ACE_YYEMPTY;
*++ace_yyvsp = ace_yylval;
-#if ACE_YYLSP_NEEDED
- *++ace_yylsp = ace_yylloc;
-#endif
+
/* Count tokens shifted since error; after three, turn off error
status. */
@@ -916,142 +1107,156 @@ ace_yyreduce:
/* If ACE_YYLEN is nonzero, implement the default value of the action:
`$$ = $1'.
- Otherwise, the following line sets ACE_YYVAL to the semantic value of
- the lookahead token. This behavior is undocumented and Bison
+ Otherwise, the following line sets ACE_YYVAL to garbage.
+ This behavior is undocumented and Bison
users should not rely upon it. Assigning to ACE_YYVAL
unconditionally makes the parser a bit smaller, and it avoids a
GCC warning that ACE_YYVAL may be used uninitialized. */
ace_yyval = ace_yyvsp[1-ace_yylen];
-#if ACE_YYLSP_NEEDED
- /* Similarly for the default location. Let the user run additional
- commands if for instance locations are ranges. */
- ace_yyloc = ace_yylsp[1-ace_yylen];
- ACE_YYLLOC_DEFAULT (ace_yyloc, (ace_yylsp - ace_yylen), ace_yylen);
-#endif
-#if ACE_YYDEBUG
- /* We have to keep this `#if ACE_YYDEBUG', since we use variables which
- are defined only if `ACE_YYDEBUG' is set. */
- if (ace_yydebug)
+ ACE_YY_REDUCE_PRINT (ace_yyn);
+ switch (ace_yyn)
{
- int ace_yyi;
-
- ACE_YYFPRINTF (stderr, "Reducing via rule %d (line %d), ",
- ace_yyn, ace_yyrline[ace_yyn]);
-
- /* Print the symbols being reduced, and their result. */
- for (ace_yyi = ace_yyprhs[ace_yyn]; ace_yyrhs[ace_yyi] > 0; ace_yyi++)
- ACE_YYFPRINTF (stderr, "%s ", ace_yytname[ace_yyrhs[ace_yyi]]);
- ACE_YYFPRINTF (stderr, " -> %s\n", ace_yytname[ace_yyr1[ace_yyn]]);
- }
-#endif
-
- switch (ace_yyn) {
+ case 2:
-case 1:
-{
- if (ace_yyvsp[0].parse_node_ != 0)
+ {
+ if ((ace_yyvsp[0].parse_node_) != 0)
{
- ace_yyvsp[0].parse_node_->apply (ACE_SVC_CONF_PARAM->yyerrno); delete ace_yyvsp[0].parse_node_;
+ (ace_yyvsp[0].parse_node_)->apply (ACE_SVC_CONF_PARAM->config, ACE_SVC_CONF_PARAM->yyerrno);
+ delete (ace_yyvsp[0].parse_node_);
}
ACE_SVC_CONF_PARAM->obstack.release ();
- ;
- break;}
-case 2:
-{
+ ;}
+ break;
+
+ case 3:
+
+ {
ACE_SVC_CONF_PARAM->obstack.release ();
- ;
- break;}
-case 10:
-{
- if (ace_yyvsp[-1].svc_record_ != 0)
- ace_yyval.parse_node_ = new ACE_Dynamic_Node (ace_yyvsp[-1].svc_record_, ace_yyvsp[0].ident_);
+ ;}
+ break;
+
+ case 11:
+
+ {
+ if ((ace_yyvsp[-1].svc_record_) != 0)
+ (ace_yyval.parse_node_) = new ACE_Dynamic_Node ((ace_yyvsp[-1].svc_record_), (ace_yyvsp[0].ident_));
else
- ace_yyval.parse_node_ = 0;
- ;
- break;}
-case 11:
-{
- ace_yyval.parse_node_ = new ACE_Static_Node (ace_yyvsp[-1].ident_, ace_yyvsp[0].ident_);
- ;
- break;}
-case 12:
-{
- ace_yyval.parse_node_ = new ACE_Suspend_Node (ace_yyvsp[0].ident_);
- ;
- break;}
-case 13:
-{
- ace_yyval.parse_node_ = new ACE_Resume_Node (ace_yyvsp[0].ident_);
- ;
- break;}
-case 14:
-{
- ace_yyval.parse_node_ = new ACE_Remove_Node (ace_yyvsp[0].ident_);
- ;
- break;}
-case 15:
-{
- ace_yyval.parse_node_ = new ACE_Stream_Node (ace_yyvsp[-1].static_node_, ace_yyvsp[0].parse_node_);
- ;
- break;}
-case 16:
-{ ace_yyval.static_node_ = new ACE_Static_Node (ace_yyvsp[0].ident_); ;
- break;}
-case 17:
-{
- ace_yyval.parse_node_ = new ACE_Dummy_Node (ace_yyvsp[-1].static_node_, ace_yyvsp[0].parse_node_);
- ;
- break;}
-case 18:
-{
- ;
- break;}
-case 19:
-{
- ;
- break;}
-case 20:
-{
+ (ace_yyval.parse_node_) = 0;
+ ;}
+ break;
+
+ case 12:
+
+ {
+ (ace_yyval.parse_node_) = new ACE_Static_Node ((ace_yyvsp[-1].ident_), (ace_yyvsp[0].ident_));
+ ;}
+ break;
+
+ case 13:
+
+ {
+ (ace_yyval.parse_node_) = new ACE_Suspend_Node ((ace_yyvsp[0].ident_));
+ ;}
+ break;
+
+ case 14:
+
+ {
+ (ace_yyval.parse_node_) = new ACE_Resume_Node ((ace_yyvsp[0].ident_));
+ ;}
+ break;
+
+ case 15:
+
+ {
+ (ace_yyval.parse_node_) = new ACE_Remove_Node ((ace_yyvsp[0].ident_));
+ ;}
+ break;
+
+ case 16:
+
+ {
+ (ace_yyval.parse_node_) = new ACE_Stream_Node ((ace_yyvsp[-1].static_node_), (ace_yyvsp[0].parse_node_));
+ ;}
+ break;
+
+ case 17:
+
+ { (ace_yyval.static_node_) = new ACE_Static_Node ((ace_yyvsp[0].ident_)); ;}
+ break;
+
+ case 18:
+
+ {
+ (ace_yyval.parse_node_) = new ACE_Dummy_Node ((ace_yyvsp[-1].static_node_), (ace_yyvsp[0].parse_node_));
+ ;}
+ break;
+
+ case 19:
+
+ {
+ ;}
+ break;
+
+ case 20:
+
+ {
+ ;}
+ break;
+
+ case 21:
+
+ {
// Initialize left context...
- ace_yyval.static_node_ = ace_yyvsp[-1].static_node_;
- ;
- break;}
-case 21:
-{
- ace_yyval.parse_node_ = ace_yyvsp[-1].parse_node_;
- ;
- break;}
-case 22:
-{ ace_yyval.parse_node_ = 0; ;
- break;}
-case 23:
-{
- if (ace_yyvsp[0].parse_node_ != 0)
+ (ace_yyval.static_node_) = (ace_yyvsp[-1].static_node_);
+ ;}
+ break;
+
+ case 22:
+
+ {
+ (ace_yyval.parse_node_) = (ace_yyvsp[-1].parse_node_);
+ ;}
+ break;
+
+ case 23:
+
+ { (ace_yyval.parse_node_) = 0; ;}
+ break;
+
+ case 24:
+
+ {
+ if ((ace_yyvsp[0].parse_node_) != 0)
{
- ace_yyvsp[0].parse_node_->link (ace_yyvsp[-1].parse_node_);
- ace_yyval.parse_node_ = ace_yyvsp[0].parse_node_;
+ (ace_yyvsp[0].parse_node_)->link ((ace_yyvsp[-1].parse_node_));
+ (ace_yyval.parse_node_) = (ace_yyvsp[0].parse_node_);
}
- ;
- break;}
-case 24:
-{ ace_yyval.parse_node_ = 0; ;
- break;}
-case 25:
-{
- ACE_Static_Node *svc_type = ace_yyvsp[0].static_node_;
+ ;}
+ break;
+
+ case 25:
+
+ { (ace_yyval.parse_node_) = 0; ;}
+ break;
+
+ case 26:
+
+ {
+ ACE_Static_Node *svc_type = (ace_yyvsp[0].static_node_);
if (svc_type != 0)
{
- ACE_Static_Node *module = ace_yyvsp[-2].static_node_;
+ ACE_Static_Node *module = (ace_yyvsp[-2].static_node_);
ACE_ARGV args (svc_type->parameters ());
- ACE_Module_Type *mt = ace_get_module (module,
- svc_type,
+ ACE_Module_Type *mt = ace_get_module (module->record (ACE_SVC_CONF_PARAM->config),
+ svc_type->record (ACE_SVC_CONF_PARAM->config),
ACE_SVC_CONF_PARAM->yyerrno);
ACE_Stream_Type *st =
- dynamic_cast<ACE_Stream_Type *> (const_cast<ACE_Service_Type_Impl *> (module->record ()->type ()));
+ dynamic_cast<ACE_Stream_Type *> (const_cast<ACE_Service_Type_Impl *> (module->record (ACE_SVC_CONF_PARAM->config)->type ()));
if (mt->init (args.argc (), args.argv ()) == -1
|| st->push (mt) == -1)
@@ -1062,50 +1267,61 @@ case 25:
ACE_SVC_CONF_PARAM->yyerrno++;
}
}
- ;
- break;}
-case 26:
-{
- ACE_Module_Type *mt = ace_get_module (ace_yyvsp[-2].static_node_,
- ace_yyvsp[0].static_node_->name (),
+ ;}
+ break;
+
+ case 27:
+
+ {
+ ACE_Static_Node *sn = (ace_yyvsp[-2].static_node_);
+ ACE_Module_Type *mt = ace_get_module (sn->record (ACE_SVC_CONF_PARAM->config),
+ (ace_yyvsp[0].static_node_)->name (),
ACE_SVC_CONF_PARAM->yyerrno);
- if (((ACE_Stream_Type *) (ace_yyvsp[-2].static_node_)->record ()->type ())->push (mt) == -1)
+ if (((ACE_Stream_Type *) sn->record (ACE_SVC_CONF_PARAM->config)->type ())->push (mt) == -1)
{
ACE_ERROR ((LM_ERROR,
ACE_LIB_TEXT ("Problem with static\n")));
ACE_SVC_CONF_PARAM->yyerrno++;
}
- ;
- break;}
-case 27:
-{
- ACE_Module_Type *mt = ace_get_module (ace_yyvsp[-2].static_node_,
- ace_yyvsp[0].static_node_->name (),
+ ;}
+ break;
+
+ case 28:
+
+ {
+ ACE_Static_Node *sn = (ace_yyvsp[-2].static_node_);
+ ACE_Module_Type *mt = ace_get_module (sn->record (ACE_SVC_CONF_PARAM->config),
+ sn->name (),
ACE_SVC_CONF_PARAM->yyerrno);
if (mt != 0)
mt->suspend ();
- ;
- break;}
-case 28:
-{
- ACE_Module_Type *mt = ace_get_module (ace_yyvsp[-2].static_node_,
- ace_yyvsp[0].static_node_->name (),
+ ;}
+ break;
+
+ case 29:
+
+ {
+ ACE_Static_Node *sn = (ace_yyvsp[-2].static_node_);
+ ACE_Module_Type *mt = ace_get_module (sn->record (ACE_SVC_CONF_PARAM->config),
+ (ace_yyvsp[0].static_node_)->name (),
ACE_SVC_CONF_PARAM->yyerrno);
if (mt != 0)
mt->resume ();
- ;
- break;}
-case 29:
-{
- ACE_Static_Node *stream = ace_yyvsp[-2].static_node_;
- ACE_Static_Node *module = ace_yyvsp[0].static_node_;
- ACE_Module_Type *mt = ace_get_module (stream,
+ ;}
+ break;
+
+ case 30:
+
+ {
+ ACE_Static_Node *stream = (ace_yyvsp[-2].static_node_);
+ ACE_Static_Node *module = (ace_yyvsp[0].static_node_);
+ ACE_Module_Type *mt = ace_get_module (stream->record (ACE_SVC_CONF_PARAM->config),
module->name (),
ACE_SVC_CONF_PARAM->yyerrno);
ACE_Stream_Type *st =
- dynamic_cast<ACE_Stream_Type *> (const_cast<ACE_Service_Type_Impl *> (stream->record ()->type ()));
+ dynamic_cast<ACE_Stream_Type *> (const_cast<ACE_Service_Type_Impl *> (stream->record (ACE_SVC_CONF_PARAM->config)->type ()));
if (mt != 0 && st->remove (mt) == -1)
{
ACE_ERROR ((LM_ERROR,
@@ -1114,116 +1330,98 @@ case 29:
stream->name ()));
ACE_SVC_CONF_PARAM->yyerrno++;
}
- ;
- break;}
-case 30:
-{
- u_int flags
- = ACE_Service_Type::DELETE_THIS
- | (ace_yyvsp[-1].location_node_->dispose () == 0 ? 0 : ACE_Service_Type::DELETE_OBJ);
- ACE_Service_Object_Exterminator gobbler = 0;
- void *sym = ace_yyvsp[-1].location_node_->symbol (ACE_SVC_CONF_PARAM->yyerrno, &gobbler);
+ ;}
+ break;
- if (sym != 0)
- {
- ACE_Service_Type_Impl *stp
- = ACE_Service_Config::create_service_type_impl (ace_yyvsp[-3].ident_,
- ace_yyvsp[-2].type_,
- sym,
- flags,
- gobbler);
- if (stp == 0)
- ++ACE_SVC_CONF_PARAM->yyerrno;
-
- ace_yyval.svc_record_ = new ACE_Service_Type (ace_yyvsp[-3].ident_,
- stp,
- ace_yyvsp[-1].location_node_->dll (),
- ace_yyvsp[0].type_);
- }
- else
- {
- ACE_ERROR ((LM_ERROR,
- ACE_LIB_TEXT ("Unable to find service: %s\n"),
- ace_yyvsp[-3].ident_));
- ++ACE_SVC_CONF_PARAM->yyerrno;
- ace_yyval.svc_record_ = 0;
- }
- delete ace_yyvsp[-1].location_node_;
- ;
- break;}
-case 31:
-{
- ace_yyval.type_ = 1;
- ;
- break;}
-case 32:
-{
- ace_yyval.type_ = 0;
- ;
- break;}
-case 33:
-{
- ace_yyval.type_ = 1;
- ;
- break;}
-case 34:
-{
- ace_yyval.location_node_ = new ACE_Object_Node (ace_yyvsp[-2].ident_, ace_yyvsp[0].ident_);
- ;
- break;}
-case 35:
-{
- ace_yyval.location_node_ = new ACE_Function_Node (ace_yyvsp[-4].ident_, ace_yyvsp[-2].ident_);
- ;
- break;}
-case 36:
-{
- ace_yyval.location_node_ = new ACE_Static_Function_Node (ace_yyvsp[-2].ident_);
- ;
- break;}
-case 37:
-{
- ace_yyval.type_ = ACE_MODULE_T;
- ;
- break;}
-case 38:
-{
- ace_yyval.type_ = ACE_SVC_OBJ_T;
- ;
- break;}
-case 39:
-{
- ace_yyval.type_ = ACE_STREAM_T;
- ;
- break;}
-case 41:
-{ ace_yyval.ident_ = 0; ;
- break;}
-}
+ case 31:
+
+ {
+ (ace_yyval.svc_record_) = new ACE_Service_Type_Factory ((ace_yyvsp[-3].ident_), (ace_yyvsp[-2].type_), (ace_yyvsp[-1].location_node_), (ace_yyvsp[0].type_));
+ ;}
+ break;
+ case 32:
-
- ace_yyvsp -= ace_yylen;
- ace_yyssp -= ace_yylen;
-#if ACE_YYLSP_NEEDED
- ace_yylsp -= ace_yylen;
-#endif
+ {
+ (ace_yyval.type_) = 1;
+ ;}
+ break;
+
+ case 33:
-#if ACE_YYDEBUG
- if (ace_yydebug)
{
- short *ace_yyssp1 = ace_yyss - 1;
- ACE_YYFPRINTF (stderr, "state stack now");
- while (ace_yyssp1 != ace_yyssp)
- ACE_YYFPRINTF (stderr, " %d", *++ace_yyssp1);
- ACE_YYFPRINTF (stderr, "\n");
+ (ace_yyval.type_) = 0;
+ ;}
+ break;
+
+ case 34:
+
+ {
+ (ace_yyval.type_) = 1;
+ ;}
+ break;
+
+ case 35:
+
+ {
+ (ace_yyval.location_node_) = new ACE_Object_Node ((ace_yyvsp[-2].ident_), (ace_yyvsp[0].ident_));
+ ;}
+ break;
+
+ case 36:
+
+ {
+ (ace_yyval.location_node_) = new ACE_Function_Node ((ace_yyvsp[-4].ident_), (ace_yyvsp[-2].ident_));
+ ;}
+ break;
+
+ case 37:
+
+ {
+ (ace_yyval.location_node_) = new ACE_Static_Function_Node ((ace_yyvsp[-2].ident_));
+ ;}
+ break;
+
+ case 38:
+
+ {
+ (ace_yyval.type_) = ACE_MODULE_T;
+ ;}
+ break;
+
+ case 39:
+
+ {
+ (ace_yyval.type_) = ACE_SVC_OBJ_T;
+ ;}
+ break;
+
+ case 40:
+
+ {
+ (ace_yyval.type_) = ACE_STREAM_T;
+ ;}
+ break;
+
+ case 42:
+
+ { (ace_yyval.ident_) = 0; ;}
+ break;
+
+
}
-#endif
+
+/* Line 1037 of yacc.c. */
+
+
+ ace_yyvsp -= ace_yylen;
+ ace_yyssp -= ace_yylen;
+
+
+ ACE_YY_STACK_PRINT (ace_yyss, ace_yyssp);
*++ace_yyvsp = ace_yyval;
-#if ACE_YYLSP_NEEDED
- *++ace_yylsp = ace_yyloc;
-#endif
+
/* Now `shift' the result of the reduction. Determine what state
that goes to, based on the state we popped back to and the rule
@@ -1231,11 +1429,11 @@ case 41:
ace_yyn = ace_yyr1[ace_yyn];
- ace_yystate = ace_yypgoto[ace_yyn - ACE_YYNTBASE] + *ace_yyssp;
- if (ace_yystate >= 0 && ace_yystate <= ACE_YYLAST && ace_yycheck[ace_yystate] == *ace_yyssp)
+ ace_yystate = ace_yypgoto[ace_yyn - ACE_YYNTOKENS] + *ace_yyssp;
+ if (0 <= ace_yystate && ace_yystate <= ACE_YYLAST && ace_yycheck[ace_yystate] == *ace_yyssp)
ace_yystate = ace_yytable[ace_yystate];
else
- ace_yystate = ace_yydefgoto[ace_yyn - ACE_YYNTBASE];
+ ace_yystate = ace_yydefgoto[ace_yyn - ACE_YYNTOKENS];
goto ace_yynewstate;
@@ -1248,155 +1446,159 @@ ace_yyerrlab:
if (!ace_yyerrstatus)
{
++ace_yynerrs;
-
-#ifdef ACE_YYERROR_VERBOSE
+#if ACE_YYERROR_VERBOSE
ace_yyn = ace_yypact[ace_yystate];
- if (ace_yyn > ACE_YYFLAG && ace_yyn < ACE_YYLAST)
- {
- ACE_YYSIZE_T ace_yysize = 0;
- ACE_TCHAR *ace_yymsg;
- int ace_yyx, ace_yycount;
-
- ace_yycount = 0;
- /* Start ACE_YYX at -ACE_YYN if negative to avoid negative indexes in
- ACE_YYCHECK. */
- for (ace_yyx = ace_yyn < 0 ? -ace_yyn : 0;
- ace_yyx < (int) (sizeof (ace_yytname) / sizeof (ACE_TCHAR *)); ace_yyx++)
- if (ace_yycheck[ace_yyx + ace_yyn] == ace_yyx)
- ace_yysize += ace_yystrlen (ace_yytname[ace_yyx]) + 15, ace_yycount++;
- ace_yysize += ace_yystrlen ("parse error, unexpected ") + 1;
- ace_yysize += ace_yystrlen (ace_yytname[ACE_YYTRANSLATE (ace_yychar)]);
- ace_yymsg = (ACE_TCHAR *) ACE_YYSTACK_ALLOC (ace_yysize);
- if (ace_yymsg != 0)
- {
- ACE_TCHAR *ace_yyp = ace_yystpcpy (ace_yymsg, "parse error, unexpected ");
- ace_yyp = ace_yystpcpy (ace_yyp, ace_yytname[ACE_YYTRANSLATE (ace_yychar)]);
-
- if (ace_yycount < 5)
- {
- ace_yycount = 0;
- for (ace_yyx = ace_yyn < 0 ? -ace_yyn : 0;
- ace_yyx < (int) (sizeof (ace_yytname) / sizeof (ACE_TCHAR *));
- ace_yyx++)
- if (ace_yycheck[ace_yyx + ace_yyn] == ace_yyx)
- {
- const ACE_TCHAR *ace_yyq = ! ace_yycount ? ", expecting " : " or ";
- ace_yyp = ace_yystpcpy (ace_yyp, ace_yyq);
- ace_yyp = ace_yystpcpy (ace_yyp, ace_yytname[ace_yyx]);
- ace_yycount++;
- }
- }
- ace_yyerror (ACE_SVC_CONF_PARAM->yyerrno, ACE_SVC_CONF_PARAM->yylineno, ace_yymsg);
- ACE_YYSTACK_FREE (ace_yymsg);
- }
- else
- ace_yyerror (ACE_SVC_CONF_PARAM->yyerrno, ACE_SVC_CONF_PARAM->yylineno, "parse error; also virtual memory exhausted");
- }
+ if (ACE_YYPACT_NINF < ace_yyn && ace_yyn < ACE_YYLAST)
+ {
+ ACE_YYSIZE_T ace_yysize = 0;
+ int ace_yytype = ACE_YYTRANSLATE (ace_yychar);
+ const char* ace_yyprefix;
+ char *ace_yymsg;
+ int ace_yyx;
+
+ /* Start ACE_YYX at -ACE_YYN if negative to avoid negative indexes in
+ ACE_YYCHECK. */
+ int ace_yyxbegin = ace_yyn < 0 ? -ace_yyn : 0;
+
+ /* Stay within bounds of both ace_yycheck and ace_yytname. */
+ int ace_yychecklim = ACE_YYLAST - ace_yyn;
+ int ace_yyxend = ace_yychecklim < ACE_YYNTOKENS ? ace_yychecklim : ACE_YYNTOKENS;
+ int ace_yycount = 0;
+
+ ace_yyprefix = ", expecting ";
+ for (ace_yyx = ace_yyxbegin; ace_yyx < ace_yyxend; ++ace_yyx)
+ if (ace_yycheck[ace_yyx + ace_yyn] == ace_yyx && ace_yyx != ACE_YYTERROR)
+ {
+ ace_yysize += ace_yystrlen (ace_yyprefix) + ace_yystrlen (ace_yytname [ace_yyx]);
+ ace_yycount += 1;
+ if (ace_yycount == 5)
+ {
+ ace_yysize = 0;
+ break;
+ }
+ }
+ ace_yysize += (sizeof ("syntax error, unexpected ")
+ + ace_yystrlen (ace_yytname[ace_yytype]));
+ ace_yymsg = (ACE_TCHAR *) ACE_YYSTACK_ALLOC (ace_yysize);
+ if (ace_yymsg != 0)
+ {
+ char *ace_yyp = ace_yystpcpy (ace_yymsg, "syntax error, unexpected ");
+ ace_yyp = ace_yystpcpy (ace_yyp, ace_yytname[ace_yytype]);
+
+ if (ace_yycount < 5)
+ {
+ ace_yyprefix = ", expecting ";
+ for (ace_yyx = ace_yyxbegin; ace_yyx < ace_yyxend; ++ace_yyx)
+ if (ace_yycheck[ace_yyx + ace_yyn] == ace_yyx && ace_yyx != ACE_YYTERROR)
+ {
+ ace_yyp = ace_yystpcpy (ace_yyp, ace_yyprefix);
+ ace_yyp = ace_yystpcpy (ace_yyp, ace_yytname[ace_yyx]);
+ ace_yyprefix = " or ";
+ }
+ }
+ ace_yyerror (ACE_SVC_CONF_PARAM->yyerrno, ACE_SVC_CONF_PARAM->yylineno, ace_yymsg);
+ ACE_YYSTACK_FREE (ace_yymsg);
+ }
+ else
+ ace_yyerror (ACE_SVC_CONF_PARAM->yyerrno, ACE_SVC_CONF_PARAM->yylineno, "syntax error; also virtual memory exhausted");
+ }
else
-#endif /* defined (ACE_YYERROR_VERBOSE) */
- ace_yyerror (ACE_SVC_CONF_PARAM->yyerrno, ACE_SVC_CONF_PARAM->yylineno, "parse error");
+#endif /* ACE_YYERROR_VERBOSE */
+ ace_yyerror (ACE_SVC_CONF_PARAM->yyerrno, ACE_SVC_CONF_PARAM->yylineno, "syntax error");
}
- goto ace_yyerrlab1;
-/*--------------------------------------------------.
-| ace_yyerrlab1 -- error raised explicitly by an action |
-`--------------------------------------------------*/
-ace_yyerrlab1:
+
if (ace_yyerrstatus == 3)
{
- /* If just tried and failed to reuse lookahead token after an
- error, discard it. */
-
- /* return failure if at end of input */
- if (ace_yychar == ACE_YYEOF)
- ACE_YYABORT;
- ACE_YYDPRINTF ((stderr, "Discarding token %d (%s).\n",
- ace_yychar, ace_yytname[ace_yychar1]));
- ace_yychar = ACE_YYEMPTY;
+ /* If just tried and failed to reuse look-ahead token after an
+ error, discard it. */
+
+ if (ace_yychar <= ACE_YYEOF)
+ {
+ /* If at end of input, pop the error token,
+ then the rest of the stack, then return failure. */
+ if (ace_yychar == ACE_YYEOF)
+ for (;;)
+ {
+
+ ACE_YYPOPSTACK;
+ if (ace_yyssp == ace_yyss)
+ ACE_YYABORT;
+ ace_yydestruct ("Error: popping",
+ ace_yystos[*ace_yyssp], ace_yyvsp);
+ }
+ }
+ else
+ {
+ ace_yydestruct ("Error: discarding", ace_yytoken, &ace_yylval);
+ ace_yychar = ACE_YYEMPTY;
+ }
}
- /* Else will try to reuse lookahead token after shifting the error
+ /* Else will try to reuse look-ahead token after shifting the error
token. */
-
- ace_yyerrstatus = 3; /* Each real token shifted decrements this */
-
- goto ace_yyerrhandle;
+ goto ace_yyerrlab1;
-/*-------------------------------------------------------------------.
-| ace_yyerrdefault -- current state does not do anything special for the |
-| error token. |
-`-------------------------------------------------------------------*/
-ace_yyerrdefault:
-#if 0
- /* This is wrong; only states that explicitly want error tokens
- should shift them. */
+/*---------------------------------------------------.
+| ace_yyerrorlab -- error raised explicitly by ACE_YYERROR. |
+`---------------------------------------------------*/
+ace_yyerrorlab:
- /* If its default is to accept any token, ok. Otherwise pop it. */
- ace_yyn = ace_yydefact[ace_yystate];
- if (ace_yyn)
- goto ace_yydefault;
+#ifdef __GNUC__
+ /* Pacify GCC when the user code never invokes ACE_YYERROR and the label
+ ace_yyerrorlab therefore never appears in user code. */
+ if (0)
+ goto ace_yyerrorlab;
#endif
+ace_yyvsp -= ace_yylen;
+ ace_yyssp -= ace_yylen;
+ ace_yystate = *ace_yyssp;
+ goto ace_yyerrlab1;
-/*---------------------------------------------------------------.
-| ace_yyerrpop -- pop the current state because it cannot handle the |
-| error token |
-`---------------------------------------------------------------*/
-ace_yyerrpop:
- if (ace_yyssp == ace_yyss)
- ACE_YYABORT;
- ace_yyvsp--;
- ace_yystate = *--ace_yyssp;
-#if ACE_YYLSP_NEEDED
- ace_yylsp--;
-#endif
-#if ACE_YYDEBUG
- if (ace_yydebug)
+/*-------------------------------------------------------------.
+| ace_yyerrlab1 -- common code for both syntax error and ACE_YYERROR. |
+`-------------------------------------------------------------*/
+ace_yyerrlab1:
+ ace_yyerrstatus = 3; /* Each real token shifted decrements this. */
+
+ for (;;)
{
- short *ace_yyssp1 = ace_yyss - 1;
- ACE_YYFPRINTF (stderr, "Error: state stack now");
- while (ace_yyssp1 != ace_yyssp)
- ACE_YYFPRINTF (stderr, " %d", *++ace_yyssp1);
- ACE_YYFPRINTF (stderr, "\n");
- }
-#endif
+ ace_yyn = ace_yypact[ace_yystate];
+ if (ace_yyn != ACE_YYPACT_NINF)
+ {
+ ace_yyn += ACE_YYTERROR;
+ if (0 <= ace_yyn && ace_yyn <= ACE_YYLAST && ace_yycheck[ace_yyn] == ACE_YYTERROR)
+ {
+ ace_yyn = ace_yytable[ace_yyn];
+ if (0 < ace_yyn)
+ break;
+ }
+ }
-/*--------------.
-| ace_yyerrhandle. |
-`--------------*/
-ace_yyerrhandle:
- ace_yyn = ace_yypact[ace_yystate];
- if (ace_yyn == ACE_YYFLAG)
- goto ace_yyerrdefault;
+ /* Pop the current state because it cannot handle the error token. */
+ if (ace_yyssp == ace_yyss)
+ ACE_YYABORT;
- ace_yyn += ACE_YYTERROR;
- if (ace_yyn < 0 || ace_yyn > ACE_YYLAST || ace_yycheck[ace_yyn] != ACE_YYTERROR)
- goto ace_yyerrdefault;
- ace_yyn = ace_yytable[ace_yyn];
- if (ace_yyn < 0)
- {
- if (ace_yyn == ACE_YYFLAG)
- goto ace_yyerrpop;
- ace_yyn = -ace_yyn;
- goto ace_yyreduce;
+ ace_yydestruct ("Error: popping", ace_yystos[ace_yystate], ace_yyvsp);
+ ACE_YYPOPSTACK;
+ ace_yystate = *ace_yyssp;
+ ACE_YY_STACK_PRINT (ace_yyss, ace_yyssp);
}
- else if (ace_yyn == 0)
- goto ace_yyerrpop;
if (ace_yyn == ACE_YYFINAL)
ACE_YYACCEPT;
- ACE_YYDPRINTF ((stderr, "Shifting error token, "));
-
*++ace_yyvsp = ace_yylval;
-#if ACE_YYLSP_NEEDED
- *++ace_yylsp = ace_yylloc;
-#endif
+
+
+ /* Shift the error token. */
+ ACE_YY_SYMBOL_PRINT ("Shifting", ace_yystos[ace_yyn], ace_yyvsp, ace_yylsp);
ace_yystate = ace_yyn;
goto ace_yynewstate;
@@ -1413,16 +1615,21 @@ ace_yyacceptlab:
| ace_yyabortlab -- ACE_YYABORT comes here. |
`-----------------------------------*/
ace_yyabortlab:
+ ace_yydestruct ("Error: discarding lookahead",
+ ace_yytoken, &ace_yylval);
+ ace_yychar = ACE_YYEMPTY;
ace_yyresult = 1;
goto ace_yyreturn;
-/*---------------------------------------------.
-| ace_yyoverflowab -- parser overflow comes here. |
-`---------------------------------------------*/
+#ifndef ace_yyoverflow
+/*----------------------------------------------.
+| ace_yyoverflowlab -- parser overflow comes here. |
+`----------------------------------------------*/
ace_yyoverflowlab:
ace_yyerror (ACE_SVC_CONF_PARAM->yyerrno, ACE_SVC_CONF_PARAM->yylineno, "parser stack overflow");
ace_yyresult = 2;
/* Fall through. */
+#endif
ace_yyreturn:
#ifndef ace_yyoverflow
@@ -1432,6 +1639,12 @@ ace_yyreturn:
return ace_yyresult;
}
+
+
+
+
+ACE_BEGIN_VERSIONED_NAMESPACE_DECL
+
// Prints the error string to standard output. Cleans up the error
// messages.
@@ -1455,11 +1668,10 @@ ace_yyerror (int ace_yyerrno, int ace_yylineno, const char *s)
// record.
static ACE_Module_Type *
-ace_get_module (ACE_Static_Node *str_rec,
+ace_get_module (const ACE_Service_Type *sr,
const ACE_TCHAR *svc_name,
int & ace_yyerrno)
{
- const ACE_Service_Type *sr = str_rec->record ();
const ACE_Service_Type_Impl *type = sr->type ();
ACE_Stream_Type *st = sr == 0
? 0
@@ -1471,7 +1683,7 @@ ace_get_module (ACE_Static_Node *str_rec,
ACE_ERROR ((LM_ERROR,
ACE_LIB_TEXT ("cannot locate Module_Type %s in STREAM_Type %s\n"),
svc_name,
- str_rec->name ()));
+ sr->name ()));
ace_yyerrno++;
}
@@ -1479,24 +1691,23 @@ ace_get_module (ACE_Static_Node *str_rec,
}
static ACE_Module_Type *
-ace_get_module (ACE_Static_Node *str_rec,
- ACE_Static_Node *svc_type,
+ace_get_module (const ACE_Service_Type *sr,
+ const ACE_Service_Type *sv,
int & ace_yyerrno)
{
- const ACE_Service_Type *sr = str_rec->record ();
const ACE_Service_Type_Impl *type = sr->type ();
ACE_Stream_Type *st = sr == 0 ? 0 : (ACE_Stream_Type *) type;
- const ACE_Service_Type *sv = svc_type->record ();
+
type = sv->type ();
ACE_Module_Type *mt = (ACE_Module_Type *) type;
- const ACE_TCHAR *module_type_name = svc_type->name ();
+ const ACE_TCHAR *module_type_name = sr->name ();
if (sr == 0 || st == 0 || mt == 0)
{
ACE_ERROR ((LM_ERROR,
ACE_LIB_TEXT ("cannot locate Module_Type %s or STREAM_Type %s\n"),
module_type_name,
- str_rec->name ()));
+ sr->name ()));
ace_yyerrno++;
}
diff --git a/ace/Timer_Heap_T.h b/ace/Timer_Heap_T.h
index 068aa0bfb67..efe29a0f5f3 100644
--- a/ace/Timer_Heap_T.h
+++ b/ace/Timer_Heap_T.h
@@ -61,7 +61,7 @@ public:
virtual ACE_Timer_Node_T<TYPE> *item (void);
protected:
- /// Pointer to the <ACE_Timer_Heap> that we are iterating over.
+ /// Pointer to the ACE_Timer_Heap that we are iterating over.
ACE_Timer_Heap_T<TYPE, FUNCTOR, ACE_LOCK> &timer_heap_;
/// Position in the array where the iterator is at
diff --git a/ace/Timer_List_T.h b/ace/Timer_List_T.h
index 3b85b985801..763ef9c905c 100644
--- a/ace/Timer_List_T.h
+++ b/ace/Timer_List_T.h
@@ -75,11 +75,11 @@ protected:
* expiring timers is O(K) (where K is the total number of timers
* that are < the current time of day).
* More clever implementations could use a delta-list, a heap,
- * or timing wheels, etc. For instance, <ACE_Timer_Heap>
- * is a subclass of <ACE_Timer_List> that implements a
+ * or timing wheels, etc. For instance, ACE_Timer_Heap
+ * is a subclass of ACE_Timer_List that implements a
* heap-based callout queue. For most applications, the
- * <ACE_Timer_Heap> will perform substantially faster than the
- * <ACE_Timer_List>.
+ * ACE_Timer_Heap will perform substantially faster than the
+ * ACE_Timer_List.
*/
template <class TYPE, class FUNCTOR, class ACE_LOCK>
class ACE_Timer_List_T : public ACE_Timer_Queue_T<TYPE, FUNCTOR, ACE_LOCK>
diff --git a/ace/Timer_Queue_Adapters.h b/ace/Timer_Queue_Adapters.h
index d2ff5946c3a..ab25c490737 100644
--- a/ace/Timer_Queue_Adapters.h
+++ b/ace/Timer_Queue_Adapters.h
@@ -82,18 +82,18 @@ private:
/// Perform the logic to compute the new ualarm(2) setting.
virtual int schedule_ualarm (void);
- /// Called back by <SIGALRM> handler.
+ /// Called back by @c SIGALRM handler.
virtual int handle_signal (int signum, siginfo_t *, ucontext_t *);
- /// Handler for the <SIGALRM> signal, so that we can access our state
+ /// Handler for the @c SIGALRM signal, so that we can access our state
/// without requiring any global variables.
ACE_Sig_Handler sig_handler_;
- /// Implementation of the timer queue (e.g., <ACE_Timer_List>,
- /// <ACE_Timer_Heap>, etc.).
+ /// Implementation of the timer queue (e.g., ACE_Timer_List,
+ /// ACE_Timer_Heap, etc.).
TQ timer_queue_;
- /// Mask of signals to be blocked when we're servicing <SIGALRM>.
+ /// Mask of signals to be blocked when we're servicing @c SIGALRM.
ACE_Sig_Set mask_;
};
diff --git a/ace/Timer_Queue_T.h b/ace/Timer_Queue_T.h
index 604079a41da..f780d8a5240 100644
--- a/ace/Timer_Queue_T.h
+++ b/ace/Timer_Queue_T.h
@@ -200,8 +200,8 @@ public:
* @brief Provides an interface to timers.
*
* This is an abstract base class that provides hook for
- * implementing specialized policies such as <ACE_Timer_List>
- * and <ACE_Timer_Heap>.
+ * implementing specialized policies such as ACE_Timer_List
+ * and ACE_Timer_Heap.
*/
template <class TYPE, class FUNCTOR, class ACE_LOCK>
class ACE_Timer_Queue_T
diff --git a/ace/Timer_Wheel_T.h b/ace/Timer_Wheel_T.h
index 5c62a39dde0..984ad6d8bb7 100644
--- a/ace/Timer_Wheel_T.h
+++ b/ace/Timer_Wheel_T.h
@@ -62,7 +62,7 @@ public:
virtual ACE_Timer_Node_T<TYPE>* item (void);
protected:
- /// Pointer to the <ACE_Timer_List> that we are iterating over.
+ /// Pointer to the ACE_Timer_List that we are iterating over.
Wheel& timer_wheel_;
/// Current position in the timing wheel
diff --git a/ace/config-openvms.h b/ace/config-openvms.h
index 2b62888e805..8e98becb755 100644
--- a/ace/config-openvms.h
+++ b/ace/config-openvms.h
@@ -6,6 +6,10 @@
#ifndef ACE_CONFIG_H
#define ACE_CONFIG_H
+#if !defined (ACE_USE_RCSID)
+# define ACE_USE_RCSID 0
+#endif
+
#pragma message disable CODCAUUNR
#pragma message disable CODEUNREACHABLE
//#pragma message disable DOLLARID
@@ -15,38 +19,29 @@
//#pragma message disable LONGEXTERN
#pragma message disable UNSCOMZER
-//#define MAXPATHLEN 255
-//#define howmany __howmany
-//#define MAXHOSTNAMELEN 255
-//#define MAXNAMLEN FILENAME_MAX
-//#define __unix__
+#define ACE_OPENVMS 0x0821
-#define ACE_OPENVMS
#define ACE_DLL_SUFFIX ACE_LIB_TEXT("")
#define ACE_HAS_DUMP 1
-//#define ACE_NEEDS_PTHREAD_UPPERCASE 1
-
-/*
-#define XtAppAddInput XTAPPADDINPUT
-#define XtAppAddTimeOut XTAPPADDTIMEOUT
-#define XtAppProcessEvent XTAPPPROCESSEVENT
-#define XtRemoveInput XTREMOVEINPUT
-#define XtRemoveTimeOut XTREMOVETIMEOUT
-*/
-
// need this includes to ensure proper sequence of definitions so that
// f.i. HP C/C++ does not '#define ' memcpy, memmove etc.
#include <stdarg.h>
#include <stdio.h>
#include <string.h>
#undef clearerr
+#undef memset
+#undef memcpy
+#undef memmove
#define ACE_DEFAULT_BASE_ADDR ((char*)(0x30000000))
+#define ACE_MAX_UDP_PACKET_SIZE 65535
+
#define ACE_HAS_STDCPP_STL_INCLUDES 1
+/* missing system headers */
#define ACE_LACKS_STDINT_H 1
#define ACE_LACKS_SYS_IPC_H 1
#define ACE_LACKS_SYS_SEM_H 1
@@ -57,7 +52,21 @@
#define ACE_LACKS_SYS_MSG_H 1
#define ACE_LACKS_REGEX_H 1
#define ACE_LACKS_SEARCH_H 1
+#define ACE_LACKS_SCHED_H 1
+#define ACE_LACKS_SYS_SYSCTL_H 1
+#define ACE_LACKS_MALLOC_H 1
+ /*Platform lacks malloc.h*/
+#define ACE_LACKS_SYS_PARAM_H 1
+ /*Platform lacks <sys/param.h>
+ (e.g., MVS)*/
+#define ACE_LACKS_SIGINFO_H 1
+ /*Platform lacks the siginfo.h
+ include file (e.g., MVS)*/
+#define ACE_LACKS_UCONTEXT_H 1
+ /*Platform lacks the ucontext.h
+ file*/
+/* missing rtl functions */
#define ACE_LACKS_SETPGID 1
#define ACE_LACKS_SETREUID 1
#define ACE_LACKS_SETREGID 1
@@ -65,90 +74,41 @@
#define ACE_LACKS_GETPGID 1
#define ACE_LACKS_SETSID 1
#define ACE_LACKS_FCNTL 1
+#define ACE_LACKS_SETEGID 1
+#define ACE_LACKS_SETEUID 1
#define ACE_LACKS_REALPATH 1
-#define ACE_LACKS_SYMLINKS
-
-#define ACE_LACKS_TIMESPEC_T 1
-#define ACE_LACKS_CONST_TIMESPEC_PTR 1
-
-#define ACE_LACKS_RWLOCK_T 1
-//#define ACE_HAS_PTHREADS_UNIX98_EXT 1
-//#define ACE_LACKS_MUTEXATTR_PSHARED 1
-//#define ACE_LACKS_CONDATTR_PSHARED 1
-#define ACE_LACKS_PTHREAD_KILL 1
-#define ACE_LACKS_THREAD_PROCESS_SCOPING 1
-#define ACE_LACKS_LINEBUFFERED_STREAMBUF 1
+#define ACE_LACKS_SYMLINKS 1
#define ACE_LACKS_PWD_REENTRANT_FUNCTIONS 1
#define ACE_LACKS_RAND_REENTRANT_FUNCTIONS 1
-#define ACE_LACKS_UNIX_SIGNALS 1
-
-#define ACE_LACKS_UNNAMED_SEMAPHORE 1
-
-#define ACE_MT_SAFE 1
- /*Compile using multi-thread libraries*/
-#define ACE_NEW_THROWS_EXCEPTIONS 1
- /*Compiler's 'new' throws exception on
- failure (ANSI C++ behavior).*/
-#define ACE_TEMPLATES_REQUIRE_SOURCE 1
- /*Compiler's template mechanim
- must see source code (i.e.,
- .cpp files). This is used for
- GNU G++.*/
-#define ACE_USES_STD_NAMESPACE_FOR_STDCPP_LIB 1
- /*Platform has its standard c++
- library in the namespace std.*/
-#define ACE_HAS_VOIDPTR_GETTIMEOFDAY 1
- /* 2nd arg 'void*' instead of 'struct timezone*' */
#define ACE_HAS_SNPRINTF 1
/*Platform offers snprintf().*/
#define ACE_HAS_P_READ_WRITE
/*Platform has pread() and
pwrite() support*/
-#define ACE_HAS_AUTOMATIC_INIT_FINI 1
- /*Compiler/platform correctly
- calls init()/fini() for shared
- libraries*/
#define ACE_HAS_CHARPTR_DL 1
/*OS/platform uses char * for
dlopen/dlsym args, rather than
const char *.*/
#define ACE_HAS_CLOCK_GETTIME 1
- /*Platform supports POSIX.1b
+ /*Platform supports POSIX 1.b
clock_gettime ()*/
#define ACE_HAS_CLOCK_SETTIME 1
/*Platform supports POSIX.1b
clock_settime ()*/
-#define ACE_HAS_CONSISTENT_SIGNAL_PROTOTYPES 1
- /*Prototypes for both signal()
- and struct sigaction are
- consistent.*/
-#define ACE_HAS_CPLUSPLUS_HEADERS 1
- /*Compiler/platform has
- correctly prototyped header
- files*/
+#define ACE_HAS_VOIDPTR_GETTIMEOFDAY 1
+ /* 2nd arg 'void*' instead of 'struct timezone*' */
#define ACE_HAS_DIRENT 1
/*Compiler/platform has Dirent
iterator functions*/
-#define ACE_HAS_EXCEPTIONS 1
- /*Compiler supports C++
- exception handling*/
#define ACE_HAS_GETPAGESIZE 1
/*Platform supports
getpagesize() call (otherwise,
ACE_PAGE_SIZE must be defined,
except on Win32)*/
-#define ACE_HAS_GPERF 1
- /*The GPERF utility is compiled
- for this platform*/
-#define ACE_HAS_IDTYPE_T 1
- /*Compiler/platform supports
- idtype_t.*/
-#define ACE_HAS_IP_MULTICAST 1
- /*Platform supports IP multicast*/
#define ACE_HAS_MEMCHR 1
/*Use native implementation of memchr.*/
#define ACE_HAS_MSG
@@ -168,40 +128,6 @@
1994 in the ISO C standard Normative
Addendum 1. Other standards like XPG4
define a 2 parameter wcstok().*/
-#define ACE_HAS_POSIX_NONBLOCK 1
- /*Platform supports POSIX
- O_NONBLOCK semantics*/
-#define ACE_HAS_POSIX_TIME 1
- /*Platform supports the POSIX
- struct timespec type*/
-#define ACE_HAS_PTHREADS 1
- /*Platform supports POSIX
- Pthreads, of one form or
- another. This macro says the
- platform has a pthreads
- variety - should also define
- one of the below to say which
- one. Also may need some
- ACE_HAS_... thing for
- extensions.*/
-#define ACE_HAS_PTHREADS_STD 1
- /*Platform supports POSIX.1c-1995 threads
- (This is the final standard
- Pthreads).*/
-#define ACE_HAS_PTHREAD_PROCESS_ENUM 1
- /*pthread.h declares an enum with
- PTHREAD_PROCESS_PRIVATE and
- PTHREAD_PROCESS_SHARED values.*/
-#define ACE_HAS_XPG4_MULTIBYTE_CHAR 1
- /*Platform has support for
- multi-byte character support
- compliant with the XPG4
- Worldwide Portability
- Interface wide-character
- classification.*/
-#define ACE_HAS_SIGINFO_T 1
- /*Platform supports SVR4
- extended signals*/
#define ACE_HAS_SIGSUSPEND 1
/*Platform supports sigsuspend()*/
#define ACE_HAS_SIG_MACROS 1
@@ -216,54 +142,12 @@
#define ACE_HAS_SIG_C_FUNC 1
/*Compiler requires extern "C"
functions for signals.*/
-#define ACE_HAS_SIZET_SOCKET_LEN 1
- /*OS/compiler uses size_t *
- rather than int * for socket
- lengths*/
-#define ACE_HAS_SSIZE_T 1
- /*Compiler supports the ssize_t
- typedef*/
-#define ACE_HAS_STRPTIME 1
- /*Enables ACE_OS::strptime ().*/
-#define ACE_HAS_STANDARD_CPP_LIBRARY 1
- /*Platform/compiler supports
- Standard C++ Library*/
#define ACE_HAS_STRNLEN 1
/*Platform supports strnlen(3).*/
#define ACE_HAS_STREAMS 1
/*Platform supports STREAMS*/
#define ACE_HAS_STRERROR 1
/*Compiler/platform supports strerror ()*/
-#define ACE_HAS_STRING_CLASS 1
- /*Platform/Compiler supports a
- String class (e.g., GNU or
- Win32).*/
-#define ACE_HAS_SVR4_DYNAMIC_LINKING 1
- /*Compiler/platform supports
- SVR4 dynamic linking semantics*/
-#define ACE_HAS_TEMPLATE_SPECIALIZATION 1
- /*Compiler implements template
- specialization*/
-
-#define ACE_HAS_TEMPLATE_TYPEDEFS 1
- /*Compiler implements templates
- that support typedefs inside
- of classes used as formal
- arguments to a template
- class.*/
-#define ACE_HAS_THREADS 1
- /*Platform supports threads*/
-#define ACE_HAS_THREAD_SPECIFIC_STORAGE 1
- /*Compiler/platform has
- thread-specific storage*/
-#define ACE_HAS_THR_C_DEST 1
- /*The pthread_keycreate()
- routine *must* take extern C
- functions.*/
-#define ACE_HAS_THR_C_FUNC 1
- /*The pthread_create() routine
- *must* take extern C
- functions.*/
#define ACE_HAS_UALARM 1
/*Platform supports ualarm()*/
#define ACE_HAS_VOIDPTR_MMAP 1
@@ -278,12 +162,9 @@
#define ACE_LACKS_MADVISE 1
/*Platform lacks madvise()
(e.g., Linux)*/
-#define ACE_LACKS_MALLOC_H 1
- /*Platform lacks malloc.h*/
#define ACE_LACKS_MKFIFO 1
-#define ACE_LACKS_NAMED_POSIX_SEM 1
- /*Platform lacks named POSIX
- semaphores (e.g., Chorus)*/
+ /*Platform lacks mkfifo() e.g.,
+ VxWorks, Chorus, pSoS, and WinNT.*/
#define ACE_LACKS_NETDB_REENTRANT_FUNCTIONS 1
/*Platform does not support
reentrant netdb functions
@@ -292,18 +173,6 @@
gethostbyaddr_r,
gethostbyname_r,
getservbyname_r).*/
-#define ACE_LACKS_SYS_PARAM_H 1
- /*Platform lacks <sys/param.h>
- (e.g., MVS)*/
-#define ACE_LACKS_PRI_T 1
- /*Platform lacks pri_t (e.g.,
- Tandem NonStop UNIX).*/
-#define ACE_LACKS_PTHREAD_SIGMASK 1
- /*Platform lacks pthread_sigmask ().*/
-#define ACE_LACKS_PTHREAD_THR_SIGSETMASK 1
- /*Platform lacks
- pthread_thr_sigsetmask (e.g.,
- MVS, HP/UX, and OSF/1 3.2)*/
#define ACE_LACKS_READLINK 1
/*Platform lacks the readlink() function.*/
#define ACE_LACKS_RLIMIT 1
@@ -315,144 +184,188 @@
/*Platform/compiler lacks
{get,set}rlimit() prototypes
(e.g., Tandem)*/
-#define ACE_LACKS_SEMBUF_T 1
- /*Platform lacks struct sembuf
- (e.g., Win32 and VxWorks)*/
#define ACE_LACKS_SETSCHED
/*Platform lacks
pthread_attr_setsched()
(e.g. MVS)*/
-#define ACE_LACKS_SYSV_SHMEM 1
- /*Platform lacks System V shared
- memory (e.g., Win32 and
- VxWorks)*/
-#define ACE_LACKS_SIGINFO_H 1
- /*Platform lacks the siginfo.h
- include file (e.g., MVS)*/
-#define ACE_LACKS_SOCKETPAIR 1
+//#define ACE_LACKS_SOCKETPAIR 1
/*Platform lacks the
socketpair() call (e.g., SCO
UNIX)*/
-#define ACE_LACKS_STRRECVFD 1
- /*Platform doesn't define struct
- strrecvfd.*/
#define ACE_LACKS_SYSCALL 1
/*Platform doesn't have
syscall() prototype*/
+
+/* (missing) standard data types */
+//#define ACE_LACKS_TIMESPEC_T 1
+#define ACE_LACKS_CONST_TIMESPEC_PTR 1
+
+#define ACE_LACKS_SUSECONDS_T 1
+
+#define ACE_HAS_IDTYPE_T 1
+ /*Compiler/platform supports
+ idtype_t.*/
+#define ACE_HAS_SIGINFO_T 1
+ /*Platform supports SVR4
+ extended signals*/
+#define ACE_HAS_XPG4_MULTIBYTE_CHAR 1
+ /*Platform has support for
+ multi-byte character support
+ compliant with the XPG4
+ Worldwide Portability
+ Interface wide-character
+ classification.*/
+#define ACE_HAS_SIZET_SOCKET_LEN 1
+ /*OS/compiler uses size_t *
+ rather than int * for socket
+ lengths*/
+#define ACE_HAS_SSIZE_T 1
+ /*Compiler supports the ssize_t
+ typedef*/
+#define ACE_LACKS_PRI_T 1
+ /*Platform lacks pri_t (e.g.,
+ Tandem NonStop UNIX).*/
+#define ACE_LACKS_SEMBUF_T 1
+ /*Platform lacks struct sembuf
+ (e.g., Win32 and VxWorks)*/
+#define ACE_LACKS_STRRECVFD 1
+ /*Platform doesn't define struct
+ strrecvfd.*/
#define ACE_LACKS_T_ERRNO 1
/*Header files lack t_errno for
TLI*/
-#define ACE_LACKS_UCONTEXT_H 1
- /*Platform lacks the ucontext.h
- file*/
+
+/* POSIX threads ompatibilities */
+#define ACE_LACKS_RWLOCK_T 1
+#define ACE_LACKS_PTHREAD_KILL 1
+#define ACE_LACKS_THREAD_PROCESS_SCOPING 1
+
+#define ACE_HAS_PTHREADS 1
+ /*Platform supports POSIX
+ Pthreads, of one form or
+ another. This macro says the
+ platform has a pthreads
+ variety - should also define
+ one of the below to say which
+ one. Also may need some
+ ACE_HAS_... thing for
+ extensions.*/
+#define ACE_HAS_PTHREADS_STD 1
+ /*Platform supports POSIX.1c-1995 threads
+ (This is the final standard
+ Pthreads).*/
+#define ACE_HAS_PTHREAD_PROCESS_ENUM 1
+ /*pthread.h declares an enum with
+ PTHREAD_PROCESS_PRIVATE and
+ PTHREAD_PROCESS_SHARED values.*/
+
+#define ACE_LACKS_UNNAMED_SEMAPHORE 1
+
+#define ACE_MT_SAFE 1
+ /*Compile using multi-thread libraries*/
+#define ACE_HAS_THREADS 1
+ /*Platform supports threads*/
+#define ACE_HAS_THREAD_SPECIFIC_STORAGE 1
+ /*Compiler/platform has
+ thread-specific storage*/
+#define ACE_HAS_THR_C_DEST 1
+ /*The pthread_keycreate()
+ routine *must* take extern C
+ functions.*/
+#define ACE_HAS_THR_C_FUNC 1
+ /*The pthread_create() routine
+ *must* take extern C
+ functions.*/
+#define ACE_LACKS_PTHREAD_SIGMASK 1
+ /*Platform lacks pthread_sigmask ().*/
+#define ACE_LACKS_PTHREAD_THR_SIGSETMASK 1
+ /*Platform lacks
+ pthread_thr_sigsetmask (e.g.,
+ MVS, HP/UX, and OSF/1 3.2)*/
+#define ACE_NEEDS_HUGE_THREAD_STACKSIZE (64U*1024)
+ /*Required by platforms with small default stacks.*/
+#define ACE_HAS_PTHREAD_SETCONCURRENCY
+#define ACE_HAS_PTHREAD_GETCONCURRENCY
+
+
+/* language/platform conformance */
+#define ACE_NEW_THROWS_EXCEPTIONS 1
+ /*Compiler's 'new' throws exception on
+ failure (ANSI C++ behavior).*/
+#define ACE_TEMPLATES_REQUIRE_SOURCE 1
+ /*Compiler's template mechanim
+ must see source code (i.e.,
+ .cpp files). This is used for
+ GNU G++.*/
+#define ACE_USES_STD_NAMESPACE_FOR_STDCPP_LIB 1
+ /*Platform has its standard c++
+ library in the namespace std.*/
+#define ACE_HAS_AUTOMATIC_INIT_FINI 1
+ /*Compiler/platform correctly
+ calls init()/fini() for shared
+ libraries*/
+#define ACE_LACKS_UNIX_SIGNALS 1
+
+#define ACE_HAS_CONSISTENT_SIGNAL_PROTOTYPES 1
+ /*Prototypes for both signal()
+ and struct sigaction are
+ consistent.*/
+#define ACE_HAS_CPLUSPLUS_HEADERS 1
+ /*Compiler/platform has
+ correctly prototyped header
+ files*/
+#define ACE_HAS_EXCEPTIONS 1
+ /*Compiler supports C++
+ exception handling*/
+#define ACE_LACKS_LINEBUFFERED_STREAMBUF 1
+
+#define ACE_HAS_GPERF 1
+ /*The GPERF utility is compiled
+ for this platform*/
+#define ACE_HAS_IP_MULTICAST 1
+ /*Platform supports IP multicast*/
+#define ACE_HAS_POSIX_NONBLOCK 1
+ /*Platform supports POSIX
+ O_NONBLOCK semantics*/
+#define ACE_HAS_POSIX_TIME 1
+ /*Platform supports the POSIX
+ struct timespec type*/
+#define ACE_HAS_BROKEN_POSIX_TIME 1
+ /* but in <timers.h> */
+#define ACE_HAS_STRPTIME 1
+ /*Enables ACE_OS::strptime ().*/
+#define ACE_HAS_STANDARD_CPP_LIBRARY 1
+ /*Platform/compiler supports
+ Standard C++ Library*/
+#define ACE_HAS_STRING_CLASS 1
+ /*Platform/Compiler supports a
+ String class (e.g., GNU or
+ Win32).*/
+#define ACE_HAS_SVR4_DYNAMIC_LINKING 1
+ /*Compiler/platform supports
+ SVR4 dynamic linking semantics*/
+#define ACE_HAS_TEMPLATE_SPECIALIZATION 1
+ /*Compiler implements template
+ specialization*/
+
+#define ACE_HAS_TEMPLATE_TYPEDEFS 1
+ /*Compiler implements templates
+ that support typedefs inside
+ of classes used as formal
+ arguments to a template
+ class.*/
+#define ACE_LACKS_NAMED_POSIX_SEM 1
+ /*Platform lacks named POSIX
+ semaphores (e.g., Chorus)*/
+#define ACE_LACKS_SYSV_SHMEM 1
+ /*Platform lacks System V shared
+ memory (e.g., Win32 and
+ VxWorks)*/
#define ACE_LACKS_UNIX_DOMAIN_SOCKETS 1
/*ACE platform has no UNIX
domain sockets*/
#define ACE_LACKS_UNIX_SYSLOG 1
-#define ACE_NEEDS_HUGE_THREAD_STACKSIZE (64U*1024)
- /*Required by platforms with small default stacks.*/
-
-#ifdef ACE_NEEDS_PTHREAD_UPPERCASE
-
-/*
-** These defines take care of the upper/lower casing problem that occurs
-** if you are using pthreads and are compiling /NAMES=AS_IS (which is necessary for ACE/TAO)
-**
-** Note that it does NOT take care of any argument differences between
-** the various implementations of pthreads.
-*/
-
-#define pthread_attr_create PTHREAD_ATTR_CREATE
-#define pthread_attr_delete PTHREAD_ATTR_DELETE
-#define pthread_attr_destroy PTHREAD_ATTR_DESTROY
-#define pthread_attr_getdetach_np PTHREAD_ATTR_GETDETACH_NP
-#define pthread_attr_getguardsize_np PTHREAD_ATTR_GETGUARDSIZE_NP
-#define pthread_attr_getinheritsched PTHREAD_ATTR_GETINHERITSCHED
-#define pthread_attr_getprio PTHREAD_ATTR_GETPRIO
-#define pthread_attr_getsched PTHREAD_ATTR_GETSCHED
-#define pthread_attr_getschedparam PTHREAD_ATTR_GETSCHEDPARAM
-#define pthread_attr_getstacksize PTHREAD_ATTR_GETSTACKSIZE
-#define pthread_attr_init PTHREAD_ATTR_INIT
-#define pthread_attr_setdetach_np PTHREAD_ATTR_SETDETACH_NP
-#define pthread_attr_setdetachstate PTHREAD_ATTR_SETDETACHSTATE
-#define pthread_attr_setguardsize_np PTHREAD_ATTR_SETGUARDSIZE_NP
-#define pthread_attr_setinheritsched PTHREAD_ATTR_SETINHERITSCHED
-#define pthread_attr_setprio PTHREAD_ATTR_SETPRIO
-#define pthread_attr_setsched PTHREAD_ATTR_SETSCHED
-#define pthread_attr_setschedparam PTHREAD_ATTR_SETSCHEDPARAM
-#define pthread_attr_setschedpolicy PTHREAD_ATTR_SETSCHEDPOLICY
-#define pthread_attr_setstacksize PTHREAD_ATTR_SETSTACKSIZE
-#define pthread_cancel PTHREAD_CANCEL
-#define pthread_cancel_e PTHREAD_CANCEL_E
-#define pthread_cond_broadcast PTHREAD_COND_BROADCAST
-#define pthread_cond_destroy PTHREAD_COND_DESTROY
-#define pthread_cond_init PTHREAD_COND_INIT
-#define pthread_cond_sig_preempt_int_np PTHREAD_COND_SIG_PREEMPT_INT_NP
-#define pthread_cond_signal PTHREAD_COND_SIGNAL
-#define pthread_cond_signal_int_np PTHREAD_COND_SIGNAL_INT_NP
-#define pthread_cond_timedwait PTHREAD_COND_TIMEDWAIT
-#define pthread_cond_wait PTHREAD_COND_WAIT
-#define pthread_condattr_create PTHREAD_CONDATTR_CREATE
-#define pthread_condattr_delete PTHREAD_CONDATTR_DELETE
-#define pthread_condattr_init PTHREAD_CONDATTR_INIT
-#define pthread_create PTHREAD_CREATE
-#define pthread_delay_np PTHREAD_DELAY_NP
-#define pthread_detach PTHREAD_DETACH
-#define pthread_equal PTHREAD_EQUAL
-#define pthread_exc_fetch_fp_np PTHREAD_EXC_FETCH_FP_NP
-#define pthread_exc_handler_np PTHREAD_EXC_HANDLER_NP
-#define pthread_exc_pop_ctx_np PTHREAD_EXC_POP_CTX_NP
-#define pthread_exc_push_ctx_np PTHREAD_EXC_PUSH_CTX_NP
-#define pthread_exc_savecontext_np PTHREAD_EXC_SAVECONTEXT_NP
-#define pthread_exit PTHREAD_EXIT
-#define pthread_get_expiration_np PTHREAD_GET_EXPIRATION_NP
-#define pthread_getprio PTHREAD_GETPRIO
-#define pthread_getschedparam PTHREAD_GETSCHEDPARAM
-#define pthread_getscheduler PTHREAD_GETSCHEDULER
-#define pthread_getspecific PTHREAD_GETSPECIFIC
-#define pthread_getunique_np PTHREAD_GETUNIQUE_NP
-#define pthread_join PTHREAD_JOIN
-#define pthread_join32 PTHREAD_JOIN32
-#define pthread_keycreate PTHREAD_KEYCREATE
-#define pthread_key_create PTHREAD_KEY_CREATE
-#define pthread_kill PTHREAD_KILL
-#define pthread_lock_global_np PTHREAD_LOCK_GLOBAL_NP
-#define pthread_mutex_destroy PTHREAD_MUTEX_DESTROY
-#define pthread_mutex_init PTHREAD_MUTEX_INIT
-#define pthread_mutex_lock PTHREAD_MUTEX_LOCK
-#define pthread_mutex_trylock PTHREAD_MUTEX_TRYLOCK
-#define pthread_mutex_unlock PTHREAD_MUTEX_UNLOCK
-#define pthread_mutexattr_create PTHREAD_MUTEXATTR_CREATE
-#define pthread_mutexattr_delete PTHREAD_MUTEXATTR_DELETE
-#define pthread_mutexattr_destroy PTHREAD_MUTEXATTR_DESTROY
-#define pthread_mutexattr_getkind_np PTHREAD_MUTEXATTR_GETKIND_NP
-#define pthread_mutexattr_init PTHREAD_MUTEXATTR_INIT
-#define pthread_mutexattr_setkind_np PTHREAD_MUTEXATTR_SETKIND_NP
-#define pthread_mutexattr_settype_np PTHREAD_MUTEXATTR_SETTYPE_NP
-#define pthread_once PTHREAD_ONCE
-#define pthread_resume_np PTHREAD_RESUME_NP
-#define pthread_self PTHREAD_SELF
-#define pthread_setasynccancel PTHREAD_SETASYNCCANCEL
-#define pthread_setcancel PTHREAD_SETCANCEL
-#define pthread_setcancelstate PTHREAD_SETCANCELSTATE
-#define pthread_setprio PTHREAD_SETPRIO
-#define pthread_setschedparam PTHREAD_SETSCHEDPARAM
-#define pthread_setscheduler PTHREAD_SETSCHEDULER
-#define pthread_setspecific PTHREAD_SETSPECIFIC
-#define pthread_suspend_np PTHREAD_SUSPEND_NP
-#define pthread_testcancel PTHREAD_TESTCANCEL
-#define pthread_unlock_global_np PTHREAD_UNLOCK_GLOBAL_NP
-#define pthread_yield PTHREAD_YIELD
-#define pthread_yield_np PTHREAD_YIELD_NP
-
-/* new for OpenVMS 7.3.2 ECO 1 */
-#define pthread_attr_setscope PTHREAD_ATTR_SETSCOPE
-#define pthread_attr_setstackaddr PTHREAD_ATTR_SETSTACKADDR
-#define pthread_condattr_destroy PTHREAD_CONDATTR_DESTROY
-#define pthread_key_delete PTHREAD_KEY_DELETE
-#define pthread_setcanceltype PTHREAD_SETCANCELTYPE
-
-#endif // if ACE_NEEDS_PTHREAD_UPPERCASE
+#define ACE_HAS_SOCK_BUF_SIZE_MAX
#endif
diff --git a/ace/svcconf.mpb b/ace/svcconf.mpb
index 7627592eb7c..cbdcdce227f 100644
--- a/ace/svcconf.mpb
+++ b/ace/svcconf.mpb
@@ -8,8 +8,10 @@ feature(ace_svcconf) {
DLL.cpp
DLL_Manager.cpp
Dynamic_Service_Base.cpp
+ Dynamic_Service_Dependency.cpp
Parse_Node.cpp
Service_Config.cpp
+ Service_Gestalt.cpp
Service_Manager.cpp
Service_Object.cpp
Service_Repository.cpp
@@ -29,15 +31,15 @@ feature(ace_svcconf) {
"Svc_Conf_y.cpp: Svc_Conf.y"
"ifeq ($(notdir $(YACC)), bison)"
" $(YACC) -l -d Svc_Conf.y"
- " sed -e 's/char \\*getenv/char *ace_foo/g' \\"
- " -e 's/= getenv/= ACE_OS::getenv/g' \\"
- " -e 's/fprintf/ACE_OS::fprintf/g' \\"
+ " sed -e 's/char \\*getenv/char *ace_foo/g' \\" // Eliminates getenv prototype, use ACE's
+ " -e 's/= getenv/= ACE_OS::getenv/g' \\" // ... like this - qualified.
+ " -e 's/fprintf/ACE_OS::fprintf/g' \\" // Use ACE's fprintf, not library's
" -e 's/yy/ace_yy/g' \\"
- " -e 's/->ace_yyerrno/->yyerrno/g' \\"
- " -e 's/->ace_yylineno/->yylineno/g' \\"
+ " -e 's/->ace_yyerrno/->yyerrno/g' \\" // These reverse the unwanted ace_ prefix
+ " -e 's/->ace_yylineno/->yylineno/g' \\" // added by the substitution, above.
" -e 's/YY/ACE_YY/g' \\"
" -e 's/^char /ACE_TCHAR /g' \\"
- " -e 's/ char / ACE_TCHAR /g' \\"
+ " -e 's/\([^d]\) char /\$1 ACE_TCHAR /g' \\"
" -e 's/(char/(ACE_TCHAR/g' \\"
" -e 's/ NULL/ 0/g' \\"
" -e 's/ace_yyerror[ ]*(\"/ace_yyerror (ACE_SVC_CONF_PARAM->yyerrno, ACE_SVC_CONF_PARAM->yylineno, \"/g' \\"
@@ -46,12 +48,18 @@ feature(ace_svcconf) {
" -e 's@#include <stdio\.h>@@' \\"
" -e 's/Svc_Conf\\.tab\\.c/Svc_Conf_y.cpp/g' < Svc_Conf.tab.c > /tmp/$@"
" cp /tmp/$@ $@"
- " echo \/\/ '$$I''d$$' > Svc_Conf_Tokens.h"
- " cat Svc_Conf.tab.h >> Svc_Conf_Tokens.h"
+ " echo \/\/ '$$I''d:$$' >Svc_Conf_Tokens.h"
+ " echo '#ifndef BISON_SVC_CONF_TAB_H' >>Svc_Conf_Tokens.h" // Inclusion protection macros
+ " echo '# define BISON_SVC_CONF_TAB_H' >>Svc_Conf_Tokens.h" // ... same ...
+ " echo '# define ACE_YYSTYPE_IS_DECLARED 1' >>Svc_Conf_Tokens.h" // Don't use Svc_Conf_y.cpp's
+ " sed -e 's/yy/ace_yy/g' \\"
+ " -e 's/YY/ACE_YY/g' <Svc_Conf.tab.h >>Svc_Conf_Tokens.h"
+ " echo '#endif \/\* ifndef BISON_SVC_CONF_TAB_H \*\/' >>Svc_Conf_Tokens.h"
" $(RM) -f /tmp/$@ Svc_Conf.tab.c Svc_Conf.tab.h Svc_Conf_y.cpp.orig"
"else"
" @echo 'ERROR: You must use bison 1.35 or higher to process this file'"
" @/bin/false"
"endif"
+
}
}
diff --git a/bin/tao_orb_tests.lst b/bin/tao_orb_tests.lst
index c0d88be1c7f..cd95ec64cc9 100644
--- a/bin/tao_orb_tests.lst
+++ b/bin/tao_orb_tests.lst
@@ -9,6 +9,14 @@
#
# NOTE: This file contains tests only for TAO's ORB. Please do not
# include things like performance-tests, and examples here.
+
+TAO/tests/ORB_Local_Config/Bunch/run_test.pl: !MINIMUM !ST
+TAO/tests/ORB_Local_Config/Limits/run_test.pl: !MINIMUM !ST
+TAO/tests/ORB_Local_Config/Separation/run_test.pl: !MINIMUM !ST
+TAO/tests/ORB_Local_Config/Service_Dependency/run_test.pl: !MINIMUM !ST
+TAO/tests/ORB_Local_Config/Shared/run_test.pl: !MINIMUM !ST
+TAO/tests/ORB_Local_Config/Simple/run_test.pl: !MINIMUM !ST
+TAO/tests/ORB_Local_Config/Two_DLL_ORB/run_test.pl: !MINIMUM !ST
TAO/tests/Param_Test/run_test.pl: !MINIMUM
TAO/tests/Param_Test/run_test_dii.pl: !MINIMUM
TAO/tests/AMI/run_test.pl: !MINIMUM
@@ -88,6 +96,8 @@ TAO/tests/OBV/Factory/run_test.pl:
TAO/tests/OBV/Forward/run_test.pl:
TAO/tests/OBV/TC_Alignment/run_test.pl:
TAO/tests/OBV/ValueBox/run_test.pl:
+TAO/tests/OBV/Truncatable/run_test.pl:
+TAO/tests/OBV/Simple/run_test.pl:
TAO/tests/Hello/run_test.pl:
TAO/tests/IPV6/run_test.pl: IPV6
TAO/tests/AlternateIIOP/run_test.pl: !DISABLE_ToFix_LynxOS_x86
@@ -129,11 +139,14 @@ TAO/tests/POA/Default_Servant/run_test.pl: !MINIMUM
TAO/tests/POA/Single_Threaded_POA/run_test.pl: !MINIMUM !ST
TAO/tests/POA/Non_Servant_Upcalls/run_test.pl: !SUNCC5_1
TAO/tests/POA/MT_Servant_Locator/run_test.pl: !MINIMUM !ST
+TAO/tests/POA/Bug_2511_Regression/run_test.pl: !MINIMUM
TAO/tests/POA/Nested_Non_Servant_Upcalls/run_test.pl: !MINIMUM !ST
TAO/tests/POA/Deactivate_Object/run_test.pl
TAO/tests/POA/Reference_Counting/run_test.pl
TAO/tests/POA/Current/run_test.pl:
TAO/tests/POA/wait_for_completion/run_test.pl:
+TAO/tests/POA/POAManagerFactory/run_test.pl:
+TAO/tests/POA/EndpointPolicy/run_test.pl:
TAO/tests/IORManipulation/run_test.pl:
TAO/tests/Policies/run_test.pl: !MINIMUM !ST
TAO/tests/Timeout/run_test.pl: !MINIMUM
@@ -176,6 +189,7 @@ TAO/tests/InterOp-Naming/run_test.pl: !MINIMUM
TAO/tests/Multiple/run_test.pl: !VxWorks !SUNCC5_1
TAO/tests/Exposed_Policies/run_test.pl: !MINIMUM !ST
TAO/tests/Portable_Interceptors/Bug_1559/run_test.pl: !MINIMUM !DISABLE_INTERCEPTORS
+TAO/tests/Portable_Interceptors/Bug_2510_Regression/run_test.pl: !MINIMUM !DISABLE_INTERCEPTORS
TAO/tests/Portable_Interceptors/Collocated/Dynamic/run_test.pl: !MINIMUM !DISABLE_INTERCEPTORS !ST
TAO/tests/Portable_Interceptors/Processing_Mode_Policy/Collocated/run_test.pl: !MINIMUM !DISABLE_INTERCEPTORS !ST
TAO/tests/Portable_Interceptors/Processing_Mode_Policy/Remote/run_test.pl: !MINIMUM !DISABLE_INTERCEPTORS !ST
@@ -237,3 +251,4 @@ TAO/tests/CSD_Strategy_Tests/TP_Test_4/run_test.pl big: !ST !VxWorks
TAO/tests/CSD_Strategy_Tests/TP_Test_Dynamic/run_test.pl: !STATIC !ST !VxWorks
TAO/tests/CSD_Strategy_Tests/TP_Test_Static/run_test.pl: !ST !VxWorks
TAO/tests/Permanent_Forward/run_test.pl:
+TAO/tests/Parallel_Connect_Strategy/run_test.pl:
diff --git a/include/makeinclude/platform_hpux_kcc.GNU b/include/makeinclude/platform_hpux_kcc.GNU
deleted file mode 100644
index b9f75c2865a..00000000000
--- a/include/makeinclude/platform_hpux_kcc.GNU
+++ /dev/null
@@ -1,123 +0,0 @@
-# $Id$
-#
-# This is for HP-UX 11.x using the KCC compiler.
-#
-# HP-UX 11 supports both 32-bit and 64-bit builds, regardless of which
-# architecture the build is done on. This file is set up to build native
-# to the machine it's running on. To cross-build for another platform, add
-# "buildbits=32" to make a 32-bit build, and "buildbits=64" to do a 64-bit
-# build. Note that if you explicitly specify a 64-bit build, the option
-# -Wl,+vnocompatwarnings is added to shut up the "At least one PA 2.0 object
-# file detected..." messages.
-#
-# NOTE: This has only been tested with "buildbits" left as the default.
-#
-
-ifeq (,$(buildbits))
- buildbits = 0
-endif
-ifeq (,$(debug))
- debug = 1
-endif
-ifeq (,$(distrib))
- distrib = 0
-endif
-ifeq (,$(optimize))
- optimize = 0
-endif
-ifeq (,$(threads))
- threads = 1
-endif
-
-# The only way we can disable exceptions is to also disable threads
-ifeq ($(threads),1)
- THR_DEFS = --thread_safe -DACE_HAS_THREADS -D_POSIX_C_SOURCE=199506L
- LDFLAGS = --thread_safe
- ARFLAGS = --thread_safe
- exceptions = 1
-else
- THR_DEFS = -DACE_HAS_THREADS=0
- LDFLAGS =
- ARFLAGS =
- ifeq (0,$(exceptions))
- CCFLAGS += --no_exceptions
- LDFLAGS += --no_exceptions
- endif
-endif
-
-
-CC = cc
-CXX = KCC
-CCFLAGS += $(CFLAGS) $(THR_DEFS) -DACE_LACKS_PRAGMA_ONCE --one_instantiation_per_object
-DCFLAGS += +K0 -g
-DLD = $(CXX) $(CCFLAGS)
-LD = $(CXX)
-OCCFLAGS = +K3 -O
-PIC = +Z
-LDFLAGS += -Wl,+s -z
-SOFLAGS =
-SOEXT = sl
-
-# Please note that KCC can not replace object files within a
-# static library. You must rebuild the library with all of the .o's
-# The ar rule will require you to touch all of the object files in .obj,
-# including the ones under .obj/ti_files, to do this.
-AR = KCC
-ARFLAGS += -Bstatic -o
-
-# KCC allows suppresion of warnings and errors.
-# Warning #111 statement is unreachable
-CCFLAGS += --diag_suppress 111
-
-# KCC always uses the standard cpp library
-CCFLAGS += -DACE_HAS_STANDARD_CPP_LIBRARY=1
-
-#
-# libpthread is automatically linked in by KCC if we use --thread_safe,
-# therefore we do not need to explicitly supply it.
-# If we link statically and libpthread is supplied with $(LIBS), the
-# program will core dump.
-#
-LIBS += -Bdynamic -lxti -lrt
-
-ifdef static_libs_only
- ifneq ($(static_libs_only),0)
- static_libs=1
- endif
-endif
-# Kind of a hack since LDFLAGS is used for both non-static
-# library generation and binary generation. LD is only used for
-# binary generation.
-ifneq ($(static_libs),0)
- CCFLAGS += --one_instantiation_per_object
- LD += -Bstatic
- # libc is also automatically linked in by KCC, but when we are linking
- # statically libc must be linked dynamically or gethostbyname does not
- # function properly.
- LIBS += -lc -Bstatic
-endif
-
-#
-# This section has not been tested.
-#
-ifeq ($(distrib),1)
- ifeq ($(buildbits),32)
- SOFLAGS += -Wl,-x -Wl,+h/usr/lib/$(@F)
- endif
- ifeq ($(buildbits),64)
- SOFLAGS += -Wl,-x -Wl,+h/usr/lib/pa20_64/$(@F)
- endif
-endif
-ifeq ($(buildbits),32)
- CCFLAGS += +DA1.1 +DS1.1
-else
- ifeq ($(buildbits),64)
- CCFLAGS += +DA2.0 +DS2.0
- LDFLAGS += -Wl,+vnocompatwarnings
- else
- CCFLAGS += +DAportable
- endif
-endif
-
-SONAME =
-SOVERSION =
diff --git a/include/makeinclude/platform_irix6.x_kcc.GNU b/include/makeinclude/platform_irix6.x_kcc.GNU
deleted file mode 100644
index f68058a9cf5..00000000000
--- a/include/makeinclude/platform_irix6.x_kcc.GNU
+++ /dev/null
@@ -1,41 +0,0 @@
-# $Id$
-
-# Irix 6.x with KCC 3.4d
-
-include $(ACE_ROOT)/include/makeinclude/platform_irix6.x_common.GNU
-
-# WARNING_FLAGS +=
-# 111: statement is unreachable. There's a whole bunch of these
-# in the ace code.
-# 280: declaration of a member with the same name as its class
-# Get this from <netinet/in.h>.
-# 608: this pragma must immediately precede a declaration or statement
-# Get this from <ucontext.h>
-WARNING_FLAGS += --diag_suppress 111,280,608
-
-debug = 1
-optimize = 1
-
-CC = KCC
-CXX = $(CC)
-CFLAGS += -n32
-KCCOPTS = --thread_safe --one_per
-CCFLAGS += $(CFLAGS) -DNULL=0 $(WARNING_FLAGS) $(KCCOPTS)
-ifeq ($(optimize),1)
-DCFLAGS += -g
-else
-DCFLAGS += +K0 -g
-endif
-DLD = $(CC)
-LD = $(CC)
-# warning 84: "" is not used for resolving any symbol.
-LDFLAGS += -n32 -L$(ACE_ROOT)/lib -L. --backend -Wl,-woff,84
-#LIBS += -lpthread
-OCFLAGS += +K3 -O2
-PIC =
-AR = $(CC)
-ARFLAGS = $(KCCOPTS) -o
-RANLIB = @true
-SOFLAGS += $(CPPFLAGS) $(KCCOPTS) -L$(ACE_ROOT)/lib $(ACELIB)
-SOBUILD = $(COMPILE.cc) $(PIC) -o $(VSHDIR)$*.so $<
-PRELIB = @true
diff --git a/include/makeinclude/platform_linux_kcc.GNU b/include/makeinclude/platform_linux_kcc.GNU
deleted file mode 100644
index 6b57898c6dd..00000000000
--- a/include/makeinclude/platform_linux_kcc.GNU
+++ /dev/null
@@ -1,72 +0,0 @@
-# $Id$
-
-# According to Ben Eng <ben@jetpen.com>, this file
-# should allow ACE to be built on Linux using KAI C++ 3.3a.
-#
-# NOTE: evaluation copies of KCC might include libraries that
-# were compiled with exception handling enabled. To enable link
-# compatibility with those libraries, you must build ACE with
-# exception handling enabled, as well. To do that, either set
-# the exceptions macro below to 1, or build with:
-# make exceptions=1
-
-ifeq (,$(debug))
- debug=0
-endif
-ifeq (,$(optimize))
- optimize=1
-endif
-ifeq (,$(threads))
- threads = 1
-endif
-
-CC = KCC
-CXX = $(CC)
-CPPFLAGS += -D_REENTRANT -D_GNU_SOURCE
-
-CCFLAGS += $(CFLAGS) -DNULL=0 --one_instantiation_per_object
-DCFLAGS += +K0 -g
-OCFLAGS += +K3 -O
-DLD = $(CC)
-LD = $(CC)
-# Using just -ldl results in a very annoying warning (nm: no symbols),
-# because the prelinker searches for missing templates in the libdl
-# library. Passing the option directly to the linker fixes the
-# warning.
-LIBS += -Wl,-ldl
-MATHLIB = -lm
-
-ifeq (,$(exceptions))
- exceptions=0
-endif # exceptions
-
-ifeq ($(exceptions),0)
- CCFLAGS += --no_exceptions
-endif # ! exceptions
-
-ifeq ($(threads),1)
- CFLAGS += --thread_safe
- LDFLAGS += --thread_safe
-endif # threads
-
-# KCC allows suppresion of warnings and errors.
-# Warning #280 declaration of a member with the same name as its class
-CCFLAGS += --diag_suppress 280
-
-ifdef static_libs_only
- ifneq ($(static_libs_only),0)
- static_libs=1
- endif
-endif
-ifneq ($(static_libs),0)
- CCFLAGS += --one_instantiation_per_object
-endif
-
-PIC = -fPIC
-AR = $(CC)
-ARFLAGS = $(CCFLAGS) $(CPPFLAGS) -Bstatic -o
-RANLIB = @true
-SOFLAGS += $(PIC) $(CCFLAGS) $(CPPFLAGS)
-SOBUILD = $(COMPILE.cc) $(SOFLAGS) -o $(VSHDIR)$*.o $<
-PRELIB = @true
-PRELIB_USES_OBJ_ONLY = 1
diff --git a/include/makeinclude/platform_osf1_4.x_kcc.GNU b/include/makeinclude/platform_osf1_4.x_kcc.GNU
deleted file mode 100644
index a3a3178239d..00000000000
--- a/include/makeinclude/platform_osf1_4.x_kcc.GNU
+++ /dev/null
@@ -1,65 +0,0 @@
-# $Id$
-
-# This platform macros file is intended to work with Digital UNIX 4.x
-# (OSF/1 4.x) and KAI C++ 3.3f.
-
-ifeq (,$(debug))
- debug = 1
-endif
-
-ifeq (,$(exceptions))
- exceptions = 1
-endif
-
-ifeq (,$(rtti))
- rtti = 1
-endif
-
-ifeq (,$(threads))
- threads = 1
-endif
-
-ifeq (,$(optimize))
- optimize = 1
-endif
-
-# WARNING_FLAGS +=
-# 9: nested comment not allowed. But there's one in /usr/include/pdsc.h!
-# and /usr/include/net/if_types.h
-# 111: statement is unreachable. There's a whole bunch of these
-# in the ace code.
-WARNING_FLAGS += --display_error_number --diag_suppress 9,111
-
-CC = KCC
-CXX = $(CC)
-CFLAGS += -D_REENTRANT
-KCCOPTS = --thread_safe --one_per
-CCFLAGS += $(CFLAGS) -DNULL=0 $(WARNING_FLAGS) $(KCCOPTS)
-ifeq ($(optimize),1)
-DCFLAGS += -g3
-else
-DCFLAGS += +K0 -g
-endif
-LD = $(CC)
-DLD = $(CC)
-LIBS += -lpthread -lmach -lexc -lxti -lrt -lm
-OCFLAGS += +K3 -O
-PIC =
-AR = $(CC)
-ARFLAGS = $(KCCOPTS) -o
-# When libraries are archived, a hash index is automatically created so there
-# is no need for ranlib
-RANLIB = /usr/bin/true
-SOFLAGS += $(CPPFLAGS) $(KCCOPTS) -L$(ACE_ROOT)/lib $(ACELIB) -lc
-
-# With kcc 4, if it does template splitting and ends up with more than
-# a certain number of templates, it can screw up the link command so that
-# the entry point for the program gets set to one of the template
-# instantiations! This forces the correct entry point.
-LDFLAGS += --backend -Wl,-e,__start
-
-# Work around kcc overflowing the arg list...
-SHLIBBUILD = $(AR) $(ARFLAGS) $@-tmp.a $(VSHOBJS1) $(LDFLAGS) $(LIBS); $(filter-out -c,$(COMPILE.cc) $(PIC)) -o $@ -all $@-tmp.a -none $(LDFLAGS) $(LIBS) -lc --COMPO_ln_dy -expect_unresolved --COMPO_ln_dy '*'; rm $@-tmp.a
-
-SOBUILD = $(COMPILE.cc) $(PIC) -o $(VSHDIR)$*.so $<
-PRELIB = @true
diff --git a/include/makeinclude/platform_sunos5_kcc.GNU b/include/makeinclude/platform_sunos5_kcc.GNU
deleted file mode 100644
index 80554e48bb1..00000000000
--- a/include/makeinclude/platform_sunos5_kcc.GNU
+++ /dev/null
@@ -1,111 +0,0 @@
-# $Id$ -*- Makefile -*-
-
-# SunOS 5.x (Solaris 2.x) with KAI C++ 3.3e
-
-debug = 1
-distrib = 0
-threads = 1
-exceptions = 1
-
-# I(kitty) don't know anything about this combination. Making it explicit.
-# XXX: Get the flags from the Kai web-site and fill it in.
-templates = explicit
-
-# Turn on the proper flags for explicit template instantiation.
-#
-ifeq ($(templates),explicit)
- ifeq ($(TEMPLATES_FLAG),) # Turn on flags if none is speficied.
- TEMPLATES_FLAG=
- endif
- CPPFLAGS += -DACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION
-endif
-
-# These are required for KCC 3.4g compiler.
-LDFLAGS += --one_instantiation_per_object
-CCFLAGS += --one_instantiation_per_object
-
-ifeq ($(threads),1)
- CFLAGS += --thread_safe
- LDFLAGS += --thread_safe
- ARFLAGS = --thread_safe
-else
- ARFLAGS =
- CCFLAGS += -DACE_HAS_THREADS=0
-endif # threads
-
-CC = KCC
-CXX = KCC
-
-DCFLAGS += +K0 -g
-DLD = $(CXX)
-LD = $(CXX)
-
-ifeq (1,$(exceptions))
- CCFLAGS += --exceptions
-else
- CCFLAGS += --no_exceptions
- LDFLAGS += --no_exceptions
-endif
-
-
-
-LIBS += -Bdynamic -lsocket -lnsl -lgen -ldl -lposix4
-MATHLIB = -lm
-CPPFLAGS += $(CFLAGS)
-OCFLAGS += +K3 -o
-PIC = -KPIC
-AR = KCC
-ARFLAGS += -Bstatic -o
-RANLIB = echo
-SOFLAGS += -G $(CPPFLAGS)
-
-
-ifdef static_libs_only
- ifneq ($(static_libs_only),0)
- static_libs=1
- endif
-endif
-ifneq ($(static_libs),0)
- CCFLAGS += --one_instantiation_per_object
-endif
-
-
-
-#### Create template repository to avoid compiler warning.
-TEMPLATE_REPOSITORY = Templates.DB
-
-ifdef CLEANUP_BIN
- #### Builds .shobj/$*.o file, then .shobj/$*.so file. The .o files
- #### are used for building libraries and executables. But, it seems
- #### to be necessary to build the .so files (with -G) in order to get
- #### all template instantiations.
- SOBUILD = $(COMPILE.cc) $(PIC) -o $(VSHDIR)$*.o $<; \
- $(SOLINK.cc) -o $@ -h $@ $(LDFLAGS) $(VSHDIR)$*.o
-else
- #### Optimize builds when no executables are built in the current
- #### directory. Only a library is being created, and -G is used
- #### in that step. Therefore, all templates instantations are
- #### included in the library. This optimization saves almost 11 Mb
- #### (2.6 percent) and 27 minutes (22 percent) on the entire ACE
- #### build on a 168 MHz Sun Ultra2.
- ####
- #### Sun C++ won't allow the output from a compile to be named with
- #### a .so extension. Rather than muck with the ACE build rules and
- #### risk upsetting builds on other platforms, just ln the output
- #### after building it.
- SOBUILD = $(RM) $@; $(COMPILE.cc) $(PIC) -o $(VSHDIR)$*.o $< && \
- /bin/ln $(VSHDIR)$*.o $@
-endif # CLEANUP_BIN
-
-#### The following macro overrides enable creation of fast executables.
-#### They _don't_ support fast compilation :-)
-#### To use, add fast=1 to your "make" invocation.
-####
-#### -g is incompatible with -fast. If you need -g, you can
-#### use "-fast -O3".
-####
-ifeq (1,$(fast))
- CFLAGS += -fast +K3
- DCFLAGS =
- LDFLAGS += -fast +K3
-endif # fast
diff --git a/include/makeinclude/platform_tru64_kcc.GNU b/include/makeinclude/platform_tru64_kcc.GNU
deleted file mode 100644
index 0fe62b9c24d..00000000000
--- a/include/makeinclude/platform_tru64_kcc.GNU
+++ /dev/null
@@ -1,35 +0,0 @@
-# $Id$
-
-# This platform macros file is intended to work with
-# Digital UNIX using the KAI compiler.
-
-# Include the common macros for all compilers
-#
-include $(ACE_ROOT)/include/makeinclude/platform_tru64_pre.GNU
-
-# Include the macro file for osf1_4.x
-#
-include $(ACE_ROOT)/include/makeinclude/platform_osf1_4.x_kcc.GNU
-
-ifeq (4.,$(findstring 4.,$(ACE_DU_VERSION)))
- ifeq (4.0F,$(findstring 4.0F,$(ACE_DU_SUBVERSION)))
- # variable "" was declared but never referenced.
- # Get these from PTHREAD_THIS_CATCH_NP.
- WARNING_FLAGS += --diag_suppress 177
- endif # ! 4.0F
-
-else # ! 4.x
-ifeq (5.,$(findstring 5.,$(ACE_DU_VERSION)))
- # variable "" was declared but never referenced.
- # Get these from PTHREAD_THIS_CATCH_NP.
- WARNING_FLAGS += --diag_suppress 177
-
- # KCC makes a lot of these warnings from the C compiler.
- WARNING_FLAGS += --backend -msg_disable --backend nonstandcast,missingreturn,uninit1,ptrmismatch
-
-endif # 5.x
-endif # ! 4.x
-
-# Include the common macros for all compilers
-#
-include $(ACE_ROOT)/include/makeinclude/platform_tru64_post.GNU
diff --git a/include/makeinclude/platform_vxworks5.5.x.GNU b/include/makeinclude/platform_vxworks5.5.x.GNU
index aa660e49100..df071f82675 100644
--- a/include/makeinclude/platform_vxworks5.5.x.GNU
+++ b/include/makeinclude/platform_vxworks5.5.x.GNU
@@ -230,7 +230,7 @@ else
endif
else
ifeq ("$(TOOL)","gnu")
-C++FLAGS += -ftemplate-depth-34
+C++FLAGS += -ftemplate-depth-50
ifeq ($(exceptions),1)
C++FLAGS += -fexceptions
else