summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornobody <nobody@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>2006-04-14 16:42:37 +0000
committernobody <nobody@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>2006-04-14 16:42:37 +0000
commit4326a5f17ea8c2eb5ed0371c1d19b19c29e03ab6 (patch)
treea880fe3c5490214bb4eb0ad88d70b16dabbac9fa
parentc91b663fadde89404315116da8931f1a1223e799 (diff)
downloadATCD-4326a5f17ea8c2eb5ed0371c1d19b19c29e03ab6.tar.gz
This commit was manufactured by cvs2svn to create branch
'oci_dave_wchar_refactor_branch'.
-rw-r--r--ChangeLogs/ChangeLog-05b2815
-rw-r--r--TAO/CIAO/CCF/CCF/IDL2/SemanticGraph/Array.cpp37
-rw-r--r--TAO/CIAO/CCF/CCF/IDL2/SemanticGraph/Array.hpp57
-rw-r--r--TAO/CIAO/CCF/CCF/IDL2/SemanticGraph/String.cpp77
-rw-r--r--TAO/CIAO/CCF/CCF/IDL2/SemanticGraph/String.hpp85
-rw-r--r--TAO/CIAO/CCF/CCF/IDL2/Traversal/Array.cpp78
-rw-r--r--TAO/CIAO/CCF/CCF/IDL2/Traversal/Array.hpp51
-rw-r--r--TAO/CIAO/CCF/CCF/IDL2/Traversal/IntExpression.hpp757
-rw-r--r--TAO/CIAO/CCF/CCF/IDL2/Traversal/String.cpp93
-rw-r--r--TAO/CIAO/CCF/CCF/IDL2/Traversal/String.hpp64
-rw-r--r--TAO/CIAO/CIAO_DAnCE.mwc8
-rw-r--r--TAO/CIAO/CIAO_TAO.mwc29
-rw-r--r--TAO/CIAO/CIAO_TAO_DAnCE.mwc24
-rw-r--r--TAO/CIAO/DAnCE/Interfaces/ExecutionManager_stub_export.h54
-rw-r--r--TAO/CIAO/DAnCE/Interfaces/NodeManager_stub_export.h54
-rw-r--r--TAO/CIAO/DAnCE/Interfaces/NodeManager_svnt_export.h54
-rw-r--r--TAO/CIAO/DAnCE/NodeApplication/NoOp_Configurator.cpp39
-rw-r--r--TAO/CIAO/DAnCE/NodeApplication/NoOp_Configurator_export.h54
-rw-r--r--TAO/CIAO/DAnCE/NodeApplication/NodeApp_Configurator.cpp3
-rw-r--r--TAO/CIAO/DAnCE/NodeApplication/NodeApp_Configurator.h90
-rw-r--r--TAO/CIAO/DAnCE/NodeApplication/RTConfig_Manager.h139
-rw-r--r--TAO/CIAO/DAnCE/NodeApplication/RTConfig_Manager.inl13
-rw-r--r--TAO/CIAO/DAnCE/NodeApplication/RTNA_Configurator_Export.h54
-rw-r--r--TAO/CIAO/DAnCE/NodeManager/BaseMonitor.h63
-rw-r--r--TAO/CIAO/DAnCE/NodeManager/MonitorCB.h74
-rw-r--r--TAO/CIAO/DAnCE/RepositoryManager/HTTP_Client.cpp59
-rw-r--r--TAO/CIAO/DAnCE/RepositoryManager/HTTP_Client.h72
-rw-r--r--TAO/CIAO/DAnCE/RepositoryManager/HTTP_Handler.h86
-rw-r--r--TAO/CIAO/DAnCE/RepositoryManager/Options.cpp111
-rw-r--r--TAO/CIAO/DAnCE/RepositoryManager/Options.h78
-rw-r--r--TAO/CIAO/DAnCE/RepositoryManager/PC_Updater_T.h40
-rw-r--r--TAO/CIAO/DAnCE/RepositoryManager/ZIP_Wrapper.cpp299
-rw-r--r--TAO/CIAO/DAnCE/RepositoryManager/ZIP_Wrapper.h86
-rw-r--r--TAO/CIAO/DAnCE/TargetManager/Deployment_Configuration.cpp152
-rw-r--r--TAO/CIAO/DAnCE/TargetManager/TargetManager.cidl28
-rw-r--r--TAO/CIAO/DAnCE/TargetManager/TargetManager_exec_export.h54
-rw-r--r--TAO/CIAO/DAnCE/TargetManager/TargetManager_stub_export.h54
-rw-r--r--TAO/CIAO/DAnCE/TargetManager/TargetManager_svnt_export.h54
-rw-r--r--TAO/CIAO/DAnCE/TargetManager/descriptors/NodeDetails.dat2
-rw-r--r--TAO/CIAO/DAnCE/TargetManager/descriptors/NodeManagerMap.dat2
-rw-r--r--TAO/CIAO/DAnCE/TargetManager/descriptors/run_test_TargetManager.pl160
-rw-r--r--TAO/CIAO/RACE/Controller/Component/Controller.cidl28
-rw-r--r--TAO/CIAO/RACE/Controller/Component/Controller.idl64
-rw-r--r--TAO/CIAO/RACE/Controller/Component/Controller.mpc64
-rw-r--r--TAO/CIAO/RACE/Controller/Component/Controller_exec.cpp171
-rw-r--r--TAO/CIAO/RACE/Controller/Component/Controller_exec.h128
-rw-r--r--TAO/CIAO/RACE/Controller/Component/Controller_exec_export.h54
-rw-r--r--TAO/CIAO/RACE/Controller/Component/Controller_stub_export.h54
-rw-r--r--TAO/CIAO/RACE/Controller/Component/Controller_svnt_export.h54
-rw-r--r--TAO/CIAO/ciao/Target_Data.idl36
-rw-r--r--TAO/CIAO/ciaosvcs/Events/CIAO_EventService_Factory_impl.cpp90
-rw-r--r--TAO/CIAO/ciaosvcs/Events/CIAO_EventService_Factory_impl.h78
-rw-r--r--TAO/CIAO/ciaosvcs/Events/CIAO_Events.mpc20
-rw-r--r--TAO/CIAO/ciaosvcs/Events/CIAO_Events_Base/CIAO_EventServiceBase.cpp23
-rw-r--r--TAO/CIAO/ciaosvcs/Events/CIAO_Events_Base/CIAO_EventServiceBase.h139
-rw-r--r--TAO/CIAO/ciaosvcs/Events/CIAO_Events_Base/CIAO_Events_Base.mpc26
-rw-r--r--TAO/CIAO/ciaosvcs/Events/CIAO_Events_Base/CIAO_Events_Export.h53
-rw-r--r--TAO/CIAO/ciaosvcs/Events/CIAO_Events_Export.h53
-rw-r--r--TAO/CIAO/ciaosvcs/Events/CIAO_RTEC/CIAO_RTEVENT_Export.h58
-rw-r--r--TAO/CIAO/ciaosvcs/Events/CIAO_RTEC/CIAO_RTEvent.cpp624
-rw-r--r--TAO/CIAO/ciaosvcs/Events/CIAO_RTEC/CIAO_RTEvent.mpc25
-rw-r--r--TAO/CIAO/docs/imgs/dance_arch.jpgbin0 -> 70526 bytes
-rw-r--r--TAO/CIAO/docs/imgs/dance_arch.vsdbin0 -> 100352 bytes
-rw-r--r--TAO/CIAO/docs/imgs/static_dance_arch.jpgbin0 -> 58112 bytes
-rw-r--r--TAO/CIAO/docs/imgs/static_dance_arch.vsdbin0 -> 86528 bytes
-rw-r--r--TAO/CIAO/docs/imgs/static_dance_impl.jpgbin0 -> 56080 bytes
-rw-r--r--TAO/CIAO/docs/imgs/static_dance_impl.vsdbin0 -> 101888 bytes
-rw-r--r--TAO/CIAO/docs/schema/CIAOEvents.xsd112
-rw-r--r--TAO/CIAO/docs/static_dance.html214
-rw-r--r--TAO/CIAO/docs/tutorials/CoSMIC/01.html125
-rw-r--r--TAO/CIAO/docs/tutorials/CoSMIC/02.html422
-rw-r--r--TAO/CIAO/docs/tutorials/CoSMIC/03.html68
-rw-r--r--TAO/CIAO/docs/tutorials/CoSMIC/04.html57
-rw-r--r--TAO/CIAO/docs/tutorials/CoSMIC/Icons/AddConnMode.gifbin0 -> 106 bytes
-rw-r--r--TAO/CIAO/docs/tutorials/CoSMIC/Icons/SetMode.gifbin0 -> 125 bytes
-rw-r--r--TAO/CIAO/docs/tutorials/CoSMIC/Images/fig1.jpgbin0 -> 13971 bytes
-rw-r--r--TAO/CIAO/docs/tutorials/CoSMIC/Images/fig10.jpgbin0 -> 46474 bytes
-rw-r--r--TAO/CIAO/docs/tutorials/CoSMIC/Images/fig11.jpgbin0 -> 35787 bytes
-rw-r--r--TAO/CIAO/docs/tutorials/CoSMIC/Images/fig12.jpgbin0 -> 37716 bytes
-rw-r--r--TAO/CIAO/docs/tutorials/CoSMIC/Images/fig2.jpgbin0 -> 91314 bytes
-rw-r--r--TAO/CIAO/docs/tutorials/CoSMIC/Images/fig3.jpgbin0 -> 23857 bytes
-rw-r--r--TAO/CIAO/docs/tutorials/CoSMIC/Images/fig4.jpgbin0 -> 30686 bytes
-rw-r--r--TAO/CIAO/docs/tutorials/CoSMIC/Images/fig5.jpgbin0 -> 38395 bytes
-rw-r--r--TAO/CIAO/docs/tutorials/CoSMIC/Images/fig6.jpgbin0 -> 92958 bytes
-rw-r--r--TAO/CIAO/docs/tutorials/CoSMIC/Images/fig7.jpgbin0 -> 43408 bytes
-rw-r--r--TAO/CIAO/docs/tutorials/CoSMIC/Images/fig8.jpgbin0 -> 36874 bytes
-rw-r--r--TAO/CIAO/docs/tutorials/CoSMIC/Images/fig9.jpgbin0 -> 28539 bytes
-rw-r--r--TAO/CIAO/docs/tutorials/CoSMIC/Model/Quoter.xme2003
-rw-r--r--TAO/CIAO/docs/tutorials/CoSMIC/index.html135
-rw-r--r--TAO/CIAO/examples/Hello/ReDaC-Usage.html308
-rw-r--r--TAO/CIAO/examples/Hello/descriptors_RTCCM/NodeManagerMap.dat2
-rw-r--r--TAO/CIAO/examples/Hello/descriptors_RTCCM/RTsvc.conf5
-rw-r--r--TAO/CIAO/examples/Hello/descriptors_RTCCM/input.csr70
-rw-r--r--TAO/CIAO/examples/Hello/descriptors_RTCCM/rt-config-example.cdp215
-rw-r--r--TAO/CIAO/examples/Hello/descriptors_RTCCM/rt-config-example.csr75
-rw-r--r--TAO/CIAO/examples/Hello/descriptors_RTCCM/rt-example.cdp265
-rw-r--r--TAO/CIAO/examples/Hello/descriptors_RTCCM/rt_run_test.pl163
-rw-r--r--TAO/CIAO/examples/Hello/descriptors_ReDaC/deploymentplan.cdp222
-rw-r--r--TAO/CIAO/examples/Hello/descriptors_ReDaC/deploymentplan_add.cdp267
-rw-r--r--TAO/CIAO/examples/Hello/descriptors_ReDaC/deploymentplan_remove.cdp223
-rw-r--r--TAO/CIAO/examples/Hello/descriptors_events/ciao-events-example-with-filters.ced37
-rw-r--r--TAO/CIAO/examples/Hello/descriptors_events/ciao-events-example.ced21
-rw-r--r--TAO/CIAO/examples/Hello/descriptors_events/flattened_deploymentplan_events.cdp260
-rw-r--r--TAO/CIAO/examples/Hello/descriptors_events/flattened_deploymentplan_with_filters.cdp278
-rw-r--r--TAO/CIAO/examples/Hello/descriptors_naming/deploymentplan_naming.cdp240
-rw-r--r--TAO/CIAO/examples/Hello/descriptors_shared_components/deploymentplan.cdp224
-rw-r--r--TAO/CIAO/examples/Hello/descriptors_shared_components/deploymentplan_shared_components.cdp229
-rw-r--r--TAO/CIAO/tests/Bug_2130_Regression/Logs/PROBLEM-REPORT-FORM93
-rw-r--r--TAO/CIAO/tests/Bug_2130_Regression/SEC_CheckPoint/TSEC_CheckPoint.cidl17
-rw-r--r--TAO/CIAO/tests/Bug_2130_Regression/SEC_CheckPoint/TSEC_CheckPoint.idl27
-rw-r--r--TAO/CIAO/tests/Bug_2130_Regression/SEC_CheckPoint/TSEC_CheckPoint.mpc91
-rw-r--r--TAO/CIAO/tests/Bug_2130_Regression/SEC_CheckPoint/TSEC_CheckPointEI.idl19
-rw-r--r--TAO/CIAO/tests/Bug_2130_Regression/SEC_CheckPoint/TSEC_CheckPoint_exec.cpp635
-rw-r--r--TAO/CIAO/tests/Bug_2130_Regression/SEC_CheckPoint/TSEC_CheckPoint_exec.h278
-rw-r--r--TAO/CIAO/tests/Bug_2130_Regression/SEC_CheckPoint/TSEC_CheckPoint_exec_export.h50
-rw-r--r--TAO/CIAO/tests/Bug_2130_Regression/SEC_CheckPoint/TSEC_CheckPoint_stub_export.h50
-rw-r--r--TAO/CIAO/tests/Bug_2130_Regression/SEC_CheckPoint/TSEC_CheckPoint_svnt_export.h50
-rw-r--r--TAO/CIAO/tests/Bug_2130_Regression/SEC_CheckPoint/controller.cpp203
-rw-r--r--TAO/CIAO/tests/Bug_2130_Regression/descriptors/DeploymentPlan.cdp117
-rw-r--r--TAO/CIAO/tests/Bug_2130_Regression/descriptors/TestNodeManagerMap.dat2
-rw-r--r--TAO/CIAO/tests/Bug_2130_Regression/descriptors/rt-config-example.csr30
-rw-r--r--TAO/CIAO/tests/Bug_2130_Regression/descriptors/run_test.pl177
-rw-r--r--TAO/CIAO/tests/Bug_2130_Regression/interfaces/ENW.idl52
-rw-r--r--TAO/CIAO/tests/Bug_2130_Regression/interfaces/ENW.mpc32
-rw-r--r--TAO/CIAO/tests/Bug_2130_Regression/interfaces/ENW_stub_export.h50
-rw-r--r--TAO/CIAO/tests/Bug_2130_Regression/interfaces/ENW_svnt_export.h50
-rw-r--r--TAO/ChangeLogs/ChangeLog-05b8407
-rw-r--r--TAO/TAO_ACE.mwc21
-rw-r--r--TAO/examples/Borland/ChatClient.mpc17
-rw-r--r--TAO/examples/CSD_Strategy/ThreadPool/CSD_Test_ThreadPool.mpc25
-rw-r--r--TAO/examples/CSD_Strategy/ThreadPool/Foo_i.h48
-rw-r--r--TAO/examples/CSD_Strategy/ThreadPool/ServerApp.cpp240
-rwxr-xr-xTAO/examples/CSD_Strategy/ThreadPool/run_test.pl61
-rw-r--r--TAO/examples/CSD_Strategy/ThreadPool2/CSD_Test_ThreadPool2.mpc26
-rw-r--r--TAO/examples/CSD_Strategy/ThreadPool2/Foo_i.h52
-rw-r--r--TAO/examples/CSD_Strategy/ThreadPool2/ServerApp.cpp232
-rwxr-xr-xTAO/examples/CSD_Strategy/ThreadPool2/run_test.pl82
-rw-r--r--TAO/examples/CSD_Strategy/ThreadPool3/CSD_Test_ThreadPool3.mpc26
-rw-r--r--TAO/examples/CSD_Strategy/ThreadPool3/Foo_i.h39
-rw-r--r--TAO/examples/CSD_Strategy/ThreadPool3/ServerApp.cpp272
-rwxr-xr-xTAO/examples/CSD_Strategy/ThreadPool3/run_test.pl61
-rw-r--r--TAO/examples/CSD_Strategy/ThreadPool4/CSD_Test_ThreadPool4.mpc15
-rw-r--r--TAO/examples/CSD_Strategy/ThreadPool4/Callback_i.h26
-rw-r--r--TAO/examples/CSD_Strategy/ThreadPool4/Foo.idl73
-rw-r--r--TAO/examples/CSD_Strategy/ThreadPool4/Foo_i.cpp302
-rw-r--r--TAO/examples/CSD_Strategy/ThreadPool4/Foo_i.h157
-rw-r--r--TAO/examples/CSD_Strategy/ThreadPool4/ServerApp.cpp360
-rwxr-xr-xTAO/examples/CSD_Strategy/ThreadPool4/run_test.pl45
-rw-r--r--TAO/examples/CSD_Strategy/ThreadPool5/CSD_Test_ThreadPool5.mpc37
-rw-r--r--TAO/examples/CSD_Strategy/ThreadPool5/Callback_i.h25
-rw-r--r--TAO/examples/CSD_Strategy/ThreadPool5/ClientApp.cpp229
-rw-r--r--TAO/examples/CSD_Strategy/ThreadPool5/Foo.idl73
-rw-r--r--TAO/examples/CSD_Strategy/ThreadPool5/Foo_i.cpp313
-rw-r--r--TAO/examples/CSD_Strategy/ThreadPool5/Foo_i.h165
-rw-r--r--TAO/examples/CSD_Strategy/ThreadPool5/ServerApp.cpp357
-rwxr-xr-xTAO/examples/CSD_Strategy/ThreadPool5/run_test.pl135
-rw-r--r--TAO/examples/CSD_Strategy/ThreadPool6/CSD_Test_ThreadPool6.mpc26
-rw-r--r--TAO/examples/CSD_Strategy/ThreadPool6/ServerApp.cpp243
-rwxr-xr-xTAO/examples/CSD_Strategy/ThreadPool6/run_test.pl60
-rw-r--r--TAO/m4/tao.m488
-rw-r--r--TAO/orbsvcs/Mobility_Service/GTP.idl2
-rw-r--r--TAO/orbsvcs/orbsvcs/Concurrency/concurrency_serv_export.h40
-rw-r--r--TAO/orbsvcs/orbsvcs/Concurrency/concurrency_skel_export.h40
-rw-r--r--TAO/orbsvcs/orbsvcs/LoadBalancing/README35
-rw-r--r--TAO/orbsvcs/orbsvcs/Log/rteventlog_serv_export.h37
-rw-r--r--TAO/orbsvcs/orbsvcs/Log/rteventlog_skel_export.h37
-rw-r--r--TAO/orbsvcs/orbsvcs/Property/property_serv_export.h40
-rw-r--r--TAO/orbsvcs/orbsvcs/Property/property_skel_export.h40
-rw-r--r--TAO/orbsvcs/orbsvcs/TAO_CosConcurrency_Serv.pc.in11
-rw-r--r--TAO/orbsvcs/orbsvcs/TAO_CosConcurrency_Skel.pc.in11
-rw-r--r--TAO/orbsvcs/orbsvcs/TAO_CosProperty_Serv.pc.in11
-rw-r--r--TAO/orbsvcs/orbsvcs/TAO_CosProperty_Skel.pc.in11
-rw-r--r--TAO/orbsvcs/orbsvcs/TAO_RTEvent.pc.in11
-rw-r--r--TAO/orbsvcs/orbsvcs/TAO_RTEventLogAdmin.pc.in11
-rw-r--r--TAO/orbsvcs/orbsvcs/TAO_RTEventLogAdmin_Serv.pc.in11
-rw-r--r--TAO/orbsvcs/orbsvcs/TAO_RTEventLogAdmin_Skel.pc.in11
-rw-r--r--TAO/orbsvcs/orbsvcs/TAO_RTEvent_Serv.pc.in11
-rw-r--r--TAO/orbsvcs/orbsvcs/TAO_RTEvent_Skel.pc.in11
-rw-r--r--TAO/orbsvcs/tests/Bug_2074_Regression/Bug_2074_Regression.mpc10
-rw-r--r--TAO/orbsvcs/tests/Bug_2074_Regression/ORB_Task.cpp64
-rw-r--r--TAO/orbsvcs/tests/Bug_2074_Regression/ORB_Task.h25
-rwxr-xr-xTAO/orbsvcs/tests/Bug_2074_Regression/run_test.pl27
-rw-r--r--TAO/orbsvcs/tests/Bug_2074_Regression/test.cpp22
-rw-r--r--TAO/orbsvcs/tests/Bug_2285_Regression/Bug_2285_Regression.mpc67
-rw-r--r--TAO/orbsvcs/tests/Bug_2285_Regression/Hello.cpp74
-rw-r--r--TAO/orbsvcs/tests/Bug_2285_Regression/Hello.h63
-rw-r--r--TAO/orbsvcs/tests/Bug_2285_Regression/README96
-rw-r--r--TAO/orbsvcs/tests/Bug_2285_Regression/ServerORBInitializer.cpp52
-rw-r--r--TAO/orbsvcs/tests/Bug_2285_Regression/ServerORBInitializer.h51
-rw-r--r--TAO/orbsvcs/tests/Bug_2285_Regression/ServerORBInitializer2.cpp52
-rw-r--r--TAO/orbsvcs/tests/Bug_2285_Regression/ServerORBInitializer2.h51
-rw-r--r--TAO/orbsvcs/tests/Bug_2285_Regression/ServerRequest_Interceptor.cpp145
-rw-r--r--TAO/orbsvcs/tests/Bug_2285_Regression/ServerRequest_Interceptor.h91
-rw-r--r--TAO/orbsvcs/tests/Bug_2285_Regression/ServerRequest_Interceptor2.cpp240
-rw-r--r--TAO/orbsvcs/tests/Bug_2285_Regression/ServerRequest_Interceptor2.h96
-rw-r--r--TAO/orbsvcs/tests/Bug_2285_Regression/Test.idl43
-rw-r--r--TAO/orbsvcs/tests/Bug_2285_Regression/client.cpp137
-rw-r--r--TAO/orbsvcs/tests/Bug_2285_Regression/client2.cpp215
-rwxr-xr-xTAO/orbsvcs/tests/Bug_2285_Regression/run_test.pl49
-rwxr-xr-xTAO/orbsvcs/tests/Bug_2285_Regression/run_test2.pl70
-rw-r--r--TAO/orbsvcs/tests/Bug_2285_Regression/server.cpp241
-rw-r--r--TAO/orbsvcs/tests/Bug_2285_Regression/server2.cpp175
-rw-r--r--TAO/orbsvcs/tests/Bug_2287_Regression/Bug_2287_Regression.mpc39
-rw-r--r--TAO/orbsvcs/tests/Bug_2287_Regression/Hello.cpp32
-rw-r--r--TAO/orbsvcs/tests/Bug_2287_Regression/Hello.h45
-rw-r--r--TAO/orbsvcs/tests/Bug_2287_Regression/README32
-rw-r--r--TAO/orbsvcs/tests/Bug_2287_Regression/ServerORBInitializer2.cpp52
-rw-r--r--TAO/orbsvcs/tests/Bug_2287_Regression/ServerORBInitializer2.h51
-rw-r--r--TAO/orbsvcs/tests/Bug_2287_Regression/ServerRequest_Interceptor2.cpp176
-rw-r--r--TAO/orbsvcs/tests/Bug_2287_Regression/ServerRequest_Interceptor2.h98
-rw-r--r--TAO/orbsvcs/tests/Bug_2287_Regression/Test.idl24
-rw-r--r--TAO/orbsvcs/tests/Bug_2287_Regression/client.cpp110
-rwxr-xr-xTAO/orbsvcs/tests/Bug_2287_Regression/run_test.pl49
-rw-r--r--TAO/orbsvcs/tests/Bug_2287_Regression/server.cpp243
-rw-r--r--TAO/orbsvcs/tests/Bug_2316_Regression/Bug_2316_Regression.mpc36
-rw-r--r--TAO/orbsvcs/tests/Bug_2316_Regression/README26
-rw-r--r--TAO/orbsvcs/tests/Bug_2316_Regression/Test.idl12
-rw-r--r--TAO/orbsvcs/tests/Bug_2316_Regression/Test_impl.cpp19
-rw-r--r--TAO/orbsvcs/tests/Bug_2316_Regression/Test_impl.h19
-rw-r--r--TAO/orbsvcs/tests/Bug_2316_Regression/client.cpp55
-rwxr-xr-xTAO/orbsvcs/tests/Bug_2316_Regression/run_test.pl42
-rw-r--r--TAO/orbsvcs/tests/Bug_2316_Regression/server.cpp38
-rw-r--r--TAO/orbsvcs/tests/Bug_2316_Regression/svc.conf4
-rw-r--r--TAO/orbsvcs/tests/Bug_2377_Regression/Bug_2377_Regression.mpc9
-rw-r--r--TAO/orbsvcs/tests/Bug_2377_Regression/Hello.cpp340
-rw-r--r--TAO/orbsvcs/tests/Bug_2377_Regression/Hello.idl9
-rwxr-xr-xTAO/orbsvcs/tests/Bug_2377_Regression/run_test.pl32
-rw-r--r--TAO/orbsvcs/tests/Bug_2377_Regression/svc.conf5
-rw-r--r--TAO/orbsvcs/tests/InterfaceRepo/IFR_Inheritance_Test/IFR_Inheritance_Test.idl33
-rw-r--r--TAO/orbsvcs/tests/InterfaceRepo/IFR_Inheritance_Test/IFR_Inheritance_Test.mpc11
-rw-r--r--TAO/orbsvcs/tests/InterfaceRepo/IFR_Inheritance_Test/README75
-rwxr-xr-xTAO/orbsvcs/tests/InterfaceRepo/IFR_Inheritance_Test/run_test.pl156
-rw-r--r--TAO/orbsvcs/tests/LoadBalancing/GenericFactory/Application_Controlled/README11
-rw-r--r--TAO/orbsvcs/tests/LoadBalancing/GenericFactory/Infrastructure_Controlled/README8
-rw-r--r--TAO/orbsvcs/tests/Notify/lib/common.cpp56
-rw-r--r--TAO/orbsvcs/tests/Notify/lib/common.h36
-rwxr-xr-xTAO/orbsvcs/tests/Security/MT_SSLIOP/run_test_harsh.pl64
-rw-r--r--TAO/orbsvcs/tests/Security/MT_SSLIOP/run_test_heavy.pl65
-rw-r--r--TAO/performance-tests/CSD_Strategy/TestApps/ServerApp.cpp430
-rwxr-xr-xTAO/performance-tests/CSD_Strategy/TestApps/run_test.pl244
-rw-r--r--TAO/performance-tests/CSD_Strategy/TestInf/ClientTask.cpp117
-rw-r--r--TAO/performance-tests/CSD_Strategy/TestInf/csd_pt_testinf.mpc38
-rw-r--r--TAO/performance-tests/CSD_Strategy/TestServant/Foo_i.h45
-rw-r--r--TAO/tao/CSD_Framework.mpc38
-rw-r--r--TAO/tao/CSD_Framework/CSD_FW_Server_Request_Wrapper.cpp465
-rw-r--r--TAO/tao/CSD_Framework/CSD_FW_Server_Request_Wrapper.h131
-rw-r--r--TAO/tao/CSD_Framework/CSD_FW_Server_Request_Wrapper.inl46
-rw-r--r--TAO/tao/CSD_Framework/CSD_Framework.pidl77
-rw-r--r--TAO/tao/CSD_Framework/CSD_FrameworkA.cpp76
-rw-r--r--TAO/tao/CSD_Framework/CSD_FrameworkA.h68
-rw-r--r--TAO/tao/CSD_Framework/CSD_FrameworkC.h316
-rw-r--r--TAO/tao/CSD_Framework/CSD_Framework_Loader.cpp30
-rw-r--r--TAO/tao/CSD_Framework/CSD_Framework_Loader.h47
-rw-r--r--TAO/tao/CSD_Framework/CSD_ORBInitializer.cpp36
-rw-r--r--TAO/tao/CSD_Framework/CSD_ORBInitializer.h70
-rw-r--r--TAO/tao/CSD_Framework/CSD_Object_Adapter.cpp45
-rw-r--r--TAO/tao/CSD_Framework/CSD_Object_Adapter.h57
-rw-r--r--TAO/tao/CSD_Framework/CSD_Object_Adapter_Factory.cpp96
-rw-r--r--TAO/tao/CSD_Framework/CSD_Object_Adapter_Factory.h49
-rw-r--r--TAO/tao/CSD_Framework/CSD_POA.inl14
-rw-r--r--TAO/tao/CSD_Framework/CSD_Strategy_Base.cpp132
-rw-r--r--TAO/tao/CSD_Framework/CSD_Strategy_Base.h174
-rw-r--r--TAO/tao/CSD_Framework/CSD_Strategy_Base.inl144
-rw-r--r--TAO/tao/CSD_Framework/CSD_Strategy_Proxy.cpp50
-rw-r--r--TAO/tao/CSD_Framework/CSD_Strategy_Proxy.h114
-rw-r--r--TAO/tao/CSD_Framework/CSD_Strategy_Proxy.inl104
-rw-r--r--TAO/tao/CSD_Framework/CSD_Strategy_Repository.cpp117
-rw-r--r--TAO/tao/CSD_Framework/CSD_Strategy_Repository.h78
-rw-r--r--TAO/tao/CSD_Framework/diffs/CSD_Framework.diff84
-rw-r--r--TAO/tao/CSD_ThreadPool/CSD_TP_Cancel_Visitor.cpp48
-rw-r--r--TAO/tao/CSD_ThreadPool/CSD_TP_Cancel_Visitor.h87
-rw-r--r--TAO/tao/CSD_ThreadPool/CSD_TP_Cancel_Visitor.inl32
-rw-r--r--TAO/tao/CSD_ThreadPool/CSD_TP_Collocated_Asynch_Request.cpp60
-rw-r--r--TAO/tao/CSD_ThreadPool/CSD_TP_Collocated_Asynch_Request.h90
-rw-r--r--TAO/tao/CSD_ThreadPool/CSD_TP_Collocated_Asynch_Request.inl24
-rw-r--r--TAO/tao/CSD_ThreadPool/CSD_TP_Collocated_Synch_Request.cpp56
-rw-r--r--TAO/tao/CSD_ThreadPool/CSD_TP_Collocated_Synch_Request.h109
-rw-r--r--TAO/tao/CSD_ThreadPool/CSD_TP_Collocated_Synch_Request.inl59
-rw-r--r--TAO/tao/CSD_ThreadPool/CSD_TP_Collocated_Synch_With_Server_Request.cpp72
-rw-r--r--TAO/tao/CSD_ThreadPool/CSD_TP_Collocated_Synch_With_Server_Request.h110
-rw-r--r--TAO/tao/CSD_ThreadPool/CSD_TP_Collocated_Synch_With_Server_Request.inl32
-rw-r--r--TAO/tao/CSD_ThreadPool/CSD_TP_Corba_Request.cpp19
-rw-r--r--TAO/tao/CSD_ThreadPool/CSD_TP_Corba_Request.h103
-rw-r--r--TAO/tao/CSD_ThreadPool/CSD_TP_Corba_Request.inl45
-rw-r--r--TAO/tao/CSD_ThreadPool/CSD_TP_Custom_Asynch_Request.cpp52
-rw-r--r--TAO/tao/CSD_ThreadPool/CSD_TP_Custom_Asynch_Request.h79
-rw-r--r--TAO/tao/CSD_ThreadPool/CSD_TP_Custom_Asynch_Request.inl15
-rw-r--r--TAO/tao/CSD_ThreadPool/CSD_TP_Custom_Request.cpp19
-rw-r--r--TAO/tao/CSD_ThreadPool/CSD_TP_Custom_Request.h81
-rw-r--r--TAO/tao/CSD_ThreadPool/CSD_TP_Custom_Request.inl48
-rw-r--r--TAO/tao/CSD_ThreadPool/CSD_TP_Custom_Request_Operation.cpp19
-rw-r--r--TAO/tao/CSD_ThreadPool/CSD_TP_Custom_Request_Operation.h99
-rw-r--r--TAO/tao/CSD_ThreadPool/CSD_TP_Custom_Request_Operation.inl51
-rw-r--r--TAO/tao/CSD_ThreadPool/CSD_TP_Custom_Synch_Request.cpp35
-rw-r--r--TAO/tao/CSD_ThreadPool/CSD_TP_Custom_Synch_Request.h92
-rw-r--r--TAO/tao/CSD_ThreadPool/CSD_TP_Custom_Synch_Request.inl23
-rw-r--r--TAO/tao/CSD_ThreadPool/CSD_TP_Dispatchable_Visitor.cpp53
-rw-r--r--TAO/tao/CSD_ThreadPool/CSD_TP_Dispatchable_Visitor.h94
-rw-r--r--TAO/tao/CSD_ThreadPool/CSD_TP_Dispatchable_Visitor.inl31
-rw-r--r--TAO/tao/CSD_ThreadPool/CSD_TP_Queue.cpp127
-rw-r--r--TAO/tao/CSD_ThreadPool/CSD_TP_Queue.h101
-rw-r--r--TAO/tao/CSD_ThreadPool/CSD_TP_Queue.inl29
-rw-r--r--TAO/tao/CSD_ThreadPool/CSD_TP_Queue_Visitor.cpp19
-rw-r--r--TAO/tao/CSD_ThreadPool/CSD_TP_Queue_Visitor.h79
-rw-r--r--TAO/tao/CSD_ThreadPool/CSD_TP_Queue_Visitor.inl12
-rw-r--r--TAO/tao/CSD_ThreadPool/CSD_TP_Remote_Request.cpp60
-rw-r--r--TAO/tao/CSD_ThreadPool/CSD_TP_Remote_Request.h102
-rw-r--r--TAO/tao/CSD_ThreadPool/CSD_TP_Remote_Request.inl24
-rw-r--r--TAO/tao/CSD_ThreadPool/CSD_TP_Request.cpp27
-rw-r--r--TAO/tao/CSD_ThreadPool/CSD_TP_Request.h136
-rw-r--r--TAO/tao/CSD_ThreadPool/CSD_TP_Request.inl111
-rw-r--r--TAO/tao/CSD_ThreadPool/CSD_TP_Servant_State.cpp19
-rw-r--r--TAO/tao/CSD_ThreadPool/CSD_TP_Servant_State.h92
-rw-r--r--TAO/tao/CSD_ThreadPool/CSD_TP_Servant_State.inl29
-rw-r--r--TAO/tao/CSD_ThreadPool/CSD_TP_Servant_State_Map.cpp11
-rw-r--r--TAO/tao/CSD_ThreadPool/CSD_TP_Servant_State_Map.h95
-rw-r--r--TAO/tao/CSD_ThreadPool/CSD_TP_Servant_State_Map.inl70
-rw-r--r--TAO/tao/CSD_ThreadPool/CSD_TP_Strategy.cpp289
-rw-r--r--TAO/tao/CSD_ThreadPool/CSD_TP_Strategy.h210
-rw-r--r--TAO/tao/CSD_ThreadPool/CSD_TP_Strategy.inl35
-rw-r--r--TAO/tao/CSD_ThreadPool/CSD_TP_Strategy_Factory.cpp154
-rw-r--r--TAO/tao/CSD_ThreadPool/CSD_TP_Strategy_Factory.h65
-rw-r--r--TAO/tao/CSD_ThreadPool/CSD_TP_Synch_Helper.cpp11
-rw-r--r--TAO/tao/CSD_ThreadPool/CSD_TP_Synch_Helper.h110
-rw-r--r--TAO/tao/CSD_ThreadPool/CSD_TP_Synch_Helper.inl55
-rw-r--r--TAO/tao/CSD_ThreadPool/CSD_TP_Task.cpp313
-rw-r--r--TAO/tao/CSD_ThreadPool/CSD_TP_Task.h164
-rw-r--r--TAO/tao/CSD_ThreadPool/CSD_TP_Task.inl22
-rw-r--r--TAO/tao/CSD_ThreadPool/CSD_ThreadPool.cpp23
-rw-r--r--TAO/tao/CSD_ThreadPool/CSD_ThreadPool.h65
-rw-r--r--TAO/tao/CodecFactory/IOP_Codec_includeA.h44
-rw-r--r--TAO/tao/IORInterceptor/IORInterceptor_Details.cpp23
-rw-r--r--TAO/tao/IORInterceptor/IORInterceptor_Details.h63
-rwxr-xr-xTAO/tao/Incoming_Message_Stack.h89
-rw-r--r--TAO/tao/Intrusive_Ref_Count_Base_T.cpp21
-rw-r--r--TAO/tao/Intrusive_Ref_Count_Base_T.h80
-rw-r--r--TAO/tao/Intrusive_Ref_Count_Base_T.inl38
-rw-r--r--TAO/tao/Intrusive_Ref_Count_Handle_T.cpp12
-rw-r--r--TAO/tao/Intrusive_Ref_Count_Handle_T.h159
-rw-r--r--TAO/tao/Intrusive_Ref_Count_Handle_T.inl162
-rw-r--r--TAO/tao/PI/ClientRequestDetails.h84
-rw-r--r--TAO/tao/PI/ClientRequestDetails.inl27
-rw-r--r--TAO/tao/PI/ClientRequestInfoA.h65
-rw-r--r--TAO/tao/PI/ClientRequestInterceptorA.h64
-rw-r--r--TAO/tao/PI/InterceptorA.h62
-rw-r--r--TAO/tao/PI/ORBInitializerA.h62
-rw-r--r--TAO/tao/PI/PIForwardRequestA.h70
-rw-r--r--TAO/tao/PI/PI_ORBInitializer.cpp107
-rw-r--r--TAO/tao/PI/PI_ORBInitializer.h84
-rw-r--r--TAO/tao/PI/PI_PolicyFactory.cpp48
-rw-r--r--TAO/tao/PI/PI_PolicyFactory.h52
-rw-r--r--TAO/tao/PI/PolicyFactoryA.h62
-rw-r--r--TAO/tao/PI/ProcessingModePolicy.cpp59
-rw-r--r--TAO/tao/PI/ProcessingModePolicy.h72
-rw-r--r--TAO/tao/PI/ProcessingModePolicy.pidl42
-rw-r--r--TAO/tao/PI/ProcessingModePolicyC.h263
-rw-r--r--TAO/tao/PI/ProcessingModePolicyS.h28
-rw-r--r--TAO/tao/PI/RequestInfoA.h67
-rw-r--r--TAO/tao/PI_Server/ServerRequestDetails.h83
-rw-r--r--TAO/tao/PI_Server/ServerRequestDetails.inl27
-rw-r--r--TAO/tao/PI_Server/ServerRequestInfoA.h65
-rw-r--r--TAO/tao/PI_Server/ServerRequestInterceptorA.h65
-rw-r--r--TAO/tao/PI_Server/diffs/ServerRequestInterceptor.diff24
-rw-r--r--TAO/tao/RTScheduling/RTScheduler_includeS.h28
-rw-r--r--TAO/tao/Strategies/OC_Endpoint_Selector_Factory.cpp67
-rw-r--r--TAO/tao/Strategies/OC_Endpoint_Selector_Factory.h87
-rw-r--r--TAO/tao/Strategies/Optimized_Connection_Endpoint_Selector.h80
-rw-r--r--TAO/tests/AlternateIIOP/svc.conf1
-rw-r--r--TAO/tests/BiDirectional_DelayedUpcall/BiDir_DelayedUpcall.mpc18
-rw-r--r--TAO/tests/BiDirectional_DelayedUpcall/README6
-rw-r--r--TAO/tests/BiDirectional_DelayedUpcall/client.cpp173
-rwxr-xr-xTAO/tests/BiDirectional_DelayedUpcall/run_test.pl48
-rw-r--r--TAO/tests/BiDirectional_DelayedUpcall/server.cpp164
-rw-r--r--TAO/tests/BiDirectional_DelayedUpcall/test.idl27
-rw-r--r--TAO/tests/BiDirectional_DelayedUpcall/test_i.cpp106
-rw-r--r--TAO/tests/BiDirectional_DelayedUpcall/test_i.h93
-rw-r--r--TAO/tests/BiDirectional_DelayedUpcall/test_i.i17
-rw-r--r--TAO/tests/Bug_1482_Regression/Bug_1482_Regression.mpc20
-rw-r--r--TAO/tests/Bug_1551_Regression/Bug_1551_Regression.mpc20
-rw-r--r--TAO/tests/Bug_1627_Regression/Bug_1627_Regression.mpc17
-rw-r--r--TAO/tests/Bug_1869_Regression/AMI.idl7
-rw-r--r--TAO/tests/Bug_1869_Regression/Bug_1869_Regression.mpc14
-rw-r--r--TAO/tests/Bug_1869_Regression/client.cpp93
-rw-r--r--TAO/tests/Bug_1869_Regression/run_test.pl40
-rw-r--r--TAO/tests/Bug_1869_Regression/server.cpp87
-rw-r--r--TAO/tests/Bug_2084_Regression/Bug_2084_Regression.mpc6
-rw-r--r--TAO/tests/Bug_2084_Regression/Client_Task.cpp100
-rw-r--r--TAO/tests/Bug_2084_Regression/Client_Task.h37
-rw-r--r--TAO/tests/Bug_2084_Regression/Collocated_Test.cpp127
-rw-r--r--TAO/tests/Bug_2084_Regression/EventNode.cpp60
-rw-r--r--TAO/tests/Bug_2084_Regression/EventNode.h38
-rw-r--r--TAO/tests/Bug_2084_Regression/Hello.cpp68
-rw-r--r--TAO/tests/Bug_2084_Regression/Hello.h38
-rw-r--r--TAO/tests/Bug_2084_Regression/Server_Task.cpp102
-rw-r--r--TAO/tests/Bug_2084_Regression/Server_Task.h48
-rw-r--r--TAO/tests/Bug_2084_Regression/Test.idl27
-rwxr-xr-xTAO/tests/Bug_2084_Regression/run_test.pl82
-rw-r--r--TAO/tests/Bug_2134_Regression/Bug_2134_Regression.mpc10
-rw-r--r--TAO/tests/Bug_2134_Regression/Hello.cpp105
-rw-r--r--TAO/tests/Bug_2134_Regression/Hello.idl7
-rw-r--r--TAO/tests/Bug_2134_Regression/README5
-rwxr-xr-xTAO/tests/Bug_2134_Regression/run_test.pl22
-rw-r--r--TAO/tests/Bug_2186_Regression/Bug_2186_Regression.mpc18
-rw-r--r--TAO/tests/Bug_2186_Regression/Hello.cpp45
-rw-r--r--TAO/tests/Bug_2186_Regression/Hello.h36
-rw-r--r--TAO/tests/Bug_2186_Regression/README60
-rw-r--r--TAO/tests/Bug_2186_Regression/Test.idl22
-rw-r--r--TAO/tests/Bug_2186_Regression/client.cpp132
-rwxr-xr-xTAO/tests/Bug_2186_Regression/run_test.pl63
-rw-r--r--TAO/tests/Bug_2186_Regression/server.conf2
-rw-r--r--TAO/tests/Bug_2186_Regression/server.cpp115
-rw-r--r--TAO/tests/Bug_2201_Regression/Bug_2201_Regression.mpc9
-rw-r--r--TAO/tests/Bug_2201_Regression/TestData.idl11
-rwxr-xr-xTAO/tests/Bug_2201_Regression/run_test.pl27
-rw-r--r--TAO/tests/Bug_2201_Regression/test.cpp32
-rw-r--r--TAO/tests/Bug_2289_Regression/Bug_2289_Regression.mpc21
-rw-r--r--TAO/tests/Bug_2289_Regression/MyInterfaceImpl.cpp20
-rw-r--r--TAO/tests/Bug_2289_Regression/MyInterfaceImpl.h21
-rw-r--r--TAO/tests/Bug_2289_Regression/README26
-rw-r--r--TAO/tests/Bug_2289_Regression/Test.idl8
-rw-r--r--TAO/tests/Bug_2289_Regression/client.cpp145
-rwxr-xr-xTAO/tests/Bug_2289_Regression/run_test.pl60
-rw-r--r--TAO/tests/Bug_2289_Regression/server.cpp142
-rw-r--r--TAO/tests/Bug_2319_Regression/Bug_2319_Regression.mpc8
-rw-r--r--TAO/tests/Bug_2319_Regression/Test.idl17
-rwxr-xr-xTAO/tests/Bug_2319_Regression/run_test.pl24
-rw-r--r--TAO/tests/Bug_2328_Regression/Bug_2328_Regression.mpc19
-rw-r--r--TAO/tests/Bug_2328_Regression/Hello.cpp26
-rw-r--r--TAO/tests/Bug_2328_Regression/Hello.h33
-rw-r--r--TAO/tests/Bug_2328_Regression/README16
-rw-r--r--TAO/tests/Bug_2328_Regression/Test.idl20
-rw-r--r--TAO/tests/Bug_2328_Regression/client.cpp89
-rwxr-xr-xTAO/tests/Bug_2328_Regression/run_test.pl49
-rw-r--r--TAO/tests/Bug_2328_Regression/server.cpp116
-rw-r--r--TAO/tests/Bug_2345_Regression/Bug_2345_Regression.mpc8
-rwxr-xr-xTAO/tests/Bug_2345_Regression/run_test.pl22
-rw-r--r--TAO/tests/Bug_2345_Regression/server.cpp41
-rw-r--r--TAO/tests/Bug_2349_Regression/Bug_2349_Regression.mpc17
-rwxr-xr-xTAO/tests/Bug_2349_Regression/run_test.pl49
-rwxr-xr-xTAO/tests/Bug_2375_Regression/Bug_2375_Regression.mpc8
-rwxr-xr-xTAO/tests/Bug_2375_Regression/README5
-rwxr-xr-xTAO/tests/Bug_2375_Regression/test.cpp11
-rwxr-xr-xTAO/tests/Bug_2375_Regression/test.idl5
-rw-r--r--TAO/tests/Bug_2399_Regression/Bug_2399_Regression.mpc11
-rw-r--r--TAO/tests/Bug_2399_Regression/README8
-rw-r--r--TAO/tests/Bug_2399_Regression/included.idl5
-rw-r--r--TAO/tests/Bug_2399_Regression/mytmp/included.idl3
-rw-r--r--TAO/tests/Bug_2399_Regression/test.cpp10
-rw-r--r--TAO/tests/Bug_2399_Regression/test.idl7
-rw-r--r--TAO/tests/Bug_2417_Regression/Bug_2417_Regression.mpc19
-rw-r--r--TAO/tests/Bug_2417_Regression/client.cpp77
-rw-r--r--TAO/tests/Bug_2417_Regression/publisher.idl10
-rw-r--r--TAO/tests/Bug_2417_Regression/publisher_impl.cpp165
-rw-r--r--TAO/tests/Bug_2417_Regression/publisher_impl.h37
-rwxr-xr-xTAO/tests/Bug_2417_Regression/run_test.pl54
-rw-r--r--TAO/tests/Bug_2417_Regression/server.cpp93
-rw-r--r--TAO/tests/Bug_2417_Regression/subscriber.idl7
-rw-r--r--TAO/tests/Bug_2417_Regression/subscriber_impl.cpp45
-rw-r--r--TAO/tests/Bug_2417_Regression/subscriber_impl.h34
-rw-r--r--TAO/tests/Bug_2419_Regression/Bug_2419_Regression.mpc8
-rw-r--r--TAO/tests/Bug_2419_Regression/README3
-rw-r--r--TAO/tests/Bug_2419_Regression/abstract_parent.idl6
-rw-r--r--TAO/tests/Bug_2419_Regression/client.cpp8
-rw-r--r--TAO/tests/Bug_2419_Regression/local_child.idl6
-rw-r--r--TAO/tests/Bug_2424_Regression/Bug_2424_Regression.mpc8
-rw-r--r--TAO/tests/Bug_2424_Regression/OneLineCosNaming.idl2
-rw-r--r--TAO/tests/Bug_2424_Regression/README5
-rw-r--r--TAO/tests/Bug_2424_Regression/client.cpp8
-rw-r--r--TAO/tests/Bug_2429_Regression/Bug_2429_Regression.mpc21
-rw-r--r--TAO/tests/Bug_2429_Regression/Child.idl8
-rw-r--r--TAO/tests/Bug_2429_Regression/ChildServant.cpp30
-rw-r--r--TAO/tests/Bug_2429_Regression/ChildServant.h24
-rw-r--r--TAO/tests/Bug_2429_Regression/Parent.idl8
-rw-r--r--TAO/tests/Bug_2429_Regression/README16
-rw-r--r--TAO/tests/Bug_2429_Regression/client.cpp185
-rwxr-xr-xTAO/tests/Bug_2429_Regression/run_test.pl44
-rw-r--r--TAO/tests/Bug_2429_Regression/server.cpp105
-rw-r--r--TAO/tests/Bug_2494_Regression/Bug_2494_Regression.mpc19
-rw-r--r--TAO/tests/Bug_2494_Regression/README34
-rw-r--r--TAO/tests/Bug_2494_Regression/client.cpp137
-rwxr-xr-xTAO/tests/Bug_2494_Regression/run_test.pl68
-rw-r--r--TAO/tests/Bug_2494_Regression/server.cpp157
-rw-r--r--TAO/tests/Bug_2494_Regression/test.idl10
-rw-r--r--TAO/tests/Bug_2494_Regression/test_i.cpp29
-rw-r--r--TAO/tests/Bug_2494_Regression/test_i.h36
-rw-r--r--TAO/tests/Bug_2494_Regression/test_i.inl7
-rw-r--r--TAO/tests/CSD_Strategy_Tests/Broken/CSD_TP_Broken.mpc21
-rw-r--r--TAO/tests/CSD_Strategy_Tests/Broken/ClientApp.cpp328
-rw-r--r--TAO/tests/CSD_Strategy_Tests/Broken/ClientApp.h78
-rw-r--r--TAO/tests/CSD_Strategy_Tests/Broken/ServerApp.cpp427
-rw-r--r--TAO/tests/CSD_Strategy_Tests/Broken/ServerApp.h85
-rw-r--r--TAO/tests/CSD_Strategy_Tests/Broken/client_main.cpp7
-rwxr-xr-xTAO/tests/CSD_Strategy_Tests/Broken/run_test.pl186
-rw-r--r--TAO/tests/CSD_Strategy_Tests/Broken/server_main.cpp5
-rw-r--r--TAO/tests/CSD_Strategy_Tests/TP_Common/CSD_TP_Test_Lib.mpc39
-rw-r--r--TAO/tests/CSD_Strategy_Tests/TP_Common/ClientTask.cpp116
-rw-r--r--TAO/tests/CSD_Strategy_Tests/TP_Foo_A/Foo_A_i.h43
-rw-r--r--TAO/tests/CSD_Strategy_Tests/TP_Foo_B/Callback_i.cpp28
-rw-r--r--TAO/tests/CSD_Strategy_Tests/TP_Foo_B/Callback_i.h31
-rw-r--r--TAO/tests/CSD_Strategy_Tests/TP_Foo_B/Foo_B.idl70
-rw-r--r--TAO/tests/CSD_Strategy_Tests/TP_Foo_B/Foo_B_Statistics.cpp218
-rw-r--r--TAO/tests/CSD_Strategy_Tests/TP_Foo_B/Foo_B_i.cpp297
-rw-r--r--TAO/tests/CSD_Strategy_Tests/TP_Foo_B/Foo_B_i.h92
-rw-r--r--TAO/tests/CSD_Strategy_Tests/TP_Foo_C/Foo_C_Custom_ClientEngine.h42
-rw-r--r--TAO/tests/CSD_Strategy_Tests/TP_Foo_C/Foo_C_i.h53
-rw-r--r--TAO/tests/CSD_Strategy_Tests/TP_Test_1/ServerApp.cpp192
-rwxr-xr-xTAO/tests/CSD_Strategy_Tests/TP_Test_1/run_test.pl60
-rw-r--r--TAO/tests/CSD_Strategy_Tests/TP_Test_2/ServerApp.cpp375
-rwxr-xr-xTAO/tests/CSD_Strategy_Tests/TP_Test_2/run_test.pl186
-rw-r--r--TAO/tests/CSD_Strategy_Tests/TP_Test_3/ClientApp.cpp326
-rw-r--r--TAO/tests/CSD_Strategy_Tests/TP_Test_3/ServerApp.cpp428
-rwxr-xr-xTAO/tests/CSD_Strategy_Tests/TP_Test_3/run_test.pl186
-rw-r--r--TAO/tests/CSD_Strategy_Tests/TP_Test_4/ServerApp.cpp391
-rwxr-xr-xTAO/tests/CSD_Strategy_Tests/TP_Test_4/run_test.pl191
-rw-r--r--TAO/tests/CSD_Strategy_Tests/TP_Test_Dynamic/CSD_TP_Test_Dynamic.mpc21
-rw-r--r--TAO/tests/CSD_Strategy_Tests/TP_Test_Dynamic/Hello.h33
-rw-r--r--TAO/tests/CSD_Strategy_Tests/TP_Test_Dynamic/client.cpp86
-rwxr-xr-xTAO/tests/CSD_Strategy_Tests/TP_Test_Dynamic/run_test.pl49
-rw-r--r--TAO/tests/CSD_Strategy_Tests/TP_Test_Dynamic/server.cpp119
-rw-r--r--TAO/tests/CSD_Strategy_Tests/TP_Test_Static/CSD_TP_Test_Static.mpc22
-rw-r--r--TAO/tests/CSD_Strategy_Tests/TP_Test_Static/ClientApp.cpp87
-rw-r--r--TAO/tests/CSD_Strategy_Tests/TP_Test_Static/ServerApp.cpp175
-rwxr-xr-xTAO/tests/CSD_Strategy_Tests/TP_Test_Static/run_test.pl61
-rw-r--r--TAO/tests/CollocationLockup/AB.idl8
-rw-r--r--TAO/tests/CollocationLockup/CollocationLockup.cpp144
-rw-r--r--TAO/tests/CollocationLockup/CollocationLockup.mpc27
-rw-r--r--TAO/tests/CollocationLockup/SimpleNamingService.cpp74
-rw-r--r--TAO/tests/CollocationLockup/SimpleNamingService.idl9
-rwxr-xr-xTAO/tests/CollocationLockup/run_test.pl61
-rwxr-xr-xTAO/tests/Permanent_Forward/Permanent_Forward.mpc6
-rwxr-xr-xTAO/tests/Permanent_Forward/README3
-rwxr-xr-xTAO/tests/Permanent_Forward/StubTest.cpp371
-rwxr-xr-xTAO/tests/Permanent_Forward/run_test.pl25
-rw-r--r--TAO/tests/Portable_Interceptors/AdvSlot/AdvSlot.mpc28
-rw-r--r--TAO/tests/Portable_Interceptors/AdvSlot/StateTransfer.idl12
-rw-r--r--TAO/tests/Portable_Interceptors/AdvSlot/client.cpp27
-rwxr-xr-xTAO/tests/Portable_Interceptors/AdvSlot/run_test.pl50
-rw-r--r--TAO/tests/Portable_Interceptors/AdvSlot/server.cpp199
-rw-r--r--TAO/tests/Portable_Interceptors/AdvSlotDblCpy/AdvSlotDblCpy.mpc28
-rw-r--r--TAO/tests/Portable_Interceptors/AdvSlotDblCpy/InvokeMe.idl12
-rw-r--r--TAO/tests/Portable_Interceptors/AdvSlotDblCpy/README60
-rw-r--r--TAO/tests/Portable_Interceptors/AdvSlotDblCpy/client.cpp41
-rwxr-xr-xTAO/tests/Portable_Interceptors/AdvSlotDblCpy/run_test.pl50
-rw-r--r--TAO/tests/Portable_Interceptors/AdvSlotDblCpy/server.cpp326
-rw-r--r--TAO/tests/Portable_Interceptors/AdvSlotExt/AdvSlotExt.mpc28
-rw-r--r--TAO/tests/Portable_Interceptors/AdvSlotExt/StateTransfer.idl12
-rw-r--r--TAO/tests/Portable_Interceptors/AdvSlotExt/client.cpp27
-rwxr-xr-xTAO/tests/Portable_Interceptors/AdvSlotExt/run_test.pl50
-rw-r--r--TAO/tests/Portable_Interceptors/AdvSlotExt/server.cpp242
-rw-r--r--TAO/tests/Portable_Interceptors/Processing_Mode_Policy/Collocated/Client_Task.cpp98
-rw-r--r--TAO/tests/Portable_Interceptors/Processing_Mode_Policy/Collocated/Client_Task.h45
-rw-r--r--TAO/tests/Portable_Interceptors/Processing_Mode_Policy/Collocated/Collocated_Test.cpp226
-rw-r--r--TAO/tests/Portable_Interceptors/Processing_Mode_Policy/Collocated/Echo_Collocated_ORBInitializer.cpp138
-rw-r--r--TAO/tests/Portable_Interceptors/Processing_Mode_Policy/Collocated/Echo_Collocated_ORBInitializer.h59
-rw-r--r--TAO/tests/Portable_Interceptors/Processing_Mode_Policy/Collocated/PI_ProcMode_Collocated.mpc16
-rw-r--r--TAO/tests/Portable_Interceptors/Processing_Mode_Policy/Collocated/Server_Task.cpp109
-rw-r--r--TAO/tests/Portable_Interceptors/Processing_Mode_Policy/Collocated/Server_Task.h53
-rw-r--r--TAO/tests/Portable_Interceptors/Processing_Mode_Policy/Collocated/interceptors.cpp395
-rw-r--r--TAO/tests/Portable_Interceptors/Processing_Mode_Policy/Collocated/interceptors.h138
-rwxr-xr-xTAO/tests/Portable_Interceptors/Processing_Mode_Policy/Collocated/run_test.pl134
-rw-r--r--TAO/tests/Portable_Interceptors/Processing_Mode_Policy/Collocated/test.idl42
-rw-r--r--TAO/tests/Portable_Interceptors/Processing_Mode_Policy/Collocated/test_i.cpp60
-rw-r--r--TAO/tests/Portable_Interceptors/Processing_Mode_Policy/Collocated/test_i.h54
-rw-r--r--TAO/tests/Portable_Interceptors/Processing_Mode_Policy/Remote/Client_Task.cpp98
-rw-r--r--TAO/tests/Portable_Interceptors/Processing_Mode_Policy/Remote/Client_Task.h45
-rw-r--r--TAO/tests/Portable_Interceptors/Processing_Mode_Policy/Remote/Echo_Client_ORBInitializer.cpp90
-rw-r--r--TAO/tests/Portable_Interceptors/Processing_Mode_Policy/Remote/Echo_Client_ORBInitializer.h58
-rw-r--r--TAO/tests/Portable_Interceptors/Processing_Mode_Policy/Remote/Echo_Server_ORBInitializer.cpp94
-rw-r--r--TAO/tests/Portable_Interceptors/Processing_Mode_Policy/Remote/Echo_Server_ORBInitializer.h57
-rw-r--r--TAO/tests/Portable_Interceptors/Processing_Mode_Policy/Remote/PI_ProcMode_Remote.mpc26
-rw-r--r--TAO/tests/Portable_Interceptors/Processing_Mode_Policy/Remote/Server_Task.cpp112
-rw-r--r--TAO/tests/Portable_Interceptors/Processing_Mode_Policy/Remote/Server_Task.h53
-rw-r--r--TAO/tests/Portable_Interceptors/Processing_Mode_Policy/Remote/client_interceptor.cpp184
-rw-r--r--TAO/tests/Portable_Interceptors/Processing_Mode_Policy/Remote/client_interceptor.h81
-rw-r--r--TAO/tests/Portable_Interceptors/Processing_Mode_Policy/Remote/client_main.cpp136
-rwxr-xr-xTAO/tests/Portable_Interceptors/Processing_Mode_Policy/Remote/run_test.pl154
-rw-r--r--TAO/tests/Portable_Interceptors/Processing_Mode_Policy/Remote/server_interceptor.cpp192
-rw-r--r--TAO/tests/Portable_Interceptors/Processing_Mode_Policy/Remote/server_interceptor.h84
-rw-r--r--TAO/tests/Portable_Interceptors/Processing_Mode_Policy/Remote/server_main.cpp138
-rw-r--r--TAO/tests/Portable_Interceptors/Processing_Mode_Policy/Remote/test.idl42
-rw-r--r--TAO/tests/Portable_Interceptors/Processing_Mode_Policy/Remote/test_i.cpp55
-rw-r--r--TAO/tests/Portable_Interceptors/Processing_Mode_Policy/Remote/test_i.h54
-rw-r--r--TAO/tests/Portable_Interceptors/Slot/PI_Slot.mpc7
-rw-r--r--TAO/tests/Portable_Interceptors/Slot/driver.cpp64
-rwxr-xr-xTAO/tests/Portable_Interceptors/Slot/run_test.pl26
-rw-r--r--TAO/tests/RTCORBA/Dynamic_Thread_Pool/README10
-rw-r--r--TAO/tests/RTCORBA/Dynamic_Thread_Pool/RT_Dynamic_Thread_Pool.mpc18
-rw-r--r--TAO/tests/RTCORBA/Dynamic_Thread_Pool/client.cpp225
-rw-r--r--TAO/tests/RTCORBA/Dynamic_Thread_Pool/continuous.conf2
-rw-r--r--TAO/tests/RTCORBA/Dynamic_Thread_Pool/continuous.conf.xml6
-rw-r--r--TAO/tests/RTCORBA/Dynamic_Thread_Pool/run_test.pl117
-rw-r--r--TAO/tests/RTCORBA/Dynamic_Thread_Pool/server.cpp397
-rw-r--r--TAO/tests/RTCORBA/Dynamic_Thread_Pool/svc.conf1
-rw-r--r--TAO/tests/RTCORBA/Dynamic_Thread_Pool/svc.conf.xml5
-rw-r--r--TAO/tests/RTCORBA/Dynamic_Thread_Pool/test.idl12
-rw-r--r--TAO/tests/RTCORBA/Dynamic_Thread_Pool/test_i.cpp71
-rw-r--r--TAO/tests/RTCORBA/Dynamic_Thread_Pool/test_i.h45
-rw-r--r--TAO/tests/Sequence_Unit_Tests/bounded_sequence_cdr.hpp59
-rw-r--r--TAO/tests/Sequence_Unit_Tests/fwd_mock_reference.cpp42
-rw-r--r--TAO/tests/Sequence_Unit_Tests/fwd_mock_reference.hpp39
-rw-r--r--TAO/tests/Sequence_Unit_Tests/unbounded_sequence_cdr.hpp56
-rw-r--r--ace/Assert.cpp24
-rw-r--r--ace/Assert.h38
-rw-r--r--ace/Encoding_Converter.cpp12
-rw-r--r--ace/Encoding_Converter.h70
-rw-r--r--ace/Encoding_Converter_Factory.cpp74
-rw-r--r--ace/Encoding_Converter_Factory.h54
-rw-r--r--ace/Svc_Conf_Lexer.cpp656
-rw-r--r--ace/Svc_Conf_Lexer.h70
-rw-r--r--ace/Truncate.h84
-rw-r--r--ace/UTF16_Encoding_Converter.cpp364
-rw-r--r--ace/UTF16_Encoding_Converter.h86
-rw-r--r--ace/UTF16_Encoding_Converter.inl76
-rw-r--r--ace/UTF32_Encoding_Converter.cpp254
-rw-r--r--ace/UTF32_Encoding_Converter.h67
-rw-r--r--ace/UTF8_Encoding_Converter.cpp92
-rw-r--r--ace/UTF8_Encoding_Converter.h72
-rw-r--r--ace/config-vxworks6.2.h307
-rw-r--r--ace/os_include/sys/os_sysctl.h41
-rw-r--r--apps/gperf/gperf.mpc9
-rw-r--r--bin/ChangeLogEditor/CVSFileLocator.pm117
-rw-r--r--bin/ChangeLogEditor/FileLocatorFactory.pm33
-rw-r--r--bin/ChangeLogEditor/SVNFileLocator.pm53
-rw-r--r--bin/MakeProjectCreator/config/ciao_container_dnc.mpb7
-rw-r--r--bin/MakeProjectCreator/config/ciao_domainapplicationmanager_dnc.mpb8
-rw-r--r--bin/MakeProjectCreator/config/ciao_events_base_dnc.mpb7
-rw-r--r--bin/MakeProjectCreator/config/ciao_events_dnc.mpb9
-rw-r--r--bin/MakeProjectCreator/config/ciao_rtevent_dnc.mpb9
-rw-r--r--bin/MakeProjectCreator/config/ciaocidldefaults.mpb24
-rw-r--r--bin/MakeProjectCreator/config/concurrency_serv.mpb7
-rw-r--r--bin/MakeProjectCreator/config/concurrency_skel.mpb7
-rw-r--r--bin/MakeProjectCreator/config/csd_framework.mpb7
-rw-r--r--bin/MakeProjectCreator/config/csd_pt_test_exe.mpb4
-rw-r--r--bin/MakeProjectCreator/config/dance_extension_stub.mpb6
-rw-r--r--bin/MakeProjectCreator/config/messaging_optional.mpb8
-rw-r--r--bin/MakeProjectCreator/config/property_serv.mpb7
-rw-r--r--bin/MakeProjectCreator/config/property_skel.mpb7
-rw-r--r--bin/MakeProjectCreator/config/rteventlogadmin_serv.mpb7
-rw-r--r--bin/MakeProjectCreator/config/rteventlogadmin_skel.mpb7
-rw-r--r--bin/MakeProjectCreator/config/tao_versioning_idl_defaults.mpb14
-rw-r--r--bin/MakeProjectCreator/config/vc8nmake.mpb10
-rw-r--r--bin/MakeProjectCreator/config/vcl.mpb16
-rw-r--r--bin/MakeProjectCreator/config/versioned_namespace.mpb13
-rw-r--r--docs/Symbol_Versioning.html230
-rw-r--r--docs/ace_guidelines.vsmacrosbin0 -> 65536 bytes
-rw-r--r--examples/C++NPv2/Reactor_Logging_Server_T.h29
-rw-r--r--examples/Map_Manager/Map_Manager.mpc6
-rw-r--r--examples/Reactor/TP_Reactor/AcceptHandler.cpp106
-rw-r--r--examples/Reactor/TP_Reactor/AcceptHandler.h75
-rw-r--r--examples/Reactor/TP_Reactor/README86
-rw-r--r--examples/Reactor/TP_Reactor/ReadHandler.cpp151
-rw-r--r--examples/Reactor/TP_Reactor/ReadHandler.h92
-rw-r--r--examples/Reactor/TP_Reactor/TP_Reactor.mpc18
-rw-r--r--examples/Reactor/TP_Reactor/client.cpp141
-rw-r--r--examples/Reactor/TP_Reactor/common.h29
-rw-r--r--examples/Reactor/TP_Reactor/run_test.pl41
-rw-r--r--examples/Reactor/TP_Reactor/server.cpp66
-rw-r--r--include/makeinclude/platform_macosx_tiger.GNU60
-rw-r--r--include/makeinclude/platform_vxworks6.2.GNU351
-rw-r--r--m4/ace_func.m4148
-rw-r--r--m4/pkg.m4156
-rw-r--r--tests/Bug_2497_Regression_Test.cpp75
-rw-r--r--tests/Unload_libACE.cpp259
663 files changed, 65318 insertions, 0 deletions
diff --git a/ChangeLogs/ChangeLog-05b b/ChangeLogs/ChangeLog-05b
new file mode 100644
index 00000000000..15f3ed61bea
--- /dev/null
+++ b/ChangeLogs/ChangeLog-05b
@@ -0,0 +1,2815 @@
+Fri Aug 5 13:19:33 2005 Simon McQueen <sm@prismtech.com>
+
+ * Release:
+
+ Remove tagging of man/* files.
+
+Thu Aug 4 16:10:24 BST 2005 Donald Sharp <Donald.Sharp@prismtech.com>
+
+ * tests/Array_Map_Test.cpp:
+ Some compilers, like SunCC5.5 on Solaris, do not delete their
+ temporaries in expression scope. Placing the expressions in an
+ inner block ensures that the reference count is as expected
+
+Wed Aug 03 09:35:12 UTC 2005 Martin Corino <mcorino@remedy.nl>
+
+ * tests/Process_Manual_Event_Test.cpp:
+ Added additional tests for lacking PSHARED support.
+
+Sat Jul 30 10:38:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * bin/tao_other_tests.lst:
+ Added missing semi colon for CosEvent basic test
+
+Fri Jul 29 14:25:12 2005 Steve Huston <shuston@riverace.com>
+
+ * ace/config-aix-5.x.h: Disable ACE_HAS_POSIX_SEM if the Posix
+ flags indicate its presence but _XOPEN_SOURCE is not >= 500.
+
+ * tests/run_test.pl: When looking for sub-log files, match the program
+ name only at the start. Prevents finding, for example,
+ Process_Manual_Event_Test-child.log when looking for
+ Manual_Event_Test-*.log.
+
+Fri Jul 29 14:26:37 2005 Simon McQueen <sm@prismtech.com>
+
+ * bin/tao_other_tests.lst:
+
+ Scheduled TAO/orbsvcs/tests/CosEvent/Basic/run_test.pl to be
+ run on all not minimum or single threaded builds.
+
+Fri Jul 29 09:28:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * apps/JAWS2/JAWS/Filecache.cpp:
+ * apps/JAWS2/JAWS/IO.cpp:
+ * apps/JAWS2/JAWS/IO_Handler.cpp:
+ Fixed compile errors when building with Borland C++. I have created
+ an MPC file but find it too risky to add that just before the
+ release, will do that when the release is out.
+
+ * ace/Global_Macros.h:
+ When ACE_EXPLICIT_TEMPLATE_DESTRUCTOR_TAKES_ARGS is defined, define
+ a special version of ACE_DES_FREE_TEMPLATE3 and
+ ACE_DES_FREE_TEMPLATE4 just as we do for ACE_DES_FREE_TEMPLATE and
+ ACE_DES_FREE_TEMPLATE2.
+
+ Thanks to Olivier Gu�in <guerin35 at hotmail dot com>
+ for reporting this.
+
+Fri Jul 29 07:18:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * include/makeinclude/platform_cray.GNU:
+ * include/makeinclude/platform_freebsd.GNU:
+ * include/makeinclude/platform_hpux.GNU:
+ * include/makeinclude/platform_hpux_gcc.GNU:
+ * include/makeinclude/platform_irix5.3_g++.GNU:
+ * include/makeinclude/platform_irix6.x_g++.GNU:
+ * include/makeinclude/platform_irix6.x_kcc.GNU:
+ * include/makeinclude/platform_linux_borland.GNU:
+ * include/makeinclude/platform_m88k.GNU:
+ * include/makeinclude/platform_mvs.GNU:
+ * include/makeinclude/platform_netbsd.GNU:
+ * include/makeinclude/platform_openbsd.GNU:
+ * include/makeinclude/platform_osf1_3.2_cxx.GNU:
+ * include/makeinclude/platform_osf1_4.x_kcc.GNU:
+ * include/makeinclude/platform_sco5.0.0-CC-fsu-pthread.GNU:
+ * include/makeinclude/platform_sco5.0.0-fsu-pthread.GNU:
+ * include/makeinclude/platform_sco5.0.0-mit-pthread.GNU:
+ * include/makeinclude/platform_sco5.0.0-nothread.GNU:
+ * include/makeinclude/platform_tandem.GNU:
+ * include/makeinclude/platform_vxworks5.5.x.GNU:
+ * include/makeinclude/platform_win32_interix.GNU:
+ Updated location for libraries from $ACE_ROOT/ace to
+ $ACE_ROOT/lib. Thanks to Ian Zagorskih
+ <ianzag at megasignal dot com> for reporting this.
+ This fixes bugzilla 2202
+
+Thu Jul 28 13:59:11 2005 Simon McQueen <sm@prismtech.com>
+
+ * bin/tao_other_tests.lst:
+
+ Added !MINIMUM to Bug_1630_Regression test. It needs the IFR.
+
+Thu Jul 28 01:46:40 2005 Ossama Othman <ossama@dre.vanderbilt.edu>
+
+ * ace/Cache_Map_Manager_T.cpp:
+ * ace/Cache_Map_Manager_T.inl:
+ * ace/MEM_SAP.cpp:
+ * ace/MEM_SAP.inl:
+ * ace/Map_T.cpp:
+ * ace/Map_T.inl:
+ * ace/Signal.cpp:
+ * ace/Signal.inl:
+
+ Moved virtual destructors in exported classes out of line.
+ Addresses RTTI problems when the using g++ 4.0 hidden visibility
+ for inline functions feature.
+
+Thu Jul 28 00:28:46 2005 Ossama Othman <ossama@dre.vanderbilt.edu>
+
+ * ace/Array_Map.cpp:
+ * ace/Array_Map.h:
+ * ace/Array_Map.inl:
+
+ Added third equality functor template parameter. Defaults to
+ std::equal_to<> if unspecified. Necessary for cases where
+ operator==() is not suitable or available for a given key type.
+
+ (erase):
+
+ Explicitly destroy the tail element by assigning a default
+ constructed value_type instance to it. Prevents duplicate
+ instances of erase()d elements from existing. Some applications
+ may assume that erased elements no longer exist. This
+ essentially disables the lazy destruction behavior of
+ ACE_Array_Map. Note that this change also applies to the case
+ of a map of size 1.
+
+ * ace/Refcountable.cpp:
+ * ace/Refcountable.inl:
+
+ Moved ~ACE_Refcountable() virtual destructor out of line.
+ Addresses RTTI issues when g++ 4.0 hidden visibility of inlined
+ functions is enabled.
+
+ * ace/config-lite.h:
+
+ Disable use of ACE_RCSIDs by default. Most users never need to
+ determine the RCS ID of a given object file in an ACE-based
+ binary so optimize for the common case. Also reduces
+ footprint.
+
+ * tests/Array_Map_Test.cpp:
+
+ Added reference count test to verify that the number of
+ references/copies of a given data element drop by the same
+ amount as was increased during insertion.
+
+Wed Jul 27 16:33:46 2005 Gary Maxey <gary.maxey@hp.com>
+
+ * ace/config-tandem-nsk-mips-v3.h:
+
+ Add #define for ACE_ANY_OPS_USE_NAMESPACE
+
+Mon Jul 25 19:25:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tests/Naming_Test.cpp:
+ Initialise pointer with 0
+
+Mon Jul 25 15:31:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * ace/Timer_Hash_T.cpp:
+ Initialise some pointers with 0
+
+ * ace/Refcountable.h:
+ Removed some empty doxygen tags
+
+ * ace/Naming_Context.cpp:
+ Removed not needed ACE_UNUSED_ARG
+
+Sat Jul 23 16:36:36 2005 Jaiganesh B <jai@dre.vanderbilt.edu>
+
+ * bin/ciao_tests.lst:
+
+ enabled running CIAO NodeApplicationTest again.
+
+Fri Jul 22 16:31:29 2005 Steve Huston <shuston@riverace.com>
+
+ * ace/Basic_Types.h: The change from:
+ Fri Jul 8 15:42:18 2005 Steve Huston <shuston@riverace.com>
+ turned a previous warning into an error on newer g++ versions.
+ Instead, moved the __hi_lo struct definition out of the
+ anonymous union and renamed it to not be a compiler-private name
+ (with 2 leading underscores). This should resolve all the
+ issues. Thanks to Simon Massey for figuring this out.
+
+Fri Jul 22 11:13:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * bin/MakeProjectCreator/config/ciao_server_dnc.mpb:
+ Add naming as base project, CIAO_DnC_Server has this
+ also
+
+Fri Jul 22 09:30:00 UTC 2005 Simon Massey <sma@prismtech.com>
+
+ * tests/run_test.lst:
+ Don't run Process_Manual_Event_Test on HPUX
+
+Thu Jul 21 10:41:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * bin/tao_orb_tests.lst:
+ Don't run Bug_2174_Regression in a minimum corba build
+
+Thu Jul 21 09:15:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * ace/Atomic_Op_T.h:
+ Use deprecate tag for deprecated methods
+
+Thu Jul 21 09:24:58 2005 Simon McQueen <sm@prismtech.com>
+
+ * bin/ciao_tests.lst:
+
+ Descheduled the 3 TAO/CIAO/DAnCE/tests/NodeApplicationTest
+ tests. They fail and there have been no responses to
+ requests that they be fixed.
+
+Wed Jul 20 06:45:00 2005 J.T. Conklin <jtc@acorntoolworks.com>
+
+ * bin/msvc_static_order.lst:
+
+ Added Ds{Event,Notify}LogAdmin_{IDL,Skel,Serv} --- just to
+ be safe.
+
+Wed Jul 20 09:31:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * protocols/ace/RMCast/Makefile.am:
+ Added new files
+
+Wed Jul 20 08:38:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * bin/auto_run_tests.pl:
+ Check for result != 0 instead of result > 0. It seems that when
+ a run_test.pl has been added from a windows box that it sometimes
+ doesn't get execute permission and then the script can't be
+ executed on Unix systems. The return value is then -1 and this
+ wasn't detected by the scripts
+
+Wed Jul 20 07:55:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * bin/msvc_static_order.lst:
+ Added DsLogAdmin_IDL
+
+Tue Jul 19 14:24:47 2005 Gary Maxey <gary.maxey@hp.com>
+
+ * bin/PerlACE/Process_Unix.pm:
+
+ Append command line arguments based on ACE_RUNTEST_ARGS
+ environment variable.
+
+ * ace/config-tandem-nsk-mips-v3.h:
+
+ Adjust platform specific macros
+
+Tue Jul 19 19:09:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * ace/Log_Record.cpp:
+ Reverted part of the change below. Not all platforms have snprintf,
+ just use sprintf, all platforms have that. Fixes problems with
+ VxWorks
+ Thu Jul 14 12:23:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+Tue Jul 19 14:08:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * bin/tao_orb_tests.lst:
+ Added new Register_Initial_References test. This will fail in
+ all builds, it seems we have some bugs to fix
+
+Tue Jul 19 12:37:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * bin/tao_orb_tests.lst:
+ Added new recursive ORBInitializer test
+
+Tue Jul 19 11:49:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * bin/tao_orb_tests.lst:
+ Enable Bug_2088, rewrote this test to test the current functionality
+ which matches the draft 3.1 spec. The Corba 3.0.3 seems to be not
+ usable.
+
+Tue Jul 19 10:28:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * ace/OS_NS_fcntl.cpp:
+ * ace/OS_NS_sys_mman.inl:
+ When returning an ACE_HANDLE return ACE_INVALID_HANDLE instead
+ of -1 as error
+
+Mon Jul 18 18:21:20 2005 Steve Huston <shuston@riverace.com>
+
+ * NEWS: Added ACE_OS::closesocket() and Solaris 10 notes.
+
+Mon Jul 18 12:11:39 2005 J.T. Conklin <jtc@acorntoolworks.com>
+
+ * bin/msvc_static_order.lst:
+
+ Add CosNaming_IDL, CosTrading_IDL, and CosNotification_IDL
+ projects to list.
+
+Mon Jul 18 11:42:09 2005 Chad Elliott <elliott_c@ociweb.com>
+
+ * bin/MakeProjectCreator/modules/GNUACEWorkspaceCreator.pm:
+
+ Revived the old style where each GNUmakefile has individual
+ targets that contain the necessary dependencies. To utilize this
+ you must set the MPC_GNUACE_NAMED_TARGETS environment variable.
+
+Mon Jul 18 09:08:01 2005 Gary Maxey <gary.maxey@hp.com>
+
+ * bin/tao_orb_tests.lst:
+
+ Added OBV/ValueBox the list of tests. This is a new test
+ to exercise boxed value types.
+
+Mon Jul 18 15:51:04 2005 Simon McQueen <sm@prismtech.com>
+
+ * ace/OS_NS_Thread.cpp:
+
+ Removed unreachable statements identified by HP non stop
+ MIPS build warnings.
+
+Mon Jul 18 09:21:14 2005 Phil Mesnier <mesnier_p@ociweb.com>
+
+ * NEWS:
+
+ Took out TAO-specific comments.
+
+Mon Jul 18 13:44:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * ace/Mem_Map.cpp:
+
+ Reverted the change below, it causes problems on AIX and Solaris. It
+ seems that on AIX we now use ACE_OS::open for shared memory, with the
+ change below we use ACE_OS::shm_open but this fails for strange
+ reasons and I have no idea what the problem is at this moment. So
+ revert this until Martin is back from his vacation
+
+ Tue Jul 05 21:40:12 UTC 2005 Martin Corino <mcorino@remedy.nl>
+ Changed to consistently use ACE_OS::shm_open/ACE_OS::shm_unlink.
+
+Mon Jul 18 13:31:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * html/index.html:
+ Update link for DAnCE
+
+Mon Jul 18 15:02:58 2005 Boris Kolpackov <boris@kolpackov.net>
+
+ * protocols/ace/RMCast/Acknowledge.cpp:
+ * protocols/ace/RMCast/Fragment.cpp:
+ * protocols/ace/RMCast/Link.cpp:
+ * protocols/ace/RMCast/Reassemble.cpp:
+
+ Fixed a bunch of warnings.
+
+Mon Jul 18 08:00:35 2005 Phil Mesnier <mesnier_p@ociweb.com>
+
+ * NEWS:
+
+ Added comments regarding TAG_ALTERNATE_IIOP_ADDRESS and
+ refactored codeset negotiation support.
+
+Mon Jul 18 10:25:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * ace/MMAP_Memory_Pool.cpp (init_acquire):
+ Added class name to the error messages and print the method
+ name.
+
+ * ace/SString.cpp:
+ Initialise pointers with 0
+
+Mon Jul 18 11:33:23 2005 Boris Kolpackov <boris@kolpackov.net>
+
+ * NEWS:
+
+ Updated with the latest achievements in RMCast.
+
+Mon Jul 18 08:18:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * bin/make_release:
+ Removed exclude of asnmp.mwc, this file has been zapped
+
+Fri Jul 15 16:35:37 2005 Phil Mesnier <mesnier_p@ociweb.com>
+
+ * bin/MakeProjectCreator/config/global.features:
+ * bin/MakeProjectCreator/config/negotiate_codesets.mpb:
+ * bin/MakeProjectCreator/config/taoclient.mpb:
+ * bin/MakeProjectCreator/config/taoserver.mpb:
+
+ Added a new feature, negotiate_codesets. Disabled by default,
+ but when enabled in default.features or on the mpc/mwc command
+ line adds TAO_Codeset to the project's libs list. Dynamically
+ linked applications do not need to do anything, the libary will
+ be dynamically loaded if needed by the ORB. Static applications
+ must enable this feature. Merely enabling is not sufficient, to
+ actually make use of the codeset code, they must also include
+ tao/Codeset/Codeset.h somewhere in their application. Enabling
+ the mpc feature without including the header will not cause any
+ code to be statically linked. Enabling the feature with dynamic
+ applications will add a dependency on the TAO_Codeset library
+ regardless of the use of the code.
+
+Fri Jul 15 08:04:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * bin/make_release:
+ Also exclude ASNMP/asnmp.mwc when generating the em3 project files.
+ Thanks to Sam Mesh <sam dot mesh at gmail dot com> for reporting
+ this. This fixes bugzilla bug 2190.
+
+Thu Jul 14 12:47:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * ace/Log_Record.cpp:
+ Fixed compile error in previous committed caused when merging
+ changes from one system to another
+
+Thu Jul 14 12:23:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * ace/OS_NS_stdio.cpp (sprintf wchar):
+ ULONG_MAX was passed, this caused vswprintf to return always -1
+ because ULONG_MAX is of course really large on a 64bit system.
+ Pass 4096 instead, just as done with the other vswprintf in
+ OS_NS_stdio.inl.
+
+ * ace/Log_Record.cpp:
+ Use snprintf because we know the sizes of the buffer, this way
+ we don't call the method above that caused problems on 64bit
+ systems. This fixes bugzilla 2176.
+
+Thu Jul 14 09:31:55 2005 Boris Kolpackov <boris@kolpackov.net>
+
+ * protocols/ace/RMCast/Flow.cpp:
+
+ Fixed fuzz error over math.h inclusion.
+
+Wed Jul 13 22:12:12 UTC 2005 Gan Deng <gan.deng@vanderbilt.edu>
+
+ * etc/ciao_DAnCE.doxygen
+
+ Added "RECURSIVE=YES" so source files could be found correctly
+ Also added excluded path option for CIAO examples and tests.
+
+Wed Jul 13 17:10:45 2005 Phil Mesnier <mesnier_p@ociweb.com>
+
+ * bin/MakeProjectCreator/config/codeset.mpb:
+
+ A new base project for use when creating codeset translators or
+ any other code that must depend on the new library, TAO_Codeset.
+
+Wed Jul 13 12:42:57 2005 Chad Elliott <elliott_c@ociweb.com>
+
+ * bin/tao_other_tests.lst:
+
+ Due to the way that the ORB is coded such that it does not require
+ the IFR_Client library at link time, the InterfaceRepo/Application
+ test can not run on static builds (even though the client has the
+ IFR_Client library linked in).
+
+Wed Jul 13 12:28:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tests/Process_Semaphore_Test.cpp:
+ Fixed compile error in previous change
+
+Wed Jul 13 07:56:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tests/Process_Semaphore_Test.cpp:
+ Only test timeouts when ACE_HAS_POSIX_SEM_TIMEOUT is defined
+
+Wed Jul 13 07:26:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * ace/config-sunos5.5.h:
+ Added include of config-posix.h, let this file try to sort out
+ which posix parts Sun delivers
+
+ * ace/config-sunos5.6.h:
+ Sun 5.6 incorrectly reports that it has shm_open
+
+Wed Jul 13 07:23:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * ace/Process_Semaphore.cpp:
+ Removed commented out explicit template instantiations
+
+ * ace/Containers_T.h:
+ Small doxygen fix
+
+Tue Jul 12 22:59:12 UTC 2005 Gan Deng <gan.deng@vanderbilt.edu>
+
+ * html/index.html:
+
+ Fixed a typo which was introduced in this HTML file for
+ my earlier checkin.
+
+Tue Jul 12 16:17:38 2005 Douglas C. Schmidt <schmidt@cs.wustl.edu> t
+
+ * Updated all the COPYING files to reflect the revised DOC
+ software open-source license. Thanks to Angela Ziegenhorn
+ <Angela.Ziegenhorn@veritas.com> for these modifications.
+
+Tue Jul 12 18:00:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * ace/Thread_Manager.cpp (remove_thr_all):
+ Don't just delete each Thread_Descriptor, but call remove_thr
+ for each Thread_Descriptor, this method will add the descriptor
+ to the freelist and handle all other cleanup actions. Fixes
+ some invalid reads we found in some RTCorba tests
+
+Tue Jul 12 17:15:00 2005 Boris Kolpackov <boris@kolpackov.net>
+
+ * protocols/ace/RMCast/Flow.cpp:
+ * protocols/ace/RMCast/Protocol.h:
+
+ Added missing includes.
+
+Tue Jul 12 14:46:53 2005 Boris Kolpackov <boris@kolpackov.net>
+
+ * protocols/ace/RMCast/Parameters.h:
+
+ Forgot to add this file for Mon Jul 11 20:08:51 2005.
+
+Mon Jul 11 12:51:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * ace/config-win32-msvc-8.h:
+ Only define ACE_HAS_SIG_ATOMIC_T when not building for WinCE.
+ Thanks to Mitscher Dubreus <ofup at voila dot fr> for reporting
+ this.
+
+Mon Jul 11 12:18:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * ace/Thread_Manager.inl:
+ Initialise pointer with 0
+
+Mon Jul 11 20:08:51 2005 Boris Kolpackov <boris@kolpackov.net>
+
+ * protocols/ace/RMCast/Flow.cpp:
+ * protocols/ace/RMCast/Flow.h:
+
+ Implemented flow control stack element.
+
+ * protocols/ace/RMCast/Acknowledge.cpp:
+ * protocols/ace/RMCast/Acknowledge.h:
+ * protocols/ace/RMCast/Fragment.cpp:
+ * protocols/ace/RMCast/Fragment.h:
+ * protocols/ace/RMCast/Link.cpp:
+ * protocols/ace/RMCast/Link.h:
+ * protocols/ace/RMCast/Protocol.h:
+ * protocols/ace/RMCast/Reassemble.cpp:
+ * protocols/ace/RMCast/Reassemble.h:
+ * protocols/ace/RMCast/Retransmit.cpp:
+ * protocols/ace/RMCast/Retransmit.h:
+ * protocols/ace/RMCast/Socket.cpp:
+ * protocols/ace/RMCast/Socket.h:
+
+ Made protocol parameters configurable on a per-instance
+ basis.
+
+ * protocols/examples/RMCast/Send_Msg/Protocol.h:
+ * protocols/examples/RMCast/Send_Msg/Receiver.cpp:
+
+ Made receiver print throughput information.
+
+Mon Jul 11 08:41:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * ace/OS_NS_Thread.h:
+ Doxygen improvements
+
+Mon Jul 11 08:10:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * bin/tao_orb_tests.lst:
+ Added Bug_2174_Regression to the list of tests. It will fail
+ until the fix for this bug is in the archive
+
+Sun Jul 10 23:24:12 UTC 2005 Gan Deng <gan.deng@vanderbilt.edu>
+
+ * etc/DAnCE.doxygen:
+
+ Added doxygen configuration file for DAnCE.
+
+Sat Jul 9 06:24:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * ace/OS_NS_Thread.h:
+ Doxygen improvements
+
+Sat Jul 9 06:18:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * ace/OS_NS_Thread.inl (thr_cancel):
+ Fixed VxWorks implementation. Thanks to Abhijit Sachdev <abhi
+ at qualcomm dot com> for motivating this fix.
+
+Fri Jul 8 15:42:18 2005 Steve Huston <shuston@riverace.com>
+
+ * ace/Array_Map.h: Extended the range of Sun C++ compilers not
+ providing a fully standards-compliant STL to include C++ 5.7
+ (Studio 10). To include a compliant STL would break backward
+ binary compatibility with C++ 5.0 - 5.6, so Sun won't (yet)
+ do it. They do, however, include Stlport 4 with C++ 5.7. You can
+ enable this by building ACE with stlport=1.
+
+ * ace/Basic_Types.h (ACE_ULongLong): Added a name to the anonymous
+ struct declared in the anonymous union. Silences a warning from
+ Sun Studio 10.
+ Added __amd64 to the "little endian" machine indicators. Corrects
+ this check for Solaris 10 x86.
+
+ * ace/config-sunos5.10.h: Noted that Studio 10 (C++ 5.7) works
+ as well.
+
+ * include/makeinclude/platform_sunos5_sunc++.GNU: If -fast is required,
+ be sure it goes to the left of any -xarch options on the command
+ line, else it'll override -xarch. Also, added support for building
+ with stlport=1 on Studio 10 (C++ 5.7).
+
+ * tests/CDR_Array_Test.cpp: When saying "Data OK", print type
+ name (%s), not truncated pointer (%d).
+
+Fri Jul 8 12:37:15 2005 Douglas C. Schmidt <schmidt@cs.wustl.edu>
+
+ * ace/QoS/SOCK_Dgram_Mcast_QoS.cpp (subscribe): Added checks
+ to guard against cases where the qos_session is NULL. Thanks to
+ Dom Monteiro <d dot monteiro at netia dot net> and Yamuna for
+ isolating the problem.
+
+Fri Jul 8 09:52:02 2005 Chad Elliott <elliott_c@ociweb.com>
+
+ * bin/MakeProjectCreator/modules/GNUACEProjectCreator.pm:
+
+ Utilize the MakeProjectBase to minimize the code in this module.
+
+Fri Jul 8 11:19:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * ace/OS_NS_Thread.inl (thr_cancel):
+ Added implementation for VxWorks.
+
+Fri Jul 8 08:22:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * ace/OS_NS_string.cpp:
+ Added include of OS_NS_stdio.h when ACE_LACKS_STRERROR is not
+ defined
+
+Thu Jul 7 18:11:29 2005 Steve Huston <shuston@riverace.com>
+
+ * configure.ac:
+ * ace/README:
+ * ace/config-WinCE.h:
+ * ace/config-mvs.h:
+ * ace/config-openvms.h:
+ * ace/config-psos-diab.h:
+ * ace/config-psos-diab-mips.h:
+ * ace/config-psos-diab-ppc.h:
+ * ace/config-psos-tm.h:
+ * ace/config-psosim-g++.h:
+ * ace/config-rtems.h:
+ * ace/config-sunos5.7.h:
+ * ace/config-tandem-nsk-mips-v2.h:
+ * ace/config-tandem-nsk-mips-v3.h:
+ * ace/config-vxworks5.x.h:
+ * ace/config-win32-interix.h:
+ * ace/config-win32-visualage.h:
+ * ace/OS_NS_string.{h cpp}:
+ * m4/config_h.m4: Removed all references to sys_nerr and
+ ACE_LACKS_SYS_NERR. These are old, hacky ways to check things
+ that can be done better (see below).
+
+ * ace/OS_NS_string.{h cpp} (strerror): Check for an invalid errnum
+ value by checking the return value of strerror(); supply a
+ "Unknown error %d" message if it's bad, and set errno to EINVAL.
+
+ * ace/Log_Msg.cpp (log): Use ACE_OS::strerror() and its new return
+ value to check for the need to try another way to format 'p' and
+ 'm' messages. Windows is now the only special case.
+
+ * ace/Select_Reactor_Base.cpp: Include "Timer_Queue.h" instead of
+ "Timer_Heap.h" to get the appropriate definitions and inclusion of
+ other needed headers; in this case, Recursive_Thread_Mutex.h. Fixes
+ compile errors on Solaris 10.
+
+ * include/makeinclude/platform_sunos5_sunc++.GNU: Changed -xarch= from
+ v9 to generic64 when using "buildbits=64" on Sun Studio 10
+ (C++ 5.7). This works for both Sparc and x86 architectures.
+
+Thu Jul 7 17:24:21 2005 Simon McQueen <sm@prismtech.com>
+
+ * bin/tao_orb_tests.lst:
+
+ Scheduled regression test for bugzilla #2183.
+
+Thu Jul 7 09:27:56 2005 Chad Elliott <elliott_c@ociweb.com>
+
+ * bin/MakeProjectCreator/templates/gnu.mpd:
+
+ Modified the template code to avoid generating lines that end in
+ spaces.
+
+Thu Jul 7 09:11:23 2005 Douglas C. Schmidt <schmidt@cs.wustl.edu>
+
+ * ace/Message_Block.cpp: Changed the order of the #includes
+ to work around a problem when ACE is used with STLport. Thanks
+ to Alvin Lee for reporting this. This fixes another part of
+ bugid 2185.
+
+Tue Jul 5 22:05:19 2005 Douglas C. Schmidt <schmidt@cs.wustl.edu>
+
+ * ace/DLL.cpp: Fixed a problem with ACE_DLL::close() where
+ the dll_name_ might not be deleted if dll_handle_ was 0. Thanks
+ to Alvin Lee <alvin.msg@gmail.com> for reporting this. This
+ fixes the first part of bugid 2185.
+
+Tue Jul 5 18:13:29 2005 Steve Huston <shuston@riverace.com>
+
+ * ACE-INSTALL.html: Removed Windows CE from the platforms Riverace
+ supports and added links to some Riverace pages.
+
+Tue Jul 05 21:40:12 UTC 2005 Martin Corino <mcorino@remedy.nl>
+
+ * ace/Mem_Map.cpp:
+ Changed to consistently use ACE_OS::shm_open/ACE_OS::shm_unlink.
+
+Tue Jul 05 21:15:12 UTC 2005 Martin Corino <mcorino@remedy.nl>
+
+ * ace/OS_NS_Thread{.h .inl .cpp}:
+ Fixes for compile problems in MACOS_X_Panther build.
+
+ Outlined ACE_OS::cond_init() to gain some footprint reduction.
+
+Tue Jul 5 18:17:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * ace/OS_NS_netdb.cpp (getmacaddress): Some layout fixes and
+ also fixed a handle leak in the Sun part. Thanks to
+ <likemartinma at 163 dot com> for reportint this. This fixes
+ bugid 1875
+
+Tue Jul 5 08:30:07 2005 Douglas C. Schmidt <schmidt@cs.wustl.edu>
+
+ * ace/OS_NS_netdb.cpp (getmacaddress): Call close() to avoid
+ a handle leak. Thanks to W.M. van den Boogaard <wim dot vd dot
+ boogaard at meco dot nl> for reporting this fix. This fixes
+ bugid 2182.
+
+Mon Jul 04 21:08:12 UTC 2005 Martin Corino <mcorino@remedy.nl>
+
+ * ace/INET_Addr.h:
+ * ace/INET_Addr.cpp:
+ Added support for specifying interface ids for IPv6 Link Local
+ addresses either as part of the address (<ip>'%'<interface id>)
+ separately through ACE_INET_Address::set_interface().
+ Straightened out differences between Windows and Linux.
+ ACE_INET_Address::get_host_addr() now returns <ip>'%'<interface
+ id> formatted address when appropriate both on Windows
+ (natively) and Linux (ACE). Thanks to Srikanth Gopal
+ <sriki_666@yahoo.com> for reporting this problem.
+
+Mon Jul 4 04:21:53 2005 Ossama Othman <ossama@dre.vanderbilt.edu>
+
+ * ace/Array_Map.h (ACE_Array_Map):
+
+ Work around non-standard compliant Sun C++
+ std::reverse_iterator<> template arguments. Define a typedef
+ specific to Sun C++ 5.5 or earlier.
+
+Sun Jul 3 14:59:25 2005 J.T. Conklin <jtc@acorntoolworks.com>
+
+ * examples/APG/Config/Makefile.am:
+
+ Regenerate.
+
+Sun Jul 03 18:40:12 UTC 2005 Martin Corino <mcorino@remedy.nl>
+
+ * include/makeinclude/rules.lib.GNU:
+ Addition for VxWorks shared lib build.
+
+ * include/makeinclude/platform_vxworks5.5.x.GNU:
+ Some cleanup and changes for shared lib builds.
+
+Fri Jul 01 14:40:25 2005 Gary Maxey <gary.maxey@hp.com>
+
+ * ace/config-tandem-nsk-mips-v3.h:
+ * ace/config-tandem-nsk-mips-v2.h:
+ Defined platform specific format specifiers for 64 bit integers
+
+Fri Jul 1 12:52:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * ace/config-doxygen.h:
+ Added ACE_HAS_IPV6
+
+Fri Jul 1 11:25:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * bin/MakeProjectCreator/config/interceptors.mpb
+ Don't use pi as base lib.
+
+ * bin/MakeProjectCreator/config/iorinterceptor.mpb
+ * bin/MakeProjectCreator/config/loadbalancing.mpb
+ * bin/MakeProjectCreator/config/rtscheduling.mpb:
+ * bin/MakeProjectCreator/config/fault_tolerance.mpb
+ * bin/MakeProjectCreator/config/ftclientorb.mpb
+ Added pi and pi_server as base projects when needed
+
+Fri Jul 1 10:05:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * bin/MakeProjectCreator/templates/bor.mpd:
+ Added support for StackReserveSize and StackCommitSize
+ template variables.
+
+Wed Jun 29 13:58:17 2005 Justin Michel <michel_j@ociweb.com>
+
+ * ace/OS_NS_Thread.cpp:
+
+ Somehow my previous checkin had many other differences besides the
+ simple change that I made. I've remerged the corresponding code
+ from the previous version, but I have no idea how the change
+ happened.
+
+Wed Jun 29 18:36:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * ace/Default_Constants.h:
+ Removed ACE_CONNECTOR_HANDLER_MAP_SIZE, it is not used at all
+ anywhere in the repo. Found this when solving a problem with
+ OpenVMS
+
+Wed Jun 29 12:33:18 2005 Steve Huston <shuston@riverace.com>
+
+ * examples/APG/Config/config.mpc:
+ * examples/APG/Config/Makefile.am:
+ * examples/APG/Config/HA_Status.cpp: Simplify greatly to build
+ HA_Status as a simple executable, not a DLL. Thanks to Gavin Yu
+ <songtaoyu at lucent dot com> for noticing this problem.
+
+ * examples/APG/Config/HA_Status.h: Removed.
+
+ * THANKS: Added Gavin Yu to the Hall of Fame.
+
+ * ace/Timer_Heap_T.cpp (dtor): When cleaning out the timer nodes,
+ free_node() before doing the deletion() upcall. Prevents a user's
+ handle_close() from doing a cancel_timer() and ripping the current
+ timer node out from under us and causing free_node() to assert().
+
+Wed Jun 29 10:43:11 2005 Justin Michel <michel_j@ociweb.com>
+
+ * ace/OS_NS_Thread.cpp:
+
+ Port the ACE_DISABLE_WIN32_INCREASE_PRIORITY feature from earlier
+ OCI versions of ACE, so that a user can disable the setting of a
+ thread to the realtime priority class. This prevents hard lockups
+ of Windows machines when running as an administrator, and allows
+ many tests to function when not running as an admin.
+
+Tue Jun 28 20:58:11 2005 J.T. Conklin <jtc@acorntoolworks.com>
+
+ * bin/MakeProjectCreator/config/core.mpb:
+
+ inherit from new install base project for backwards compatibility.
+
+ * bin/MakeProjectCreator/config/conv_lib.mpb:
+ * bin/MakeProjectCreator/config/install.mpb:
+ * bin/MakeProjectCreator/config/install_bin.mpb:
+ * bin/MakeProjectCreator/config/install_headers.mpb:
+ * bin/MakeProjectCreator/config/install_lib.mpb:
+
+ New new base projects to offer more flexibility on what parts of
+ a project are installed. install_bin, install_lib, and install_
+ headers install binaries, libraries, and header files. install
+ installs everything. conv_lib is for "convenience libraries", a
+ set of objects that is packaged as a library for the developer's
+ convenience. For most builds it builds a shared library that is
+ installed without the cooresponding headers; but the automake
+ build uses automake's native convenience library support --- a
+ static library is built and linked into the executable(s).
+
+Tue Jun 28 08:41:03 2005 Ming Xiong <mxiong@tango.dre.vanderbilt.edu>
+
+ * bin/MakeProjectCreator/config/global.features
+
+ Added a new feature ziparchive which is needed by
+ CIAO/DAnCE/ComponentPackager
+
+Mon Jun 27 09:38:12 UTC 2005 Martin Corino <mcorino@remedy.nl>
+
+ * ace/README:
+ Added documentation for ACE_USES_FIFO_SEM, ACE_HAS_LINUX_NPTL
+ and ACE_HAS_POSIX_SEM_TIMEOUT.
+
+Mon Jun 27 22:22:00 2005 Ossama Othman <ossama@dre.vanderbilt.edu>
+
+ * ace/Array_Map.h (ACE_Array_Map):
+
+ Added missing "const_pointer" typedef/trait.
+
+ * tests/Array_Map_Test.cpp (index_operator_test):
+
+ Work around compiler / STL implementations that cannot handle
+ implicit conversions from iterator to const_iterator (e.g. due
+ to missing template constructor) by accessing the iterators
+ through a reference to const a Map. We don't strictly need a
+ const Map for this test but having one allows us to exercise
+ const iterators.
+
+Mon Jun 27 21:54:12 UTC 2005 Martin Corino <mcorino@remedy.nl>
+
+ * ace/config-linux-common.h:
+ Made inclusion of config-posix.h user selectable by defining
+ ACE_HAS_LINUX_NPTL rather than including it by default since
+ there are too many problems with that with the differences
+ in the various Linux distros.
+ Only with a Linux distro having the latest NPTL implemented
+ (SuSE 9.3) have I been able to effectively use POSIX macros.
+
+Mon Jun 27 20:00:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * ace/Codecs.cpp:
+ * ace/Configuration.cpp:
+ * ace/DLL_Manager.cpp:
+ * ace/Multihomed_INET_Addr.cpp:
+ * ace/OS_NS_stdlib.cpp:
+ * ace/Service_Config.cpp:
+ Within the ACE lib ACE_LIB_TEXT must be used instead of ACE_TEXT
+
+Mon Jun 27 12:26:15 2005 Douglas C. Schmidt <schmidt@cs.wustl.edu>
+
+ * ace/Malloc_T.h: Updated the ACE_Malloc_T documentation to
+ mention the limitations with find()/bind(). Thanks to Hanson Lu
+ <suf_lu@yahoo.com> for reporting this.
+
+Mon Jun 27 10:24:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * bin/MakeProjectCreator/config/rtcosscheduling.mpb:
+ Added requires dummy_label. The RTCosScheduling library uses
+ a non compliant way to register its interceptors. This is
+ causing problems with the PI refactory so disable the building
+ of this lib until that has been fixed. See also bugzilla 2163.
+
+Mon Jun 27 08:21:12 UTC 2005 Martin Corino <mcorino@remedy.nl>
+
+ * ace/OS_NS_Thread.cpp:
+ Change to protect against race condition in sema based Event
+ implementation.
+
+ * ace/OS_NS_Thread.inl:
+ Change in errno (EINTR) handling with FIFO based sema timedwait.
+
+Mon Jun 27 06:59:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * ace/Message_Queue_T.{h,cpp}:
+ Initialise pointers with 0 and removed work around for Sun CC 5.1,
+ we don't support that compiler already for years
+
+Mon Jun 27 01:03:12 2005 Stoyan Paunov <s.paunov@vanderbilt.edu>
+
+ * bin/MakeProjectCreator/config/global.features:
+ * MPC/config/global.features:
+ * MPC/config/ZIP_Wrapper.mpb:
+
+ Added a new feature to MPC regarding the ZIP_Wrappers used by
+ the Repository Manager. I added this feature to make sure the RM
+ would not be compiled unless the proper ZIP libraries are in place.
+ Please check the README in CIAO/DAnCE/new_RepositoryManager
+
+
+Sun Jun 26 22:29:12 UTC 2005 Martin Corino <mcorino@remedy.nl>
+
+ * ace/config-posix.h:
+ Made test for POSIX_SEM TIMEOUTS more specific.
+
+ * ace/config-linux-common.h:
+ Added check to fix detection of POSIX_SEM TIMEOUTS for Linux
+ >= 2.6 because of crippled POSIX macros (moved here from
+ config-posix.h).
+ Made implementation of FIFO based Semaphores for Linux < 2.6
+ user selectable instead of default (default now back to
+ situation before I added FIFO based Semaphores).
+
+ * ace/OS_NS_Thread{.h .cpp .inl}:
+ Added support for Process shared Events when Process shared
+ pthread mutexes are not supported but FIFO Sems are configured.
+ Fixed several issues concerning correct errno handling in
+ case of timeouts.
+
+ * tests/run_test.lst:
+ Added missing Manual_Event_Test.
+
+ * tests/Process_Manual_Event_Test.cpp:
+ * tests/Process_Semaphore_Test.cpp:
+ Improved protection against non-supporting builds.
+
+ * tests/Dirent_Test.cpp:
+ Made this test a little less braindead so it does not recognize
+ FIFOs and PIPEs as directories anymore and tries chdir() on
+ them which is quite annoying.
+
+Sat Jun 25 01:42:22 2005 Ossama Othman <ossama@dre.vanderbilt.edu>
+
+ * ace/Array_Map.h:
+
+ MSVC++ 6's reverse_iterator adapter implementation is not
+ standard's compliant. Adjusted reverse_iterator template
+ parameters accordingly for this one case (i.e. _MSC_VER <=
+ 1200).
+
+ * ace/Array_Map.cpp (insert):
+
+ MSVC++ 6 doesn't like the "typename" qualification in the first
+ template argument to the std::pair<> return type. Removed it in
+ for the _MSC_VER <= 1200 case.
+
+ * tests/Array_Map_Test.cpp:
+
+ MSVC++ 6 doesn't pick up the const rbegin/rend() methods without
+ making the map object const, despite the fact the return value
+ is assigned to a const_reverse_iterator. Work around the
+ problem by casting the non-const map instance to a reference to
+ a const map when _MSC_VER <= 1200.
+
+Fri Jun 24 22:49:16 2005 J.T. Conklin <jtc@acorntoolworks.com>
+
+ * protocols/ace/RMCast/Makefile.am:
+
+ Regenerated.
+
+Fri Jun 23 19:58:12 UTC 2005 Martin Corino <mcorino@remedy.nl>
+
+ * ace/OS_NS_Thread.inl:
+ Added include for non-inline builds.
+
+Fri Jun 23 19:38:12 UTC 2005 Martin Corino <mcorino@remedy.nl>
+
+ * ace/OS_NS_Thread.h:
+ Removed extra semi-colon.
+
+Fri Jun 23 19:36:12 UTC 2005 Martin Corino <mcorino@remedy.nl>
+
+ * tests/Process_Manual_Event_Test.cpp:
+ * tests/Process_Semaphore_Test.cpp:
+ Added protection for singlethread builds.
+
+Fri Jun 24 11:42:43 2005 Ossama Othman <ossama@dre.vanderbilt.edu>
+
+ * ACE-INSTALL.html:
+
+ Added notes about testing and developing autotool support, and
+ how to bootstrap that support into a workspace.
+
+Fri Jun 24 11:36:26 2005 Ossama Othman <ossama@dre.vanderbilt.edu>
+
+ * ace/Array_Map.cpp:
+ * ace/Array_Map.inl:
+
+ Added missing "typename" keyword before template parameter
+ dependent types. Addresses VC++ 7.1/8 and Sun CC++ compile-time
+ warnings and errors.
+
+Fri Jun 24 11:02:06 2005 Chad Elliott <elliott_c@ociweb.com>
+
+ * bin/PerlACE/Process_Win32.pm:
+
+ Fixed this module to work with the ACE_TEST_WINDOW environment
+ variable that I added some time back.
+
+Fri Jun 23 13:36:12 UTC 2005 Martin Corino <mcorino@remedy.nl>
+
+ * ace/OS_NS_Thread.cpp:
+ Fixed unused 'result' variable in ACE_OS::event_init().
+
+Fri Jun 23 13:00:12 UTC 2005 Martin Corino <mcorino@remedy.nl>
+
+ * tests/Process_Manual_Event_Test.cpp:
+ * tests/Process_Semaphore_Test.cpp:
+ Fixes for compile errors on Linux 64bit.
+
+Fri Jun 23 10:20:12 UTC 2005 Martin Corino <mcorino@remedy.nl>
+
+ * ace/OS_NS_Thread.inl:
+ Made sure ETIME is always returned on timeouts of
+ ACE_OS::sema_timedwait and not ETIMEDOUT.
+
+ * tests/Semaphore_Test.cpp:
+ Extended platform coverage of timeout tests.
+
+ * tests/Auto_Event_Test.cpp:
+ * tests/Manual_Event_Test.cpp:
+ * tests/Process_Manual_Event_Test.cpp:
+ * tests/Process_Semaphore_Test.cpp:
+ * tests/run_test.lst:
+ * tests/tests.mpc:
+ Added new tests.
+
+Fri Jun 23 09:17:12 UTC 2005 Martin Corino <mcorino@remedy.nl>
+
+ * tests/INET_Addr_Test_IPV6.cpp:
+ * tests/Multihomed_INET_Addr_Test_IPV6.cpp:
+ * tests/SOCK_Send_Recv_Test_IPV6.cpp:
+ * tests/SOCK_Test_IPV6.cpp:
+ Fixed WCHAR compile problems.
+
+Fri Jun 23 08:49:12 UTC 2005 Martin Corino <mcorino@remedy.nl>
+
+ * ace/OS_NS_Thread{.h .cpp .inl}:
+ Extended ACE_OS::event_xxx implementation to support platforms
+ having either PThread support with Process Shared condition
+ variables or POSIX semaphores with named (process shared)
+ semaphore support or using the new FIFO based semaphores.
+ Fixed manual_reset implementation of condition based events
+ (event_pulse() did not work).
+
+Fri Jun 23 08:49:12 UTC 2005 Martin Corino <mcorino@remedy.nl>
+
+ * ace/config-aix-4.x.h:
+ Fixed problems by incorrectly reported ACE_HAS_POSIX_SEM_TIMEOUT
+ by config-posix.h.
+
+Fri Jun 24 07:20:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * ace/OS_NS_Thread.h:
+ Removed extra semi-colon.
+
+Thu Jun 23 22:24:12 UTC 2005 Martin Corino <mcorino@remedy.nl>
+
+ * ace/config-linux-common.h:
+ Fixed typo (ACE_HAS_SHMOPEN should be ACE_HAS_SHM_OPEN).
+
+Thu Jun 23 17:14:39 2005 Steve Huston <shuston@riverace.com>
+
+ * ace/Dev_Poll_Reactor.cpp (schedule_timer, reset_timer_interval):
+ * ace/Select_Reactor_T.cpp (schedule_timer, reset_timer_interval):
+ * ace/WFMO_Reactor.inl (cancel_timer, schedule_timer, reset_timer_interval):
+ If timer_queue_ is 0, don't attempt to call through it. Instead,
+ return -1 with errno ESHUTDOWN for scheduling; return 0 for cancel.
+
+Thu Jun 23 12:10:16 2005 Ossama Othman <ossama@dre.vanderbilt.edu>
+
+ * ace/Array_Map.h:
+ * ace/Array_Map.inl:
+ * ace/Array_Map.cpp:
+
+ Map implementation that focuses on small footprint and fast
+ iteration. Search times are, however, linear (O(n)) meaning
+ that this map isn't suitable for large data sets that will be
+ searched in performance critical areas of code. Iteration over
+ large data sets, however, is faster than linked list-based maps,
+ for example, since spatial locality is maximized through the use
+ of contiguous arrays as the underlying storage.
+
+ * ace/Makefile.am:
+ * ace/ace.mpc:
+
+ Added new Array_Map.* source files.
+
+ * tests/Array_Map_Test.cpp:
+
+ Regression test for ACE_Array_Map.
+
+ * tests/Makefile.am:
+ * tests/run_test.lst:
+ * tests/tests.mpc:
+
+ Added new Array_Map_Test regression test.
+
+Thu Jun 23 07:49:43 2005 J.T. Conklin <jtc@acorntoolworks.com>
+
+ * ace/Logging_Strategy.cpp (init):
+
+ Changed to not delete output stream when wipeout_logfile_ is
+ set, as that may result in a double delete when ownership of
+ the new stream is transferred to this->log_msg_.
+
+ Changed to not delete existing output stream if a new one is
+ not been created.
+
+ Thanks to Mark Callaghan and Ossama Othman for assistance.
+
+Thu Jun 23 12:34:12 UTC 2005 Martin Corino <mcorino@remedy.nl>
+
+ * ace/config-posix.h:
+ Fixed problems for single threading builds.
+
+Thu Jun 23 10:59:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * man/Makefile.am:
+ * man/man3/Makefile.am:
+ Removed these files because are also not part of the release
+
+Wed Jun 22 20:29:39 2005 Ossama Othman <ossama@dre.vanderbilt.edu>
+
+ * ace/OS_NS_Thread.h:
+
+ Removed extra semi-colon. Fixes g++ 4.0 builds.
+
+Wed Jun 22 19:11:23 2005 Ossama Othman <ossama@dre.vanderbilt.edu>
+
+ * THANKS:
+
+ Added Mark Callaghan to the Hall of Fame.
+
+ * ace/Log_Msg.cpp (msg_ostream):
+
+ Close, do not delete, the file stream in the
+ ACE_LACKS_IOSTREAM_TOTALLY case, as is done in the
+ ~ACE_Log_Msg() destructor. Addresses memory management issues.
+ Thanks to J.T. Conklin and Mark Callaghan for pointing out the
+ problem and suggesting the fix.
+
+ Do not reset the ostream_ and delete_ostream_ attributes if
+ the pointer to ostream_ is equal to the ostream argument passed
+ to this method. Prevents premature destruction of the ostream.
+ Thanks to Mark Callaghan for suggesting this fix.
+
+Wed Jun 22 19:55:12 UTC 2005 Martin Corino <mcorino@remedy.nl>
+
+ * ace/OS_NS_Thread{.h .inl}:
+ Oops, fixed some more wchar problems.
+
+Wed Jun 22 19:16:12 UTC 2005 Martin Corino <mcorino@remedy.nl>
+
+ * ace/OS_NS_sys_mman.inl:
+ * ace/OS_NS_Thread{.h .inl .cpp}:
+ * ace/INET_Addr.cpp:
+ * ace/SOCK_Dgram_Mcast.cpp:
+ Fixed wchar problems in arguments and variables.
+
+ * ace/config-linux-common.h:
+ Undef ACE_HAS_SHMOPEN after having included config-posix.h as
+ there are some things to check out here before really using
+ ::shm_open()!
+
+Wed Jun 22 09:25:12 2005 Gary Maxey <gary.maxey@hp.com>
+
+ * ace/config-lite.h:
+ Added __TANDEM platform to ACE_UNUSED_ARG macro
+
+Wed Jun 22 12:24:12 UTC 2005 Martin Corino <mcorino@remedy.nl>
+
+ * ace/config-posix.h:
+ Added test to set new macro ACE_HAS_POSIX_SEM_TIMEOUT when supported.
+
+ * ace/config-linux-common.h:
+ Added include for config-posix.h to test for more supported POSIX
+ functionality.
+ Added special test for Linux kernels < 2.6 because these falsely
+ report certain POSIX support while not having that in reality
+ (f.i. ACE_HAS_POSIX_SEM with ACE_HAS_POSIX_SEM_TIMEOUT).
+
+ * ace/config-lite.h:
+ Added test to undef (new) macro ACE_USES_FIFO_SEM (see below) when
+ other macro settings invalidate this one.
+
+ * ace/os_include/os_pthread.h:
+ Extended test to prevent definition of ACE_sema_t when ACE_USES_FIFO_SEM
+ is defined.
+
+ * ace/OS_NS_Thread{.h .inl .cpp}:
+ Added new implementation of ACE_OS::sema_XXX methods based on FIFOs
+ (derived from W. Richard Stevens, UNIX Network Programming V2)
+ active when !ACE_HAS_POSIX_SEM && ACE_USES_FIFO_SEM.
+ Offshoot of customer request for process shareable solution for Linux
+ 2.4.xx kernels.
+
+ Outlined most ACE_OS::mutex_XXX and ACE_OS::event_XXX methods resulting
+ in a) ~7 Kb footprint reduction (Linux 2.6) and b) lessened dependency
+ complexities allowing later introduction of another Event platform
+ emulation.
+
+
+Wed Jun 22 08:51:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * include/makeinclude/build_core_exe.bor:
+ * include/makeinclude/build_core_library.bor:
+ Removed these files, not used anymore
+
+Wed Jun 22 08:39:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tests/SOCK_Test_IPv6.cpp:
+ Fixed compile errors on Linux when ACE_HAS_IPV6 has been defined
+
+Wed Jun 22 07:53:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * ace/SOCK_Dgram_Mcast.cpp:
+ Fixed compile errors on Linux when ACE_HAS_IPV6 has been defined
+
+ * include/makeinclude/compiler.bor:
+ No need anymore to include ace_flags.bor
+
+ * include/makeinclude/ace_flags.bor:
+ Removed this file, not needed anymore
+
+Tue Jun 21 18:06:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * include/makeinclude/compiler.bor:
+ Removed -a8 and -b from the compiler flags, this are the defaults
+ for the compiler, so no need to explicitly specify them. Thanks to
+ Chad about informing me that -b is the default.
+
+Tue Jun 21 07:30:58 2005 Chad Elliott <elliott_c@ociweb.com>
+
+ * bin/MakeProjectCreator/config/global.mpb:
+
+ Set libpaths to '.' since libout is set to '.' as well.
+
+Mon Jun 20 20:07:45 2005 Chad Elliott <elliott_c@ociweb.com>
+
+ * bin/MakeProjectCreator/templates/gnu.mpd:
+
+ Support for the bug fix where the 'postcommand' wouldn't be
+ applied if there was more than one output file per input file.
+
+Mon Jun 20 16:45:39 2005 Steve Huston <shuston@riverace.com>
+
+ * ace/Asynch_IO.cpp: Added explicit template instantiations for
+ ACE_Refcounted_Auto_Ptr<ACE_Handler::Proxy, ACE_SYNCH_MUTEX>.
+
+Mon Jun 20 11:36:21 2005 Steve Huston <shuston@riverace.com>
+
+ * ace/OS_NS_sys_socket.inl (closesocket): Removed the
+ ACE_OS::shutdown() call in an HP-UX block. Calling shutdown breaks
+ an often-used idiom in UNIX programming of forking a new process
+ to handle a connection and closing the handle in the parent. Doing
+ a shutdown() before close() initiates a TCP close even though there
+ are multiple handles to the same socket. Thanks to Doug Schmidt
+ and Howard Finer for the exchange that led to this change. This
+ reverts a change made earlier:
+ Thu Jan 1 17:56:31 2004 Steve Huston <shuston@riverace.com>
+
+Mon Jun 20 09:46:24 2005 Chad Elliott <elliott_c@ociweb.com>
+
+ * bin/MakeProjectCreator/templates/gnu.mpd:
+
+ Fixed a long standing bug where the libpath set in a Define_Custom
+ was not utilized.
+
+Mon Jun 20 15:35:42 2005 Boris Kolpackov <boris@kolpackov.net>
+
+ * protocols/ace/RMCast/Acknowledge.cpp:
+ * protocols/ace/RMCast/Fragment.cpp:
+ * protocols/ace/RMCast/Link.cpp:
+ * protocols/ace/RMCast/Protocol.h:
+ * protocols/ace/RMCast/Reassemble.cpp:
+
+ Made code VC6-compatible.
+
+Mon Jun 20 11:38:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * bin/MakeProjectCreator/config/bidir_giop.mpb:
+ Added pi as base project, this was implicitly in the past because
+ portableserver was based on pi.
+
+Mon Jun 20 10:46:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * bin/MakeProjectCreator/config/portableserver.mpb:
+ The portableserver library is not dependent on pi anymore.
+ The new pi_server library is dependent.
+
+ * bin/MakeProjectCreator/config/ftrtevent.mpb:
+ * bin/MakeProjectCreator/config/ftrteventchannel.mpb:
+ * bin/MakeProjectCreator/config/ifrservice.mpb:
+ These projects use functionality of pi_server, so added that
+ as base project
+
+ * bin/MakeProjectCreator/config/rtportableserver.mpb:
+ * bin/MakeProjectCreator/config/messaging.mpb:
+ Added pi as base project, this was implicitly in the past because
+ portableserver was based on pi.
+
+Fri Jun 17 17:37:53 2005 Emre Turkay <turkaye@dre.vanderbilt.edu>
+
+ * bin/MakeProjectCreator/config/ciao_servant_dnc.mpb:
+
+ Added header_outputext to clean up the generated header files on
+ request.
+
+Fri Jun 17 17:22:13 2005 Boris Kolpackov <boris@kolpackov.net>
+
+ * protocols/ace/RMCast/Acknowledge.cpp:
+ * protocols/ace/RMCast/Acknowledge.h:
+ * protocols/ace/RMCast/Fragment.cpp:
+ * protocols/ace/RMCast/Fragment.h:
+ * protocols/ace/RMCast/Link.cpp:
+ * protocols/ace/RMCast/Protocol.cpp:
+ * protocols/ace/RMCast/Protocol.h:
+ * protocols/ace/RMCast/Reassemble.cpp:
+ * protocols/ace/RMCast/Reassemble.h:
+ * protocols/ace/RMCast/Retransmit.cpp:
+ * protocols/ace/RMCast/Retransmit.h:
+ * protocols/ace/RMCast/Simulator.h:
+ * protocols/ace/RMCast/Socket.cpp:
+ * protocols/ace/RMCast/Socket.h:
+
+ Implemented message fragmentation.
+
+ * protocols/examples/RMCast/Send_Msg/Protocol.h:
+ * protocols/tests/RMCast/Protocol.h:
+ * protocols/tests/RMCast/Sender.cpp:
+
+ Changed to send messages that would require fragmentation.
+
+Fri Jun 17 09:14:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * bin/MakeProjectCreator/config/pi_server.mpb:
+ New base project for pi_server. Will contain all needed portable
+ interceptor functionality specific for the server side
+
+Fri Jun 17 08:40:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * ace/Object_Manager.cpp:
+ Removed comment about very old gcc version
+
+ * ace/Service_Config.h:
+ Added new ACE_DYNAMIC_SERVICE_DIRECTIVE macro that makes it possible
+ to load a service using a process_directive call that works with the
+ normal service configurator and the xml based one. Thanks to
+ Lothar Werzinger <lothar at xcerla dot com> for providing this
+ new macro. We will use it then in TAO to load the services on
+ demand.
+
+Thu Jun 16 07:38:57 2005 Douglas C. Schmidt <schmidt@cs.wustl.edu>
+
+ * ace/SOCK_Stream.cpp (close): Removed the call to this->close_writer()
+ since that functionality was done by ACE_SOCK::close(), which
+ delegates to ACE_OS::closesocket(), which handles this
+ automatically.
+
+ * ace/Process.cpp (running): Only try to "kill" a process if
+ the PID is valid. Thanks to Howard Finer <hfiner at sonusnet
+ dot com> for contributing this.
+
+ * ace/Pipe.h (ACE_Pipe): Updated the documentation for this class
+ to clarify why it uses sockets on Windows. Thanks to Dave
+ Varnell <Dave.Varvell@ni.com> for prompting this.
+
+ * ace/INET_Addr.cpp (set): Changed the test of
+
+ if (port_number < 0)
+
+ to
+
+ if (port_number == -1)
+
+ to fix problems reported by Vemund Handeland
+ <vemund.handeland@fantoft.no>
+
+Wed Jun 15 12:36:04 MST 2005 Trevor Fields <fields_t@ociweb.com>
+
+ * bin/PerlACE/Run_Test.pm:
+
+ Adding method to add a library path dynamically for the run test
+ scripts.
+
+Wed Jun 15 17:50:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * bin/MakeProjectCreator/templates/bor.mpd:
+ reverse the libs, this solves a lot of problems in our static builds.
+
+Wed Jun 15 07:46:16 2005 Chad Elliott <elliott_c@ociweb.com>
+
+ * include/makeinclude/rules.bin.GNU:
+
+ Resurrected rules.bin.GNU as it may be required by old
+ hand-written makefiles.
+
+Wed Jun 15 07:36:14 2005 Chad Elliott <elliott_c@ociweb.com>
+
+ * bin/MakeProjectCreator/templates/bor.mpd:
+
+ Removed the use of uniq for libpaths. This was a work-around for
+ a bug in MPC which has been fixed.
+
+Wed Jun 15 11:30:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * bin/MakeProjectCreator/templates/bor.mpd:
+ Removed reverse, with this no static initializers where called
+
+Wed Jun 15 09:48:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * bin/MakeProjectCreator/templates/bor.mpd:
+ Use uniq for libpaths so that we don't generate things twice
+
+Wed Jun 15 09:06:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * bin/MakeProjectCreator/templates/bor.mpd:
+ Reversed the order in which the libs are generated. This make sure
+ we first get the static created for ACE, then for TAO, etc. Fixes
+ the problems in the CBX static build
+
+Tue Jun 14 17:52:39 2005 Steve Huston <shuston@riverace.com>
+
+ * ace/Thread_Manager.h: Improved documentation for the task_list()
+ and task_all_list() methods.
+
+Tue Jun 14 14:19:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * ACE-INSTALL.html:
+ Updated Borland build instructions
+
+Tue Jun 14 12:35:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * ace/Reactor_Timer_Interface.{h,cpp}:
+ Moved destructor to a new cpp file to fix Cygwin warnings
+
+ * ace/ace.mpc:
+ * ace/Makefile.am:
+ Added Reactor_Timer_Interface.cpp
+
+Tue Jun 14 12:30:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * ace/IO_Cntl_Msg.{h,cpp,inl}:
+ Moved methods implemented in the header file to a new inl file.
+ Fixes warnings in the Cygwin build
+
+ * ace/ace.mpc:
+ * ace/Makefile.am:
+ Added IO_Cntl_Msg.cpp
+
+Tue Jun 14 11:05:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * bin/auto_run_tests.pl:
+ Fixed typo in comment
+
+Tue Jun 14 08:48:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * bin/MakeProjectCreator/config/interceptors.mpb:
+ * bin/MakeProjectCreator/config/portableserver.mpb:
+ * bin/MakeProjectCreator/config/rtcorba.mpb:
+ * bin/MakeProjectCreator/config/utils.mpb:
+ Added pi as base project
+
+Mon Jun 13 13:50:53 2005 Emre Turkay <turkaye@dre.vanderbilt.edu>
+
+ * bin/ciao_tests.lst:
+
+ Added the node application tests to the autobuilds.
+
+Mon Jun 13 18:06:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * performance-tests/SCTP/SOCK_STREAM_clt.cpp:
+ Fixed compile errors
+
+Mon Jun 13 13:57:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * bin/make_release:
+ Don't do LF->CRLF conversion for xls files, that are Microsoft
+ Excel files. The RTCorba tests have such a file.
+
+Mon Jun 13 13:48:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * bin/MakeProjectCreator/config/pi.mpb:
+ New base project for the new PI library we will add soon to the
+ archive. This PortableInterceptor libray will contain the
+ ORBInitializer Registry, Policy Factory Registry and ORBInitInfo
+ in the first version
+
+Mon Jun 13 12:52:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * performance-tests/SCTP/hist.{h,cpp}:
+ * performance-tests/SCTP/SOCK_SEQPACK_clt.cpp:
+ * performance-tests/SCTP/SOCK_STREAM_clt.cpp:
+ Moved the hist struct with associated methods to the ACE_SCTP
+ namespace. This should fix the last compile errors in Irix.
+ Thanks to Doug McCorkle <mccdo at iastate dot edu> for providing
+ the patches
+
+Mon Jun 13 10:41:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * bin/MakeProjectCreator/config/kokyu_dsrt_scheduler_server.mpb:
+ * bin/MakeProjectCreator/config/kokyu_dsrt_scheduler.mpb:
+ Moved the codecfactory from the server to the normal project,
+ also the clients need it
+
+Sun Jun 12 14:53:33 2005 J.T. Conklin <jtc@acorntoolworks.com>
+
+ * ace/Logging_Strategy.cpp (parse_args):
+
+ Update comment to make it clear value is being converted from
+ number of KB to number of bytes.
+
+Sun Jun 12 12:48:12 UTC 2005 Martin Corino <mcorino@remedy.nl>
+
+ * include/makeinclude/platform_g++_common.GNU:
+ Fixed problem with GXX version detection when default Make
+ shell is CMD.EXE and problems with different version reports
+ with non-standard GCC implementations (like VxWorks:-).
+
+ * include/makeinclude/wrapper_macros.GNU:
+ Fixed problem with ACE version detection when default Make
+ shell is CMD.EXE.
+
+ * include/makeinclude/rules.local.GNU:
+ Fixed problem with creation of .depend files when default Make
+ shell is CMD.EXE.
+
+ * include/makeinclude/rules.lib.GNU:
+ * include/makeinclude/platform_vxworks5.5.x.GNU:
+ Changed to implement support for creation of shared libs for
+ VxWorks targets.
+
+Sat Jun 11 11:31:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * bin/MakeProjectCreator/config/kokyu_dsrt_scheduler_server.mpb:
+ Added codecfactory as base
+
+Fri Jun 10 18:33:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * bin/MakeProjectCreator/config/rtcosscheduling.mpb:
+ Added missing base projexts. Thanks for JT for reporting this
+
+Fri Jun 10 16:03:12 UTC 2005 Martin Corino <mcorino@remedy.nl>
+
+ * tests/DLL_Test.cpp:
+ Updated to use new 'ACE_HAS_DYNAMIC_LINKING' macro.
+
+Fri Jun 10 16:00:12 UTC 2005 Martin Corino <mcorino@remedy.nl>
+
+ * ace/config-lite.h:
+ Introduced new macro 'ACE_HAS_DYNAMIC_LINKING' to enable more
+ generalized testing for platforms supporting dynamic linking
+ than 'ACE_HAS_SVR4_DYNAMIC_LINKING' supports (which excludes
+ WIN32, VxWorks and HPUX which *do* support dynamic linking).
+
+Fri Jun 10 15:53:12 UTC 2005 Martin Corino <mcorino@remedy.nl>
+
+ * ace/OS_main.h:
+ * ace/OS_main.cpp:
+ Changed implementation of 'ace_main' entrypoints for VxWorks to
+ support shared library builds without resulting in 'undefined symbol'
+ messages for 'ace_main_i'.
+
+Fri Jun 10 15:47:12 UTC 2005 Martin Corino <mcorino@remedy.nl>
+
+ * ace/OS_NS_dlfcn.inl:
+ Fixed VxWorks implementation of dlopen().
+
+Fri Jun 10 07:55:32 2005 Phil Mesnier <mesnier_p@ociweb.com>
+
+ * bin/tao_orb_tests.lst:
+ Added new test for Alternate IIOP addresses.
+
+Fri Jun 10 13:16:53 2005 Simon McQueen <sm@prismtech.com>
+
+ * ace/Reactor.cpp (register_handler):
+
+ Backed out Thu Jun 9 11:12:39 2005 Steve Huston.
+ It was causing test failures on Linux.
+
+Fri Jun 10 06:43:25 2005 Chad Elliott <elliott_c@ociweb.com>
+
+ * bin/MakeProjectCreator/templates/gnu.mpd:
+
+ Interpret flag_overrides of the custom_types->dependent setting
+ as an array instead of a string. This makes things consistent
+ with non-overridden values of dependent.
+
+ * bin/create_ace_build:
+ * bin/create_ace_build.pl:
+
+ Inform users about using $MPC_ROOT/clone_build_tree.pl instead of
+ these scripts.
+
+ * bin/depgen.pl:
+
+ Simplified/collapsed duplicated code from the VMS additions.
+
+Thu Jun 9 18:38:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * ace/Event.h:
+ Doxygen improvements
+
+ * bin/MakeProjectCreator/config/codecfactory.mpb:
+ New base project for the new codecfactory for TAO
+
+Thu Jun 9 18:32:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * bin/tao_orb_tests.lst:
+ Added tao/tests/POA/Reference_Counting
+
+Thu Jun 9 11:47:31 2005 Steve Huston <shuston@riverace.com>
+
+ * tests/Pipe_Test.cpp: Fixed wide-char text issues.
+
+Thu Jun 9 11:12:39 2005 Steve Huston <shuston@riverace.com>
+
+ * ace/Reactor.cpp (register_handler): When registering for one or more
+ signals, set the event handler's reactor() pointer to the registered
+ reactor. Makes this behavior consistent with all other registration
+ types.
+
+Thu Jun 9 16:18:32 2005 Boris Kolpackov <boris@kolpackov.net>
+
+ * protocols/ace/RMCast/Link.cpp:
+ * protocols/ace/RMCast/Socket.cpp:
+ * protocols/ace/RMCast/Socket.h:
+
+ Implemented timed recv() and size().
+
+Thu Jun 9 13:16:53 2005 Simon McQueen <sm@prismtech.com>
+
+ * bin/tao_other_tests.lst:
+
+ Added Bug_2137_Regression test.
+
+Thu Jun 9 09:31:28 2005 Simon McQueen <sm@prismtech.com>
+
+ * NEWS:
+
+ Updated with late release note submissions.
+
+Wed Jun 08 08:43:59 2005 Simon McQueen <sm@prismtech.com>
+
+ * ACE version 5.4.6 released.
+
+Wed Jun 8 11:21:50 2005 Simon McQueen <sm@prismtech.com>
+
+ * NEWS:
+
+ Updated with release note entries.
+
+Fri Jun 3 13:42:18 2005 Steve Huston <shuston@riverace.com>
+
+ * ace/String_Base.h: Removed ACE_INLINE from the operator+ functions.
+ The functions are defined in String_Base.cpp. Fixes compile errors
+ on Solaris autoconf build.
+
+ * examples/C++NPv2/AIO_Client_Logging_Daemon.cpp: Added missing
+ #include for ace/Null_Mutex.h and ace/Null_Condition.h since this
+ example uses ACE_Task<ACE_NULL_SYNCH>.
+
+ * Kokyu/DSRT_Sched_Queue_T.h: Added missing #include "ace/Null_Mutex.h"
+
+Thu Jun 2 13:58:29 2005 Steve Huston <shuston@riverace.com>
+
+ * ace/Local_Tokens.cpp (~ACE_TSS_TPQ_Entry): Replaced missing '}' from:
+ Mon May 30 18:10:56 2005 Ossama Othman <ossama@dre.vanderbilt.edu>
+
+Wed Jun 1 18:33:29 2005 Steve Huston <shuston@riverace.com>
+
+ * examples/C++NPv2/AC_Client_Logging_Daemon.cpp: Reordered some
+ #include directives so files needed by ace/Connector.h are in before
+ ace/Connector.h. Fixes optimized autoconf build on AIX.
+
+Wed Jun 1 12:19:27 2005 Steve Huston <shuston@riverace.com>
+
+ * ace/OS_NS_signal.inl: Reverted:
+ Tue May 31 18:51:31 2005 Steve Huston <shuston@riverace.com>
+ It broke builds on Linux and BSD, at least, with compile errors like:
+ `::' does not have a class or union named `sigaction'
+ I think this is probably an issue of including files in the wrong
+ order and it only trips up HP-UX, but I'm not sure.
+
+Wed Jun 1 07:10:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * bin/tao_orb_tests.lst:
+ Removed bug 2088 test for the time being, the fix isn't the correct one
+ and now the test has wrong expectations
+
+Tue May 31 18:51:31 2005 Steve Huston <shuston@riverace.com>
+
+ * ace/OS_NS_signal.inl (sigaction): Added "::" qualifier to references
+ to "struct sigaction" to distinguish it from sigaction in the
+ ACE_OS namespace. This was tripping up HP aC++ in certain use cases.
+
+Tue May 31 18:46:29 2005 Steve Huston <shuston@riverace.com>
+
+ * ace/INET_Addr.cpp (set_address): When needing to plug in an
+ IPv4-mapped IPv6 address, avoid any possibility of compiler struct
+ member non-contiguous alignment. Use the ip6 address type and
+ plug the values in where they go. Thanks to Robert Iakobashvili
+ <coroberti at gmail dot com> for this idea.
+
+Tue May 31 21:45:10 2005 Boris Kolpackov <boris@kolpackov.net>
+
+ * NEWS:
+
+ Updated RMCast-related information.
+
+Tue May 31 11:49:23 2005 Ossama Othman <ossama@dre.vanderbilt.edu>
+
+ * ace/Free_List.inl:
+ * ace/Message_Queue_T.inl:
+ * ace/POSIX_CB_Proactor.inl:
+ * ace/SUN_Proactor.inl:
+
+ Removed these empty inline files.
+
+ * ace/Free_List.cpp:
+ * ace/Free_List.h:
+ * ace/Message_Queue_T.cpp:
+ * ace/Message_Queue_T.h:
+ * ace/POSIX_CB_Proactor.cpp:
+ * ace/POSIX_CB_Proactor.h:
+ * ace/SUN_Proactor.cpp:
+ * ace/SUN_Proactor.h:
+
+ Removed include directives for removed inline files.
+
+ * ace/Timer_Queue_Adapters.cpp (activate):
+
+ Moved method definition out of ACE_HAS_DEFERRED_TIMER_COMMANDS
+ block. Fixes "unresolved symbol" link-time errors.
+
+ * ace/Makefile.am (nobase_include_HEADERS):
+
+ Removed newly removed inline file.
+
+Tue May 31 10:39:10 2005 Justin Michel <michel_j@ociweb.com>
+
+ * ace/String_Base.inl:
+ * ace/String_Base.cpp:
+
+ Move operator+=() methods from .inl to .cpp in an effort to
+ reduce footprint.
+
+Mon May 30 18:10:56 2005 Ossama Othman <ossama@dre.vanderbilt.edu>
+
+ * ace/Addr.cpp:
+ * ace/Addr.inl:
+ * ace/Event_Handler_T.cpp:
+ * ace/Event_Handler_T.inl:
+ * ace/Free_List.cpp:
+ * ace/Free_List.inl:
+ * ace/Hashable.cpp:
+ * ace/Hashable.inl:
+ * ace/IOStream_T.cpp:
+ * ace/IOStream_T.inl:
+ * ace/Local_Tokens.cpp:
+ * ace/Local_Tokens.inl:
+ * ace/Lock_Adapter_T.cpp:
+ * ace/Lock_Adapter_T.inl:
+ * ace/Malloc_T.cpp:
+ * ace/Malloc_T.inl:
+ * ace/Map_T.cpp:
+ * ace/Map_T.inl:
+ * ace/Message_Block.cpp:
+ * ace/Message_Block.inl:
+ * ace/Message_Queue.cpp:
+ * ace/Message_Queue.inl:
+ * ace/Message_Queue_T.cpp:
+ * ace/Message_Queue_T.inl:
+ * ace/POSIX_CB_Proactor.cpp:
+ * ace/POSIX_CB_Proactor.inl:
+ * ace/POSIX_Proactor.cpp:
+ * ace/POSIX_Proactor.inl:
+ * ace/Refcounted_Auto_Ptr.h:
+ * ace/Refcounted_Auto_Ptr.inl:
+ * ace/Refcounted_Auto_Ptr.cpp:
+ * ace/Remote_Tokens.cpp:
+ * ace/Remote_Tokens.inl:
+ * ace/Reverse_Lock_T.cpp:
+ * ace/Reverse_Lock_T.inl:
+ * ace/SUN_Proactor.cpp:
+ * ace/SUN_Proactor.inl:
+ * ace/Shared_Memory_MM.cpp:
+ * ace/Shared_Memory_MM.inl:
+ * ace/Shared_Memory_SV.cpp:
+ * ace/Shared_Memory_SV.inl:
+ * ace/Strategies_T.cpp:
+ * ace/Strategies_T.inl:
+ * ace/Task.cpp:
+ * ace/Task.inl:
+ * ace/Thread_Manager.cpp:
+ * ace/Thread_Manager.inl:
+ * ace/Timer_Queue_Adapters.cpp:
+ * ace/Timer_Queue_Adapters.inl:
+ * ace/Timer_Queue_T.inl:
+
+ Moved inlined virtual methods out of line. Addresses
+ RTTI-related problems when using g++ 4.0's
+ "-fvisibility-inlines-hidden" command line option.
+
+ * ace/String_Base.cpp:
+
+ Removed "ACE_INLINE" macros. They should not be used in this
+ out-of-line source file.
+
+ * ace/Makefile.am:
+ * ace/ace.mpc:
+
+ Added Refcounted_Auto_Ptr.cpp to the list of template files.
+
+Mon May 30 13:39:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * ace/Task.cpp:
+ The Borland preview compiler is the only Borland compiler capable
+ of handling the reinterpret cast
+
+Mon May 30 13:14:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * bin/tao_orb_tests.lst:
+ Added TAO/tests/Portable_Interceptors/Bug_2088/run_test.pl
+
+Mon May 30 09:34:12 UTC 2005 Martin Corino <mcorino@remedy.nl>
+
+ * include/makeinclude/platform_vxworks5.x_diab.GNU:
+ * include/makeinclude/platform_vxworks5.x_g++.GNU:
+
+ Removed these files since these platform configurations are
+ not supported anymore with the current ACE/TAO releases.
+ The currently supported platform configuration is the
+ 'platform_vxworks5.5.x.GNU'.
+
+Mon May 30 09:19:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * ace/Array_Base.cpp:
+ Initialise pointer with 0
+
+Mon May 30 08:02:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * include/makeinclude/platform_aix_ibm.GNU:
+ Don't use -qstaticinline in a 64bit build with Visual Age 6. When
+ this option is specified TAO crashes strangely. Seems a problem
+ in the Visual Age compiler in 64bit mode.
+
+Sun May 29 17:49:00 2005 J.T. Conklin <jtc@acorntoolworks.com>
+
+ * m4/compiler.m4:
+
+ Disable the use of gcc's symbol visibility on MacOSX, since it
+ requires features of the ELF object file format not present in
+ Mach-O. Longer term we need a feature check that explicitly
+ tests for proper operation of symbol visibility instead of a
+ list of systems where it's disabled.
+
+Fri May 27 15:32:15 2005 Justin Michel <michel_j@ociweb.com>
+
+ * ace/ACE.h:
+ * ace/ACE.cpp:
+
+ Added a new ACE::wild_match() function which is used to support the
+ TAO -ORBPreferredInterfaces option. wild_match was contributed by
+ Kevin Heifner <heifner_k@ociweb.com>.
+
+ * ace/SOCK_SEQPACK_Association.h:
+ * ace/SOCK_SEQPACK_Connector.h:
+ * apps/drwho/Protocol_Manager.cpp:
+ * examples/APG/Reactor/Timers.cpp:
+ * tests/Network_Adapters_Test.cpp:
+
+ These files #included config.h which isn't safe, because it
+ won't necessarilly pick up the correct symbols. For example, I
+ caught this by trying to build ACE on Windows with
+ __ACE_INLINE__ = 0. The files that #included config.h directly
+ saw that it was defined as 0, but changing them to #include
+ config-all.h instead, correctly saw that the symbol was
+ undefined.
+
+Fri May 27 10:26:34 2005 Chad Elliott <elliott_c@ociweb.com>
+
+ * bin/MakeProjectCreator/templates/gnu.mpd:
+
+ Interpret custom_types->dependent as an array instead of a string.
+ This is completely backward compatible since a string is just a
+ one element array in the template language.
+
+Fri May 27 12:22:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * include/makeinclude/platform_aix_ibm.GNU:
+ When building for 64bit, make sure we enable the 64bit warnings
+
+Fri May 27 08:49:12 UTC 2005 Martin Corino <mcorino@remedy.nl>
+
+ * ace/OS_NS_Thread.inl:
+
+ Fixed possible NULL-pointer assignment for VxWorks implementation
+ of ACE_OS::thr_sigsetmask().
+
+Fri May 27 00:40:19 2005 Ossama Othman <ossama@dre.vanderbilt.edu>
+
+ * bin/tao_orb_tests.lst:
+
+ Added new recursive type Any insertion/extraction test to the
+ test suite.
+
+Thu May 26 17:07:34 2005 Justin Michel <michel_j@ociweb.com>
+
+ * ace/String_Base.inl:
+ * ace/String_Base.cpp:
+
+ Move all non-trivial functions out of the .inl file. Hopefully this
+ will cause a net improvement to the footprint.
+
+Thu May 26 16:13:34 2005 Justin Michel <michel_j@ociweb.com>
+
+ * ace/config-win32-msvc-6.h:
+
+ The standard library that comes with vc6 is pre-standard c++,
+ but it's close enough for many things. Enabling its use should
+ be more portable. This was done long ago for the OCI versions of
+ TAO (Since 1.2a), and was apparently overlooked until now.
+
+Thu May 26 15:22:10 2005 Emre Turkay <turkaye@dre.vanderbilt.edu>
+
+ * Release:
+
+ Added the contrib directory into the Release script.
+
+Thu May 26 18:21:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * ace/Thread_Manager.{h,cpp}:
+ Added thr_state method to ACE_Thread_Manager so that we are able
+ to retrieve the state of a certain thread.
+
+Thu May 26 07:39:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * include/makeinclude/platform_cygwin32.GNU:
+ * include/makeinclude/platform_freebsd.GNU:
+ * include/makeinclude/platform_gnuwin32_common.GNU:
+ * include/makeinclude/platform_osf1_3.2_cxx.GNU:
+ * include/makeinclude/platform_osf1_4.x_cxx.GNU:
+ * include/makeinclude/platform_osf1_4.x_g++.GNU:
+ * include/makeinclude/platform_qnx_neutrino.GNU:
+ * include/makeinclude/platform_rtems.x_g++.GNU:
+ Simplified these files by using the ?= operator
+
+Wed May 25 15:51:03 2005 Steve Totten <totten_s@ociweb.com>
+
+ * ace/OS_NS_stdio.inl:
+ * ace/OS_NS_stdio.cpp:
+ * ace/OS_TLI.inl:
+ * ace/config-aix-4.x.h:
+ * ace/config-posix.h:
+ These files were using improper syntax to compare the value of
+ _XOPEN_SOURCE against a constant that caused compilation errors on
+ HP-UX 11.23 with HP aC++/ANSI C B3910B A.06.00. For example:
+ #if defined (_XOPEN_SOURCE) && (_XOPEN_SOURCE >= 500)
+ was changed to:
+ #if (defined _XOPEN_SOURCE && (_XOPEN_SOURCE - 0) >= 500)
+
+ Thanks to Paul Koch <paul dot koch at mci dot com> for reporting
+ this problem and providing the solution.
+
+Wed May 25 20:08:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * bin/msvc_static_order.lst:
+ Added new RTEvent_Skel and RTEvent_Serv libraries and removed
+ RTOldEvent
+
+Tue May 24 20:09:28 2005 J.T. Conklin <jtc@acorntoolworks.com>
+
+ * bin/MakeProjectCreator/config/time.mpb:
+
+ Inherit from svc_utils.mpb.
+
+Tue May 24 20:46:28 2005 Olli Savia <ops@iki.fi>
+
+ * ace/config-irix6.x-common.h:
+ * ace/config-linux-common.h:
+ Changed incorrect define ACE_USES_NEW_TERMIOS to
+ ACE_USES_NEW_TERMIOS_STRUCT.
+
+Tue May 24 09:31:42 2005 Chad Elliott <elliott_c@ociweb.com>
+
+ * bin/MakeProjectCreator/config/acedefaults.mpb:
+
+ Use $(ILIBMODIFIER) instead of $(LIBMODIFIER).
+
+ * tests/Pipe_Test.cpp:
+ * tests/Process_Mutex_Test.cpp:
+
+ Added missing ACE_TEXT () around option strings. This was causing
+ a very strange file to show up after the Process_Mutex_Test was
+ run in the Borland unicode build and the Pipe_Test didn't run at
+ all.
+
+Tue May 24 00:17:09 2005 Emre Turkay <turkaye@dre.vanderbilt.edu>
+
+ * bin/MakeProjectCreator/config/cidlc.mpb:
+
+ Created a base project for cidlc & ccf project files.
+
+Tue May 24 07:58:09 2005 Olli Savia <ops@iki.fi>
+
+ * ace/SSL/SSL_SOCK_Stream.h:
+ Added include "ace/os_include/os_stdio.h" to fix compile
+ problem on LynxOS. Thanks to Christine Ballard
+ <christine.ballard at lmco dot com> for reporting the problem.
+
+Mon May 23 23:11:14 2005 Emre Turkay <turkaye@dre.vanderbilt.edu>
+
+ * contrib/utility/*:
+
+ Added the utility library.
+
+Mon May 23 16:38:13 2005 Steve Huston <shuston@riverace.com>
+
+ * examples/Reactor/Proactor/post_completions.cpp: Made use of the
+ ACE_POSIX_SIG_Proactor-based test dependent on
+ ACE_HAS_POSIX_REALTIME_SIGNALS, not ACE_POSIX_SIG_PROACTOR.
+ ACE_POSIX_SIG_PROACTOR indicates a preference for that proactor
+ implementation when one is not specified; it's not a capability
+ indicator. The presence of the ACE_POSIX_SIG_Proactor implementation
+ is based on the ACE_HAS_POSIX_REALTIME_SIGNALS setting, so that's
+ what's used to decide whether to explicitly use
+ ACE_POSIX_SIG_Proactor. This fixes a build error on Mac OS X Tiger
+ with autoconfigure, as well as any other platform with AIO
+ support that doesn't declare a Proactor implementation preference.
+ Thanks to J.T. Conklin for raising this issue and working on testing
+ fixes.
+
+Mon May 23 14:52:19 2005 Justin Michel <michel_j@ociweb.com>
+
+ * ACEXML/tests/util/util.mpc:
+
+ Add missing $ Id tag.
+
+Mon May 23 13:02:25 2005 Justin Michel <michel_j@ociweb.com>
+
+ * ace/String_Base.h:
+ * ace/String_Base.inl:
+ * ace/String_Base.cpp:
+
+ Fixed some documentation bugs, and added some new features to
+ this class. New efficient overloads for string concatenation.
+ Fixed clear(1) to work as documented. Used a more optimal
+ string growth when concatenating strings. Performance
+ optimizations for string concatenation.
+
+ * tests/SString_Test.cpp:
+
+ Test the new string concatenation overloads.
+
+ * bin/tao_other_tests.lst:
+
+ Enabled new ImR tests, and grouped all ImR tests together.
+
+Mon May 23 12:26:19 2005 Steve Huston <shuston@riverace.com>
+
+ * ace/Thread.h: Doxygen-ized the join() comments.
+
+Mon May 23 13:18:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * ace/Lib_Find.cpp:
+ Reverted change below, causes compile errors with some compilers
+
+Mon May 23 12:50:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * ace/Lib_Find.cpp:
+ Small const fix
+
+Mon May 23 10:56:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * bin/MakeProjectCreator/config/ftrtevent.mpb:
+ * bin/MakeProjectCreator/config/rtcorbaevent.mpb:
+ Use rtevent_serv as base project. These projects use some rtevent
+ implementation stuff so just the client side stubs are not enough.
+
+ * bin/MakeProjectCreator/config/rteventexe.mpb:
+ Use rtevent_skel as base project
+
+Mon May 23 10:24:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * bin/MakeProjectCreator/config/rtevent_serv.mpb:
+ * bin/MakeProjectCreator/config/rtevent_skel.mpb:
+ New files, the RTEvent service is being split in 3 libs so
+ we need some new base projects
+
+Mon May 23 05:47:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * bin/MakeProjectCreator/config/rtoldevent.mpb:
+ Removed this file
+
+ * bin/MakeProjectCreator/config/rteventlogadmin.mpb:
+ Removed rtoldevent as base project
+
+Sun May 22 12:01:46 2005 Olli Savia <ops@iki.fi>
+
+ * ace/High_Res_Timer.cpp:
+
+ Fixed a typo in comment.
+
+Fri May 20 21:11:07 2005 Ossama Othman <ossama@dre.vanderbilt.edu>
+
+ * ace/DLL.cpp (~ACE_DLL):
+
+ Explicitly delete() this->dll_name_. It is normally delete()d
+ in ACE_DLL::close(). However, that may not occur if full
+ ACE_DLL initialization is interruepted due to errors
+ (e.g. attempting to open a DSO/DLL that does not exist). Fixes
+ a memory leak.
+
+ * ace/Log_Msg.cpp (msg_ostream):
+
+ Delete the previously allocated ostream prior to setting the new
+ one, if necessary. Fixes a memory leak.
+
+ * ace/Logging_Strategy.h (ACE_Logging_Strategy):
+
+ Converted integer fields that are really booleans to be of type
+ "bool", and reordered fields to avoid excessive alignment
+ padding. Reduces size of this class by 8 bytes on most
+ platforms.
+
+ * ace/Logging_Strategy.cpp:
+
+ Initialize fields in base member initializer list to prevent
+ accidental use of uninitialized fields.
+
+ Use C++ "true" and "false" instead of "1" and "0", respectively,
+ when setting boolean field values.
+
+ * ace/SString.h (ACE_Auto_String_Free):
+
+ Corrected documentation suggesting use of
+ ACE_Auto_Array_Ptr<char *>. The correct template argument is
+ "char", not "char *".
+
+ * tests/CDR_Test.cpp:
+ * tests/Multicast_Test.cpp:
+
+ Fixed memory leaks.
+
+ * tests/Logging_Strategy_Test.cpp:
+
+ Updated to be consistent with boolean field changes in
+ ACE_Logging_Strategy class.
+
+ * tests/TP_Reactor_Test.cpp (delete_reactor):
+
+ Reordered finalization code to prevent memory leak.
+
+Fri May 20 19:05:22 2005 Douglas C. Schmidt <schmidt@cs.wustl.edu>
+
+ * ace/Thread.h (ACE_Thread): Updated the documentation of
+ ACE_Thread::join(). Thanks to Alan Balasuar
+ <balasuar@gmail.com> for motivating this fix.
+
+Sat May 21 18:30:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tests/HTBP/Reactor_Tests/server.cpp:
+ Fixed value computed is not used warning in GCC IA64 build
+
+Fri May 20 15:28:00 2005 Gary Maxey <gary.maxey@hp.com>
+
+ * ace/config-lite.h
+
+ Added TANDEM platform for ACE_NOTREACHED macro.
+
+Thu May 19 19:10:30 2005 Douglas C. Schmidt <schmidt@cs.wustl.edu>
+
+ * apps/Gateway/Gateway/Concrete_Connection_Handlers.cpp
+ (handle_output):
+
+ Removed
+
+ ACE_ASSERT (errno == EWOULDBLOCK);
+
+ since errno may have been changed by this point. Thanks to Ro
+ Madhavan <ro_madhavan@sify.com> for reporting this.
+
+Thu May 19 18:50:23 2005 Steve Huston <shuston@riverace.com>
+
+ * ace/ICMP_Socket.{h cpp inl}:
+ * ace/Ping_Socket.{h cpp inl}:
+ * tests/Network_Adapters_Test.{cpp, h}: Moved ICMP_Socket and
+ Ping_Socket out of the ACE namespace and changed names to
+ ACE_ICMP_Socket and ACE_Ping_Socket, respectively. Also fixed up
+ some text strings with ACE_TEXT.
+ ACE_ICMP_Socket now does not check for root euid - allow the OS to
+ do whatever checks it requires/implements.
+ Improved implementation of ACE_Ping_Socket.
+ Thanks to Robert Iakobashvili for these improvements and changes.
+
+Thu May 19 15:59:38 2005 Steve Huston <shuston@riverace.com>
+
+ * ace/SOCK.h: Clarified doc on close() - it sets the object's
+ handle to ACE_INVALID_HANDLE.
+
+Thu May 19 08:58:48 2005 Ossama Othman <ossama@dre.vanderbilt.edu>
+
+ * ace/INET_Addr.cpp:
+ * ace/INET_Addr.inl:
+
+ Moved remaining virtual methods out of line. See "Wed May 18
+ 16:19:32 2005 Ossama Othman <ossama@dre.vanderbilt.edu>" for
+ details.
+
+Thu May 19 15:21:00 UTC 2005 Jeff Parsons <j.parsons@vanderbilt.edu>
+
+ * bin/MakeProjectCreator/config/taoidl3toidl2defaults.mpb:
+
+ Added line
+
+ after += TAO_IDL3_TO_IDL2_EXE
+
+ to the config file to make sure that the executable is built
+ before being used in a test, example or application. Thanks to
+ Chad Elliott <elliott_c@ociweb.com> for suggesting the change.
+
+Thu May 19 14:05:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * netsvcs/clients/Logger/indirect_logging.cpp:
+ * netsvcs/lib/Client_Logging_Handler.cpp:
+ When we can't open the logger print out an error and exit with -1.
+
+Thu May 19 00:38:46 2005 Ossama Othman <ossama@dre.vanderbilt.edu>
+
+ * config-g++-common.h:
+ * config-lite.h:
+
+ Removed ACE_EXPORT_SINGLETON_{DECLARATION,DECLARE} macro
+ definitions. They do not provide the expected behavior in g++
+ 4.0 configurations, as they do in VC++ configurations.
+
+Wed May 18 16:19:32 2005 Ossama Othman <ossama@dre.vanderbilt.edu>
+
+ * ace/ATM_Addr.cpp:
+ * ace/ATM_Addr.inl:
+ * ace/DEV_Addr.cpp:
+ * ace/DEV_Addr.inl:
+ * ace/FILE_Addr.cpp:
+ * ace/FILE_Addr.inl:
+ * ace/INET_Addr.cpp:
+ * ace/INET_Addr.inl:
+ * ace/MEM_Addr.cpp:
+ * ace/MEM_Addr.inl:
+ * ace/SPIPE_Addr.cpp:
+ * ace/SPIPE_Addr.inl:
+ * ace/Service_Types.cpp:
+ * ace/Service_Types.inl:
+ * ace/UNIX_Addr.cpp:
+ * ace/UNIX_Addr.inl:
+
+ Moved virtual method implementation out-of-line. Since the
+ classes to which they belong are exported, inlining them will
+ cause problems when attempting to perform a dynamic_cast<> in
+ binaries built with g++ 4.0's -fvisibility-inlines-hidden
+ command line option.
+
+ * ace/Strategies_T.cpp (dump):
+
+ Removed ACE_INLINE from this out of line method.
+
+Wed May 18 15:44:12 UTC 2005 Martin Corino <mcorino@remedy.nl>
+
+ * ace/Semaphore.cpp:
+
+ Removed check for missing shm_open() since this causes problems
+ for platforms supporting POSIX_SEM (and thus not using
+ shm_open/open). Thanks to Raoul Gough <Raoul dot Gough at liffe
+ dot com> for reporting this.
+
+ * ace/config-openvms.h:
+ Added ACE_LACKS_UNNAMED_SEMAPHORE to compensate for above
+ change.
+
+Wed May 18 14:37:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * examples/ASX/Message_Queue/buffer_stream.cpp:
+ Initialise all pointers with 0
+
+Wed May 18 09:25:35 2005 Chad Elliott <elliott_c@ociweb.com>
+
+ * bin/MakeProjectCreator/templates/gnu.mpd:
+ * include/makeinclude/rules.lib.GNU:
+ * include/makeinclude/platform_gnuwin32_common.GNU:
+
+ Fixed a problem that I introduced in a previous change. Resource
+ files were not being handled properly and the
+ platform_gnuwin32_common.GNU file was referencing $(VSHOBJS1)
+ which I removed.
+
+ * include/makeinclude/all_in_one.GNU:
+ * include/makeinclude/wrapper_macros.GNU:
+ * include/makeinclude/rules.bin.GNU:
+
+ Removed the file rules.bin.GNU and all references to it.
+
+Tue May 17 20:58:46 UTC 2005 Jeff Parsons <j.parsons@vanderbilt.edu>
+
+ * bin/MakeProjectCreator/config/taoidl3toidl2defaults.mpb:
+
+ New file, a base project for the tao_idl3_to_idl2 executable,
+ so it can be executed automatically in a test or example.
+
+Tue May 17 18:31:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * examples/ASX/Message_Queue/ASX_Message_Queue.mpc:
+ Don't build the buffer_stream exe when wchar is enabled, this
+ example expects just char.
+
+Tue May 17 09:32:01 2005 Ossama Othman <ossama@dre.vanderbilt.edu>
+
+ * tests/Collection_Test.cpp:
+
+ Avoid casting between a pointer to a function and a pointer to
+ an object. ISO C++ forbids such casts. Fixes a g++ 4.0
+ warning.
+
+Tue May 17 07:50:07 2005 Justin Michel <michel_j@ociweb.com>
+
+ * ace/Cache_Map_Manager_T.cpp:
+ * ace/Cached_Connect_Strategy_T.cpp:
+ * ace/Caching_Strategies_T.cpp:
+ * ace/Caching_Utility_T.cpp:
+ * ace/Cleanup_Strategies_T.cpp:
+ * ace/Hash_Cache_Map_Manager_T.h:
+ * ace/Hash_Cache_Map_Manager_T.cpp:
+ * ace/QoS/QoS_Manager.h:
+
+ Fix incorrect use of #pragma once.
+
+ * ace/Functor.h:
+ * ace/Functor.inl:
+ * ace/Global_Macros.h:
+ * ace/ace_wchar.h:
+ * ace/config-win32-msvc.h:
+
+ Add a new ACE_LACKS_NATIVE_WCHAR_T macro, which can be used to
+ check whether a platform supports overloading on wchar_t without
+ conflict. The existing ACE_WSTRING_HAS_USHORT_SUPPORT was
+ incorrectly being used for two purposes. This setting should let
+ us enable native wchar_t support on VC7+.
+
+ * ace/OS_NS_time.inl:
+
+ Add a static_cast<long> because time_t is 64bit on some platforms
+ where long is 32 bit.
+
+ * ace/OS_NS_unistd.inl:
+
+ Mask out the X_OK(6) bit for the amode parameter of the access()
+ function because this bit is illegal on Win32 and will assert.
+
+ * ace/config-win32-msvc-7.h:
+
+ Clarify comment on ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION_EXPORT.
+
+ * ace/config-win32-msvc-8.h:
+
+ Disable deprecation warning 4996, because the
+ _CRT_SECURE_NO_DEPRECATE macro doesn't appear to work
+ correctly.
+
+ * ace/streams.h:
+
+ Add missing "using std::ios_base".
+
+Mon May 16 21:39:30 2005 Ossama Othman <ossama@dre.vanderbilt.edu>
+
+ * ace/Ping_Socket.h (Ping_Socket):
+
+ Corrected class name in Doxygen documentation.
+
+Mon May 16 19:18:14 2005 J.T. Conklin <jtc@acorntoolworks.com>
+
+ * configure.ac:
+ * examples/Makefile.am:
+ * protocols/Makefile.am:
+ * protocols/examples/Makefile.am:
+
+ Adapt autoconf build to adjust to relocation of RMCast examples.
+
+Mon May 16 15:58:29 2005 Steve Huston <shuston@riverace.com>
+
+ * ACE-INSTALL.html: Corrected the names of the Sun compilers supported.
+ Thanks to Nick Todd <nicholas dot todd at gs dot com> for
+ bringing this error to our attention.
+
+ * THANKS: Added Nick Todd to the Hall of Fame.
+
+Mon May 16 12:33:29 2005 Ossama Othman <ossama@dre.vanderbilt.edu>
+
+ * THANKS:
+
+ Added Mario Di Giacomo to the Hall of Fame.
+
+ * ace/Service_Templates.cpp:
+
+ Include "ace/SString.h" to pull in ACE_TString declaration.
+ Thanks to Mario Di Giacomo <mdigiacomo at anteon dot com> for
+ reporting the problem.
+
+ * tests/Cache_Map_Manager_Test.cpp (find_test_cache):
+
+ Fixed "variable may be used uninitialized" warning.
+
+Mon May 16 19:13:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * ace/Malloc.h:
+ Doxygen improvement
+
+Mon May 16 10:57:57 2005 J.T. Conklin <jtc@acorntoolworks.com>
+
+ * ace/Makefile.am:
+
+ Reset DEFAULT_INCLUDES to address ambiguity between system's
+ signal.h and semaphore.h headers and ACE's Signal.h and
+ Semaphore.h headers on case insensitive file systems.
+
+ This may be the best setting for all ACE/TAO Makefile.am's,
+ but this is the only one that requires it.
+
+Mon May 16 10:56:31 2005 J.T. Conklin <jtc@acorntoolworks.com>
+
+ * configure.ac:
+
+ Add ACE_LD_SEARCH_PATH and ACE_DLL_SUFFIX settings for
+ darwin/MacOSX.
+
+ Add ACE_HAS_NANOSLEEP feature test check.
+
+Mon May 16 10:49:10 2005 J.T. Conklin <jtc@acorntoolworks.com>
+
+ * ace/POSIX_CB_Proactor.h:
+
+ Add defined(__APPLE__) to conditional wrapping sigval_t type
+ definition.
+
+Mon May 16 10:45:18 2005 J.T. Conklin <jtc@acorntoolworks.com>
+
+ * m4/ace.m4 (ACE_CONFIGURATION_OPTIONS):
+
+ Changed *win* patterns to *win32* to avoid matching darwin,
+ the MacOSX kernel.
+
+Mon May 16 15:13:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * include/makeinclude/platform_mingw32.GNU:
+ * include/makeinclude/platform_sco5.0.0-nothread.GNU:
+ * include/makeinclude/platform_sunos4_g++.GNU:
+ * include/makeinclude/platform_sunos5_sunc++.GNU:
+ * include/makeinclude/platform_unixware_g++.GNU:
+ * include/makeinclude/platform_unixware_udk.GNU:
+ * include/makeinclude/platform_win32_dmc.GNU:
+ * include/makeinclude/platform_win32_interix.GNU:
+ Simplified these files by using the ?= operator. This sets a value
+ only when it is not set yet.
+
+Mon May 16 09:24:29 2005 Chad Elliott <elliott_c@ociweb.com>
+
+ * bin/tao_orb_tests.lst:
+
+ Enabled the Exposed_Policies test on Linux.
+
+ * bin/tao_other_tests.lst:
+
+ Added a !NO_IFR configuration to each IFR related test.
+ The IFR_Service will not run on MacOS X unless TAO is built
+ statically due to gcc's in ability to deal with template
+ instantiated singletons correctly.
+
+ Added a NO_LOADAVG configuration to avoid running the load average
+ based test on platforms that do not have support for obtaining the
+ load average from the system.
+
+ Added a configuration for NO_MCAST for machines that do not have
+ multicast capabilities or the multicast implementation is broken.
+
+ Added !STATIC to two LoadManager tests to support static builds on
+ Windows.
+
+Mon May 16 14:19:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * ace/Active_Map_Manager.h:
+ * ace/Base_Thread_Adapter.h:
+ * ace/Process.h:
+ * ace/QtReactor.h:
+ Doxygen improvement
+
+ * ace/QtReactor.cpp:
+ Fixed compile problems with msvc6
+
+ * examples/ASX/Message_Queue/buffer_stream.cpp:
+ Use ACE_SIZE_T_FORMAT_SPECIFIER to print out an size_t variable
+ with ACE_OS::sprintf
+
+ * include/makeinclude/platform_hpux_aCC.GNU:
+ * include/makeinclude/platform_hpux_gcc.GNU:
+ * include/makeinclude/platform_irix6.x_g++.GNU:
+ * include/makeinclude/platform_irix6.x_sgic++.GNU:
+ * include/makeinclude/platform_linux.GNU:
+ * include/makeinclude/platform_linux_borland.GNU:
+ * include/makeinclude/platform_linux_cxx.GNU:
+ * include/makeinclude/platform_macosx.GNU:
+ Simplified these files by using the ?= operator. This sets a value
+ only when it is not set yet. Also set some variables using ?= so
+ that our users can easily define their own values.
+
+ * include/makeinclude/platform_linux_icc.GNU:
+ Disable warning 1572 (floating point warning), correct name of Qt
+ library and only set several variables when they are not set yet
+
+Mon May 16 09:01:07 2005 Chad Elliott <elliott_c@ociweb.com>
+
+ * tests/Conn_Test.cpp:
+
+ Force this test to use threads (instead of fork) on MacOS X.
+
+ * tests/FIFO_Test.cpp:
+
+ Sleep 1 second (as is done on AIX and HP-UX) before attempting to
+ receive from the fifo.
+
+ * tests/MT_Reference_Counted_Event_Handler_Test.cpp:
+
+ Set global_event_loop_thread_variable before activating the thread
+ that may use it.
+
+ * tests/Naming_Test.cpp:
+
+ Allow the user to determine the location of the context file by
+ the TMPDIR, TEMP and TMP environment variables.
+
+ * tests/Pipe_Test.cpp:
+ * tests/Process_Mutex_Test.cpp:
+
+ Use the value from argv[0] instead of hardcoding the exe name.
+ The hardcoded name does not work on Windows Release builds.
+
+ * tests/Process_Strategy_Test.cpp:
+
+ Use threads by default on HP-UX instead of fork.
+ Added a timeout for the recv() call in
+ Counting_Service::handle_input() for HP-UX only.
+
+ * tests/run_test.lst:
+
+ Added a configuration for NO_MCAST for machines that do not have
+ multicast capabilities or the multicast implementation is broken.
+
+ * tests/SSL/aix_hack_for_main.cpp:
+ * tests/aix_hack_for_main.cpp:
+
+ Removed these files. They are no longer needed due to MPC.
+
+Mon May 16 08:52:11 2005 Chad Elliott <elliott_c@ociweb.com>
+
+ * bin/MakeProjectCreator/config/crosscompile.mpb:
+
+ Added lib_warning, require_warning and avoid_warning to the list
+ of targets in the CROSS-COMPILE portion.
+
+ * bin/MakeProjectCreator/config/rtcorbaevent.mpb:
+
+ The RTCORBAEvent library requires the CosNaming library.
+
+ * bin/MakeProjectCreator/templates/gnu.mpd:
+
+ Support the MPC feature that will allow users to specify arbitrary
+ input file dependencies.
+
+ Changed the OBJS setting to use $(notdir) only if the source file
+ contains ../ and added explicit rules for source files that are
+ located in subdirectories.
+
+ * include/makeinclude/platform_macosx_panther.GNU:
+
+ Explicitly default the threads variable to threads=1. This
+ was preventing ACE_TMCast from building.
+ Change the optimization option to -O2. -O3 was causing some
+ link problems in the IDL compiler.
+
+ * include/makeinclude/platform_sunos5_sunc++.GNU:
+
+ Allow users to override the inline and exceptions settings.
+
+ * include/makeinclude/platform_vxworks5.5.x.GNU:
+ * include/makeinclude/rules.local.GNU:
+
+ Provide better support for building for VxWorks on a Windows host
+ without Cygwin.
+
+ * include/makeinclude/rules.lib.GNU:
+
+ Changed the SHOBJS setting to be consistent with the OBJS setting.
+ Also, removed VLOBJS and SHOBJS1 which were redundant and set
+ exactly as SHOBJS was.
+
+ * include/makeinclude/wrapper_macros.GNU:
+
+ Set ec_typed_events to 1 by default. This matches the default for
+ MPC features.
+
+ * bin/pch_cmd.pl:
+
+ Removed this file. It is no longer necessary.
+
+Mon May 16 08:44:14 2005 Chad Elliott <elliott_c@ociweb.com>
+
+ * ace/ACE.cpp:
+ * ace/config-irix6.x-sgic++.h:
+ * ace/config-qnx-neutrino.h:
+ * ace/config-qnx-rtp-common.h:
+ * ace/config-sunos5.5.h:
+
+ Put ACE_LIB_TEXT around all ACE_CC_NAME definitions to support
+ wide character builds on Solaris, QNX and IRIX.
+
+ * ace/ACE_export.h:
+
+ Added support for SunCC 5.6.
+
+ * ace/Multihomed_INET_Addr.h:
+ * ace/Multihomed_INET_Addr.cpp:
+
+ Added an explicit constructor that takes a const char* for
+ symmetry with the ACE_INET_Addr class.
+
+ * ace/Naming_Context.cpp:
+
+ Removed a bug workaround for aCC A.03.04. It is no longer a
+ problem to specify other mmap base addresses when running
+ 64-bit HP-UX applications.
+
+ * ace/OS_NS_Thread.inl:
+ * ace/config-macosx-panther.h:
+ * ace/Sched_Params.cpp:
+
+ MacOS X has pthread_getschedparam but has the ACE_LACKS_SETSCHED
+ macro defined. I have added a new macro,
+ ACE_HAS_PTHREAD_SCHEDPARAM, that can be defined to use
+ pthread_getschedparam and pthread_setschedparam even when
+ ACE_LACKS_SETSCHED is defined.
+
+
+ * ace/OS_NS_Thread.cpp:
+
+ Fixed an issue that arose within the static builds on Windows.
+ The ACE_Thread_Mutex static data member of the
+ TSS_Cleanup_Instance class was being used (in the
+ TSS_Cleanup_Instance constructor) before it was statically
+ initialized. I have switched it (and the condition variable
+ associated with it) to a pointer that is allocated the first
+ time into the TSS_Cleanup_Instance constructor.
+
+ * ace/Process_Manager.cpp:
+
+ Committing a change from Justin Michel <michel_j@ociweb.com>.
+ The close() method failed to unregister the reactor on Windows.
+
+ * ace/ace.mpc:
+
+ Removed an unnecessary 'install' setting.
+
+ * ace/config-sunos5.10.h:
+
+ SunOS 5.10 has scandir (ACE_HAS_SCANDIR).
+
+ * ace/os_include/sys/os_socket.h:
+
+ When using LKSCTP, include <netinet/in.h> before <netinet/sctp.h>
+ to avoid macro problems.
+
+Sun May 15 11:57:56 2005 Douglas C. Schmidt <schmidt@cs.wustl.edu>
+
+ * ace/INET_Addr.cpp (set): Changed the test from
+
+ if (port_number < 0)
+
+ to
+
+ if (port_number == -1)
+
+ to work around problems when (port_number & 0x80 != 0). Thanks
+ to Vemund Handeland <vemund.handeland@fantoft.no> for reporting
+ this.
+
+Mon May 16 11:35:00 2005 Boris Kolpackov <boris@kolpackov.net>
+
+ * protocols/tests/tests.mwc:
+ * protocols/tests/RMCast/Protocol.h:
+ * protocols/tests/RMCast/RMCast.mpc:
+ * protocols/tests/RMCast/Receiver.cpp:
+ * protocols/tests/RMCast/Sender.cpp:
+ * protocols/tests/RMCast/run_test.pl:
+
+ Added regression test with loss and reordering simulator
+ for RMCast.
+
+Mon May 16 11:26:14 2005 Boris Kolpackov <boris@kolpackov.net>
+
+ * examples/RMCast/Makefile.am:
+ * examples/RMCast/Send_Msg/Makefile.am:
+ * examples/RMCast/Send_Msg/Protocol.h:
+ * examples/RMCast/Send_Msg/README:
+ * examples/RMCast/Send_Msg/Receiver.cpp:
+ * examples/RMCast/Send_Msg/Send_Msg.mpc:
+ * examples/RMCast/Send_Msg/Sender.cpp:
+
+ Removed as part of the moving all RMCast-related
+ code to protocols/.
+
+Mon May 16 11:22:09 2005 Boris Kolpackov <boris@kolpackov.net>
+
+ * protocols/examples/example_base.mpb:
+ * protocols/examples/examples.mwc:
+ * protocols/examples/RMCast/Makefile.am:
+ * protocols/examples/RMCast/Send_Msg/Makefile.am:
+ * protocols/examples/RMCast/Send_Msg/Protocol.h:
+ * protocols/examples/RMCast/Send_Msg/README:
+ * protocols/examples/RMCast/Send_Msg/Receiver.cpp:
+ * protocols/examples/RMCast/Send_Msg/Send_Msg.mpc:
+ * protocols/examples/RMCast/Send_Msg/Sender.cpp:
+
+ Copyied from examples/RMCast as part of the moving
+ all RMCast-related code to protocols/.
+
+
+Mon May 16 11:05:26 2005 Boris Kolpackov <boris@kolpackov.net>
+
+ * examples/RMCast/Send_Msg/Receiver.cpp:
+ * examples/RMCast/Send_Msg/Sender.cpp:
+
+ Showcase new features (see below).
+
+Mon May 16 10:58:43 2005 Boris Kolpackov <boris@kolpackov.net>
+
+ * protocols/ace/RMCast/Acknowledge.cpp:
+ * protocols/ace/RMCast/Link.cpp:
+ * protocols/ace/RMCast/Link.h:
+ * protocols/ace/RMCast/Protocol.cpp:
+ * protocols/ace/RMCast/Protocol.h:
+ * protocols/ace/RMCast/Retransmit.cpp:
+ * protocols/ace/RMCast/Socket.cpp:
+ * protocols/ace/RMCast/Socket.h:
+
+ Implemented message aging and unavailability reporting,
+ reactor-compatible interface, and message size query
+ interface.
+
+ * protocols/ace/RMCast/README:
+
+ Protocol documentation.
+
+Sat May 14 06:05:55 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * ACE version 5.4.5 released.
+
+Local Variables:
+add-log-time-format: current-time-string
+End:
diff --git a/TAO/CIAO/CCF/CCF/IDL2/SemanticGraph/Array.cpp b/TAO/CIAO/CCF/CCF/IDL2/SemanticGraph/Array.cpp
new file mode 100644
index 00000000000..3847a6b1ae3
--- /dev/null
+++ b/TAO/CIAO/CCF/CCF/IDL2/SemanticGraph/Array.cpp
@@ -0,0 +1,37 @@
+// file : CCF/IDL2/SemanticGraph/Array.cpp
+// author : Boris Kolpackov <boris@dre.vanderbilt.edu>
+// cvs-id : $Id$
+
+#include "CCF/IDL2/SemanticGraph/Array.hpp"
+
+namespace CCF
+{
+ namespace IDL2
+ {
+ namespace SemanticGraph
+ {
+ using Introspection::TypeInfo;
+ using Introspection::Access;
+
+ // Array
+ //
+ //
+ namespace
+ {
+ TypeInfo
+ array_init_ ()
+ {
+ TypeInfo ti (typeid (Array));
+ ti.add_base (
+ Access::PUBLIC, true, Specialization::static_type_info ());
+ return ti;
+ }
+
+ TypeInfo array_ (array_init_ ());
+ }
+
+ TypeInfo const& Array::
+ static_type_info () { return array_; }
+ }
+ }
+}
diff --git a/TAO/CIAO/CCF/CCF/IDL2/SemanticGraph/Array.hpp b/TAO/CIAO/CCF/CCF/IDL2/SemanticGraph/Array.hpp
new file mode 100644
index 00000000000..47542f6772a
--- /dev/null
+++ b/TAO/CIAO/CCF/CCF/IDL2/SemanticGraph/Array.hpp
@@ -0,0 +1,57 @@
+// file : CCF/IDL2/SemanticGraph/Array.hpp
+// author : Boris Kolpackov <boris@dre.vanderbilt.edu>
+// cvs-id : $Id$
+
+#ifndef CCF_IDL2_SEMANTIC_GRAPH_ARRAY_HPP
+#define CCF_IDL2_SEMANTIC_GRAPH_ARRAY_HPP
+
+#include "CCF/IDL2/SemanticGraph/Elements.hpp"
+
+namespace CCF
+{
+ namespace IDL2
+ {
+ namespace SemanticGraph
+ {
+ //
+ //
+ //
+ class Array : public virtual Specialization
+ {
+ public:
+ Type&
+ type () const
+ {
+ return
+ dynamic_cast<ArgumentsWithType&> (**arguments_begin ()).type ();
+ }
+
+ // You will have to iterate through Arguments edges starting
+ // from begin + 1 to get to the list of bounds. I suggest that
+ // you use traversal instead.
+ //
+
+ virtual bool
+ complete () const
+ {
+ // Is this the right semantic for arrays?
+ //
+ return type ().complete ();
+ }
+
+ static Introspection::TypeInfo const&
+ static_type_info ();
+
+ protected:
+ friend class Graph<Node, Edge>;
+
+ Array ()
+ {
+ type_info (static_type_info ());
+ }
+ };
+ }
+ }
+}
+
+#endif // CCF_IDL2_SEMANTIC_GRAPH_ARRAY_HPP
diff --git a/TAO/CIAO/CCF/CCF/IDL2/SemanticGraph/String.cpp b/TAO/CIAO/CCF/CCF/IDL2/SemanticGraph/String.cpp
new file mode 100644
index 00000000000..558da3f34da
--- /dev/null
+++ b/TAO/CIAO/CCF/CCF/IDL2/SemanticGraph/String.cpp
@@ -0,0 +1,77 @@
+// file : CCF/IDL2/SemanticGraph/Sequence.cpp
+// author : Boris Kolpackov <boris@dre.vanderbilt.edu>
+// cvs-id : $Id$
+
+#include "CCF/IDL2/SemanticGraph/Sequence.hpp"
+
+namespace CCF
+{
+ namespace IDL2
+ {
+ namespace SemanticGraph
+ {
+ using Introspection::TypeInfo;
+ using Introspection::Access;
+
+ // Sequence
+ //
+ //
+ namespace
+ {
+ TypeInfo
+ sequence_init_ ()
+ {
+ TypeInfo ti (typeid (Sequence));
+ ti.add_base (
+ Access::PUBLIC, true, Specialization::static_type_info ());
+ return ti;
+ }
+
+ TypeInfo sequence_ (sequence_init_ ());
+ }
+
+ TypeInfo const& Sequence::
+ static_type_info () { return sequence_; }
+
+
+ // UnboundedSequence
+ //
+ //
+ namespace
+ {
+ TypeInfo
+ unbounded_sequence_init_ ()
+ {
+ TypeInfo ti (typeid (UnboundedSequence));
+ ti.add_base (Access::PUBLIC, true, Sequence::static_type_info ());
+ return ti;
+ }
+
+ TypeInfo unbounded_sequence_ (unbounded_sequence_init_ ());
+ }
+
+ TypeInfo const& UnboundedSequence::
+ static_type_info () { return unbounded_sequence_; }
+
+
+ // BoundedSequence
+ //
+ //
+ namespace
+ {
+ TypeInfo
+ bounded_sequence_init_ ()
+ {
+ TypeInfo ti (typeid (BoundedSequence));
+ ti.add_base (Access::PUBLIC, true, Sequence::static_type_info ());
+ return ti;
+ }
+
+ TypeInfo bounded_sequence_ (bounded_sequence_init_ ());
+ }
+
+ TypeInfo const& BoundedSequence::
+ static_type_info () { return bounded_sequence_; }
+ }
+ }
+}
diff --git a/TAO/CIAO/CCF/CCF/IDL2/SemanticGraph/String.hpp b/TAO/CIAO/CCF/CCF/IDL2/SemanticGraph/String.hpp
new file mode 100644
index 00000000000..a4f3e361272
--- /dev/null
+++ b/TAO/CIAO/CCF/CCF/IDL2/SemanticGraph/String.hpp
@@ -0,0 +1,85 @@
+// file : CCF/IDL2/SemanticGraph/String.hpp
+// author : Boris Kolpackov <boris@dre.vanderbilt.edu>
+// cvs-id : $Id$
+
+#ifndef CCF_IDL2_SEMANTIC_GRAPH_STRING_HPP
+#define CCF_IDL2_SEMANTIC_GRAPH_STRING_HPP
+
+#include "CCF/IDL2/SemanticGraph/Elements.hpp"
+#include "CCF/IDL2/SemanticGraph/IntExpression.hpp"
+
+namespace CCF
+{
+ namespace IDL2
+ {
+ namespace SemanticGraph
+ {
+ //
+ //
+ class BoundedString : public virtual Specialization
+ {
+ public:
+ IntExpression&
+ bound () const
+ {
+ return
+ dynamic_cast<IntExpression&> (
+ dynamic_cast<ArgumentsWithValue&> (
+ **arguments_begin ()).value ());
+ }
+
+ virtual bool
+ complete () const
+ {
+ return true;
+ }
+
+ static Introspection::TypeInfo const&
+ static_type_info ();
+
+ protected:
+ friend class Graph<Node, Edge>;
+
+ BoundedString ()
+ {
+ type_info (static_type_info ());
+ }
+ };
+
+
+ //
+ //
+ class BoundedWideString : public virtual Specialization
+ {
+ public:
+ IntExpression&
+ bound () const
+ {
+ return
+ dynamic_cast<IntExpression&> (
+ dynamic_cast<ArgumentsWithValue&> (
+ **arguments_begin ()).value ());
+ }
+
+ virtual bool
+ complete () const
+ {
+ return true;
+ }
+
+ static Introspection::TypeInfo const&
+ static_type_info ();
+
+ protected:
+ friend class Graph<Node, Edge>;
+
+ BoundedWideString ()
+ {
+ type_info (static_type_info ());
+ }
+ };
+ }
+ }
+}
+
+#endif // CCF_IDL2_SEMANTIC_GRAPH_STRING_HPP
diff --git a/TAO/CIAO/CCF/CCF/IDL2/Traversal/Array.cpp b/TAO/CIAO/CCF/CCF/IDL2/Traversal/Array.cpp
new file mode 100644
index 00000000000..e142383535f
--- /dev/null
+++ b/TAO/CIAO/CCF/CCF/IDL2/Traversal/Array.cpp
@@ -0,0 +1,78 @@
+// file : CCF/IDL2/Traversal/Array.cpp
+// author : Boris Kolpackov <boris@dre.vanderbilt.edu>
+// cvs-id : $Id$
+
+#include "CCF/IDL2/Traversal/Array.hpp"
+
+namespace CCF
+{
+ namespace IDL2
+ {
+ namespace Traversal
+ {
+ void Array::
+ traverse (Type& a)
+ {
+ pre (a);
+ arguments_with_type (a);
+ arguments_with_value (a);
+ name (a);
+ post (a);
+ }
+
+ void Array::
+ pre (Type&)
+ {
+ }
+
+ void Array::
+ arguments_with_type (Type& a, EdgeDispatcherBase& d)
+ {
+ d.traverse (**a.arguments_begin ());
+ }
+
+ void Array::
+ arguments_with_type (Type& a)
+ {
+ arguments_with_type (a, edge_traverser ());
+ }
+
+ void Array::
+ arguments_with_value (Type& a, EdgeDispatcherBase& d)
+ {
+ Type::ArgumentsIterator
+ b (a.arguments_begin ()), e (a.arguments_end ());
+
+ ++b; // Bounds start afterthe type.
+
+ iterate_and_traverse (b,
+ e,
+ d,
+ *this,
+ &Array::comma,
+ a);
+ }
+
+ void Array::
+ arguments_with_value (Type& a)
+ {
+ arguments_with_value (a, edge_traverser ());
+ }
+
+ void Array::
+ comma (Type&)
+ {
+ }
+
+ void Array::
+ name (Type&)
+ {
+ }
+
+ void Array::
+ post (Type&)
+ {
+ }
+ }
+ }
+}
diff --git a/TAO/CIAO/CCF/CCF/IDL2/Traversal/Array.hpp b/TAO/CIAO/CCF/CCF/IDL2/Traversal/Array.hpp
new file mode 100644
index 00000000000..fb608c6df9a
--- /dev/null
+++ b/TAO/CIAO/CCF/CCF/IDL2/Traversal/Array.hpp
@@ -0,0 +1,51 @@
+// file : CCF/IDL2/Traversal/Array.hpp
+// author : Boris Kolpackov <boris@dre.vanderbilt.edu>
+// cvs-id : $Id$
+
+#ifndef CCF_IDL2_TRAVERSAL_ARRAY_HPP
+#define CCF_IDL2_TRAVERSAL_ARRAY_HPP
+
+#include "CCF/IDL2/Traversal/Elements.hpp"
+
+#include "CCF/IDL2/SemanticGraph/Array.hpp"
+
+namespace CCF
+{
+ namespace IDL2
+ {
+ namespace Traversal
+ {
+ struct Array : Node<SemanticGraph::Array>
+ {
+ virtual void
+ traverse (Type&);
+
+ virtual void
+ pre (Type&);
+
+ virtual void
+ arguments_with_type (Type&, EdgeDispatcherBase&);
+
+ virtual void
+ arguments_with_type (Type&);
+
+ virtual void
+ arguments_with_value (Type&, EdgeDispatcherBase&);
+
+ virtual void
+ arguments_with_value (Type&);
+
+ virtual void
+ comma (Type&);
+
+ virtual void
+ name (Type&);
+
+ virtual void
+ post (Type&);
+ };
+ }
+ }
+}
+
+#endif // CCF_IDL2_TRAVERSAL_ARRAY_HPP
diff --git a/TAO/CIAO/CCF/CCF/IDL2/Traversal/IntExpression.hpp b/TAO/CIAO/CCF/CCF/IDL2/Traversal/IntExpression.hpp
new file mode 100644
index 00000000000..a4cac55a729
--- /dev/null
+++ b/TAO/CIAO/CCF/CCF/IDL2/Traversal/IntExpression.hpp
@@ -0,0 +1,757 @@
+// file : CCF/IDL2/Traversal/IntExpression.hpp
+// author : Boris Kolpackov <boris@dre.vanderbilt.edu>
+// cvs-id : $Id$
+
+#ifndef CCF_IDL2_TRAVERSAL_INT_EXPRESSION_HPP
+#define CCF_IDL2_TRAVERSAL_INT_EXPRESSION_HPP
+
+#include "CCF/IDL2/Traversal/Elements.hpp"
+
+#include "CCF/IDL2/SemanticGraph/IntExpression.hpp"
+
+namespace CCF
+{
+ namespace IDL2
+ {
+ namespace Traversal
+ {
+ //
+ //
+ typedef
+ Node<SemanticGraph::IntExpression>
+ IntExpression;
+
+ //
+ //
+ typedef
+ Node<SemanticGraph::IntLiteral>
+ IntLiteral;
+
+ //
+ //
+ typedef
+ Node<SemanticGraph::IntConst>
+ IntConst;
+
+
+ // NEG
+ //
+
+ struct IntNegates: Edge<SemanticGraph::IntNegates>
+ {
+ virtual void
+ traverse (Type& e)
+ {
+ node_traverser ().traverse (e.argument ());
+ }
+ };
+
+ struct IntNeg: Node<SemanticGraph::IntNeg>
+ {
+ virtual void
+ traverse (Type& n)
+ {
+ pre (n);
+ negates (n);
+ post (n);
+ }
+
+ virtual void
+ pre (Type& n)
+ {
+ }
+
+ virtual void
+ negates (Type& n, EdgeDispatcherBase& d)
+ {
+ d.traverse (n.negates ());
+ }
+
+ virtual void
+ negates (Type& n)
+ {
+ negates (n, edge_traverser ());
+ }
+
+ virtual void
+ post (Type& n)
+ {
+ }
+ };
+
+
+ // COM
+ //
+
+ struct IntComplements: Edge<SemanticGraph::IntComplements>
+ {
+ virtual void
+ traverse (Type& e)
+ {
+ node_traverser ().traverse (e.argument ());
+ }
+ };
+
+ struct IntCom: Node<SemanticGraph::IntCom>
+ {
+ virtual void
+ traverse (Type& n)
+ {
+ pre (n);
+ complements (n);
+ post (n);
+ }
+
+ virtual void
+ pre (Type& n)
+ {
+ }
+
+ virtual void
+ complements (Type& n, EdgeDispatcherBase& d)
+ {
+ d.traverse (n.complements ());
+ }
+
+ virtual void
+ complements (Type& n)
+ {
+ complements (n, edge_traverser ());
+ }
+
+ virtual void
+ post (Type& n)
+ {
+ }
+ };
+
+
+ // MUL
+ //
+
+ struct IntMultiplies: Edge<SemanticGraph::IntMultiplies>
+ {
+ virtual void
+ traverse (Type& e)
+ {
+ node_traverser ().traverse (e.argument ());
+ }
+ };
+
+ struct IntMul: Node<SemanticGraph::IntMul>
+ {
+ virtual void
+ traverse (Type& n)
+ {
+ pre (n);
+ multiplies_first_factor (n);
+ sign (n);
+ multiplies_second_factor (n);
+ post (n);
+ }
+
+ virtual void
+ pre (Type& n)
+ {
+ }
+
+ virtual void
+ multiplies_first_factor (Type& n, EdgeDispatcherBase& d)
+ {
+ d.traverse (n.first_factor ());
+ }
+
+ virtual void
+ multiplies_first_factor (Type& n)
+ {
+ multiplies_first_factor (n, edge_traverser ());
+ }
+
+ virtual void
+ sign (Type& n)
+ {
+ }
+
+ virtual void
+ multiplies_second_factor (Type& n, EdgeDispatcherBase& d)
+ {
+ d.traverse (n. second_factor ());
+ }
+
+ virtual void
+ multiplies_second_factor (Type& n)
+ {
+ multiplies_second_factor (n, edge_traverser ());
+ }
+
+ virtual void
+ post (Type& n)
+ {
+ }
+ };
+
+
+ // DIV & REM
+ //
+
+ struct IntDivides: Edge<SemanticGraph::IntDivides>
+ {
+ virtual void
+ traverse (Type& e)
+ {
+ node_traverser ().traverse (e.argument ());
+ }
+ };
+
+ struct IntDiv: Node<SemanticGraph::IntDiv>
+ {
+ virtual void
+ traverse (Type& n)
+ {
+ pre (n);
+ divides_divident (n);
+ sign (n);
+ divides_divisor (n);
+ post (n);
+ }
+
+ virtual void
+ pre (Type& n)
+ {
+ }
+
+ virtual void
+ divides_divident (Type& n, EdgeDispatcherBase& d)
+ {
+ d.traverse (n.divident ());
+ }
+
+ virtual void
+ divides_divident (Type& n)
+ {
+ divides_divident (n, edge_traverser ());
+ }
+
+ virtual void
+ sign (Type& n)
+ {
+ }
+
+ virtual void
+ divides_divisor (Type& n, EdgeDispatcherBase& d)
+ {
+ d.traverse (n. divisor ());
+ }
+
+ virtual void
+ divides_divisor (Type& n)
+ {
+ divides_divisor (n, edge_traverser ());
+ }
+
+ virtual void
+ post (Type& n)
+ {
+ }
+ };
+
+ struct IntRem: Node<SemanticGraph::IntRem>
+ {
+ virtual void
+ traverse (Type& n)
+ {
+ pre (n);
+ divides_divident (n);
+ sign (n);
+ divides_divisor (n);
+ post (n);
+ }
+
+ virtual void
+ pre (Type& n)
+ {
+ }
+
+ virtual void
+ divides_divident (Type& n, EdgeDispatcherBase& d)
+ {
+ d.traverse (n.divident ());
+ }
+
+ virtual void
+ divides_divident (Type& n)
+ {
+ divides_divident (n, edge_traverser ());
+ }
+
+ virtual void
+ sign (Type& n)
+ {
+ }
+
+ virtual void
+ divides_divisor (Type& n, EdgeDispatcherBase& d)
+ {
+ d.traverse (n. divisor ());
+ }
+
+ virtual void
+ divides_divisor (Type& n)
+ {
+ divides_divisor (n, edge_traverser ());
+ }
+
+ virtual void
+ post (Type& n)
+ {
+ }
+ };
+
+
+ // ADD
+ //
+
+ struct IntAdds: Edge<SemanticGraph::IntAdds>
+ {
+ virtual void
+ traverse (Type& e)
+ {
+ node_traverser ().traverse (e.argument ());
+ }
+ };
+
+ struct IntAdd: Node<SemanticGraph::IntAdd>
+ {
+ virtual void
+ traverse (Type& n)
+ {
+ pre (n);
+ adds_first_item (n);
+ sign (n);
+ adds_second_item (n);
+ post (n);
+ }
+
+ virtual void
+ pre (Type& n)
+ {
+ }
+
+ virtual void
+ adds_first_item (Type& n, EdgeDispatcherBase& d)
+ {
+ d.traverse (n.first_item ());
+ }
+
+ virtual void
+ adds_first_item (Type& n)
+ {
+ adds_first_item (n, edge_traverser ());
+ }
+
+ virtual void
+ sign (Type& n)
+ {
+ }
+
+ virtual void
+ adds_second_item (Type& n, EdgeDispatcherBase& d)
+ {
+ d.traverse (n. second_item ());
+ }
+
+ virtual void
+ adds_second_item (Type& n)
+ {
+ adds_second_item (n, edge_traverser ());
+ }
+
+ virtual void
+ post (Type& n)
+ {
+ }
+ };
+
+
+ // SUB
+ //
+
+ struct IntSubtracts: Edge<SemanticGraph::IntSubtracts>
+ {
+ virtual void
+ traverse (Type& e)
+ {
+ node_traverser ().traverse (e.argument ());
+ }
+ };
+
+ struct IntSub: Node<SemanticGraph::IntSub>
+ {
+ virtual void
+ traverse (Type& n)
+ {
+ pre (n);
+ subtracts_minuend (n);
+ sign (n);
+ subtracts_subtrahend (n);
+ post (n);
+ }
+
+ virtual void
+ pre (Type& n)
+ {
+ }
+
+ virtual void
+ subtracts_minuend (Type& n, EdgeDispatcherBase& d)
+ {
+ d.traverse (n.minuend ());
+ }
+
+ virtual void
+ subtracts_minuend (Type& n)
+ {
+ subtracts_minuend (n, edge_traverser ());
+ }
+
+ virtual void
+ sign (Type& n)
+ {
+ }
+
+ virtual void
+ subtracts_subtrahend (Type& n, EdgeDispatcherBase& d)
+ {
+ d.traverse (n. subtrahend ());
+ }
+
+ virtual void
+ subtracts_subtrahend (Type& n)
+ {
+ subtracts_subtrahend (n, edge_traverser ());
+ }
+
+ virtual void
+ post (Type& n)
+ {
+ }
+ };
+
+
+ // RSH & LSH
+ //
+
+ struct IntShifts: Edge<SemanticGraph::IntShifts>
+ {
+ virtual void
+ traverse (Type& e)
+ {
+ node_traverser ().traverse (e.argument ());
+ }
+ };
+
+ struct IntRsh: Node<SemanticGraph::IntRsh>
+ {
+ virtual void
+ traverse (Type& n)
+ {
+ pre (n);
+ shifts_pattern (n);
+ sign (n);
+ shifts_factor (n);
+ post (n);
+ }
+
+ virtual void
+ pre (Type& n)
+ {
+ }
+
+ virtual void
+ shifts_pattern (Type& n, EdgeDispatcherBase& d)
+ {
+ d.traverse (n.pattern ());
+ }
+
+ virtual void
+ shifts_pattern (Type& n)
+ {
+ shifts_pattern (n, edge_traverser ());
+ }
+
+ virtual void
+ sign (Type& n)
+ {
+ }
+
+ virtual void
+ shifts_factor (Type& n, EdgeDispatcherBase& d)
+ {
+ d.traverse (n. factor ());
+ }
+
+ virtual void
+ shifts_factor (Type& n)
+ {
+ shifts_factor (n, edge_traverser ());
+ }
+
+ virtual void
+ post (Type& n)
+ {
+ }
+ };
+
+ struct IntLsh: Node<SemanticGraph::IntLsh>
+ {
+ virtual void
+ traverse (Type& n)
+ {
+ pre (n);
+ shifts_pattern (n);
+ sign (n);
+ shifts_factor (n);
+ post (n);
+ }
+
+ virtual void
+ pre (Type& n)
+ {
+ }
+
+ virtual void
+ shifts_pattern (Type& n, EdgeDispatcherBase& d)
+ {
+ d.traverse (n.pattern ());
+ }
+
+ virtual void
+ shifts_pattern (Type& n)
+ {
+ shifts_pattern (n, edge_traverser ());
+ }
+
+ virtual void
+ sign (Type& n)
+ {
+ }
+
+ virtual void
+ shifts_factor (Type& n, EdgeDispatcherBase& d)
+ {
+ d.traverse (n. factor ());
+ }
+
+ virtual void
+ shifts_factor (Type& n)
+ {
+ shifts_factor (n, edge_traverser ());
+ }
+
+ virtual void
+ post (Type& n)
+ {
+ }
+ };
+
+
+ // AND
+ //
+
+ struct IntConjuncts: Edge<SemanticGraph::IntConjuncts>
+ {
+ virtual void
+ traverse (Type& e)
+ {
+ node_traverser ().traverse (e.argument ());
+ }
+ };
+
+ struct IntAnd: Node<SemanticGraph::IntAnd>
+ {
+ virtual void
+ traverse (Type& n)
+ {
+ pre (n);
+ conjuncts_first_pattern (n);
+ sign (n);
+ conjuncts_second_pattern (n);
+ post (n);
+ }
+
+ virtual void
+ pre (Type& n)
+ {
+ }
+
+ virtual void
+ conjuncts_first_pattern (Type& n, EdgeDispatcherBase& d)
+ {
+ d.traverse (n.first_pattern ());
+ }
+
+ virtual void
+ conjuncts_first_pattern (Type& n)
+ {
+ conjuncts_first_pattern (n, edge_traverser ());
+ }
+
+ virtual void
+ sign (Type& n)
+ {
+ }
+
+ virtual void
+ conjuncts_second_pattern (Type& n, EdgeDispatcherBase& d)
+ {
+ d.traverse (n. second_pattern ());
+ }
+
+ virtual void
+ conjuncts_second_pattern (Type& n)
+ {
+ conjuncts_second_pattern (n, edge_traverser ());
+ }
+
+ virtual void
+ post (Type& n)
+ {
+ }
+ };
+
+
+ // Xor
+ //
+
+ struct IntExclusivelyDisjuncts:
+ Edge<SemanticGraph::IntExclusivelyDisjuncts>
+ {
+ virtual void
+ traverse (Type& e)
+ {
+ node_traverser ().traverse (e.argument ());
+ }
+ };
+
+ struct IntXor: Node<SemanticGraph::IntXor>
+ {
+ virtual void
+ traverse (Type& n)
+ {
+ pre (n);
+ exclusively_disjuncts_first_pattern (n);
+ sign (n);
+ exclusively_disjuncts_second_pattern (n);
+ post (n);
+ }
+
+ virtual void
+ pre (Type& n)
+ {
+ }
+
+ virtual void
+ exclusively_disjuncts_first_pattern (Type& n, EdgeDispatcherBase& d)
+ {
+ d.traverse (n.first_pattern ());
+ }
+
+ virtual void
+ exclusively_disjuncts_first_pattern (Type& n)
+ {
+ exclusively_disjuncts_first_pattern (n, edge_traverser ());
+ }
+
+ virtual void
+ sign (Type& n)
+ {
+ }
+
+ virtual void
+ exclusively_disjuncts_second_pattern (Type& n, EdgeDispatcherBase& d)
+ {
+ d.traverse (n. second_pattern ());
+ }
+
+ virtual void
+ exclusively_disjuncts_second_pattern (Type& n)
+ {
+ exclusively_disjuncts_second_pattern (n, edge_traverser ());
+ }
+
+ virtual void
+ post (Type& n)
+ {
+ }
+ };
+
+
+ // Or
+ //
+
+ struct IntInclusivelyDisjuncts:
+ Edge<SemanticGraph::IntInclusivelyDisjuncts>
+ {
+ virtual void
+ traverse (Type& e)
+ {
+ node_traverser ().traverse (e.argument ());
+ }
+ };
+
+ struct IntOr: Node<SemanticGraph::IntOr>
+ {
+ virtual void
+ traverse (Type& n)
+ {
+ pre (n);
+ inclusively_disjuncts_first_pattern (n);
+ sign (n);
+ inclusively_disjuncts_second_pattern (n);
+ post (n);
+ }
+
+ virtual void
+ pre (Type& n)
+ {
+ }
+
+ virtual void
+ inclusively_disjuncts_first_pattern (Type& n, EdgeDispatcherBase& d)
+ {
+ d.traverse (n.first_pattern ());
+ }
+
+ virtual void
+ inclusively_disjuncts_first_pattern (Type& n)
+ {
+ inclusively_disjuncts_first_pattern (n, edge_traverser ());
+ }
+
+ virtual void
+ sign (Type& n)
+ {
+ }
+
+ virtual void
+ inclusively_disjuncts_second_pattern (Type& n, EdgeDispatcherBase& d)
+ {
+ d.traverse (n. second_pattern ());
+ }
+
+ virtual void
+ inclusively_disjuncts_second_pattern (Type& n)
+ {
+ inclusively_disjuncts_second_pattern (n, edge_traverser ());
+ }
+
+ virtual void
+ post (Type& n)
+ {
+ }
+ };
+ }
+ }
+}
+
+#endif // CCF_IDL2_TRAVERSAL_INT_EXPRESSION_HPP
diff --git a/TAO/CIAO/CCF/CCF/IDL2/Traversal/String.cpp b/TAO/CIAO/CCF/CCF/IDL2/Traversal/String.cpp
new file mode 100644
index 00000000000..0d1e23883ed
--- /dev/null
+++ b/TAO/CIAO/CCF/CCF/IDL2/Traversal/String.cpp
@@ -0,0 +1,93 @@
+// file : CCF/IDL2/Traversal/String.cpp
+// author : Boris Kolpackov <boris@dre.vanderbilt.edu>
+// cvs-id : $Id$
+
+#include "CCF/IDL2/Traversal/String.hpp"
+
+namespace CCF
+{
+ namespace IDL2
+ {
+ namespace Traversal
+ {
+ // BoundedString
+ //
+
+ void BoundedString::
+ traverse (Type& s)
+ {
+ pre (s);
+ arguments_with_value (s);
+ name (s);
+ post (s);
+ }
+
+ void BoundedString::
+ pre (Type&)
+ {
+ }
+
+ void BoundedString::
+ arguments_with_value (Type& s, EdgeDispatcherBase& d)
+ {
+ d.traverse (**s.arguments_begin ());
+ }
+
+ void BoundedString::
+ arguments_with_value (Type& s)
+ {
+ arguments_with_value (s, edge_traverser ());
+ }
+
+ void BoundedString::
+ name (Type&)
+ {
+ }
+
+ void BoundedString::
+ post (Type&)
+ {
+ }
+
+
+ // BoundedWideString
+ //
+
+ void BoundedWideString::
+ traverse (Type& s)
+ {
+ pre (s);
+ arguments_with_value (s);
+ name (s);
+ post (s);
+ }
+
+ void BoundedWideString::
+ pre (Type&)
+ {
+ }
+
+ void BoundedWideString::
+ arguments_with_value (Type& s, EdgeDispatcherBase& d)
+ {
+ d.traverse (**s.arguments_begin ());
+ }
+
+ void BoundedWideString::
+ arguments_with_value (Type& s)
+ {
+ arguments_with_value (s, edge_traverser ());
+ }
+
+ void BoundedWideString::
+ name (Type&)
+ {
+ }
+
+ void BoundedWideString::
+ post (Type&)
+ {
+ }
+ }
+ }
+}
diff --git a/TAO/CIAO/CCF/CCF/IDL2/Traversal/String.hpp b/TAO/CIAO/CCF/CCF/IDL2/Traversal/String.hpp
new file mode 100644
index 00000000000..7fca6eb7972
--- /dev/null
+++ b/TAO/CIAO/CCF/CCF/IDL2/Traversal/String.hpp
@@ -0,0 +1,64 @@
+// file : CCF/IDL2/Traversal/String.hpp
+// author : Boris Kolpackov <boris@dre.vanderbilt.edu>
+// cvs-id : $Id$
+
+#ifndef CCF_IDL2_TRAVERSAL_STRING_HPP
+#define CCF_IDL2_TRAVERSAL_STRING_HPP
+
+#include "CCF/IDL2/Traversal/Elements.hpp"
+
+#include "CCF/IDL2/SemanticGraph/String.hpp"
+
+namespace CCF
+{
+ namespace IDL2
+ {
+ namespace Traversal
+ {
+ struct BoundedString : Node<SemanticGraph::BoundedString>
+ {
+ virtual void
+ traverse (Type&);
+
+ virtual void
+ pre (Type&);
+
+ virtual void
+ arguments_with_value (Type&, EdgeDispatcherBase&);
+
+ virtual void
+ arguments_with_value (Type&);
+
+ virtual void
+ name (Type&);
+
+ virtual void
+ post (Type&);
+ };
+
+
+ struct BoundedWideString : Node<SemanticGraph::BoundedWideString>
+ {
+ virtual void
+ traverse (Type&);
+
+ virtual void
+ pre (Type&);
+
+ virtual void
+ arguments_with_value (Type&, EdgeDispatcherBase&);
+
+ virtual void
+ arguments_with_value (Type&);
+
+ virtual void
+ name (Type&);
+
+ virtual void
+ post (Type&);
+ };
+ }
+ }
+}
+
+#endif // CCF_IDL2_TRAVERSAL_STRING_HPP
diff --git a/TAO/CIAO/CIAO_DAnCE.mwc b/TAO/CIAO/CIAO_DAnCE.mwc
new file mode 100644
index 00000000000..97e79d5b9a2
--- /dev/null
+++ b/TAO/CIAO/CIAO_DAnCE.mwc
@@ -0,0 +1,8 @@
+//$Id$
+
+workspace {
+ ciao
+ DAnCE
+ ciaosvcs
+ tools/Config_Handlers
+}
diff --git a/TAO/CIAO/CIAO_TAO.mwc b/TAO/CIAO/CIAO_TAO.mwc
new file mode 100644
index 00000000000..64577db506b
--- /dev/null
+++ b/TAO/CIAO/CIAO_TAO.mwc
@@ -0,0 +1,29 @@
+// -*- MPC -*-
+// $Id$
+
+workspace {
+ ../../ace
+ ../../apps/gperf/src
+ ../../ACEXML
+ ../tao
+ ../TAO_IDL
+ ../orbsvcs/orbsvcs/CosEvent.mpc
+ ../orbsvcs/orbsvcs/CosNaming.mpc
+ ../orbsvcs/orbsvcs/CosNaming_Serv.mpc
+ ../orbsvcs/orbsvcs/CosNaming_Skel.mpc
+ ../orbsvcs/Naming_Service
+ ../orbsvcs/orbsvcs/Svc_Utils.mpc
+ ../orbsvcs/orbsvcs/Security.mpc
+ ../orbsvcs/orbsvcs/IFRService.mpc
+ ../orbsvcs/orbsvcs/RTEvent_Serv.mpc
+ ../orbsvcs/orbsvcs/RTEvent_Skel.mpc
+ ../orbsvcs/orbsvcs/RTEvent.mpc
+
+ DAnCE
+ ciao
+ ciaosvcs
+ tools
+ tests
+ examples
+ RACE
+}
diff --git a/TAO/CIAO/CIAO_TAO_DAnCE.mwc b/TAO/CIAO/CIAO_TAO_DAnCE.mwc
new file mode 100644
index 00000000000..54512e87735
--- /dev/null
+++ b/TAO/CIAO/CIAO_TAO_DAnCE.mwc
@@ -0,0 +1,24 @@
+// -*- MPC -*-
+// $Id$
+
+workspace {
+ ../../ace
+ ../../apps/gperf/src
+ ../../ACEXML
+ ../tao
+ ../TAO_IDL
+ ../orbsvcs/orbsvcs/CosNaming.mpc
+ ../orbsvcs/orbsvcs/CosNaming_Serv.mpc
+ ../orbsvcs/orbsvcs/CosNaming_Skel.mpc
+ ../orbsvcs/Naming_Service
+ ../orbsvcs/orbsvcs/Svc_Utils.mpc
+ ../orbsvcs/orbsvcs/Security.mpc
+ ../orbsvcs/orbsvcs/IFRService.mpc
+ ../orbsvcs/orbsvcs/RTEvent.mpc
+ ../orbsvcs/orbsvcs/RTEvent_Serv.mpc
+ ../orbsvcs/orbsvcs/RTEvent_Skel.mpc
+ ciao
+ DAnCE
+ ciaosvcs
+ tools/Config_Handlers
+}
diff --git a/TAO/CIAO/DAnCE/Interfaces/ExecutionManager_stub_export.h b/TAO/CIAO/DAnCE/Interfaces/ExecutionManager_stub_export.h
new file mode 100644
index 00000000000..f32c91c5e6e
--- /dev/null
+++ b/TAO/CIAO/DAnCE/Interfaces/ExecutionManager_stub_export.h
@@ -0,0 +1,54 @@
+
+// -*- C++ -*-
+// $Id$
+// Definition for Win32 Export directives.
+// This file is generated automatically by generate_export_file.pl ExecutionManager_stub
+// ------------------------------
+#ifndef EXECUTIONMANAGER_STUB_EXPORT_H
+#define EXECUTIONMANAGER_STUB_EXPORT_H
+
+#include "ace/config-all.h"
+
+#if !defined (EXECUTIONMANAGER_STUB_HAS_DLL)
+# define EXECUTIONMANAGER_STUB_HAS_DLL 1
+#endif /* ! EXECUTIONMANAGER_STUB_HAS_DLL */
+
+#if defined (EXECUTIONMANAGER_STUB_HAS_DLL) && (EXECUTIONMANAGER_STUB_HAS_DLL == 1)
+# if defined (EXECUTIONMANAGER_STUB_BUILD_DLL)
+# define ExecutionManager_stub_Export ACE_Proper_Export_Flag
+# define EXECUTIONMANAGER_STUB_SINGLETON_DECLARATION(T) ACE_EXPORT_SINGLETON_DECLARATION (T)
+# define EXECUTIONMANAGER_STUB_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK) ACE_EXPORT_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK)
+# else /* EXECUTIONMANAGER_STUB_BUILD_DLL */
+# define ExecutionManager_stub_Export ACE_Proper_Import_Flag
+# define EXECUTIONMANAGER_STUB_SINGLETON_DECLARATION(T) ACE_IMPORT_SINGLETON_DECLARATION (T)
+# define EXECUTIONMANAGER_STUB_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK) ACE_IMPORT_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK)
+# endif /* EXECUTIONMANAGER_STUB_BUILD_DLL */
+#else /* EXECUTIONMANAGER_STUB_HAS_DLL == 1 */
+# define ExecutionManager_stub_Export
+# define EXECUTIONMANAGER_STUB_SINGLETON_DECLARATION(T)
+# define EXECUTIONMANAGER_STUB_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK)
+#endif /* EXECUTIONMANAGER_STUB_HAS_DLL == 1 */
+
+// Set EXECUTIONMANAGER_STUB_NTRACE = 0 to turn on library specific tracing even if
+// tracing is turned off for ACE.
+#if !defined (EXECUTIONMANAGER_STUB_NTRACE)
+# if (ACE_NTRACE == 1)
+# define EXECUTIONMANAGER_STUB_NTRACE 1
+# else /* (ACE_NTRACE == 1) */
+# define EXECUTIONMANAGER_STUB_NTRACE 0
+# endif /* (ACE_NTRACE == 1) */
+#endif /* !EXECUTIONMANAGER_STUB_NTRACE */
+
+#if (EXECUTIONMANAGER_STUB_NTRACE == 1)
+# define EXECUTIONMANAGER_STUB_TRACE(X)
+#else /* (EXECUTIONMANAGER_STUB_NTRACE == 1) */
+# if !defined (ACE_HAS_TRACE)
+# define ACE_HAS_TRACE
+# endif /* ACE_HAS_TRACE */
+# define EXECUTIONMANAGER_STUB_TRACE(X) ACE_TRACE_IMPL(X)
+# include "ace/Trace.h"
+#endif /* (EXECUTIONMANAGER_STUB_NTRACE == 1) */
+
+#endif /* EXECUTIONMANAGER_STUB_EXPORT_H */
+
+// End of auto generated file.
diff --git a/TAO/CIAO/DAnCE/Interfaces/NodeManager_stub_export.h b/TAO/CIAO/DAnCE/Interfaces/NodeManager_stub_export.h
new file mode 100644
index 00000000000..3e708b0ab1f
--- /dev/null
+++ b/TAO/CIAO/DAnCE/Interfaces/NodeManager_stub_export.h
@@ -0,0 +1,54 @@
+
+// -*- C++ -*-
+// $Id$
+// Definition for Win32 Export directives.
+// This file is generated automatically by generate_export_file.pl NodeManager_stub
+// ------------------------------
+#ifndef NODEMANAGER_STUB_EXPORT_H
+#define NODEMANAGER_STUB_EXPORT_H
+
+#include "ace/config-all.h"
+
+#if !defined (NODEMANAGER_STUB_HAS_DLL)
+# define NODEMANAGER_STUB_HAS_DLL 1
+#endif /* ! NODEMANAGER_STUB_HAS_DLL */
+
+#if defined (NODEMANAGER_STUB_HAS_DLL) && (NODEMANAGER_STUB_HAS_DLL == 1)
+# if defined (NODEMANAGER_STUB_BUILD_DLL)
+# define NodeManager_stub_Export ACE_Proper_Export_Flag
+# define NODEMANAGER_STUB_SINGLETON_DECLARATION(T) ACE_EXPORT_SINGLETON_DECLARATION (T)
+# define NODEMANAGER_STUB_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK) ACE_EXPORT_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK)
+# else /* NODEMANAGER_STUB_BUILD_DLL */
+# define NodeManager_stub_Export ACE_Proper_Import_Flag
+# define NODEMANAGER_STUB_SINGLETON_DECLARATION(T) ACE_IMPORT_SINGLETON_DECLARATION (T)
+# define NODEMANAGER_STUB_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK) ACE_IMPORT_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK)
+# endif /* NODEMANAGER_STUB_BUILD_DLL */
+#else /* NODEMANAGER_STUB_HAS_DLL == 1 */
+# define NodeManager_stub_Export
+# define NODEMANAGER_STUB_SINGLETON_DECLARATION(T)
+# define NODEMANAGER_STUB_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK)
+#endif /* NODEMANAGER_STUB_HAS_DLL == 1 */
+
+// Set NODEMANAGER_STUB_NTRACE = 0 to turn on library specific tracing even if
+// tracing is turned off for ACE.
+#if !defined (NODEMANAGER_STUB_NTRACE)
+# if (ACE_NTRACE == 1)
+# define NODEMANAGER_STUB_NTRACE 1
+# else /* (ACE_NTRACE == 1) */
+# define NODEMANAGER_STUB_NTRACE 0
+# endif /* (ACE_NTRACE == 1) */
+#endif /* !NODEMANAGER_STUB_NTRACE */
+
+#if (NODEMANAGER_STUB_NTRACE == 1)
+# define NODEMANAGER_STUB_TRACE(X)
+#else /* (NODEMANAGER_STUB_NTRACE == 1) */
+# if !defined (ACE_HAS_TRACE)
+# define ACE_HAS_TRACE
+# endif /* ACE_HAS_TRACE */
+# define NODEMANAGER_STUB_TRACE(X) ACE_TRACE_IMPL(X)
+# include "ace/Trace.h"
+#endif /* (NODEMANAGER_STUB_NTRACE == 1) */
+
+#endif /* NODEMANAGER_STUB_EXPORT_H */
+
+// End of auto generated file.
diff --git a/TAO/CIAO/DAnCE/Interfaces/NodeManager_svnt_export.h b/TAO/CIAO/DAnCE/Interfaces/NodeManager_svnt_export.h
new file mode 100644
index 00000000000..199168ef44d
--- /dev/null
+++ b/TAO/CIAO/DAnCE/Interfaces/NodeManager_svnt_export.h
@@ -0,0 +1,54 @@
+
+// -*- C++ -*-
+// $Id$
+// Definition for Win32 Export directives.
+// This file is generated automatically by generate_export_file.pl NodeManager_svnt
+// ------------------------------
+#ifndef NODEMANAGER_SVNT_EXPORT_H
+#define NODEMANAGER_SVNT_EXPORT_H
+
+#include "ace/config-all.h"
+
+#if !defined (NODEMANAGER_SVNT_HAS_DLL)
+# define NODEMANAGER_SVNT_HAS_DLL 1
+#endif /* ! NODEMANAGER_SVNT_HAS_DLL */
+
+#if defined (NODEMANAGER_SVNT_HAS_DLL) && (NODEMANAGER_SVNT_HAS_DLL == 1)
+# if defined (NODEMANAGER_SVNT_BUILD_DLL)
+# define NodeManager_svnt_Export ACE_Proper_Export_Flag
+# define NODEMANAGER_SVNT_SINGLETON_DECLARATION(T) ACE_EXPORT_SINGLETON_DECLARATION (T)
+# define NODEMANAGER_SVNT_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK) ACE_EXPORT_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK)
+# else /* NODEMANAGER_SVNT_BUILD_DLL */
+# define NodeManager_svnt_Export ACE_Proper_Import_Flag
+# define NODEMANAGER_SVNT_SINGLETON_DECLARATION(T) ACE_IMPORT_SINGLETON_DECLARATION (T)
+# define NODEMANAGER_SVNT_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK) ACE_IMPORT_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK)
+# endif /* NODEMANAGER_SVNT_BUILD_DLL */
+#else /* NODEMANAGER_SVNT_HAS_DLL == 1 */
+# define NodeManager_svnt_Export
+# define NODEMANAGER_SVNT_SINGLETON_DECLARATION(T)
+# define NODEMANAGER_SVNT_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK)
+#endif /* NODEMANAGER_SVNT_HAS_DLL == 1 */
+
+// Set NODEMANAGER_SVNT_NTRACE = 0 to turn on library specific tracing even if
+// tracing is turned off for ACE.
+#if !defined (NODEMANAGER_SVNT_NTRACE)
+# if (ACE_NTRACE == 1)
+# define NODEMANAGER_SVNT_NTRACE 1
+# else /* (ACE_NTRACE == 1) */
+# define NODEMANAGER_SVNT_NTRACE 0
+# endif /* (ACE_NTRACE == 1) */
+#endif /* !NODEMANAGER_SVNT_NTRACE */
+
+#if (NODEMANAGER_SVNT_NTRACE == 1)
+# define NODEMANAGER_SVNT_TRACE(X)
+#else /* (NODEMANAGER_SVNT_NTRACE == 1) */
+# if !defined (ACE_HAS_TRACE)
+# define ACE_HAS_TRACE
+# endif /* ACE_HAS_TRACE */
+# define NODEMANAGER_SVNT_TRACE(X) ACE_TRACE_IMPL(X)
+# include "ace/Trace.h"
+#endif /* (NODEMANAGER_SVNT_NTRACE == 1) */
+
+#endif /* NODEMANAGER_SVNT_EXPORT_H */
+
+// End of auto generated file.
diff --git a/TAO/CIAO/DAnCE/NodeApplication/NoOp_Configurator.cpp b/TAO/CIAO/DAnCE/NodeApplication/NoOp_Configurator.cpp
new file mode 100644
index 00000000000..4ffe48cd7d2
--- /dev/null
+++ b/TAO/CIAO/DAnCE/NodeApplication/NoOp_Configurator.cpp
@@ -0,0 +1,39 @@
+// $Id$
+
+#include "NoOp_Configurator.h"
+
+CIAO::NoOp_Configurator::~NoOp_Configurator (void)
+{
+ // Not much to do.
+}
+
+int
+CIAO::NoOp_Configurator::pre_orb_initialize ()
+{
+ return 0;
+}
+
+int
+CIAO::NoOp_Configurator::post_orb_initialize (CORBA::ORB_ptr)
+{
+ return 0;
+}
+
+int
+CIAO::NoOp_Configurator::init_resource_manager
+(const ::Deployment::Properties & /*properties*/)
+{
+ // @@ Currently do thing. We should go over the resource struct in
+ // the future and throw exceptions if there are
+ // un-recognizable/supported stuff in it.
+ return 0;
+}
+
+CORBA::PolicyList *
+CIAO::NoOp_Configurator::find_container_policies
+(const ::Deployment::Properties & /*properties*/)
+{
+ // Not much to do.
+
+ return 0;
+}
diff --git a/TAO/CIAO/DAnCE/NodeApplication/NoOp_Configurator_export.h b/TAO/CIAO/DAnCE/NodeApplication/NoOp_Configurator_export.h
new file mode 100644
index 00000000000..dce4b728146
--- /dev/null
+++ b/TAO/CIAO/DAnCE/NodeApplication/NoOp_Configurator_export.h
@@ -0,0 +1,54 @@
+
+// -*- C++ -*-
+// $Id$
+// Definition for Win32 Export directives.
+// This file is generated automatically by generate_export_file.pl NoOp_Configurator
+// ------------------------------
+#ifndef NOOP_CONFIGURATOR_EXPORT_H
+#define NOOP_CONFIGURATOR_EXPORT_H
+
+#include "ace/config-all.h"
+
+#if !defined (NOOP_CONFIGURATOR_HAS_DLL)
+# define NOOP_CONFIGURATOR_HAS_DLL 1
+#endif /* ! NOOP_CONFIGURATOR_HAS_DLL */
+
+#if defined (NOOP_CONFIGURATOR_HAS_DLL) && (NOOP_CONFIGURATOR_HAS_DLL == 1)
+# if defined (NOOP_CONFIGURATOR_BUILD_DLL)
+# define NoOp_Configurator_Export ACE_Proper_Export_Flag
+# define NOOP_CONFIGURATOR_SINGLETON_DECLARATION(T) ACE_EXPORT_SINGLETON_DECLARATION (T)
+# define NOOP_CONFIGURATOR_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK) ACE_EXPORT_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK)
+# else /* NOOP_CONFIGURATOR_BUILD_DLL */
+# define NoOp_Configurator_Export ACE_Proper_Import_Flag
+# define NOOP_CONFIGURATOR_SINGLETON_DECLARATION(T) ACE_IMPORT_SINGLETON_DECLARATION (T)
+# define NOOP_CONFIGURATOR_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK) ACE_IMPORT_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK)
+# endif /* NOOP_CONFIGURATOR_BUILD_DLL */
+#else /* NOOP_CONFIGURATOR_HAS_DLL == 1 */
+# define NoOp_Configurator_Export
+# define NOOP_CONFIGURATOR_SINGLETON_DECLARATION(T)
+# define NOOP_CONFIGURATOR_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK)
+#endif /* NOOP_CONFIGURATOR_HAS_DLL == 1 */
+
+// Set NOOP_CONFIGURATOR_NTRACE = 0 to turn on library specific tracing even if
+// tracing is turned off for ACE.
+#if !defined (NOOP_CONFIGURATOR_NTRACE)
+# if (ACE_NTRACE == 1)
+# define NOOP_CONFIGURATOR_NTRACE 1
+# else /* (ACE_NTRACE == 1) */
+# define NOOP_CONFIGURATOR_NTRACE 0
+# endif /* (ACE_NTRACE == 1) */
+#endif /* !NOOP_CONFIGURATOR_NTRACE */
+
+#if (NOOP_CONFIGURATOR_NTRACE == 1)
+# define NOOP_CONFIGURATOR_TRACE(X)
+#else /* (NOOP_CONFIGURATOR_NTRACE == 1) */
+# if !defined (ACE_HAS_TRACE)
+# define ACE_HAS_TRACE
+# endif /* ACE_HAS_TRACE */
+# define NOOP_CONFIGURATOR_TRACE(X) ACE_TRACE_IMPL(X)
+# include "ace/Trace.h"
+#endif /* (NOOP_CONFIGURATOR_NTRACE == 1) */
+
+#endif /* NOOP_CONFIGURATOR_EXPORT_H */
+
+// End of auto generated file.
diff --git a/TAO/CIAO/DAnCE/NodeApplication/NodeApp_Configurator.cpp b/TAO/CIAO/DAnCE/NodeApplication/NodeApp_Configurator.cpp
new file mode 100644
index 00000000000..b0c2315923f
--- /dev/null
+++ b/TAO/CIAO/DAnCE/NodeApplication/NodeApp_Configurator.cpp
@@ -0,0 +1,3 @@
+// $Id$
+
+// empty
diff --git a/TAO/CIAO/DAnCE/NodeApplication/NodeApp_Configurator.h b/TAO/CIAO/DAnCE/NodeApplication/NodeApp_Configurator.h
new file mode 100644
index 00000000000..b3eb92b4482
--- /dev/null
+++ b/TAO/CIAO/DAnCE/NodeApplication/NodeApp_Configurator.h
@@ -0,0 +1,90 @@
+//$Id$
+/**========================================================
+ *
+ * @file NodeApp_Configurator.h
+ *
+ * @Brief This file contains the implementation of
+ * the basic NodeApp_Configurator interface, the one
+ * that does nothing more
+ *
+ * @author Nanbor Wang <nanbor@exothermic.txcorp.com>
+ *========================================================*/
+
+#ifndef NODEAPP_CONFIGURATOR_H
+#define NODEAPP_CONFIGURATOR_H
+#include /**/ "ace/pre.h"
+
+#include "ace/config-all.h"
+
+#if !defined (ACE_LACKS_PRAGMA_ONCE)
+# pragma once
+#endif /* ACE_LACKS_PRAGMA_ONCE */
+
+#include "ciao/Deployment_CoreC.h"
+
+namespace CIAO
+{
+ /**
+ *
+ * @class NodeApp_Configurator
+ *
+ * @brief This class defines and implements the default
+ * NodeApp_Configurator base class that's needed for configuring the
+ * NodeApplication process.
+ **/
+ class NodeApp_Configurator
+ {
+ public:
+ /// Default destructor.
+ virtual ~NodeApp_Configurator (void) {}
+
+ /**
+ * @brief "pre_orb_initialize" is called before ORB_init.
+ */
+ virtual int pre_orb_initialize (void) = 0;
+
+ /**
+ * @brief "post_orb_initialize" is called after NodeApplication
+ * get a hold at this object.
+ */
+ virtual int post_orb_initialize (CORBA::ORB_ptr o) = 0;
+
+ /**
+ * @brief "init_resource_manager" is called by NodeApplication when
+ * it receives an "install" commands.
+ */
+ virtual int
+ init_resource_manager (const ::Deployment::Properties &properties) = 0;
+
+ /**
+ * @brief get a policyset by its name.
+ */
+ virtual CORBA::PolicyList *
+ find_container_policies (const ::Deployment::Properties &properties) = 0;
+
+ /// @@ Perhaps we also need a finalizer method here. Perhaps we
+ /// even need to differentiate finalizer before ORB is destroyed
+ /// and the one after that.
+ };
+}
+
+/**
+ * For dynamically linkable concrete NodeApp_Configurator
+ * implementation, remember to create a factory method using "C"
+ * calling convention in the CPP file as follow:
+
+ extern "C" EXPORT_MACRO CIAO::NodeApp_Configurator *create_nodeapp_configurator (void);
+
+ CIAO::NodeApp_Configurator *
+ create_nodeapp_configurator (void)
+ {
+ concrete_NodeApp_Configurator *config;
+ ACE_NEW_RETURN (config, concrete_NodeApp_Configurator, 0);
+ return config;
+ }
+
+ */
+
+
+#include /**/ "ace/post.h"
+#endif /* NODEAPP_CONFIGURATOR_H */
diff --git a/TAO/CIAO/DAnCE/NodeApplication/RTConfig_Manager.h b/TAO/CIAO/DAnCE/NodeApplication/RTConfig_Manager.h
new file mode 100644
index 00000000000..a487ea72d98
--- /dev/null
+++ b/TAO/CIAO/DAnCE/NodeApplication/RTConfig_Manager.h
@@ -0,0 +1,139 @@
+// -*- C++ -*-
+
+//=============================================================================
+/**
+ * @file RTConfig_Manager.h
+ *
+ * $Id$
+ *
+ * This file contains classes that manage name to configuration
+ * mapping info in a RTComponentServer.
+ *
+ * @author Nanbor Wang <nanbor@cs.wustl.edu>
+ */
+//=============================================================================
+
+
+#ifndef CIAO_RTCONFIG_MANAGER_H
+#define CIAO_RTCONFIG_MANAGER_H
+#include /**/ "ace/pre.h"
+
+#include "ace/config-all.h"
+
+#if !defined (ACE_LACKS_PRAGMA_ONCE)
+# pragma once
+#endif /* ACE_LACKS_PRAGMA_ONCE */
+
+#include "tao/RTCORBA/RTCORBA.h"
+#include "ciao/ServerResourcesC.h"
+#include "ace/Null_Mutex.h"
+#include "ace/SString.h"
+#include "ace/Hash_Map_Manager_T.h"
+
+namespace CIAO
+{
+ /**
+ * @brief RTResource_Config_Manager maintains a collection of
+ * RTCORBA related resources.
+ *
+ * This class is responsible to create and manage a list of RTCORBA
+ * related resources that are global to an RT ComponentServer. The
+ * information required to create and configure these resources are
+ * passed in via the @a info argument in the @c init method. These
+ * resources are identified by names and can be used to associate
+ * these resources with related RTPolicies. These resources are
+ * destoryed along with this class.
+ *
+ * Currently, the only resources supported (and managed) by this
+ * class are Threadpool and Threadpool_with_Lanes.
+ */
+ class RTResource_Config_Manager
+ {
+ public:
+ RTResource_Config_Manager (void);
+ ~RTResource_Config_Manager (void);
+
+ void init (RTCORBA::RTORB_ptr rtorb);
+
+ /// Initializing the RTResource_Config_Manager
+ void init_resources (const CIAO::DAnCE::ServerResource &info
+ ACE_ENV_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+ /// Finalizing the RTResource_Config_Manager and the resources it
+ /// manages.
+ void fini (ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+ /// Query a policy set by name
+ CORBA::PolicyList *find_policies_by_name (const char *name
+ ACE_ENV_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+ protected:
+ void print_resources (const CIAO::DAnCE::ServerResource &info
+ ACE_ENV_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+ /// Query a thread pool by name.
+ RTCORBA::ThreadpoolId find_threadpool_by_name (const char *name
+ ACE_ENV_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+
+ /// Query a priority bands info by name.
+ RTCORBA::PriorityBands *find_priority_bands_by_name (const char *name
+ ACE_ENV_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+ private:
+ /// Cached an ORB reference.
+ CORBA::ORB_var orb_;
+
+ // Cached an RTORB reference.
+ RTCORBA::RTORB_var rtorb_;
+
+ /// Hash_Map stuff.
+ typedef ACE_Hash_Map_Manager_Ex<ACE_CString,
+ RTCORBA::ThreadpoolId,
+ ACE_Hash<ACE_CString>,
+ ACE_Equal_To<ACE_CString>,
+ ACE_Null_Mutex> TP_MAP;
+
+ typedef ACE_Hash_Map_Manager_Ex<ACE_CString,
+ RTCORBA::PriorityBands_var,
+ ACE_Hash<ACE_CString>,
+ ACE_Equal_To<ACE_CString>,
+ ACE_Null_Mutex> PB_MAP;
+
+ /// Internal TP name to id map.
+ TP_MAP threadpool_map_;
+
+ /// Internal PB name to priority bands map.
+ PB_MAP priority_bands_map_;
+
+ /// create a single policy
+ CORBA::Policy_ptr create_single_policy
+ (const CIAO::DAnCE::PolicyDef &policy_def
+ ACE_ENV_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+ /// Hash_Map stuff.
+ typedef ACE_Hash_Map_Manager_Ex<ACE_CString,
+ CORBA::PolicyList_var,
+ ACE_Hash<ACE_CString>,
+ ACE_Equal_To<ACE_CString>,
+ ACE_Null_Mutex> POLICY_MAP;
+
+ /// Internal TP names to id map.
+ POLICY_MAP policy_map_;
+ };
+}
+
+#if defined (__ACE_INLINE__)
+# include "RTConfig_Manager.inl"
+#endif /* __ACE_INLINE__ */
+
+#include /**/ "ace/post.h"
+#endif /* CIAO_RTCONFIG_MANAGER_H */
+
diff --git a/TAO/CIAO/DAnCE/NodeApplication/RTConfig_Manager.inl b/TAO/CIAO/DAnCE/NodeApplication/RTConfig_Manager.inl
new file mode 100644
index 00000000000..9537e7569ac
--- /dev/null
+++ b/TAO/CIAO/DAnCE/NodeApplication/RTConfig_Manager.inl
@@ -0,0 +1,13 @@
+// $Id$
+
+ACE_INLINE
+CIAO::RTResource_Config_Manager::RTResource_Config_Manager ()
+{
+}
+
+ACE_INLINE
+CIAO::RTResource_Config_Manager::~RTResource_Config_Manager ()
+{
+ this->fini ();
+}
+
diff --git a/TAO/CIAO/DAnCE/NodeApplication/RTNA_Configurator_Export.h b/TAO/CIAO/DAnCE/NodeApplication/RTNA_Configurator_Export.h
new file mode 100644
index 00000000000..5891c5aca0f
--- /dev/null
+++ b/TAO/CIAO/DAnCE/NodeApplication/RTNA_Configurator_Export.h
@@ -0,0 +1,54 @@
+
+// -*- C++ -*-
+// $Id$
+// Definition for Win32 Export directives.
+// This file is generated automatically by generate_export_file.pl CIAO_RTNA_Configurator
+// ------------------------------
+#ifndef CIAO_RTNA_CONFIGURATOR_EXPORT_H
+#define CIAO_RTNA_CONFIGURATOR_EXPORT_H
+
+#include "ace/config-all.h"
+
+#if !defined (CIAO_RTNA_CONFIGURATOR_HAS_DLL)
+# define CIAO_RTNA_CONFIGURATOR_HAS_DLL 1
+#endif /* ! CIAO_RTNA_CONFIGURATOR_HAS_DLL */
+
+#if defined (CIAO_RTNA_CONFIGURATOR_HAS_DLL) && (CIAO_RTNA_CONFIGURATOR_HAS_DLL == 1)
+# if defined (CIAO_RTNA_CONFIGURATOR_BUILD_DLL)
+# define CIAO_RTNA_Configurator_Export ACE_Proper_Export_Flag
+# define CIAO_RTNA_CONFIGURATOR_SINGLETON_DECLARATION(T) ACE_EXPORT_SINGLETON_DECLARATION (T)
+# define CIAO_RTNA_CONFIGURATOR_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK) ACE_EXPORT_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK)
+# else /* CIAO_RTNA_CONFIGURATOR_BUILD_DLL */
+# define CIAO_RTNA_Configurator_Export ACE_Proper_Import_Flag
+# define CIAO_RTNA_CONFIGURATOR_SINGLETON_DECLARATION(T) ACE_IMPORT_SINGLETON_DECLARATION (T)
+# define CIAO_RTNA_CONFIGURATOR_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK) ACE_IMPORT_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK)
+# endif /* CIAO_RTNA_CONFIGURATOR_BUILD_DLL */
+#else /* CIAO_RTNA_CONFIGURATOR_HAS_DLL == 1 */
+# define CIAO_RTNA_Configurator_Export
+# define CIAO_RTNA_CONFIGURATOR_SINGLETON_DECLARATION(T)
+# define CIAO_RTNA_CONFIGURATOR_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK)
+#endif /* CIAO_RTNA_CONFIGURATOR_HAS_DLL == 1 */
+
+// Set CIAO_RTNA_CONFIGURATOR_NTRACE = 0 to turn on library specific tracing even if
+// tracing is turned off for ACE.
+#if !defined (CIAO_RTNA_CONFIGURATOR_NTRACE)
+# if (ACE_NTRACE == 1)
+# define CIAO_RTNA_CONFIGURATOR_NTRACE 1
+# else /* (ACE_NTRACE == 1) */
+# define CIAO_RTNA_CONFIGURATOR_NTRACE 0
+# endif /* (ACE_NTRACE == 1) */
+#endif /* !CIAO_RTNA_CONFIGURATOR_NTRACE */
+
+#if (CIAO_RTNA_CONFIGURATOR_NTRACE == 1)
+# define CIAO_RTNA_CONFIGURATOR_TRACE(X)
+#else /* (CIAO_RTNA_CONFIGURATOR_NTRACE == 1) */
+# if !defined (ACE_HAS_TRACE)
+# define ACE_HAS_TRACE
+# endif /* ACE_HAS_TRACE */
+# define CIAO_RTNA_CONFIGURATOR_TRACE(X) ACE_TRACE_IMPL(X)
+# include "ace/Trace.h"
+#endif /* (CIAO_RTNA_CONFIGURATOR_NTRACE == 1) */
+
+#endif /* CIAO_RTNA_CONFIGURATOR_EXPORT_H */
+
+// End of auto generated file.
diff --git a/TAO/CIAO/DAnCE/NodeManager/BaseMonitor.h b/TAO/CIAO/DAnCE/NodeManager/BaseMonitor.h
new file mode 100644
index 00000000000..fc34383aa06
--- /dev/null
+++ b/TAO/CIAO/DAnCE/NodeManager/BaseMonitor.h
@@ -0,0 +1,63 @@
+// $Id$
+//----------------------------------------------------------------------------------
+/// Monitor Interface
+/*
+ * @file BaseMonitor.h
+ * @brief The BaseMonitor.h file.
+ * This is an abstract class containing the interface to the Monitor plug-in
+ *
+ * @author Nilabja R <nilabjar@dre.vanderbilt.edu>
+ */
+//----------------------------------------------------------------------------------
+
+#ifndef MONITOR_BASEH
+#define MONITOR_BASEH
+#include "tao/ORB.h"
+#include "TargetManagerC.h"
+
+namespace CIAO
+{
+
+ class MonitorBase
+ {
+ public:
+ virtual ~MonitorBase () {};
+
+ /** @function initialize_params
+ * @param domain The Initital domain for this host
+ * @param target_manager TargetManager_ptr
+ * @param interval The time interval after whic updates need to be send.
+ * @description This function is called by the controller to initialize
+ * parameters.
+ */
+ virtual int initialize_params (
+ ::Deployment::Domain& domain,
+ ::Deployment::TargetManager_ptr target_manager,
+ int interval
+ )=0;
+ /** @function start
+ * @param ORB_ptr The ORB pointer
+ * @description This function is called by the controller
+ * to start up the monitor.
+ */
+ virtual int start (CORBA::ORB_ptr)=0;
+ /** @function stop
+ * @description This function is called by the controller
+ * to stop the monitor.
+ */
+ virtual int stop ()=0;
+ /** @function get_current_data
+ * @return ::Deployment::Domain* The current Domain data
+ * @description This function is called by the controller
+ * to get the current data.
+ */
+ virtual ::Deployment::Domain* get_current_data ()=0;
+ };
+
+ extern "C" ACE_Proper_Export_Flag CIAO::MonitorBase *
+ createMonitor (void);
+
+} // CIAO
+
+
+#endif /* MONITOR_BASEH */
diff --git a/TAO/CIAO/DAnCE/NodeManager/MonitorCB.h b/TAO/CIAO/DAnCE/NodeManager/MonitorCB.h
new file mode 100644
index 00000000000..66cb25db287
--- /dev/null
+++ b/TAO/CIAO/DAnCE/NodeManager/MonitorCB.h
@@ -0,0 +1,74 @@
+// $Id$
+//==============================================================
+/**
+ * @file MonitorCB.h
+ *
+ * @brief The Monitor Callback Function
+ *
+ * This class updates data back to the Target Manager
+ *
+ * @author Nilabja Roy <nilabjar.vanderbilt.edu>
+*/
+//==============================================================
+
+#ifndef MONITOR_CBH
+#define MONITOR_CBH
+
+#include "TargetManagerC.h"
+
+
+
+/**
+ * @namespace CIAO
+ *
+ * @brief The top level CIAO namespace
+ *
+ */
+
+namespace CIAO
+{
+ /**
+ * @class MonitorCB
+ *
+ * @brief Updates data back to the TM.
+ *
+ */
+
+ class MonitorCB
+ {
+ public:
+ /**
+ * @constructor
+ * @param _orb The ORB pointer
+ * @param The TargetManager reference
+ * @param interval The time interval to sent update
+ */
+ MonitorCB (CORBA::ORB_ptr _orb,Deployment::TargetManager_ptr,int interval);
+ /**
+ * @function update_data
+ * @param data Contains the updated Domain data
+ * @return int indicates success.
+ * @description This function is called by the monitor to
+ * update Domain data, which is then sent to
+ * TM.
+ */
+ int update_data (::Deployment::Domain& data);
+ private:
+ /// The ORB pointer
+ CORBA::ORB_ptr orb_;
+
+ /// The Target Manager pointer to send back the
+ /// update
+ ::Deployment::TargetManager_ptr target_mgr_;
+
+ /// The interval after which updates need to be send
+ int interval_;
+
+ };
+
+ /// The Callback function pointer
+ typedef int (MonitorCB::*CallBack) (::Deployment::Domain &);
+
+} // CIAO namespace
+
+#endif /* MONITOR_CBH */
diff --git a/TAO/CIAO/DAnCE/RepositoryManager/HTTP_Client.cpp b/TAO/CIAO/DAnCE/RepositoryManager/HTTP_Client.cpp
new file mode 100644
index 00000000000..73a8071f305
--- /dev/null
+++ b/TAO/CIAO/DAnCE/RepositoryManager/HTTP_Client.cpp
@@ -0,0 +1,59 @@
+// $Id$
+
+// HTTP_Client.cpp, Stoyan
+
+#include "HTTP_Client.h"
+#include "HTTP_Handler.h"
+#include "ace/OS_NS_string.h"
+
+HTTP_Client::HTTP_Client (void)
+{
+}
+
+HTTP_Client::~HTTP_Client (void)
+{
+ this->close ();
+}
+
+// initialize address and filename. No network i/o in open
+int
+HTTP_Client::open (const ACE_TCHAR *filename,
+ const ACE_TCHAR *hostname,
+ u_short port)
+{
+ filename_ = ACE_OS::strdup (filename);
+ inet_addr_.set (port, hostname);
+ return 0;
+}
+
+// read from connection length bytes from offset, into Message block
+int
+HTTP_Client::read (ACE_Message_Block *mb)
+{
+
+ // Create a HTTP_Client Reader
+ HTTP_Reader HTTP_reader (mb, filename_);
+ HTTP_Handler *brp = &HTTP_reader;
+
+ // Connect to the server
+ if (connector_.connect (brp, inet_addr_) == -1)
+ ACE_ERROR_RETURN ((LM_ERROR, "%p\n", "HTTP_Client::read():Connector error"), -1);
+
+ return HTTP_reader.byte_count ();
+
+}
+
+// close down the HTTP_Client
+int
+HTTP_Client::close (void)
+{
+
+ if (filename_)
+ {
+ ACE_OS::free ((void *) filename_);
+ filename_ = 0;
+ }
+ return 0;
+
+}
+
diff --git a/TAO/CIAO/DAnCE/RepositoryManager/HTTP_Client.h b/TAO/CIAO/DAnCE/RepositoryManager/HTTP_Client.h
new file mode 100644
index 00000000000..ac0f9cbea92
--- /dev/null
+++ b/TAO/CIAO/DAnCE/RepositoryManager/HTTP_Client.h
@@ -0,0 +1,72 @@
+
+/* -*- C++ -*- */
+
+//=============================================================================
+/**
+ * @file HTTP_Client.h
+ *
+ * $Id$
+ *
+ * This is the HTTP_Client class, which is the API for doing file
+ * uploads/downloads.
+ *
+ * @author Stoyan Paunov
+ */
+//=============================================================================
+
+
+#ifndef HTTP_Client_H
+#define HTTP_Client_H
+
+
+#include "ace/INET_Addr.h"
+#include "ace/Svc_Handler.h"
+#include "ace/SOCK_Connector.h"
+#include "ace/Connector.h"
+#include "ace/Message_Block.h"
+#include "HTTP_Handler.h"
+
+/**
+ * @class HTTP_Client
+ *
+ * @brief HTTP_Client is intended to provide application API to
+ * classes that wish to do network i/o at a very
+ * high level of abstraction.
+ *
+ * This class provides the ability to retrieve data from
+ * the network, of specified length and offset, and potentially
+ * use any protocol "under the hood" to do so. It currently
+ * uses HTTP. See HTTP_Handler also.
+ */
+class HTTP_Client
+{
+public:
+ HTTP_Client (void);
+ ~HTTP_Client (void);
+
+ /// Initializes the class with the given filename, hostname and port.
+ /// it should be called with the filename, before any read/write calls
+ int open (const ACE_TCHAR *filename,
+ const ACE_TCHAR *hostname = ACE_DEFAULT_SERVER_HOST,
+ u_short port = 80);
+
+ /// Starts a connection, and reads a file from the server into
+ /// Message_Block mb
+ int read (ACE_Message_Block *mb);
+
+ /// Frees memory allocated for filename.
+ int close ();
+
+private:
+ /// Store the internet address of the server
+ ACE_INET_Addr inet_addr_;
+
+ /// The filename
+ ACE_TCHAR *filename_;
+
+ /// The connector endpoint to initiate the client connection
+ ACE_Connector<HTTP_Handler, ACE_SOCK_CONNECTOR> connector_;
+
+};
+
+#endif /* HTTP_Client_H */
diff --git a/TAO/CIAO/DAnCE/RepositoryManager/HTTP_Handler.h b/TAO/CIAO/DAnCE/RepositoryManager/HTTP_Handler.h
new file mode 100644
index 00000000000..d1e9aae2894
--- /dev/null
+++ b/TAO/CIAO/DAnCE/RepositoryManager/HTTP_Handler.h
@@ -0,0 +1,86 @@
+
+/* -*- C++ -*- */
+
+//=============================================================================
+/**
+ * @file HTTP_Handler.h
+ *
+ * $Id$
+ *
+ * HTTP_Handler is a base class for HTTP_Reader and
+ * HTTP_Writer which are created in response to calls to
+ * read/write, as appropriate
+ *
+ *
+ * @author Stoyan Paunov
+ */
+//=============================================================================
+
+
+#ifndef HTTP_HANDLER_H
+#define HTTP_HANDLER_H
+
+#include "ace/SOCK_Stream.h"
+#include "ace/Svc_Handler.h"
+#include "ace/Message_Block.h"
+
+/**
+ * @class HTTP_Handler
+ * class to retrieve data via HTTP
+ */
+class HTTP_Handler : public ACE_Svc_Handler <ACE_SOCK_STREAM, ACE_NULL_SYNCH>
+{
+public:
+ /// Null constructor, insures that it works properly with Connector
+ HTTP_Handler (void);
+
+ /// Always use this constructor to make HTTP_Handlers
+ HTTP_Handler (ACE_Message_Block *mb,
+ ACE_TCHAR *filename);
+
+ /// returns the number of bytes read/written in the last operation.
+ size_t byte_count (void);
+
+ /// Activate this instance of the <HTTP_Handler>
+ virtual int open (void * = 0);
+
+ /// Close down the Blob
+ virtual int close (u_long flags = 0);
+
+ ~HTTP_Handler (void);
+
+protected:
+ virtual int send_request (void);
+ virtual int receive_reply (void);
+
+ ACE_Message_Block *mb_;
+ ACE_TCHAR *filename_;
+ size_t bytecount_;
+ enum
+ {
+ /// The handler assumes that the first 2048 bytes of a server response
+ /// contains the header
+ MAX_HEADER_SIZE = 2048,
+
+ /// set the MAX_TRANSMISSION_UNIT (MTU) = BUFSIZ as defined by OS
+ MTU = BUFSIZ
+ };
+};
+
+class HTTP_Reader : public HTTP_Handler
+{
+public:
+ HTTP_Reader (ACE_Message_Block *mb,
+ ACE_TCHAR *filename,
+ const char *request_prefix = "GET",
+ const char *request_suffix = "HTTP/1.0\r\n\r\n");
+
+private:
+ //NOTE: these functions return -1 on error
+ int send_request (void);
+ int receive_reply (void);
+ const char *request_prefix_;
+ const char *request_suffix_;
+};
+
+#endif /* HTTP_HANDLER_H */
diff --git a/TAO/CIAO/DAnCE/RepositoryManager/Options.cpp b/TAO/CIAO/DAnCE/RepositoryManager/Options.cpp
new file mode 100644
index 00000000000..6503e01aa3e
--- /dev/null
+++ b/TAO/CIAO/DAnCE/RepositoryManager/Options.cpp
@@ -0,0 +1,111 @@
+// $Id$
+
+// Options.cpp,v Stoyan
+
+#include "ace/Get_Opt.h"
+#include "ace/ARGV.h"
+#include "Options.h"
+
+
+bool
+Options::parse_args (int argc, ACE_TCHAR *argv[])
+{
+ ACE_Get_Opt get_opt (argc, argv, ACE_TEXT ("n:l:u:ifdsTNa"));
+
+ int c;
+
+ while ((c = get_opt ()) != -1)
+ switch (c)
+ {
+ case 'i':
+ this->install_ = true;
+ break;
+ case 'd':
+ this->delete_ = true;
+ break;
+ case 'f':
+ this->find_ = true;
+ break;
+ case 's':
+ this->shutdown_ = true;
+ break;
+ case 'n':
+ this->name_ = get_opt.opt_arg ();
+ break;
+ case 'l':
+ this->path_ = get_opt.opt_arg ();
+ break;
+ case 'u':
+ this->uuid_ = get_opt.opt_arg ();
+ break;
+ case 'N':
+ this->all_names_ = true;
+ break;
+ case 'T':
+ this->all_types_ = true;
+ break;
+ case 'a':
+ this->names_by_type_ = true;
+ break;
+ // Usage fallthrough.
+ default:
+ this->usage ();
+ return false;
+ }
+
+ if ((this->name_ == "")
+ && (this->shutdown_ == false)
+ && (this->uuid_ == "")
+ && (this->all_names_ == false)
+ && (this->all_types_ == false))
+ {
+ this->usage ();
+ return false;
+ }
+ else if (this->name_ != "")
+ {
+ if (!(this->install_ || this->find_ || this->delete_))
+ {
+ this->usage ();
+ return false;
+ }
+ else if (this->install_ && this->path_ == "")
+ {
+ this->usage ();
+ return false;
+ }
+ }
+ else if (this->uuid_ != "")
+ {
+ if (!this->find_ && !this->names_by_type_)
+ {
+ this->usage ();
+ return false;
+ }
+ }
+
+ return true;
+}
+
+/// @todo Exit is not nice, return -1 so that the caller can do something and
+/// we don't exit abruptly
+void Options::usage (void)
+{
+ ACE_DEBUG ((LM_INFO, "OPTIONS: -s <shutdown> -n <:name> [-i <install> -l <:path>] \
+ [-d <delete>] [-f <find>] [-u <:uuid> [-a <names by type>] ] \
+ [-N <all names>] [-T <all types>]\n"));
+}
+
+Options::Options (void)
+ : name_ (""),
+ uuid_ (""),
+ path_ (""),
+ delete_ (false),
+ install_ (false),
+ find_ (false),
+ all_names_ (false),
+ all_types_ (false),
+ names_by_type_ (false),
+ shutdown_ (false)
+{
+}
diff --git a/TAO/CIAO/DAnCE/RepositoryManager/Options.h b/TAO/CIAO/DAnCE/RepositoryManager/Options.h
new file mode 100644
index 00000000000..ac65d008762
--- /dev/null
+++ b/TAO/CIAO/DAnCE/RepositoryManager/Options.h
@@ -0,0 +1,78 @@
+// $Id$
+
+/* -*- C++ -*- */
+
+//=============================================================================
+/**
+ * @file Options.h
+ *
+ * $Id$
+ *
+ * TheOptions is an Options class wrapped into an ACE_Singleton
+ * with Null_Mutex because the client is single-threaded.
+ *
+ *
+ * @author Stoyan Paunov
+ */
+//=============================================================================
+
+
+#ifndef RM_OPTIONS_H
+#define RM_OPTIONS_H
+
+#include "ace/Get_Opt.h"
+#include "ace/SString.h" //for ACE_CString
+#include "ace/Singleton.h" //for ACE_Singleton
+#include "ace/Null_Mutex.h" //for ACE_Null_Mutex
+
+//forward declaration
+class Options;
+
+typedef ACE_Singleton <Options, ACE_Null_Mutex> TheOptions;
+
+class Options
+{
+public:
+
+ ///constructor
+ Options (void);
+
+ /// parses commandline arguments
+ bool parse_args (int argc, ACE_TCHAR *argv[]);
+
+ /// Name of package
+ ACE_CString name_;
+
+ /// Name of package
+ ACE_CString uuid_;
+
+ /// specifies the local path for install
+ ACE_CString path_;
+
+ /// delete the name_
+ bool delete_;
+
+ /// installs the name_
+ bool install_;
+
+ /// finds the name_
+ bool find_;
+
+ /// get all Names
+ bool all_names_;
+
+ /// get all types
+ bool all_types_;
+
+ /// find all names by type
+ bool names_by_type_;
+
+ /// shutdown the RepositoryManagerDemon
+ bool shutdown_;
+
+protected:
+ //usage function
+ void usage (void);
+};
+
+#endif /* RM_OPTIONS_H */
diff --git a/TAO/CIAO/DAnCE/RepositoryManager/PC_Updater_T.h b/TAO/CIAO/DAnCE/RepositoryManager/PC_Updater_T.h
new file mode 100644
index 00000000000..0e3eb05b5f5
--- /dev/null
+++ b/TAO/CIAO/DAnCE/RepositoryManager/PC_Updater_T.h
@@ -0,0 +1,40 @@
+
+/* -*- C++ -*- */
+
+//==================================================================
+/**
+ * file PC_Updater_T.h
+ *
+ * $Id$
+ *
+ * author Stoyan Paunov <spaunov@isis.vanderbilt.edu>
+ */
+//=====================================================================
+
+#ifndef CIAO_CONFIG_HANDLERS_PC_UPDATER_T_H
+#define CIAO_CONFIG_HANDLERS_PC_UPDATER_T_H
+#include /**/ "ace/pre.h"
+
+#include "ace/config-lite.h"
+
+#if !defined (ACE_LACKS_PRAGMA_ONCE)
+#pragma once
+#endif /* ACE_LACKS_PRAGMA_ONCE */
+
+namespace PC_Updater_T
+{
+ template <typename SEQUENCE>
+ static void update_sequence (const SEQUENCE &seq);
+}
+
+#if defined (ACE_TEMPLATES_REQUIRE_SOURCE)
+#include "PC_Updater_T.cpp"
+#endif /* ACE_TEMPLATES_REQUIRE_SOURCE */
+
+#if defined (ACE_TEMPLATES_REQUIRE_PRAGMA)
+#pragma implementation ("PC_Updater_T.cpp")
+#endif /* ACE_TEMPLATES_REQUIRE_PRAGMA */
+
+
+#include /**/ "ace/post.h"
+#endif /*CIAO_CONFIG_HANDLERS_PC_Updater_T_H*/
diff --git a/TAO/CIAO/DAnCE/RepositoryManager/ZIP_Wrapper.cpp b/TAO/CIAO/DAnCE/RepositoryManager/ZIP_Wrapper.cpp
new file mode 100644
index 00000000000..f910374f71f
--- /dev/null
+++ b/TAO/CIAO/DAnCE/RepositoryManager/ZIP_Wrapper.cpp
@@ -0,0 +1,299 @@
+
+//=======================================================================
+/**
+ * @file ZIP_Wrapper.cpp
+ *
+ * $Id$
+ *
+ * Purpose: implementing the ZIP_Wrapper class
+ *
+ * @author Stoyan Paunov
+ */
+//=======================================================================
+
+
+#include "ace/Containers_T.h" //for ACE_Double_Linked_List
+#include "ace/Message_Block.h" //for ACE_Message_Block
+
+#include "ace/OS_NS_fcntl.h" //for open
+#include "ace/OS_NS_unistd.h" //for close
+#include "ace/OS_NS_string.h" //for strncpy
+#include "ace/SString.h" //for ACE_CString
+#include "ace/OS_NS_sys_stat.h" //for stat
+#include "ace/OS_NS_sys_stat.h" //for filesize and mkdir
+#include "ace/OS_Memory.h" //for ACE_NEW* macros
+
+#include <string>
+#include <memory> //for auto_ptr
+
+/////////////////////////////////////////////////////////////////////////////
+//NOTE: some #defines problems with zzip & ACE - put these 2 lines on top!!!!
+/////////////////////////////////////////////////////////////////////////////
+#include "zzip/zzip.h" //for ZZIP
+#include "ZIP_Wrapper.h"
+
+
+//ZIP_File_Info constructor
+ZIP_File_Info::ZIP_File_Info (char* name, size_t size)
+ : name_ (name),
+ size_ (size),
+ next_ (0),
+ prev_ (0)
+{
+}
+
+//ZIP_File_Info default constructor
+ZIP_File_Info::ZIP_File_Info ()
+ : name_ (""),
+ size_ (0),
+ next_ (0),
+ prev_ (0)
+{
+}
+
+
+//get a list of the files in the archive
+int ZIP_Wrapper::file_list_info (char* zip_name, ACE_Double_Linked_List<ZIP_File_Info> &list)
+{
+ size_t num = 0; //number of files in archive
+ ZZIP_DIR * dir = 0; //pointer to a zip archive
+ ZZIP_DIRENT * dir_entry = 0; //pointer to a file within the archive
+
+ //open the zip archive
+ dir = zzip_opendir(zip_name);
+
+ if (!dir)
+ return 0;
+
+ //read each dir entry and show one line of info per file
+ while ((dir_entry = zzip_readdir (dir)))
+ {
+ //retrieve the name of the file
+ char* name = dir_entry->d_name;
+
+ //remove the subpath part if any NOTE: Lunux style assumed, need to check
+ //while(char* next = strstr(name, "/"))
+ // name = next + 1;
+
+ ZIP_File_Info* next;
+ ACE_NEW_RETURN (next, ZIP_File_Info (name, dir_entry->st_size), -1);
+
+ list.insert_tail (next);
+ num++;
+ }
+
+ zzip_closedir(dir);
+ return num;
+}
+
+// Get file and store it into an ACE_Message_Block
+bool ZIP_Wrapper::get_file (char* accessor, ACE_Message_Block &file)
+{
+ bool return_code = true;
+
+ ZZIP_FILE* zip_file = zzip_open (accessor, O_RDONLY| O_BINARY);
+
+ if (!zip_file)
+ return false;
+
+ int num_read = 0;
+ file.size(BUFSIZ);
+ ACE_Message_Block* head = &file;
+
+ // read chunks of 16 bytes into buf and print them to stdout
+ while (0 < (num_read = zzip_read(zip_file, head->wr_ptr(), head->size())))
+ {
+ head->wr_ptr (num_read);
+ ACE_Message_Block* next;
+ ACE_NEW_RETURN (next, ACE_Message_Block (BUFSIZ), false);
+ head->cont (next);
+ head = head->cont ();
+ }
+
+ if (num_read < 0)
+ return_code = false;
+
+ zzip_file_close (zip_file);
+
+ return return_code;
+}
+
+
+bool ZIP_Wrapper::get_file (char* archive_path, char* filename, ACE_Message_Block &file)
+{
+ bool return_code = true;
+ ZZIP_DIR * dir; //pointer to a zip archive
+
+ //open the zip archive
+ dir = zzip_opendir(archive_path);
+
+ if (!dir)
+ return false;
+
+ //get the handle to the file
+ ZZIP_FILE* zip_file = zzip_file_open (dir, filename, O_RDONLY | O_BINARY);
+
+ if (!zip_file)
+ return false;
+
+ int num_read = 0;
+ ACE_Message_Block* head = &file;
+
+ //read the file into the ACE_Message_Block
+ do
+ {
+ if (head->space () == 0)
+ {
+ ACE_Message_Block* next;
+ ACE_NEW_RETURN (next, ACE_Message_Block (BUFSIZ), false);
+ head->cont ();
+ head = head->cont ();
+ }
+
+ num_read = zzip_read(zip_file, head->wr_ptr(), head->space());
+
+ if (num_read > 0)
+ head->wr_ptr (num_read);
+
+ } while (num_read > 0);
+
+ if (num_read < 0)
+ return_code = false;
+
+ zzip_file_close (zip_file);
+ zzip_closedir(dir);
+
+ return return_code;
+}
+
+
+//uncompress
+//the uncompress format will be
+//mkdir(name of zip archive).
+//the path is assumed to be an existing directory
+//directory structure of archive is recreated
+bool ZIP_Wrapper::uncompress (char* zip_archive, char* path, bool verbose)
+{
+ ZZIP_DIR * dir = 0; //pointer to a zip archive
+ ZZIP_DIRENT * dir_entry = 0; //pointer to a file within the archive
+ ZZIP_FILE* file = 0; //pointer to a zip file within an archive
+
+ //open the zip archive
+ dir = zzip_opendir(zip_archive);
+
+ if (!dir)
+ return false;
+
+ //??????
+ //check if a directory with the name if the archive exists
+ //If not, create it. Else, existing files will be truncated upon open.
+ //??????
+
+ //get the name of the archive
+ ACE_CString arch_dir (path);
+ arch_dir += "/";
+
+ //get only the name of the archive; remove path info
+ char* n = ACE_OS::strstr (zip_archive, "/");
+ char* zip_name = 0;
+ while (n != NULL)
+ {
+ zip_name = ++n;
+ n = ACE_OS::strstr (n, "/");
+ }
+
+ arch_dir += zip_name;
+ //NOTE: Assumes .zip or cpk extension
+ arch_dir = arch_dir.substring (0, arch_dir.length () - 4);
+
+ //create directory
+ ACE_OS::mkdir(arch_dir.c_str()); //if dir exists -1 is returned and ignored
+
+ //read each dir entry and show one line of info per file
+ while ((dir_entry = zzip_readdir (dir)))
+ {
+ //retrieve the name of the file
+ char* name = dir_entry->d_name;
+
+ //remove the subpath part if any NOTE: Lunux style assumed, need to check
+
+ //let's try to create the directory structure for the package
+ char dir_name [2048];
+ char* next = ACE_OS::strstr (name, "/");
+ while (next != NULL)
+ {
+ ACE_CString location (arch_dir);
+ ACE_OS::strncpy (dir_name, name, next - name + 1);
+ dir_name[next - name + 1] = '\0';
+
+ location += "/";
+ location += dir_name;
+
+ ACE_stat stat;
+ if (ACE_OS::stat (location.c_str (), &stat) == -1)
+ ACE_OS::mkdir (location.c_str ());
+
+ next++;
+ next = ACE_OS::strstr (next, "/");
+ }
+
+ //open a zip handle
+ file = zzip_file_open(dir, dir_entry->d_name, O_RDONLY | O_BINARY);
+ if (!file)
+ return false;
+
+ //allocate buffer
+
+ //std::auto_ptr releases the memory upon reset.
+ //ACE_Auto_Ptr does not support this functionality
+ std::auto_ptr<char> buffer;
+ char* temp;
+ ACE_NEW_RETURN (temp, char [dir_entry->st_size + 1], false);
+ buffer.reset (temp);
+
+ //read in the data
+ zzip_read(file, &(*buffer), dir_entry->st_size);
+
+ //close the zip handle
+ zzip_file_close (file);
+
+ //create file name + path to open
+ std::string file_path (arch_dir.c_str ()); //NOTE: need the c-style char to stop at '\0'
+ file_path += "/";
+ file_path += name;
+
+ //print out the file to be uncompressed
+ if (verbose)
+ {
+ ACE_OS::write(ACE_STDOUT, file_path.c_str (), file_path.length () );
+ ACE_OS::write(ACE_STDOUT, "\n", 1);
+ }
+
+ // Open a file handle to the local filesystem
+ ACE_HANDLE handle = ACE_OS::open (file_path.c_str (), O_CREAT | O_TRUNC | O_WRONLY);
+ if (handle == ACE_INVALID_HANDLE)
+ {
+ zzip_closedir(dir);
+ ACE_ERROR_RETURN ((LM_ERROR,
+ ACE_TEXT ("%p\n"),
+ ACE_TEXT ("[uncompress] file creation error")),
+ 0);
+ }
+
+ //write the uncompressed data to the file
+ if (ACE_OS::write (handle, &(*buffer), dir_entry->st_size) == -1)
+ {
+ zzip_closedir(dir);
+ ACE_ERROR_RETURN ((LM_ERROR,
+ ACE_TEXT ("%p\n"),
+ ACE_TEXT ("[uncompress] file write error")),
+ 0);
+ }
+
+ // Close the file handle
+ ACE_OS::close (handle);
+ }
+
+ zzip_closedir(dir);
+ return true;
+}
diff --git a/TAO/CIAO/DAnCE/RepositoryManager/ZIP_Wrapper.h b/TAO/CIAO/DAnCE/RepositoryManager/ZIP_Wrapper.h
new file mode 100644
index 00000000000..ddb3eb480e8
--- /dev/null
+++ b/TAO/CIAO/DAnCE/RepositoryManager/ZIP_Wrapper.h
@@ -0,0 +1,86 @@
+
+/* -*- C++ -*- */
+
+//=======================================================================
+/**
+ * @file ZIP_Wrapper.h
+ *
+ * $Id$
+ *
+ * Purpose: to provide a wrapper around ZZIPlib for easy handling of
+ * ZIP archives. This wrapper can me used as an auxiliary
+ * class that allows a program to become ZIP-aware
+ *
+ * @author Stoyan Paunov
+ */
+//=======================================================================
+
+#ifndef _ZIP_WRAPPER_H_
+#define _ZIP_WRAPPER_H_
+
+#include "ace/Containers_T.h" //for ACE_Double_Linked_List
+#include "ace/Message_Block.h" //for ACE_Message_Block
+#include "ace/SString.h" //for ACE_CString
+
+#include "ace/OS_NS_fcntl.h" //for open
+#include "ace/OS_NS_sys_stat.h" //for filesize and mkdir
+
+#include <string>
+
+/**
+ * @class ZIP_File_Info
+ *
+ * This class is used as a carrier of information
+ * about entities residing inside a ZIP archive
+ */
+class ZIP_File_Info
+{
+public:
+ ACE_CString name_;
+ size_t size_;
+ ZIP_File_Info* next_;
+ ZIP_File_Info* prev_;
+
+ ZIP_File_Info (char* name, size_t size);
+ ZIP_File_Info ();
+};
+
+/**
+ * @class ZIP_Wrappers
+ *
+ * This class is the actual workhorse that provides all of
+ * the necessary functionality
+ */
+class ZIP_Wrapper
+{
+public:
+ /// Get a list of the files in the archive
+ ///returns -1 on failure
+ static int file_list_info (char* zip_name,
+ ACE_Double_Linked_List<ZIP_File_Info> &list);
+
+ /// Get file and store it into an ACE_Message_Block
+ /// need to provide the correct accessor string. It formed by the ZIP_Options
+ /// singleton on argument parsing and stored in ZIP_Options::instance()->read_file_
+ /// ACE_Message_Block is null-terminated, but this is not reflected in the size!
+ ///
+ /// NOTE: Be sure to release the message block even if the function returns
+ /// false becuase the return value might be due to unsuccessful allocation
+ static bool get_file (char* accessor, ACE_Message_Block &file);
+
+ /// Additional get_file function to avert subdirectory traversal problems with
+ /// zziplib accessors
+ ///
+ /// NOTE: Be sure to release the message block even if the function returns
+ /// false becuase the return value might be due to unsuccessful allocation
+ static bool get_file (char* archive_path, char* filename, ACE_Message_Block &file);
+
+ /// uncompress
+ /// the uncompress format will be
+ /// mkdir(name of zip archive)
+ /// store all files in that directory.
+ /// the path is assumed to be an existing directory
+ static bool uncompress (char* zip_archive, char* path = "", bool verbose = true);
+};
+
+#endif
diff --git a/TAO/CIAO/DAnCE/TargetManager/Deployment_Configuration.cpp b/TAO/CIAO/DAnCE/TargetManager/Deployment_Configuration.cpp
new file mode 100644
index 00000000000..6b5325e840c
--- /dev/null
+++ b/TAO/CIAO/DAnCE/TargetManager/Deployment_Configuration.cpp
@@ -0,0 +1,152 @@
+// $Id$
+
+#include "Deployment_Configuration.h"
+
+#include "ace/OS_NS_stdio.h"
+
+const int NAME_BUFSIZE = 1024;
+
+CIAO::Deployment_Configuration::Deployment_Configuration (CORBA::ORB_ptr o)
+ : orb_ (CORBA::ORB::_duplicate (o))
+{
+}
+
+CIAO::Deployment_Configuration::~Deployment_Configuration (void)
+{
+ this->deployment_info_.unbind_all ();
+}
+
+int
+CIAO::Deployment_Configuration::init (const char *filename)
+{
+ // @@ We should change to use ACE_Configuration here.
+
+ if (filename == 0)
+ {
+ ACE_ERROR ((LM_ERROR, "CIAO (%P|%t) Deployment_Configuration.cpp"
+ ": Unable to identify the file name \n"));
+ return -1;
+ }
+
+ FILE *inf = ACE_OS::fopen (filename, "r");
+
+ if (inf == NULL)
+ {
+ ACE_ERROR_RETURN ((LM_ERROR,
+ "DAnCE (%P|%t) Deployment_Configuration.cpp:"
+ "Fail to open node manager map data file: %s : \n",
+ filename),
+ -1);
+ }
+
+ char destination[NAME_BUFSIZE], ior[NAME_BUFSIZE];
+ int first = 1;
+
+ while (fscanf (inf, "%s %s", destination, ior ) != EOF)
+ {
+ // This should not fail!!
+ //
+ if (this->deployment_info_.bind (destination, ior) != 0)
+ {
+ ACE_ERROR_RETURN ((LM_ERROR,
+ "DAnCE (%P|%t) Deployment_Configuration.cpp:"
+ "Failed to bind destination [%s] : \n",
+ destination),
+ -1);
+ }
+
+ if (first)
+ {
+ this->default_node_manager_.IOR_ = ior;
+ first = 0;
+ }
+ }
+ return 0;
+}
+
+const char *
+CIAO::Deployment_Configuration::get_node_manager_ior (const char *name)
+{
+ if (name == 0)
+ return get_default_node_manager_ior ();
+
+ ACE_Hash_Map_Entry
+ <ACE_CString,
+ CIAO::Deployment_Configuration::Node_Manager_Info> *entry = 0;
+
+ if (this->deployment_info_.find (ACE_CString (name),
+ entry) != 0)
+ {
+ ACE_ERROR ((LM_ERROR,
+ "DAnCE (%P|%t) Deployment_Configuration.cpp:"
+ "Failed to find IOR for destination [%s] : \n",
+ name));
+ return 0;
+ }
+
+ return entry->int_id_.IOR_.c_str ();
+}
+
+const char *
+CIAO::Deployment_Configuration::get_default_node_manager_ior (void)
+{
+ if (this->default_node_manager_.IOR_.length () == 0)
+ return 0;
+ return this->default_node_manager_.IOR_.c_str ();
+}
+
+::Deployment::NodeManager_ptr
+CIAO::Deployment_Configuration::get_node_manager (const char *name
+ ACE_ENV_ARG_DECL)
+{
+ if (name == 0)
+ return get_default_node_manager (ACE_ENV_SINGLE_ARG_PARAMETER);
+
+ ACE_Hash_Map_Entry
+ <ACE_CString,
+ CIAO::Deployment_Configuration::Node_Manager_Info> *entry = 0;
+
+ if (this->deployment_info_.find (ACE_CString (name),
+ entry) != 0)
+ {
+ ACE_ERROR ((LM_ERROR,
+ "DAnCE (%P|%t) Deployment_Configuration.cpp:"
+ "Failed to find IOR for destination [%s] : \n",
+ name));
+ return 0;
+ }
+
+ if (CORBA::is_nil (entry->int_id_.node_manager_.in ()))
+ {
+ CORBA::Object_var temp = this->orb_->string_to_object
+ (entry->int_id_.IOR_.c_str ()
+ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK_RETURN (0);
+
+ entry->int_id_.node_manager_ =
+ ::Deployment::NodeManager::_narrow (temp.in ()
+ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK_RETURN (0);
+ }
+ return ::Deployment::NodeManager::_duplicate
+ (entry->int_id_.node_manager_.in ());
+}
+
+::Deployment::NodeManager_ptr
+CIAO::Deployment_Configuration::get_default_node_manager (ACE_ENV_SINGLE_ARG_DECL)
+{
+ if (CORBA::is_nil (this->default_node_manager_.node_manager_.in ()))
+ {
+ CORBA::Object_var temp = this->orb_->string_to_object
+ (this->default_node_manager_.IOR_.c_str ()
+ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK_RETURN (0);
+
+ this->default_node_manager_.node_manager_ =
+ ::Deployment::NodeManager::_narrow (temp.in ()
+ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK_RETURN (0);
+ }
+ return ::Deployment::NodeManager::_duplicate
+ (this->default_node_manager_.node_manager_.in ());
+}
diff --git a/TAO/CIAO/DAnCE/TargetManager/TargetManager.cidl b/TAO/CIAO/DAnCE/TargetManager/TargetManager.cidl
new file mode 100644
index 00000000000..39fda73366e
--- /dev/null
+++ b/TAO/CIAO/DAnCE/TargetManager/TargetManager.cidl
@@ -0,0 +1,28 @@
+// $Id$
+
+/*
+ * @file TargetManager.cidl
+ * @brief The file contains the TargetManager component
+ * defination
+ */
+
+#ifndef TARGETMANAGER_CIDL
+#define TARGETMANAGER_CIDL
+
+
+#include "TargetManager.idl"
+
+/*
+ * @composition TargetManager_i
+ */
+
+composition session TargetManager_i
+{
+ home executor TargetManagerHome_Exec
+ {
+ implements CIAO::TargetManagerHome;
+ manages TargetManagerImpl_Exec;
+ };
+};
+
+#endif
diff --git a/TAO/CIAO/DAnCE/TargetManager/TargetManager_exec_export.h b/TAO/CIAO/DAnCE/TargetManager/TargetManager_exec_export.h
new file mode 100644
index 00000000000..690e5b6136e
--- /dev/null
+++ b/TAO/CIAO/DAnCE/TargetManager/TargetManager_exec_export.h
@@ -0,0 +1,54 @@
+
+// -*- C++ -*-
+// $Id$
+// Definition for Win32 Export directives.
+// This file is generated automatically by generate_export_file.pl TARGETMANAGER_EXEC
+// ------------------------------
+#ifndef TARGETMANAGER_EXEC_EXPORT_H
+#define TARGETMANAGER_EXEC_EXPORT_H
+
+#include "ace/config-all.h"
+
+#if !defined (TARGETMANAGER_EXEC_HAS_DLL)
+# define TARGETMANAGER_EXEC_HAS_DLL 1
+#endif /* ! TARGETMANAGER_EXEC_HAS_DLL */
+
+#if defined (TARGETMANAGER_EXEC_HAS_DLL) && (TARGETMANAGER_EXEC_HAS_DLL == 1)
+# if defined (TARGETMANAGER_EXEC_BUILD_DLL)
+# define TARGETMANAGER_EXEC_Export ACE_Proper_Export_Flag
+# define TARGETMANAGER_EXEC_SINGLETON_DECLARATION(T) ACE_EXPORT_SINGLETON_DECLARATION (T)
+# define TARGETMANAGER_EXEC_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK) ACE_EXPORT_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK)
+# else /* TARGETMANAGER_EXEC_BUILD_DLL */
+# define TARGETMANAGER_EXEC_Export ACE_Proper_Import_Flag
+# define TARGETMANAGER_EXEC_SINGLETON_DECLARATION(T) ACE_IMPORT_SINGLETON_DECLARATION (T)
+# define TARGETMANAGER_EXEC_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK) ACE_IMPORT_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK)
+# endif /* TARGETMANAGER_EXEC_BUILD_DLL */
+#else /* TARGETMANAGER_EXEC_HAS_DLL == 1 */
+# define TARGETMANAGER_EXEC_Export
+# define TARGETMANAGER_EXEC_SINGLETON_DECLARATION(T)
+# define TARGETMANAGER_EXEC_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK)
+#endif /* TARGETMANAGER_EXEC_HAS_DLL == 1 */
+
+// Set TARGETMANAGER_EXEC_NTRACE = 0 to turn on library specific tracing even if
+// tracing is turned off for ACE.
+#if !defined (TARGETMANAGER_EXEC_NTRACE)
+# if (ACE_NTRACE == 1)
+# define TARGETMANAGER_EXEC_NTRACE 1
+# else /* (ACE_NTRACE == 1) */
+# define TARGETMANAGER_EXEC_NTRACE 0
+# endif /* (ACE_NTRACE == 1) */
+#endif /* !TARGETMANAGER_EXEC_NTRACE */
+
+#if (TARGETMANAGER_EXEC_NTRACE == 1)
+# define TARGETMANAGER_EXEC_TRACE(X)
+#else /* (TARGETMANAGER_EXEC_NTRACE == 1) */
+# if !defined (ACE_HAS_TRACE)
+# define ACE_HAS_TRACE
+# endif /* ACE_HAS_TRACE */
+# define TARGETMANAGER_EXEC_TRACE(X) ACE_TRACE_IMPL(X)
+# include "ace/Trace.h"
+#endif /* (TARGETMANAGER_EXEC_NTRACE == 1) */
+
+#endif /* TARGETMANAGER_EXEC_EXPORT_H */
+
+// End of auto generated file.
diff --git a/TAO/CIAO/DAnCE/TargetManager/TargetManager_stub_export.h b/TAO/CIAO/DAnCE/TargetManager/TargetManager_stub_export.h
new file mode 100644
index 00000000000..d362f4f4ac8
--- /dev/null
+++ b/TAO/CIAO/DAnCE/TargetManager/TargetManager_stub_export.h
@@ -0,0 +1,54 @@
+
+// -*- C++ -*-
+// $Id$
+// Definition for Win32 Export directives.
+// This file is generated automatically by generate_export_file.pl TARGETMANAGER_STUB
+// ------------------------------
+#ifndef TARGETMANAGER_STUB_EXPORT_H
+#define TARGETMANAGER_STUB_EXPORT_H
+
+#include "ace/config-all.h"
+
+#if !defined (TARGETMANAGER_STUB_HAS_DLL)
+# define TARGETMANAGER_STUB_HAS_DLL 1
+#endif /* ! TARGETMANAGER_STUB_HAS_DLL */
+
+#if defined (TARGETMANAGER_STUB_HAS_DLL) && (TARGETMANAGER_STUB_HAS_DLL == 1)
+# if defined (TARGETMANAGER_STUB_BUILD_DLL)
+# define TARGETMANAGER_STUB_Export ACE_Proper_Export_Flag
+# define TARGETMANAGER_STUB_SINGLETON_DECLARATION(T) ACE_EXPORT_SINGLETON_DECLARATION (T)
+# define TARGETMANAGER_STUB_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK) ACE_EXPORT_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK)
+# else /* TARGETMANAGER_STUB_BUILD_DLL */
+# define TARGETMANAGER_STUB_Export ACE_Proper_Import_Flag
+# define TARGETMANAGER_STUB_SINGLETON_DECLARATION(T) ACE_IMPORT_SINGLETON_DECLARATION (T)
+# define TARGETMANAGER_STUB_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK) ACE_IMPORT_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK)
+# endif /* TARGETMANAGER_STUB_BUILD_DLL */
+#else /* TARGETMANAGER_STUB_HAS_DLL == 1 */
+# define TARGETMANAGER_STUB_Export
+# define TARGETMANAGER_STUB_SINGLETON_DECLARATION(T)
+# define TARGETMANAGER_STUB_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK)
+#endif /* TARGETMANAGER_STUB_HAS_DLL == 1 */
+
+// Set TARGETMANAGER_STUB_NTRACE = 0 to turn on library specific tracing even if
+// tracing is turned off for ACE.
+#if !defined (TARGETMANAGER_STUB_NTRACE)
+# if (ACE_NTRACE == 1)
+# define TARGETMANAGER_STUB_NTRACE 1
+# else /* (ACE_NTRACE == 1) */
+# define TARGETMANAGER_STUB_NTRACE 0
+# endif /* (ACE_NTRACE == 1) */
+#endif /* !TARGETMANAGER_STUB_NTRACE */
+
+#if (TARGETMANAGER_STUB_NTRACE == 1)
+# define TARGETMANAGER_STUB_TRACE(X)
+#else /* (TARGETMANAGER_STUB_NTRACE == 1) */
+# if !defined (ACE_HAS_TRACE)
+# define ACE_HAS_TRACE
+# endif /* ACE_HAS_TRACE */
+# define TARGETMANAGER_STUB_TRACE(X) ACE_TRACE_IMPL(X)
+# include "ace/Trace.h"
+#endif /* (TARGETMANAGER_STUB_NTRACE == 1) */
+
+#endif /* TARGETMANAGER_STUB_EXPORT_H */
+
+// End of auto generated file.
diff --git a/TAO/CIAO/DAnCE/TargetManager/TargetManager_svnt_export.h b/TAO/CIAO/DAnCE/TargetManager/TargetManager_svnt_export.h
new file mode 100644
index 00000000000..f57ce799949
--- /dev/null
+++ b/TAO/CIAO/DAnCE/TargetManager/TargetManager_svnt_export.h
@@ -0,0 +1,54 @@
+
+// -*- C++ -*-
+// $Id$
+// Definition for Win32 Export directives.
+// This file is generated automatically by generate_export_file.pl TARGETMANAGER_SVNT
+// ------------------------------
+#ifndef TARGETMANAGER_SVNT_EXPORT_H
+#define TARGETMANAGER_SVNT_EXPORT_H
+
+#include "ace/config-all.h"
+
+#if !defined (TARGETMANAGER_SVNT_HAS_DLL)
+# define TARGETMANAGER_SVNT_HAS_DLL 1
+#endif /* ! TARGETMANAGER_SVNT_HAS_DLL */
+
+#if defined (TARGETMANAGER_SVNT_HAS_DLL) && (TARGETMANAGER_SVNT_HAS_DLL == 1)
+# if defined (TARGETMANAGER_SVNT_BUILD_DLL)
+# define TARGETMANAGER_SVNT_Export ACE_Proper_Export_Flag
+# define TARGETMANAGER_SVNT_SINGLETON_DECLARATION(T) ACE_EXPORT_SINGLETON_DECLARATION (T)
+# define TARGETMANAGER_SVNT_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK) ACE_EXPORT_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK)
+# else /* TARGETMANAGER_SVNT_BUILD_DLL */
+# define TARGETMANAGER_SVNT_Export ACE_Proper_Import_Flag
+# define TARGETMANAGER_SVNT_SINGLETON_DECLARATION(T) ACE_IMPORT_SINGLETON_DECLARATION (T)
+# define TARGETMANAGER_SVNT_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK) ACE_IMPORT_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK)
+# endif /* TARGETMANAGER_SVNT_BUILD_DLL */
+#else /* TARGETMANAGER_SVNT_HAS_DLL == 1 */
+# define TARGETMANAGER_SVNT_Export
+# define TARGETMANAGER_SVNT_SINGLETON_DECLARATION(T)
+# define TARGETMANAGER_SVNT_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK)
+#endif /* TARGETMANAGER_SVNT_HAS_DLL == 1 */
+
+// Set TARGETMANAGER_SVNT_NTRACE = 0 to turn on library specific tracing even if
+// tracing is turned off for ACE.
+#if !defined (TARGETMANAGER_SVNT_NTRACE)
+# if (ACE_NTRACE == 1)
+# define TARGETMANAGER_SVNT_NTRACE 1
+# else /* (ACE_NTRACE == 1) */
+# define TARGETMANAGER_SVNT_NTRACE 0
+# endif /* (ACE_NTRACE == 1) */
+#endif /* !TARGETMANAGER_SVNT_NTRACE */
+
+#if (TARGETMANAGER_SVNT_NTRACE == 1)
+# define TARGETMANAGER_SVNT_TRACE(X)
+#else /* (TARGETMANAGER_SVNT_NTRACE == 1) */
+# if !defined (ACE_HAS_TRACE)
+# define ACE_HAS_TRACE
+# endif /* ACE_HAS_TRACE */
+# define TARGETMANAGER_SVNT_TRACE(X) ACE_TRACE_IMPL(X)
+# include "ace/Trace.h"
+#endif /* (TARGETMANAGER_SVNT_NTRACE == 1) */
+
+#endif /* TARGETMANAGER_SVNT_EXPORT_H */
+
+// End of auto generated file.
diff --git a/TAO/CIAO/DAnCE/TargetManager/descriptors/NodeDetails.dat b/TAO/CIAO/DAnCE/TargetManager/descriptors/NodeDetails.dat
new file mode 100644
index 00000000000..0ca8bfefd8b
--- /dev/null
+++ b/TAO/CIAO/DAnCE/TargetManager/descriptors/NodeDetails.dat
@@ -0,0 +1,2 @@
+TargetManagerNode_1 corbaloc:iiop:localhost:40000/NodeManager
+TargetManagerNode_2 corbaloc:iiop:localhost:30000/NodeManager
diff --git a/TAO/CIAO/DAnCE/TargetManager/descriptors/NodeManagerMap.dat b/TAO/CIAO/DAnCE/TargetManager/descriptors/NodeManagerMap.dat
new file mode 100644
index 00000000000..0ca8bfefd8b
--- /dev/null
+++ b/TAO/CIAO/DAnCE/TargetManager/descriptors/NodeManagerMap.dat
@@ -0,0 +1,2 @@
+TargetManagerNode_1 corbaloc:iiop:localhost:40000/NodeManager
+TargetManagerNode_2 corbaloc:iiop:localhost:30000/NodeManager
diff --git a/TAO/CIAO/DAnCE/TargetManager/descriptors/run_test_TargetManager.pl b/TAO/CIAO/DAnCE/TargetManager/descriptors/run_test_TargetManager.pl
new file mode 100644
index 00000000000..b0b00cf8324
--- /dev/null
+++ b/TAO/CIAO/DAnCE/TargetManager/descriptors/run_test_TargetManager.pl
@@ -0,0 +1,160 @@
+eval '(exit $?0)' && eval 'exec perl -S $0 ${1+"$@"}'
+ & eval 'exec perl -S $0 $argv:q'
+ if 0;
+
+# $Id$
+# -*- perl -*-
+
+use lib "$ENV{'ACE_ROOT'}/bin";
+use PerlACE::Run_Test;
+$CIAO_ROOT = "$ENV{'CIAO_ROOT'}";
+$DAnCE = "$ENV{'ACE_ROOT'}/TAO/CIAO/DAnCE";
+
+$daemons_running = 0;
+$em_running = 0;
+$daemons = 2;
+@ports = ( 40000, 30000 );
+@iorfiles = ( "NodeApp1.ior", "NodeApp2.ior" );
+$status = 0;
+$dat_file = "NodeManagerMap.dat";
+$cdp_file = "flattened_DeploymentPlan.cdp";
+
+$E = 0;
+$EM = 0;
+
+# Delete if there are any .ior files.
+sub delete_ior_files {
+ for ($i = 0; $i < $daemons; ++$i) {
+ unlink $iorfiles[$i];
+ }
+ unlink PerlACE::LocalFile ("EM.ior");
+ unlink PerlACE::LocalFile ("TargetManager.ior");
+ unlink PerlACE::LocalFile ("DAM.ior");
+}
+
+sub kill_node_daemons {
+ for ($i = 0; $i < $daemons; ++$i) {
+ $Daemons[$i]->Kill (); $Daemons[$i]->TimedWait (1);
+ }
+}
+
+sub kill_open_processes {
+ if ($daemons_running == 1) {
+ kill_node_daemons ();
+ }
+
+ if ($em_running == 1) {
+ $EM->Kill ();
+ $EM->TimedWait (1);
+ }
+}
+
+sub run_node_daemons {
+ for ($i = 0; $i < $daemons; ++$i)
+ {
+ $iorfile = $iorfiles[$i];
+ $port = $ports[$i];
+
+ $iiop = "iiop://localhost:$port";
+ $node_app = "$DAnCE/NodeApplication/NodeApplication";
+
+ $d_cmd = "$DAnCE/NodeManager/NodeManager";
+ $d_param = "-ORBEndpoint $iiop -s $node_app -o $iorfile";
+
+ $Daemons[$i] = new PerlACE::Process ($d_cmd, $d_param);
+ $result = $Daemons[$i]->Spawn ();
+ push(@processes, $Daemons[$i]);
+
+ if (PerlACE::waitforfile_timed ($iorfile,
+ $PerlACE::wait_interval_for_process_creation) == -1) {
+ print STDERR
+ "ERROR: The ior file of node daemon $i could not be found\n";
+ for (; $i > 0; --$i) {
+ $Daemons[$i]->Kill (); $Daemons[$i]->TimedWait (1);
+ }
+ return -1;
+ }
+ }
+ $daemons_running = 1;
+ return 0;
+}
+
+delete_ior_files ();
+
+# Invoke node daemons.
+print "Invoking node daemons\n";
+$status = run_node_daemons ();
+
+if ($status != 0) {
+ print STDERR "ERROR: Unable to execute the node daemons\n";
+ exit 1;
+}
+
+$ns_running = 1;
+
+# Invoke execution manager.
+print "Invoking execution manager\n";
+$EM = new PerlACE::Process ("$DAnCE/ExecutionManager/Execution_Manager",
+ "-o EM.ior -i $dat_file");
+$EM->Spawn ();
+
+if (PerlACE::waitforfile_timed ("EM.ior",
+ $PerlACE::wait_interval_for_process_creation) == -1) {
+ print STDERR
+ "ERROR: The ior file of execution manager could not be found\n";
+ kill_open_processes ();
+ exit 1;
+}
+
+$em_running = 1;
+
+# Invoke executor - start the application -.
+print "Invoking executor - start the application -\n";
+$E =
+ new PerlACE::Process ("$DAnCE/Plan_Launcher/plan_launcher",
+ "-p flattened_deploymentplan.cdp -k file://EM.ior -o DAM.ior");
+
+$E->SpawnWaitKill (5000);
+
+if (PerlACE::waitforfile_timed (
+ "TargetManager.ior",
+ $PerlACE::wait_interval_for_process_creation) == -1) {
+ print STDERR "ERROR: The ior file of receiver could not be found\n";
+ kill_open_processes ();
+ exit 1;
+}
+
+print "Waiting for 15 secs then invoking client ===\n";
+sleep (15);
+
+print "Making 5 such calls \n";
+
+$call_num = 5;
+
+for ($i = 0; $i < $call_num; ++$i)
+{
+ print "Invoking the client\n";
+ $tmclient = new PerlACE::Process ("../CmpClient", "file://TargetManager.ior");
+ $result = $tmclient->SpawnWaitKill (3000);
+
+ if ($result != 0) {
+ print STDERR "ERROR: The client returned $result\n";
+ $status = 1;
+ }
+ sleep (15);
+}
+
+# Invoke executor - stop the application -.
+print "Invoking executor - stop the application -\n";
+$E =
+ new PerlACE::Process ("$DAnCE/Plan_Launcher/plan_launcher",
+ "-k file://EM.ior -i file://DAM.ior");
+$E->SpawnWaitKill (3000);
+
+print "Executor returned.\n";
+print "Shutting down rest of the processes.\n";
+
+delete_ior_files ();
+kill_open_processes ();
+
+exit $status;
diff --git a/TAO/CIAO/RACE/Controller/Component/Controller.cidl b/TAO/CIAO/RACE/Controller/Component/Controller.cidl
new file mode 100644
index 00000000000..0122563c69a
--- /dev/null
+++ b/TAO/CIAO/RACE/Controller/Component/Controller.cidl
@@ -0,0 +1,28 @@
+// $Id$
+#ifndef RACE_CONTROLLER_CIDL
+#define RACE_CONTROLLER_CIDL
+
+/*
+ * @file Controller.cidl
+ * @brief This file contains the Controller component implementation defination.
+ */
+
+#include "Controller.idl"
+
+module CIAO
+{
+ module RACE
+ {
+ composition session Controller_Impl
+ {
+ home executor Controller_Home_Exec
+ {
+ implements Controller_Home;
+ manages Controller_Exec;
+ };
+ };
+ };
+};
+
+
+#endif /* RACE_CONTROLLER_CIDL */
diff --git a/TAO/CIAO/RACE/Controller/Component/Controller.idl b/TAO/CIAO/RACE/Controller/Component/Controller.idl
new file mode 100644
index 00000000000..44deb393b36
--- /dev/null
+++ b/TAO/CIAO/RACE/Controller/Component/Controller.idl
@@ -0,0 +1,64 @@
+// $Id$
+
+#ifndef RACE_CONTROLLER_IDL
+#define RACE_CONTROLLER_IDL
+
+/**
+ * @file Controller.idl
+ *
+ * @brief Controller Component of RACE.
+ *
+ * This file declares a Controller of the RACE framework.
+ *
+ * @author Nishanth Shankaran <nshankar@dre.vanderbilt.edu>
+ */
+
+#include <Components.idl>
+#include "ciao/Target_Data.idl"
+#include "../../../DAnCE/TargetManager/TargetManagerExt.idl"
+
+/**
+ * @module CIAO
+ * @brief The CIAO module.
+ */
+module CIAO
+{
+ module RACE
+ {
+
+ /**
+ * @interface Trigger
+ * @brief This interface is used to start and stop
+ * the feedback loop of the controller.
+ */
+ interface Trigger
+ {
+ oneway void start ();
+
+ oneway void stop ();
+ };
+
+ /**
+ * @component Controller
+ * @brief The Controller component of RACE.
+ */
+
+ component Controller supports Trigger
+ {
+ uses TargetManagerExt target_mgr_ext;
+ uses ::Deployment::TargetManager targer_mgr;
+
+ /// TODO: Need to integrate the receptacle for the BDC facet into
+ /// the controller.
+ // uses BDC_QoS bdc;
+
+ /// The sampling period of the controller.
+ readonly attribute double sampling_period;
+ };
+
+ home Controller_Home manages Controller
+ {
+ };
+ };
+};
+#endif /* RACE_CONTROLLER_IDL */
diff --git a/TAO/CIAO/RACE/Controller/Component/Controller.mpc b/TAO/CIAO/RACE/Controller/Component/Controller.mpc
new file mode 100644
index 00000000000..e3581425579
--- /dev/null
+++ b/TAO/CIAO/RACE/Controller/Component/Controller.mpc
@@ -0,0 +1,64 @@
+// $Id$
+// This file is generated with "generate_component_mpc.pl Controller"
+
+project(Controller_stub): ciao_deployment_stub {
+
+ after += CIAO_TargetManager_stub
+ sharedname = Controller_stub
+ libs += TargetManager_stub
+ idlflags += -Wb,stub_export_macro=CONTROLLER_STUB_Export \
+ -Wb,stub_export_include=Controller_stub_export.h \
+ -Wb,skel_export_macro=CONTROLLER_SVNT_Export \
+ -Wb,skel_export_include=Controller_svnt_export.h
+ dynamicflags = CONTROLLER_STUB_BUILD_DLL
+
+ IDL_Files {
+ Controller.idl
+ }
+
+ Source_Files {
+ ControllerC.cpp
+ }
+}
+
+project(Controller_svnt) : ciao_servant_dnc {
+ after += Controller_stub CIAO_TargetManager_svnt
+ sharedname = Controller_svnt
+ libs += Controller_stub TargetManager_stub TargetManager_svnt
+
+ idlflags += -Wb,export_macro=CONTROLLER_SVNT_Export \
+ -Wb,export_include=Controller_svnt_export.h
+ dynamicflags = CONTROLLER_SVNT_BUILD_DLL
+
+ CIDL_Files {
+ Controller.cidl
+ }
+
+ IDL_Files {
+ ControllerE.idl
+ }
+
+ Source_Files {
+ ControllerEC.cpp
+ ControllerS.cpp
+ Controller_svnt.cpp
+ }
+}
+
+
+project(Controller_exec) : ciao_component_dnc {
+ after += Controller_svnt
+ sharedname = Controller_exec
+ libs += Controller_stub Controller_svnt TargetManager_stub TargetManager_svnt
+
+ idlflags += -Wb,export_macro=CONTROLLER_EXEC_Export \
+ -Wb,export_include=Controller_exec_export.h
+ dynamicflags = CONTROLLER_EXEC_BUILD_DLL
+
+ IDL_Files {
+ }
+
+ Source_Files {
+ Controller_exec.cpp
+ }
+}
diff --git a/TAO/CIAO/RACE/Controller/Component/Controller_exec.cpp b/TAO/CIAO/RACE/Controller/Component/Controller_exec.cpp
new file mode 100644
index 00000000000..1e3c61ea414
--- /dev/null
+++ b/TAO/CIAO/RACE/Controller/Component/Controller_exec.cpp
@@ -0,0 +1,171 @@
+// $Id$
+#include "Controller_exec.h"
+#include "ciao/CIAO_common.h"
+
+namespace CIAO
+{
+ namespace RACE
+ {
+ namespace CIDL_Controller_Impl
+ {
+ Controller_exec_i::Controller_exec_i (void)
+ {
+ }
+
+ Controller_exec_i::~Controller_exec_i (void)
+ {
+ }
+
+ // Supported operations.
+ void
+ Controller_exec_i::start (ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC ((::CORBA::SystemException))
+ {}
+
+ void
+ Controller_exec_i::stop (ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC ((::CORBA::SystemException))
+ {}
+
+ // Attribute operations.
+
+ ::CORBA::Double
+ Controller_exec_i::sampling_period (
+ ACE_ENV_SINGLE_ARG_DECL_NOT_USED)
+ ACE_THROW_SPEC ((CORBA::SystemException))
+ {
+ // Your code here.
+ return 0.0;
+ }
+
+ // Port operations.
+
+ // Operations from Components::SessionComponent
+
+ void
+ Controller_exec_i::set_session_context (
+ ::Components::SessionContext_ptr ctx
+ ACE_ENV_ARG_DECL)
+ ACE_THROW_SPEC ((
+ ::CORBA::SystemException,
+ ::Components::CCMException))
+ {
+ this->context_ =
+ Controller_Context::_narrow (
+ ctx
+ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK;
+
+ if (this->context_ == 0)
+ {
+ ACE_THROW (CORBA::INTERNAL ());
+ }
+ }
+
+ void
+ Controller_exec_i::ciao_preactivate (
+ ACE_ENV_SINGLE_ARG_DECL_NOT_USED)
+ ACE_THROW_SPEC ((
+ ::CORBA::SystemException,
+ ::Components::CCMException))
+ {
+ // Your code here.
+ }
+
+ void
+ Controller_exec_i::ciao_postactivate (
+ ACE_ENV_SINGLE_ARG_DECL_NOT_USED)
+ ACE_THROW_SPEC ((
+ ::CORBA::SystemException,
+ ::Components::CCMException))
+ {
+ // Your code here.
+ }
+
+ void
+ Controller_exec_i::ccm_activate (
+ ACE_ENV_SINGLE_ARG_DECL_NOT_USED)
+ ACE_THROW_SPEC ((
+ ::CORBA::SystemException,
+ ::Components::CCMException))
+ {
+ // Your code here.
+ }
+
+ void
+ Controller_exec_i::ccm_passivate (
+ ACE_ENV_SINGLE_ARG_DECL_NOT_USED)
+ ACE_THROW_SPEC ((
+ ::CORBA::SystemException,
+ ::Components::CCMException))
+ {
+ // Your code here.
+ }
+
+ void
+ Controller_exec_i::ccm_remove (
+ ACE_ENV_SINGLE_ARG_DECL_NOT_USED)
+ ACE_THROW_SPEC ((
+ ::CORBA::SystemException,
+ ::Components::CCMException))
+ {
+ // Your code here.
+ }
+
+ //==================================================================
+ // Home Executor Implementation Class: Controller_Home_exec_i
+ //==================================================================
+
+ Controller_Home_exec_i::Controller_Home_exec_i (void)
+ {
+ }
+
+ Controller_Home_exec_i::~Controller_Home_exec_i (void)
+ {
+ }
+
+ // Supported or inherited operations.
+
+ // Home operations.
+
+ // Factory and finder operations.
+
+ // Attribute operations.
+
+ // Implicit operations.
+
+ ::Components::EnterpriseComponent_ptr
+ Controller_Home_exec_i::create (
+ ACE_ENV_SINGLE_ARG_DECL)
+ ACE_THROW_SPEC ((
+ ::CORBA::SystemException,
+ ::Components::CCMException))
+ {
+ ::Components::EnterpriseComponent_ptr retval =
+ ::Components::EnterpriseComponent::_nil ();
+
+ ACE_NEW_THROW_EX (
+ retval,
+ Controller_exec_i,
+ CORBA::NO_MEMORY ());
+ ACE_CHECK_RETURN (::Components::EnterpriseComponent::_nil ());
+
+ return retval;
+ }
+
+ extern "C" CONTROLLER_EXEC_Export ::Components::HomeExecutorBase_ptr
+ create_CIAO_RACE_Controller_Home_Impl (void)
+ {
+ ::Components::HomeExecutorBase_ptr retval =
+ ::Components::HomeExecutorBase::_nil ();
+
+ ACE_NEW_RETURN (
+ retval,
+ Controller_Home_exec_i,
+ ::Components::HomeExecutorBase::_nil ());
+
+ return retval;
+ }
+ }
+ }
+}
diff --git a/TAO/CIAO/RACE/Controller/Component/Controller_exec.h b/TAO/CIAO/RACE/Controller/Component/Controller_exec.h
new file mode 100644
index 00000000000..8729cd99fc6
--- /dev/null
+++ b/TAO/CIAO/RACE/Controller/Component/Controller_exec.h
@@ -0,0 +1,128 @@
+// $Id$
+#ifndef CIAO_CONTROLLER_EXEC_H
+#define CIAO_CONTROLLER_EXEC_H
+
+#include /**/ "ace/pre.h"
+
+#include "Controller_svnt.h"
+
+#if !defined (ACE_LACKS_PRAGMA_ONCE)
+# pragma once
+#endif /* ACE_LACKS_PRAGMA_ONCE */
+
+#include "Controller_exec_export.h"
+#include "tao/LocalObject.h"
+
+namespace CIAO
+{
+ namespace RACE
+ {
+ namespace CIDL_Controller_Impl
+ {
+ class CONTROLLER_EXEC_Export Controller_exec_i
+ : public virtual Controller_Exec,
+ public virtual TAO_Local_RefCounted_Object
+ {
+ public:
+ Controller_exec_i (void);
+ virtual ~Controller_exec_i (void);
+
+ // Supported operations.
+ virtual void start (ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC ((::CORBA::SystemException));
+
+ virtual void stop (ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC ((::CORBA::SystemException));
+
+ // Attribute operations.
+ virtual ::CORBA::Double
+ sampling_period (
+ ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+ // Port operations.
+
+ // Operations from Components::SessionComponent
+
+ virtual void
+ set_session_context (
+ ::Components::SessionContext_ptr ctx
+ ACE_ENV_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC ((
+ ::CORBA::SystemException,
+ ::Components::CCMException));
+
+ virtual void
+ ciao_preactivate (
+ ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC ((
+ ::CORBA::SystemException,
+ ::Components::CCMException));
+
+ virtual void
+ ciao_postactivate (
+ ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC ((
+ ::CORBA::SystemException,
+ ::Components::CCMException));
+
+ virtual void
+ ccm_activate (
+ ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC ((
+ ::CORBA::SystemException,
+ ::Components::CCMException));
+
+ virtual void
+ ccm_passivate (
+ ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC ((
+ ::CORBA::SystemException,
+ ::Components::CCMException));
+
+ virtual void
+ ccm_remove (
+ ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC ((
+ ::CORBA::SystemException,
+ ::Components::CCMException));
+
+ protected:
+ Controller_Context *context_;
+ };
+
+ class CONTROLLER_EXEC_Export Controller_Home_exec_i
+ : public virtual Controller_Home_Exec,
+ public virtual TAO_Local_RefCounted_Object
+ {
+ public:
+ Controller_Home_exec_i (void);
+ virtual ~Controller_Home_exec_i (void);
+
+ // Supported or inherited operations.
+
+ // Home operations.
+
+ // Factory and finder operations.
+
+ // Attribute operations.
+
+ // Implicit operations.
+
+ virtual ::Components::EnterpriseComponent_ptr
+ create (
+ ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC ((
+ ::CORBA::SystemException,
+ ::Components::CCMException));
+ };
+
+ extern "C" CONTROLLER_EXEC_Export ::Components::HomeExecutorBase_ptr
+ create_CIAO_RACE_Controller_Home_Impl (void);
+ }
+ }
+}
+
+#include /**/ "ace/post.h"
+
+#endif /* CIAO_CONTROLLER_EXEC_H */
diff --git a/TAO/CIAO/RACE/Controller/Component/Controller_exec_export.h b/TAO/CIAO/RACE/Controller/Component/Controller_exec_export.h
new file mode 100644
index 00000000000..080ecb25a44
--- /dev/null
+++ b/TAO/CIAO/RACE/Controller/Component/Controller_exec_export.h
@@ -0,0 +1,54 @@
+
+// -*- C++ -*-
+// $Id$
+// Definition for Win32 Export directives.
+// This file is generated automatically by generate_export_file.pl CONTROLLER_EXEC
+// ------------------------------
+#ifndef CONTROLLER_EXEC_EXPORT_H
+#define CONTROLLER_EXEC_EXPORT_H
+
+#include "ace/config-all.h"
+
+#if !defined (CONTROLLER_EXEC_HAS_DLL)
+# define CONTROLLER_EXEC_HAS_DLL 1
+#endif /* ! CONTROLLER_EXEC_HAS_DLL */
+
+#if defined (CONTROLLER_EXEC_HAS_DLL) && (CONTROLLER_EXEC_HAS_DLL == 1)
+# if defined (CONTROLLER_EXEC_BUILD_DLL)
+# define CONTROLLER_EXEC_Export ACE_Proper_Export_Flag
+# define CONTROLLER_EXEC_SINGLETON_DECLARATION(T) ACE_EXPORT_SINGLETON_DECLARATION (T)
+# define CONTROLLER_EXEC_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK) ACE_EXPORT_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK)
+# else /* CONTROLLER_EXEC_BUILD_DLL */
+# define CONTROLLER_EXEC_Export ACE_Proper_Import_Flag
+# define CONTROLLER_EXEC_SINGLETON_DECLARATION(T) ACE_IMPORT_SINGLETON_DECLARATION (T)
+# define CONTROLLER_EXEC_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK) ACE_IMPORT_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK)
+# endif /* CONTROLLER_EXEC_BUILD_DLL */
+#else /* CONTROLLER_EXEC_HAS_DLL == 1 */
+# define CONTROLLER_EXEC_Export
+# define CONTROLLER_EXEC_SINGLETON_DECLARATION(T)
+# define CONTROLLER_EXEC_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK)
+#endif /* CONTROLLER_EXEC_HAS_DLL == 1 */
+
+// Set CONTROLLER_EXEC_NTRACE = 0 to turn on library specific tracing even if
+// tracing is turned off for ACE.
+#if !defined (CONTROLLER_EXEC_NTRACE)
+# if (ACE_NTRACE == 1)
+# define CONTROLLER_EXEC_NTRACE 1
+# else /* (ACE_NTRACE == 1) */
+# define CONTROLLER_EXEC_NTRACE 0
+# endif /* (ACE_NTRACE == 1) */
+#endif /* !CONTROLLER_EXEC_NTRACE */
+
+#if (CONTROLLER_EXEC_NTRACE == 1)
+# define CONTROLLER_EXEC_TRACE(X)
+#else /* (CONTROLLER_EXEC_NTRACE == 1) */
+# if !defined (ACE_HAS_TRACE)
+# define ACE_HAS_TRACE
+# endif /* ACE_HAS_TRACE */
+# define CONTROLLER_EXEC_TRACE(X) ACE_TRACE_IMPL(X)
+# include "ace/Trace.h"
+#endif /* (CONTROLLER_EXEC_NTRACE == 1) */
+
+#endif /* CONTROLLER_EXEC_EXPORT_H */
+
+// End of auto generated file.
diff --git a/TAO/CIAO/RACE/Controller/Component/Controller_stub_export.h b/TAO/CIAO/RACE/Controller/Component/Controller_stub_export.h
new file mode 100644
index 00000000000..65a430401a8
--- /dev/null
+++ b/TAO/CIAO/RACE/Controller/Component/Controller_stub_export.h
@@ -0,0 +1,54 @@
+
+// -*- C++ -*-
+// $Id$
+// Definition for Win32 Export directives.
+// This file is generated automatically by generate_export_file.pl CONTROLLER_STUB
+// ------------------------------
+#ifndef CONTROLLER_STUB_EXPORT_H
+#define CONTROLLER_STUB_EXPORT_H
+
+#include "ace/config-all.h"
+
+#if !defined (CONTROLLER_STUB_HAS_DLL)
+# define CONTROLLER_STUB_HAS_DLL 1
+#endif /* ! CONTROLLER_STUB_HAS_DLL */
+
+#if defined (CONTROLLER_STUB_HAS_DLL) && (CONTROLLER_STUB_HAS_DLL == 1)
+# if defined (CONTROLLER_STUB_BUILD_DLL)
+# define CONTROLLER_STUB_Export ACE_Proper_Export_Flag
+# define CONTROLLER_STUB_SINGLETON_DECLARATION(T) ACE_EXPORT_SINGLETON_DECLARATION (T)
+# define CONTROLLER_STUB_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK) ACE_EXPORT_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK)
+# else /* CONTROLLER_STUB_BUILD_DLL */
+# define CONTROLLER_STUB_Export ACE_Proper_Import_Flag
+# define CONTROLLER_STUB_SINGLETON_DECLARATION(T) ACE_IMPORT_SINGLETON_DECLARATION (T)
+# define CONTROLLER_STUB_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK) ACE_IMPORT_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK)
+# endif /* CONTROLLER_STUB_BUILD_DLL */
+#else /* CONTROLLER_STUB_HAS_DLL == 1 */
+# define CONTROLLER_STUB_Export
+# define CONTROLLER_STUB_SINGLETON_DECLARATION(T)
+# define CONTROLLER_STUB_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK)
+#endif /* CONTROLLER_STUB_HAS_DLL == 1 */
+
+// Set CONTROLLER_STUB_NTRACE = 0 to turn on library specific tracing even if
+// tracing is turned off for ACE.
+#if !defined (CONTROLLER_STUB_NTRACE)
+# if (ACE_NTRACE == 1)
+# define CONTROLLER_STUB_NTRACE 1
+# else /* (ACE_NTRACE == 1) */
+# define CONTROLLER_STUB_NTRACE 0
+# endif /* (ACE_NTRACE == 1) */
+#endif /* !CONTROLLER_STUB_NTRACE */
+
+#if (CONTROLLER_STUB_NTRACE == 1)
+# define CONTROLLER_STUB_TRACE(X)
+#else /* (CONTROLLER_STUB_NTRACE == 1) */
+# if !defined (ACE_HAS_TRACE)
+# define ACE_HAS_TRACE
+# endif /* ACE_HAS_TRACE */
+# define CONTROLLER_STUB_TRACE(X) ACE_TRACE_IMPL(X)
+# include "ace/Trace.h"
+#endif /* (CONTROLLER_STUB_NTRACE == 1) */
+
+#endif /* CONTROLLER_STUB_EXPORT_H */
+
+// End of auto generated file.
diff --git a/TAO/CIAO/RACE/Controller/Component/Controller_svnt_export.h b/TAO/CIAO/RACE/Controller/Component/Controller_svnt_export.h
new file mode 100644
index 00000000000..d5e7c6aa42d
--- /dev/null
+++ b/TAO/CIAO/RACE/Controller/Component/Controller_svnt_export.h
@@ -0,0 +1,54 @@
+
+// -*- C++ -*-
+// $Id$
+// Definition for Win32 Export directives.
+// This file is generated automatically by generate_export_file.pl CONTROLLER_SVNT
+// ------------------------------
+#ifndef CONTROLLER_SVNT_EXPORT_H
+#define CONTROLLER_SVNT_EXPORT_H
+
+#include "ace/config-all.h"
+
+#if !defined (CONTROLLER_SVNT_HAS_DLL)
+# define CONTROLLER_SVNT_HAS_DLL 1
+#endif /* ! CONTROLLER_SVNT_HAS_DLL */
+
+#if defined (CONTROLLER_SVNT_HAS_DLL) && (CONTROLLER_SVNT_HAS_DLL == 1)
+# if defined (CONTROLLER_SVNT_BUILD_DLL)
+# define CONTROLLER_SVNT_Export ACE_Proper_Export_Flag
+# define CONTROLLER_SVNT_SINGLETON_DECLARATION(T) ACE_EXPORT_SINGLETON_DECLARATION (T)
+# define CONTROLLER_SVNT_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK) ACE_EXPORT_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK)
+# else /* CONTROLLER_SVNT_BUILD_DLL */
+# define CONTROLLER_SVNT_Export ACE_Proper_Import_Flag
+# define CONTROLLER_SVNT_SINGLETON_DECLARATION(T) ACE_IMPORT_SINGLETON_DECLARATION (T)
+# define CONTROLLER_SVNT_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK) ACE_IMPORT_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK)
+# endif /* CONTROLLER_SVNT_BUILD_DLL */
+#else /* CONTROLLER_SVNT_HAS_DLL == 1 */
+# define CONTROLLER_SVNT_Export
+# define CONTROLLER_SVNT_SINGLETON_DECLARATION(T)
+# define CONTROLLER_SVNT_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK)
+#endif /* CONTROLLER_SVNT_HAS_DLL == 1 */
+
+// Set CONTROLLER_SVNT_NTRACE = 0 to turn on library specific tracing even if
+// tracing is turned off for ACE.
+#if !defined (CONTROLLER_SVNT_NTRACE)
+# if (ACE_NTRACE == 1)
+# define CONTROLLER_SVNT_NTRACE 1
+# else /* (ACE_NTRACE == 1) */
+# define CONTROLLER_SVNT_NTRACE 0
+# endif /* (ACE_NTRACE == 1) */
+#endif /* !CONTROLLER_SVNT_NTRACE */
+
+#if (CONTROLLER_SVNT_NTRACE == 1)
+# define CONTROLLER_SVNT_TRACE(X)
+#else /* (CONTROLLER_SVNT_NTRACE == 1) */
+# if !defined (ACE_HAS_TRACE)
+# define ACE_HAS_TRACE
+# endif /* ACE_HAS_TRACE */
+# define CONTROLLER_SVNT_TRACE(X) ACE_TRACE_IMPL(X)
+# include "ace/Trace.h"
+#endif /* (CONTROLLER_SVNT_NTRACE == 1) */
+
+#endif /* CONTROLLER_SVNT_EXPORT_H */
+
+// End of auto generated file.
diff --git a/TAO/CIAO/ciao/Target_Data.idl b/TAO/CIAO/ciao/Target_Data.idl
new file mode 100644
index 00000000000..19c7d3ca4d0
--- /dev/null
+++ b/TAO/CIAO/ciao/Target_Data.idl
@@ -0,0 +1,36 @@
+// $Id$
+
+#ifndef TARGET_DATA_IDL
+#define TARGET_DATA_IDL
+
+#include "Deployment_Data.idl"
+
+module Deployment {
+
+ exception ResourceNotAvailable {
+ string name;
+ string resourceType;
+ string propertyName;
+ string elementName;
+ string resourceName;
+ };
+
+ exception PlanError {
+ string name;
+ string reason;
+ };
+
+
+ interface TargetManager {
+ Domain getAllResources ();
+ Domain getAvailableResources ();
+ void commitResources (in DeploymentPlan plan)
+ raises (ResourceNotAvailable, PlanError);
+ void releaseResources (in DeploymentPlan argname);
+ void updateDomain (in ::CORBA::StringSeq elements,
+ in Domain domainSubset,
+ in DomainUpdateKind updateKind);
+ };
+};
+
+#endif /* TARGET_DATA_IDL */
diff --git a/TAO/CIAO/ciaosvcs/Events/CIAO_EventService_Factory_impl.cpp b/TAO/CIAO/ciaosvcs/Events/CIAO_EventService_Factory_impl.cpp
new file mode 100644
index 00000000000..a4a5fbf9c90
--- /dev/null
+++ b/TAO/CIAO/ciaosvcs/Events/CIAO_EventService_Factory_impl.cpp
@@ -0,0 +1,90 @@
+// -*- C++ -*-
+
+//=============================================================================
+/**
+ * @file CIAO_EventService_Factory_impl.cpp
+ *
+ * $Id$
+ *
+ * @author Gan Deng <dengg@dre.vanderbilt.edu>
+ * @author George Edwards <g.edwards@vanderbilt.edu>
+ */
+//=============================================================================
+
+#include "CIAO_EventService_Factory_impl.h"
+#include "ciaosvcs/Events/CIAO_RTEC/CIAO_RTEvent.h"
+
+namespace CIAO
+{
+ EventService_Factory_impl::EventService_Factory_impl (void)
+ {
+ }
+
+ EventService_Factory_impl::EventService_Factory_impl (
+ CORBA::ORB_ptr orb,
+ PortableServer::POA_ptr poa) :
+ orb_ (CORBA::ORB::_duplicate (orb)),
+ poa_ (PortableServer::POA::_duplicate (poa))
+ {
+ }
+
+ EventService_Factory_impl::~EventService_Factory_impl (void)
+ {
+ }
+
+ CIAO_Event_Service_ptr
+ EventService_Factory_impl::create (EventServiceType type)
+ {
+ ACE_DEBUG ((LM_DEBUG, "CIAO::EventService_Factory_impl::create_event_service\n"));
+
+ EventServiceBase * event_service = 0;
+
+ switch (type)
+ {
+ case RTEC:
+ ACE_NEW_RETURN (event_service,
+ RTEventService (this->orb_.in (),
+ this->poa_.in ()),
+ 0);
+ break;
+
+ default:
+ ACE_ERROR_RETURN ((LM_ERROR, "CIAO::EventService_Factory_impl::"
+ "create_event_service: unsuppoted type.\n"),
+ 0);
+
+ }
+
+ // Activate the servant
+ CIAO_Event_Service_var service = event_service->_this ();
+ return service._retn ();
+ }
+
+ int
+ EventService_Factory_impl::Initializer (void)
+ {
+ return
+ ACE_Service_Config::process_directive (
+ ace_svc_desc_EventService_Factory_impl
+ );
+ }
+
+ void EventService_Factory_impl::initialize (
+ CORBA::ORB_ptr orb, PortableServer::POA_ptr poa)
+ {
+ this->orb_ = CORBA::ORB::_duplicate (orb);
+ this->poa_ = PortableServer::POA::_duplicate (poa);
+ }
+
+ACE_STATIC_SVC_DEFINE (
+ EventService_Factory_impl,
+ ACE_TEXT ("CIAO_EventService_Factory"),
+ ACE_SVC_OBJ_T,
+ &ACE_SVC_NAME (EventService_Factory_impl),
+ ACE_Service_Type::DELETE_THIS | ACE_Service_Type::DELETE_OBJ,
+ 0
+ )
+
+ACE_FACTORY_DEFINE (CIAO_EVENTS, EventService_Factory_impl)
+
+} // namespace CIAO
diff --git a/TAO/CIAO/ciaosvcs/Events/CIAO_EventService_Factory_impl.h b/TAO/CIAO/ciaosvcs/Events/CIAO_EventService_Factory_impl.h
new file mode 100644
index 00000000000..349a48aa09a
--- /dev/null
+++ b/TAO/CIAO/ciaosvcs/Events/CIAO_EventService_Factory_impl.h
@@ -0,0 +1,78 @@
+// -*- C++ -*-
+
+//=============================================================================
+/**
+ * @file CIAO_EventService_Factory_impl.h
+ *
+ * $Id$
+ *
+ * @author Gan Deng <dengg@dre.vanderbilt.edu>
+ * @author George Edwards <g.edwards@vanderbilt.edu>
+ */
+//=============================================================================
+
+#ifndef CIAO_EVENTSERVICE_FACTORY_IMPL_H
+#define CIAO_EVENTSERVICE_FACTORY_IMPL_H
+#include /**/ "ace/pre.h"
+
+#include "tao/PortableServer/PortableServer.h"
+
+#if !defined (ACE_LACKS_PRAGMA_ONCE)
+#pragma once
+#endif /* ACE_LACKS_PRAGMA_ONCE */
+
+#include "CIAO_Events_Export.h"
+#include "ciaosvcs/Events/CIAO_Events_Base/CIAO_EventServiceBase.h"
+
+namespace CIAO
+{
+ class CIAO_EVENTS_Export EventService_Factory_impl :
+ public ACE_Service_Object
+ {
+ public:
+ EventService_Factory_impl (void);
+
+ EventService_Factory_impl (CORBA::ORB_ptr orb,
+ PortableServer::POA_ptr poa);
+
+ virtual ~EventService_Factory_impl (void);
+
+ /// A factory method which creates an CIAO_Event_Service object
+ virtual CIAO_Event_Service_ptr create (EventServiceType type);
+
+ virtual void initialize (CORBA::ORB_ptr orb, PortableServer::POA_ptr poa);
+
+ /// Used to force the initialization.
+ static int Initializer (void);
+
+ private:
+ /// Reference to the ORB
+ CORBA::ORB_var orb_;
+
+ /// Reference to the Root POA
+ PortableServer::POA_var poa_;
+ };
+
+ACE_STATIC_SVC_DECLARE (EventService_Factory_impl)
+ACE_FACTORY_DECLARE (CIAO_EVENTS, EventService_Factory_impl)
+
+}
+
+#if defined (ACE_HAS_BROKEN_STATIC_CONSTRUCTORS)
+
+typedef int (*CIAO_Module_Initializer) (void);
+
+static CIAO_Module_Initializer
+CIAO_Requires_EventService_Initializer =
+ &CIAO::EventService_Factory_impl::Initializer;
+
+#else
+
+static int
+CIAO_Requires_EventService_Initializer =
+ CIAO::EventService_Factory_impl::Initializer ();
+
+#endif /* ACE_HAS_BROKEN_STATIC_CONSTRUCTORS */
+
+#include /**/ "ace/post.h"
+#endif /* CIAO_EVENTSERVICE_FACTORY_IMPL_H */
diff --git a/TAO/CIAO/ciaosvcs/Events/CIAO_Events.mpc b/TAO/CIAO/ciaosvcs/Events/CIAO_Events.mpc
new file mode 100644
index 00000000000..a5a1417673e
--- /dev/null
+++ b/TAO/CIAO/ciaosvcs/Events/CIAO_Events.mpc
@@ -0,0 +1,20 @@
+// -*- MPC -*-
+// $Id$
+
+project (CIAO_DnC_Events) : orbsvcslib, ciao_rtevent_dnc {
+
+ sharedname = CIAO_DnC_Events
+ idlflags += -Wb,export_include=CIAO_Events_Export.h -Wb,export_macro=CIAO_EVENTS_Export
+ dynamicflags = CIAO_EVENTS_BUILD_DLL
+
+ Source_Files {
+ CIAO_EventService_Factory_impl.cpp
+ }
+
+ Header_Files {
+ CIAO_EventService_Factory_impl.h
+ }
+
+ IDL_Files {
+ }
+}
diff --git a/TAO/CIAO/ciaosvcs/Events/CIAO_Events_Base/CIAO_EventServiceBase.cpp b/TAO/CIAO/ciaosvcs/Events/CIAO_Events_Base/CIAO_EventServiceBase.cpp
new file mode 100644
index 00000000000..6c06c5c8f27
--- /dev/null
+++ b/TAO/CIAO/ciaosvcs/Events/CIAO_Events_Base/CIAO_EventServiceBase.cpp
@@ -0,0 +1,23 @@
+//=============================================================================
+/**
+ * @file CIAO_EventServiceBase.cpp
+ *
+ * $Id$
+ *
+ * @author Gan Deng <dengg@dre.vanderbilt.edu>
+ */
+//=============================================================================
+
+#include "CIAO_EventServiceBase.h"
+
+namespace CIAO
+{
+ EventServiceBase::
+ EventServiceBase (void)
+ {
+ }
+
+ EventServiceBase::~EventServiceBase (void)
+ {
+ }
+}
diff --git a/TAO/CIAO/ciaosvcs/Events/CIAO_Events_Base/CIAO_EventServiceBase.h b/TAO/CIAO/ciaosvcs/Events/CIAO_Events_Base/CIAO_EventServiceBase.h
new file mode 100644
index 00000000000..90b9f872ca6
--- /dev/null
+++ b/TAO/CIAO/ciaosvcs/Events/CIAO_Events_Base/CIAO_EventServiceBase.h
@@ -0,0 +1,139 @@
+// -*- C++ -*-
+
+//=============================================================================
+/**
+ * @file CIAO_EventServiceBase.h
+ *
+ * $Id$
+ *
+ * @author Gan Deng <dengg@dre.vanderbilt.edu>
+ * @author George Edwards <g.edwards@vanderbilt.edu>
+ */
+//=============================================================================
+
+#ifndef CIAO_EVENTSERVICEBASE_H
+#define CIAO_EVENTSERVICEBASE_H
+#include /**/ "ace/pre.h"
+
+#include "CIAO_EventsS.h"
+
+#if !defined (ACE_LACKS_PRAGMA_ONCE)
+# pragma once
+#endif /* ACE_LACKS_PRAGMA_ONCE */
+
+namespace CIAO
+{
+ /**
+ * @class EventServiceBase
+ *
+ * An abstract base servant class to implement the CIAO_Event_Service
+ * interface. The derived classes will provide appropriate
+ * implementations of the connect, disconnect, and push methods depending on
+ * the event mechanism used.
+ */
+ class CIAO_EVENTS_Export EventServiceBase :
+ public virtual POA_CIAO::CIAO_Event_Service
+ {
+ public:
+ EventServiceBase (void);
+
+ virtual ~EventServiceBase (void);
+
+ /// A factory method for Supplier_Config objects
+ virtual Supplier_Config_ptr
+ create_supplier_config (void)
+ ACE_THROW_SPEC ((CORBA::SystemException)) = 0;
+
+ /// A factory method for Consumer_Config objects
+ virtual Consumer_Config_ptr
+ create_consumer_config (void)
+ ACE_THROW_SPEC ((CORBA::SystemException)) = 0;
+
+ /**
+ * @fn void connect_event_supplier (Supplier_Config_ptr supplier_config)
+ *
+ * Connects an event supplier using the options specified by
+ * @c supplier_config.
+ */
+ virtual void connect_event_supplier (
+ Supplier_Config_ptr supplier_config
+ ACE_ENV_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC ((
+ CORBA::SystemException)) = 0;
+
+ /**
+ * @fn void connect_event_consumer (Consumer_Config_ptr consumer_config)
+ *
+ * Connects an event consumer using the options specified by
+ * @c consumer_config.
+ */
+ virtual void connect_event_consumer (
+ Consumer_Config_ptr consumer_config
+ ACE_ENV_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC ((
+ CORBA::SystemException)) = 0;
+
+ /**
+ * @fn void disconnect_event_supplier ()
+ *
+ * Disconnects the event supplier associated with this object.
+ */
+ virtual void disconnect_event_supplier (
+ const char * consumer_id
+ ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC ((
+ CORBA::SystemException,
+ Components::InvalidConnection)) = 0;
+
+ /**
+ * @fn void disconnect_event_consumer (CONNECTION_ID consumer_id)
+ *
+ * Disconnects the event consumer with UUID @c consumer_id.
+ */
+ virtual void disconnect_event_consumer (
+ const char * consumer_id
+ ACE_ENV_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC ((
+ CORBA::SystemException,
+ Components::InvalidConnection)) = 0;
+
+ /**
+ * @fn void push_event (Components::EventBase * ev)
+ *
+ * Pushes event @c ev to all consumers.
+ */
+ virtual void push_event (
+ Components::EventBase * ev
+ ACE_ENV_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC ((
+ CORBA::SystemException)) = 0;
+ };
+
+ class Event_Consumer_Config_Base :
+ public virtual POA_CIAO::Consumer_Config
+ {
+ public:
+ virtual void start_conjunction_group (
+ ::CORBA::Long size
+ ACE_ENV_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC ((::CORBA::SystemException)) = 0;
+
+ virtual void start_disjunction_group (
+ ::CORBA::Long size
+ ACE_ENV_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC ((::CORBA::SystemException)) = 0;
+
+ virtual void insert_source (
+ const char * source_id
+ ACE_ENV_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC ((::CORBA::SystemException)) = 0;
+
+ virtual void insert_type (
+ ::CORBA::Long event_type
+ ACE_ENV_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC ((::CORBA::SystemException)) = 0;
+ };
+}
+
+#include /**/ "ace/post.h"
+#endif /* CIAO_EVENTSERVICEBASE_H */
diff --git a/TAO/CIAO/ciaosvcs/Events/CIAO_Events_Base/CIAO_Events_Base.mpc b/TAO/CIAO/ciaosvcs/Events/CIAO_Events_Base/CIAO_Events_Base.mpc
new file mode 100644
index 00000000000..ef9688d0d5b
--- /dev/null
+++ b/TAO/CIAO/ciaosvcs/Events/CIAO_Events_Base/CIAO_Events_Base.mpc
@@ -0,0 +1,26 @@
+// -*- MPC -*-
+// $Id$
+
+
+project (CIAO_DnC_Events_Base) : orbsvcslib, ciao_client_dnc, ciao_container_dnc {
+
+ sharedname = CIAO_DnC_Events_Base
+ idlflags += -Wb,export_include=CIAO_Events_Export.h -Wb,export_macro=CIAO_EVENTS_Export
+ dynamicflags = CIAO_EVENTS_BUILD_DLL
+
+ IDL_Files {
+ CIAO_Events.idl
+ }
+
+ Source_Files {
+ CIAO_EventServiceBase.cpp
+ CIAO_EventsC.cpp
+ CIAO_EventsS.cpp
+ }
+
+ Header_Files {
+ CIAO_EventsC.h
+ CIAO_EventsS.h
+ CIAO_EventServiceBase.h
+ }
+}
diff --git a/TAO/CIAO/ciaosvcs/Events/CIAO_Events_Base/CIAO_Events_Export.h b/TAO/CIAO/ciaosvcs/Events/CIAO_Events_Base/CIAO_Events_Export.h
new file mode 100644
index 00000000000..6678cef4bcc
--- /dev/null
+++ b/TAO/CIAO/ciaosvcs/Events/CIAO_Events_Base/CIAO_Events_Export.h
@@ -0,0 +1,53 @@
+// -*- C++ -*-
+// $Id$
+// Definition for Win32 Export directives.
+// This file is generated automatically by generate_export_file.pl CIAO_EVENTS
+// ------------------------------
+#ifndef CIAO_EVENTS_EXPORT_H
+#define CIAO_EVENTS_EXPORT_H
+
+#include "ace/config-all.h"
+
+#if !defined (CIAO_EVENTS_HAS_DLL)
+# define CIAO_EVENTS_HAS_DLL 1
+#endif /* ! CIAO_EVENTS_HAS_DLL */
+
+#if defined (CIAO_EVENTS_HAS_DLL) && (CIAO_EVENTS_HAS_DLL == 1)
+# if defined (CIAO_EVENTS_BUILD_DLL)
+# define CIAO_EVENTS_Export ACE_Proper_Export_Flag
+# define CIAO_EVENTS_SINGLETON_DECLARATION(T) ACE_EXPORT_SINGLETON_DECLARATION (T)
+# define CIAO_EVENTS_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK) ACE_EXPORT_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK)
+# else /* CIAO_EVENTS_BUILD_DLL */
+# define CIAO_EVENTS_Export ACE_Proper_Import_Flag
+# define CIAO_EVENTS_SINGLETON_DECLARATION(T) ACE_IMPORT_SINGLETON_DECLARATION (T)
+# define CIAO_EVENTS_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK) ACE_IMPORT_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK)
+# endif /* CIAO_EVENTS_BUILD_DLL */
+#else /* CIAO_EVENTS_HAS_DLL == 1 */
+# define CIAO_EVENTS_Export
+# define CIAO_EVENTS_SINGLETON_DECLARATION(T)
+# define CIAO_EVENTS_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK)
+#endif /* CIAO_EVENTS_HAS_DLL == 1 */
+
+// Set CIAO_EVENTS_NTRACE = 0 to turn on library specific tracing even if
+// tracing is turned off for ACE.
+#if !defined (CIAO_EVENTS_NTRACE)
+# if (ACE_NTRACE == 1)
+# define CIAO_EVENTS_NTRACE 1
+# else /* (ACE_NTRACE == 1) */
+# define CIAO_EVENTS_NTRACE 0
+# endif /* (ACE_NTRACE == 1) */
+#endif /* !CIAO_EVENTS_NTRACE */
+
+#if (CIAO_EVENTS_NTRACE == 1)
+# define CIAO_EVENTS_TRACE(X)
+#else /* (CIAO_EVENTS_NTRACE == 1) */
+# if !defined (ACE_HAS_TRACE)
+# define ACE_HAS_TRACE
+# endif /* ACE_HAS_TRACE */
+# define CIAO_EVENTS_TRACE(X) ACE_TRACE_IMPL(X)
+# include "ace/Trace.h"
+#endif /* (CIAO_EVENTS_NTRACE == 1) */
+
+#endif /* CIAO_EVENTS_EXPORT_H */
+
+// End of auto generated file.
diff --git a/TAO/CIAO/ciaosvcs/Events/CIAO_Events_Export.h b/TAO/CIAO/ciaosvcs/Events/CIAO_Events_Export.h
new file mode 100644
index 00000000000..6678cef4bcc
--- /dev/null
+++ b/TAO/CIAO/ciaosvcs/Events/CIAO_Events_Export.h
@@ -0,0 +1,53 @@
+// -*- C++ -*-
+// $Id$
+// Definition for Win32 Export directives.
+// This file is generated automatically by generate_export_file.pl CIAO_EVENTS
+// ------------------------------
+#ifndef CIAO_EVENTS_EXPORT_H
+#define CIAO_EVENTS_EXPORT_H
+
+#include "ace/config-all.h"
+
+#if !defined (CIAO_EVENTS_HAS_DLL)
+# define CIAO_EVENTS_HAS_DLL 1
+#endif /* ! CIAO_EVENTS_HAS_DLL */
+
+#if defined (CIAO_EVENTS_HAS_DLL) && (CIAO_EVENTS_HAS_DLL == 1)
+# if defined (CIAO_EVENTS_BUILD_DLL)
+# define CIAO_EVENTS_Export ACE_Proper_Export_Flag
+# define CIAO_EVENTS_SINGLETON_DECLARATION(T) ACE_EXPORT_SINGLETON_DECLARATION (T)
+# define CIAO_EVENTS_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK) ACE_EXPORT_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK)
+# else /* CIAO_EVENTS_BUILD_DLL */
+# define CIAO_EVENTS_Export ACE_Proper_Import_Flag
+# define CIAO_EVENTS_SINGLETON_DECLARATION(T) ACE_IMPORT_SINGLETON_DECLARATION (T)
+# define CIAO_EVENTS_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK) ACE_IMPORT_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK)
+# endif /* CIAO_EVENTS_BUILD_DLL */
+#else /* CIAO_EVENTS_HAS_DLL == 1 */
+# define CIAO_EVENTS_Export
+# define CIAO_EVENTS_SINGLETON_DECLARATION(T)
+# define CIAO_EVENTS_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK)
+#endif /* CIAO_EVENTS_HAS_DLL == 1 */
+
+// Set CIAO_EVENTS_NTRACE = 0 to turn on library specific tracing even if
+// tracing is turned off for ACE.
+#if !defined (CIAO_EVENTS_NTRACE)
+# if (ACE_NTRACE == 1)
+# define CIAO_EVENTS_NTRACE 1
+# else /* (ACE_NTRACE == 1) */
+# define CIAO_EVENTS_NTRACE 0
+# endif /* (ACE_NTRACE == 1) */
+#endif /* !CIAO_EVENTS_NTRACE */
+
+#if (CIAO_EVENTS_NTRACE == 1)
+# define CIAO_EVENTS_TRACE(X)
+#else /* (CIAO_EVENTS_NTRACE == 1) */
+# if !defined (ACE_HAS_TRACE)
+# define ACE_HAS_TRACE
+# endif /* ACE_HAS_TRACE */
+# define CIAO_EVENTS_TRACE(X) ACE_TRACE_IMPL(X)
+# include "ace/Trace.h"
+#endif /* (CIAO_EVENTS_NTRACE == 1) */
+
+#endif /* CIAO_EVENTS_EXPORT_H */
+
+// End of auto generated file.
diff --git a/TAO/CIAO/ciaosvcs/Events/CIAO_RTEC/CIAO_RTEVENT_Export.h b/TAO/CIAO/ciaosvcs/Events/CIAO_RTEC/CIAO_RTEVENT_Export.h
new file mode 100644
index 00000000000..d79e4a4581f
--- /dev/null
+++ b/TAO/CIAO/ciaosvcs/Events/CIAO_RTEC/CIAO_RTEVENT_Export.h
@@ -0,0 +1,58 @@
+
+// -*- C++ -*-
+// $Id$
+// Definition for Win32 Export directives.
+// This file is generated automatically by generate_export_file.pl CIAO_RTEVENT
+// ------------------------------
+#ifndef CIAO_RTEVENT_EXPORT_H
+#define CIAO_RTEVENT_EXPORT_H
+
+#include "ace/config-all.h"
+
+#if defined (ACE_AS_STATIC_LIBS) && !defined (CIAO_RTEVENT_HAS_DLL)
+# define CIAO_RTEVENT_HAS_DLL 0
+#endif /* ACE_AS_STATIC_LIBS && CIAO_RTEVENT_HAS_DLL */
+
+#if !defined (CIAO_RTEVENT_HAS_DLL)
+# define CIAO_RTEVENT_HAS_DLL 1
+#endif /* ! CIAO_RTEVENT_HAS_DLL */
+
+#if defined (CIAO_RTEVENT_HAS_DLL) && (CIAO_RTEVENT_HAS_DLL == 1)
+# if defined (CIAO_RTEVENT_BUILD_DLL)
+# define CIAO_RTEVENT_Export ACE_Proper_Export_Flag
+# define CIAO_RTEVENT_SINGLETON_DECLARATION(T) ACE_EXPORT_SINGLETON_DECLARATION (T)
+# define CIAO_RTEVENT_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK) ACE_EXPORT_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK)
+# else /* CIAO_RTEVENT_BUILD_DLL */
+# define CIAO_RTEVENT_Export ACE_Proper_Import_Flag
+# define CIAO_RTEVENT_SINGLETON_DECLARATION(T) ACE_IMPORT_SINGLETON_DECLARATION (T)
+# define CIAO_RTEVENT_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK) ACE_IMPORT_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK)
+# endif /* CIAO_RTEVENT_BUILD_DLL */
+#else /* CIAO_RTEVENT_HAS_DLL == 1 */
+# define CIAO_RTEVENT_Export
+# define CIAO_RTEVENT_SINGLETON_DECLARATION(T)
+# define CIAO_RTEVENT_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK)
+#endif /* CIAO_RTEVENT_HAS_DLL == 1 */
+
+// Set CIAO_RTEVENT_NTRACE = 0 to turn on library specific tracing even if
+// tracing is turned off for ACE.
+#if !defined (CIAO_RTEVENT_NTRACE)
+# if (ACE_NTRACE == 1)
+# define CIAO_RTEVENT_NTRACE 1
+# else /* (ACE_NTRACE == 1) */
+# define CIAO_RTEVENT_NTRACE 0
+# endif /* (ACE_NTRACE == 1) */
+#endif /* !CIAO_RTEVENT_NTRACE */
+
+#if (CIAO_RTEVENT_NTRACE == 1)
+# define CIAO_RTEVENT_TRACE(X)
+#else /* (CIAO_RTEVENT_NTRACE == 1) */
+# if !defined (ACE_HAS_TRACE)
+# define ACE_HAS_TRACE
+# endif /* ACE_HAS_TRACE */
+# define CIAO_RTEVENT_TRACE(X) ACE_TRACE_IMPL(X)
+# include "ace/Trace.h"
+#endif /* (CIAO_RTEVENT_NTRACE == 1) */
+
+#endif /* CIAO_RTEVENT_EXPORT_H */
+
+// End of auto generated file.
diff --git a/TAO/CIAO/ciaosvcs/Events/CIAO_RTEC/CIAO_RTEvent.cpp b/TAO/CIAO/ciaosvcs/Events/CIAO_RTEC/CIAO_RTEvent.cpp
new file mode 100644
index 00000000000..e85c8f0ee4f
--- /dev/null
+++ b/TAO/CIAO/ciaosvcs/Events/CIAO_RTEC/CIAO_RTEvent.cpp
@@ -0,0 +1,624 @@
+// -*- C++ -*-
+
+//=============================================================================
+/**
+ * @file CIAO_RTEvent.cpp
+ *
+ * $Id$
+ *
+ * @author Gan Deng <dengg@dre.vanderbilt.edu>
+ * @author George Edwards <g.edwards@vanderbilt.edu>
+ */
+//=============================================================================
+
+#include "CIAO_RTEvent.h"
+#include "ciao/CIAO_common.h"
+
+namespace CIAO
+{
+
+ RTEventService::RTEventService (CORBA::ORB_ptr orb,
+ PortableServer::POA_ptr poa) :
+ orb_ (CORBA::ORB::_duplicate (orb)),
+ root_poa_ (PortableServer::POA::_duplicate (poa)),
+ type_id_ (ACE_ES_EVENT_ANY),
+ source_id_ (ACE_ES_EVENT_SOURCE_ANY)
+ {
+ this->create_rt_event_channel ();
+ }
+
+
+ RTEventService::~RTEventService (void)
+ {
+ }
+
+
+ Supplier_Config_ptr
+ RTEventService::create_supplier_config (void)
+ ACE_THROW_SPEC ((CORBA::SystemException))
+ {
+ RTEvent_Supplier_Config_impl * supplier_config = 0;
+ ACE_NEW_RETURN (supplier_config,
+ RTEvent_Supplier_Config_impl (this->root_poa_.in ()),
+ Supplier_Config::_nil ());
+ RTEvent_Supplier_Config_var return_rtec =
+ supplier_config->_this (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK;
+ return return_rtec._retn ();
+ }
+
+
+ Consumer_Config_ptr
+ RTEventService::create_consumer_config (void)
+ ACE_THROW_SPEC ((CORBA::SystemException))
+ {
+ RTEvent_Consumer_Config_impl * consumer_config = 0;
+ ACE_NEW_RETURN (consumer_config,
+ RTEvent_Consumer_Config_impl (this->root_poa_.in ()),
+ Consumer_Config::_nil ());
+ RTEvent_Consumer_Config_var return_rtec =
+ consumer_config->_this (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK;
+ return return_rtec._retn ();
+ }
+
+
+ void
+ RTEventService::connect_event_supplier (
+ Supplier_Config_ptr supplier_config
+ ACE_ENV_ARG_DECL)
+ ACE_THROW_SPEC ((
+ CORBA::SystemException))
+ {
+ if (CIAO::debug_level () > 9)
+ {
+ ACE_DEBUG ((LM_DEBUG, "CIAO::RTEventService::connect_event_supplier\n"));
+ }
+
+ RTEvent_Supplier_Config_ptr rt_config =
+ RTEvent_Supplier_Config::_narrow (supplier_config
+ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK;
+
+ if (CORBA::is_nil (rt_config))
+ {
+ ACE_THROW (CORBA::BAD_PARAM ());
+ }
+
+ ACE_Hash<ACE_CString> hasher;
+ this->source_id_ = hasher (supplier_config->supplier_id (ACE_ENV_SINGLE_ARG_PARAMETER));
+ ACE_CHECK;
+ this->type_id_ = this->source_id_;
+
+ if (CIAO::debug_level () > 11)
+ {
+ ACE_DEBUG ((LM_DEBUG, "connect source id: %i\n", this->source_id_));
+ }
+
+ RtecEventChannelAdmin::SupplierAdmin_var supplier_admin =
+ this->rt_event_channel_->for_suppliers (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK;
+
+ this->proxy_consumer_ =
+ supplier_admin->obtain_push_consumer (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK;
+
+ // Create and register supplier servant
+ RTEventServiceSupplier_impl * supplier_servant = 0;
+ ACE_NEW (supplier_servant,
+ RTEventServiceSupplier_impl (root_poa_.in ()));
+ RtecEventComm::PushSupplier_var push_supplier =
+ supplier_servant->_this (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK;
+
+ RtecEventChannelAdmin::SupplierQOS_var qos =
+ rt_config->rt_event_qos (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK;
+
+ this->proxy_consumer_->connect_push_supplier (push_supplier.in (),
+ qos.in ()
+ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK;
+ }
+
+ void
+ RTEventService::connect_event_consumer (
+ Consumer_Config_ptr consumer_config
+ ACE_ENV_ARG_DECL)
+ ACE_THROW_SPEC ((
+ CORBA::SystemException))
+ {
+ if (CIAO::debug_level () > 9)
+ {
+ ACE_DEBUG ((LM_DEBUG, "CIAO::RTEventService::connect_event_consumer\n"));
+ }
+
+ RTEvent_Consumer_Config_ptr rt_config =
+ RTEvent_Consumer_Config::_narrow (consumer_config
+ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK;
+
+ if (CORBA::is_nil (rt_config))
+ {
+ ACE_THROW (CORBA::BAD_PARAM ());
+ }
+
+ Components::EventConsumerBase_var consumer =
+ consumer_config->consumer (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK;
+
+ if (CORBA::is_nil (consumer.in ()))
+ ACE_DEBUG ((LM_DEBUG, "nil event consumer\n"));
+
+ RtecEventChannelAdmin::ConsumerAdmin_var consumer_admin =
+ this->rt_event_channel_->for_consumers (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK;
+
+ RtecEventChannelAdmin::ProxyPushSupplier_var proxy_supplier =
+ consumer_admin->obtain_push_supplier (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK;
+
+ // Create and register consumer servant
+ RTEventServiceConsumer_impl * consumer_servant = 0;
+ ACE_NEW (consumer_servant,
+ RTEventServiceConsumer_impl (
+ root_poa_.in (),
+ consumer.in ()));
+ RtecEventComm::PushConsumer_var push_consumer =
+ consumer_servant->_this (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK;
+
+ //@@@
+ rt_config->start_disjunction_group (1);
+
+ rt_config->insert_type (ACE_ES_EVENT_ANY);
+
+ RtecEventChannelAdmin::ConsumerQOS_var qos =
+ rt_config->rt_event_qos (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK;
+
+ proxy_supplier->connect_push_consumer (push_consumer.in (),
+ qos.in ()
+ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK;
+
+ ACE_CString consumer_id =
+ consumer_config->consumer_id (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK;
+
+ this->proxy_supplier_map_.bind (consumer_id.c_str (), proxy_supplier._retn ());
+ }
+
+ void
+ RTEventService::disconnect_event_supplier (
+ const char * connection_id
+ ACE_ENV_ARG_DECL)
+ ACE_THROW_SPEC ((
+ CORBA::SystemException,
+ Components::InvalidConnection))
+ {
+ ACE_UNUSED_ARG (connection_id);
+
+ this->proxy_consumer_->disconnect_push_consumer (
+ ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK;
+
+ // What to do with the consumers?!
+ }
+
+ void
+ RTEventService::disconnect_event_consumer (
+ const char * connection_id
+ ACE_ENV_ARG_DECL)
+ ACE_THROW_SPEC ((
+ CORBA::SystemException,
+ Components::InvalidConnection))
+ {
+ RtecEventChannelAdmin::ProxyPushSupplier_var proxy_supplier;
+
+ this->proxy_supplier_map_.unbind (connection_id, proxy_supplier);
+
+ proxy_supplier->disconnect_push_supplier (
+ ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK;
+ }
+
+ void
+ RTEventService::push_event (
+ Components::EventBase * ev
+ ACE_ENV_ARG_DECL)
+ ACE_THROW_SPEC ((
+ CORBA::SystemException))
+ {
+ if (CIAO::debug_level () > 10)
+ {
+ ACE_DEBUG ((LM_DEBUG, "------CIAO::RTEventService::push_event------\n"));
+ }
+
+ RtecEventComm::EventSet events (1);
+ events.length (1);
+ events[0].header.source = ACE_ES_EVENT_SOURCE_ANY; //this->source_id_;
+ events[0].header.type = ACE_ES_EVENT_ANY; //this->type_id_;
+ events[0].data.any_value <<= ev;
+
+ this->proxy_consumer_->push (events ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK;
+ }
+
+ void
+ RTEventService::create_rt_event_channel (
+ ACE_ENV_SINGLE_ARG_DECL)
+ ACE_THROW_SPEC ((
+ CORBA::SystemException))
+ {
+ if (CIAO::debug_level () > 10)
+ {
+ ACE_DEBUG ((LM_DEBUG, "CIAO::EventService_Factory_impl::create_rt_event_channel\n"));
+ }
+
+ // @@ (GD) Anything else to do to get the svc.conf file options?
+ TAO_EC_Default_Factory::init_svcs ();
+
+ TAO_EC_Event_Channel_Attributes attributes (this->root_poa_.in (),
+ this->root_poa_.in ());
+ TAO_EC_Event_Channel * ec_servant = 0;
+ ACE_NEW (ec_servant, TAO_EC_Event_Channel (attributes));
+ ec_servant->activate (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK;
+ this->rt_event_channel_ = ec_servant->_this (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK;
+ }
+
+
+ //////////////////////////////////////////////////////////////////////
+ /// Supplier Servant Implementation
+ //////////////////////////////////////////////////////////////////////
+
+ RTEventServiceSupplier_impl::RTEventServiceSupplier_impl (
+ PortableServer::POA_ptr poa) :
+ poa_ (PortableServer::POA::_duplicate (poa))
+ {
+ }
+
+ void
+ RTEventServiceSupplier_impl::disconnect_push_supplier (void)
+ ACE_THROW_SPEC ((
+ CORBA::SystemException))
+ {
+ PortableServer::ObjectId_var oid = this->poa_->servant_to_id (this);
+ this->poa_->deactivate_object (oid);
+ this->_remove_ref ();
+ }
+
+ //////////////////////////////////////////////////////////////////////
+ /// Consumer Servant Implementation
+ //////////////////////////////////////////////////////////////////////
+
+ RTEventServiceConsumer_impl::RTEventServiceConsumer_impl (
+ PortableServer::POA_ptr poa,
+ Components::EventConsumerBase_ptr consumer) :
+ poa_ (PortableServer::POA::_duplicate (poa)),
+ event_consumer_ (Components::EventConsumerBase::_duplicate (consumer))
+ {
+ }
+
+ void
+ RTEventServiceConsumer_impl::push (const RtecEventComm::EventSet& events)
+ ACE_THROW_SPEC ((CORBA::SystemException))
+ {
+ if (CIAO::debug_level () > 10)
+ {
+ ACE_DEBUG ((LM_DEBUG, "CIAO::RTEventServiceConsumer_impl::push\n"));
+ }
+
+ for (size_t i = 0; i < events.length (); ++i)
+ {
+ Components::EventBase * ev = 0;
+ if (events[i].data.any_value >>= ev)
+ {
+ ev->_add_ref ();
+ this->event_consumer_->push_event (ev
+ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK;
+ }
+ }
+
+ }
+
+ void
+ RTEventServiceConsumer_impl::disconnect_push_consumer (void)
+ ACE_THROW_SPEC ((CORBA::SystemException))
+ {
+ if (CIAO::debug_level () > 10)
+ {
+ ACE_DEBUG ((LM_DEBUG, "CIAO::RTEventServiceConsumer_impl::disconnect_push_consumer\n"));
+ }
+
+ PortableServer::ObjectId_var oid = this->poa_->servant_to_id (this);
+ this->poa_->deactivate_object (oid);
+ this->_remove_ref ();
+ }
+
+
+ //////////////////////////////////////////////////////////////////////
+ /// Supplier Config Implementation
+ //////////////////////////////////////////////////////////////////////
+
+ RTEvent_Supplier_Config_impl::RTEvent_Supplier_Config_impl (PortableServer::POA_ptr poa) :
+ service_type_ (RTEC),
+ poa_ (PortableServer::POA::_duplicate (poa))
+ {
+ }
+
+ RTEvent_Supplier_Config_impl::~RTEvent_Supplier_Config_impl (void)
+ {
+ if (CIAO::debug_level () > 10)
+ {
+ ACE_DEBUG
+ ((LM_DEBUG, "RTEvent_Supplier_Config_impl::~RTEvent_Supplier_Config_impl\n"));
+ }
+ }
+
+ void
+ RTEvent_Supplier_Config_impl::supplier_id (
+ const char * supplier_id
+ ACE_ENV_ARG_DECL)
+ ACE_THROW_SPEC ((
+ CORBA::SystemException))
+ {
+ if (CIAO::debug_level () > 11)
+ {
+ ACE_DEBUG ((LM_DEBUG, "supplier's id: %s\n", supplier_id));
+
+ }
+
+ this->supplier_id_ = supplier_id;
+
+ ACE_Hash<ACE_CString> hasher;
+ RtecEventComm::EventSourceID source_id =
+ hasher (this->supplier_id_.c_str ());
+
+ this->qos_.insert (source_id,
+ source_id,
+ 0,
+ 1);
+ }
+
+ CONNECTION_ID
+ RTEvent_Supplier_Config_impl::supplier_id (
+ ACE_ENV_SINGLE_ARG_DECL)
+ ACE_THROW_SPEC ((
+ CORBA::SystemException))
+ {
+ return CORBA::string_dup (this->supplier_id_.c_str ());
+ }
+
+ EventServiceType
+ RTEvent_Supplier_Config_impl::service_type (
+ ACE_ENV_SINGLE_ARG_DECL)
+ ACE_THROW_SPEC ((
+ CORBA::SystemException))
+ {
+ return this->service_type_;
+ }
+
+ RtecEventChannelAdmin::SupplierQOS *
+ RTEvent_Supplier_Config_impl::rt_event_qos (
+ ACE_ENV_SINGLE_ARG_DECL)
+ ACE_THROW_SPEC ((
+ CORBA::SystemException))
+ {
+ RtecEventChannelAdmin::SupplierQOS * supplier_qos = 0;
+ ACE_NEW_RETURN (supplier_qos,
+ RtecEventChannelAdmin::SupplierQOS (this->qos_.get_SupplierQOS ()),
+ 0);
+ return supplier_qos;
+ }
+
+ void
+ RTEvent_Supplier_Config_impl::destroy (
+ ACE_ENV_SINGLE_ARG_DECL)
+ ACE_THROW_SPEC ((
+ CORBA::SystemException))
+ {
+ PortableServer::ObjectId_var oid = this->poa_->servant_to_id (this);
+ this->poa_->deactivate_object (oid);
+ this->_remove_ref ();
+ }
+
+ //////////////////////////////////////////////////////////////////////
+ /// Consumer Config Implementation
+ //////////////////////////////////////////////////////////////////////
+
+ RTEvent_Consumer_Config_impl::RTEvent_Consumer_Config_impl (PortableServer::POA_ptr poa) :
+ service_type_ (RTEC),
+ poa_ (PortableServer::POA::_duplicate (poa))
+ {
+ }
+
+ RTEvent_Consumer_Config_impl::~RTEvent_Consumer_Config_impl (void)
+ {
+ ACE_DEBUG
+ ((LM_DEBUG, "RTEvent_Consumer_Config_impl::~RTEvent_Consumer_Config_impl\n"));
+ }
+
+ void
+ RTEvent_Consumer_Config_impl::start_conjunction_group (
+ CORBA::Long size ACE_ENV_ARG_DECL)
+ ACE_THROW_SPEC ((
+ CORBA::SystemException))
+ {
+ this->qos_.start_conjunction_group (size);
+ }
+
+ void
+ RTEvent_Consumer_Config_impl::start_disjunction_group (
+ CORBA::Long size
+ ACE_ENV_ARG_DECL)
+ ACE_THROW_SPEC ((
+ CORBA::SystemException))
+ {
+ this->qos_.start_disjunction_group (size);
+ }
+
+ void
+ RTEvent_Consumer_Config_impl::insert_source (
+ const char * source_id
+ ACE_ENV_ARG_DECL)
+ ACE_THROW_SPEC ((
+ CORBA::SystemException))
+ {
+
+ ACE_Hash<ACE_CString> hasher;
+ RtecEventComm::EventSourceID int_source_id =
+ hasher (source_id);
+
+ this->qos_.insert_source (int_source_id,
+ 0);
+ }
+
+ void
+ RTEvent_Consumer_Config_impl::insert_type (
+ ::CORBA::Long event_type
+ ACE_ENV_ARG_DECL)
+ ACE_THROW_SPEC ((::CORBA::SystemException))
+ {
+ this->qos_.insert_type (event_type,
+ 0);
+ }
+
+ void
+ RTEvent_Consumer_Config_impl::consumer_id (
+ const char * consumer_id
+ ACE_ENV_ARG_DECL)
+ ACE_THROW_SPEC ((
+ CORBA::SystemException))
+ {
+ if (CIAO::debug_level () > 10)
+ {
+ ACE_DEBUG ((LM_DEBUG,
+ "RTEvent_Consumer_Config_impl::set_consumer_id:%s\n",
+ consumer_id));
+ }
+
+ this->consumer_id_ = consumer_id;
+ }
+
+ void
+ RTEvent_Consumer_Config_impl::supplier_id (
+ const char * supplier_id
+ ACE_ENV_ARG_DECL)
+ ACE_THROW_SPEC ((
+ CORBA::SystemException))
+ {
+ if (CIAO::debug_level () > 10)
+ {
+ ACE_DEBUG ((LM_DEBUG,
+ "RTEvent_Consumer_Config_impl::set_supplier_id:%s\n",
+ supplier_id));
+ }
+
+ this->supplier_id_ = supplier_id;
+
+ ACE_Hash<ACE_CString> hasher;
+ RtecEventComm::EventSourceID source_id =
+ hasher (this->supplier_id_.c_str ());
+
+ this->qos_.start_disjunction_group (1);
+ this->qos_.insert (source_id,
+ source_id,
+ 0);
+ }
+
+ void
+ RTEvent_Consumer_Config_impl::consumer (
+ Components::EventConsumerBase_ptr consumer
+ ACE_ENV_ARG_DECL)
+ ACE_THROW_SPEC ((
+ CORBA::SystemException))
+ {
+ this->consumer_ = Components::EventConsumerBase::_duplicate (consumer);
+ }
+
+ CONNECTION_ID
+ RTEvent_Consumer_Config_impl::consumer_id (
+ ACE_ENV_SINGLE_ARG_DECL)
+ ACE_THROW_SPEC ((
+ CORBA::SystemException))
+ {
+ return CORBA::string_dup (this->consumer_id_.c_str ());
+ }
+
+ CONNECTION_ID
+ RTEvent_Consumer_Config_impl::supplier_id (
+ ACE_ENV_SINGLE_ARG_DECL)
+ ACE_THROW_SPEC ((
+ CORBA::SystemException))
+ {
+ if (CIAO::debug_level () > 10)
+ {
+ ACE_DEBUG ((LM_DEBUG, "RTEvent_Consumer_Config_impl::get_supplier_id\n"));
+ }
+
+ return CORBA::string_dup (this->supplier_id_.c_str ());
+ }
+
+ EventServiceType
+ RTEvent_Consumer_Config_impl::service_type (
+ ACE_ENV_SINGLE_ARG_DECL)
+ ACE_THROW_SPEC ((
+ CORBA::SystemException))
+ {
+ return this->service_type_;
+ }
+
+ Components::EventConsumerBase_ptr
+ RTEvent_Consumer_Config_impl::consumer (
+ ACE_ENV_SINGLE_ARG_DECL)
+ ACE_THROW_SPEC ((
+ CORBA::SystemException))
+ {
+ if (CIAO::debug_level () > 10)
+ {
+ ACE_DEBUG ((LM_DEBUG, "RTEvent_Consumer_Config_impl::get_consumer\n"));
+ }
+
+ return Components::EventConsumerBase::_duplicate (this->consumer_.in ());
+ }
+
+ RtecEventChannelAdmin::ConsumerQOS *
+ RTEvent_Consumer_Config_impl::rt_event_qos (
+ ACE_ENV_SINGLE_ARG_DECL)
+ ACE_THROW_SPEC ((
+ CORBA::SystemException))
+ {
+ RtecEventChannelAdmin::ConsumerQOS * consumer_qos = 0;
+ ACE_NEW_RETURN (consumer_qos,
+ RtecEventChannelAdmin::ConsumerQOS (this->qos_.get_ConsumerQOS ()),
+ 0);
+
+
+ // @@@ Hard coded
+ this->qos_.start_disjunction_group (1);
+ this->qos_.insert_type (ACE_ES_EVENT_ANY, 0);
+
+ return consumer_qos;
+ }
+
+ void
+ RTEvent_Consumer_Config_impl::destroy (
+ ACE_ENV_SINGLE_ARG_DECL)
+ ACE_THROW_SPEC ((
+ CORBA::SystemException))
+ {
+ if (CIAO::debug_level () > 10)
+ {
+ ACE_DEBUG
+ ((LM_DEBUG, "RTEvent_Consumer_Config_impl::destroy\n"));
+ }
+
+ PortableServer::ObjectId_var oid = this->poa_->servant_to_id (this);
+ this->poa_->deactivate_object (oid);
+ this->_remove_ref ();
+ }
+}
diff --git a/TAO/CIAO/ciaosvcs/Events/CIAO_RTEC/CIAO_RTEvent.mpc b/TAO/CIAO/ciaosvcs/Events/CIAO_RTEC/CIAO_RTEvent.mpc
new file mode 100644
index 00000000000..457806b3ffb
--- /dev/null
+++ b/TAO/CIAO/ciaosvcs/Events/CIAO_RTEC/CIAO_RTEvent.mpc
@@ -0,0 +1,25 @@
+// -*- MPC -*-
+// $Id$
+
+project (CIAO_RTEvent) : rtevent_serv, ciao_events_base_dnc {
+
+ sharedname = CIAO_RTEvent
+ idlflags += -Wb,export_include=CIAO_RTEVENT_Export.h -Wb,export_macro=CIAO_RTEVENT_Export
+ dynamicflags = CIAO_RTEVENT_BUILD_DLL
+
+ IDL_Files {
+ CIAO_RTEvent.idl
+ }
+
+ Source_Files {
+ CIAO_RTEvent.cpp
+ CIAO_RTEventC.cpp
+ CIAO_RTEventS.cpp
+ }
+
+ Header_Files {
+ CIAO_RTEvent.h
+ CIAO_RTEventC.h
+ CIAO_RTEventS.h
+ }
+}
diff --git a/TAO/CIAO/docs/imgs/dance_arch.jpg b/TAO/CIAO/docs/imgs/dance_arch.jpg
new file mode 100644
index 00000000000..95f139c7e6e
--- /dev/null
+++ b/TAO/CIAO/docs/imgs/dance_arch.jpg
Binary files differ
diff --git a/TAO/CIAO/docs/imgs/dance_arch.vsd b/TAO/CIAO/docs/imgs/dance_arch.vsd
new file mode 100644
index 00000000000..cfe75fca9c6
--- /dev/null
+++ b/TAO/CIAO/docs/imgs/dance_arch.vsd
Binary files differ
diff --git a/TAO/CIAO/docs/imgs/static_dance_arch.jpg b/TAO/CIAO/docs/imgs/static_dance_arch.jpg
new file mode 100644
index 00000000000..3a4b579c3d5
--- /dev/null
+++ b/TAO/CIAO/docs/imgs/static_dance_arch.jpg
Binary files differ
diff --git a/TAO/CIAO/docs/imgs/static_dance_arch.vsd b/TAO/CIAO/docs/imgs/static_dance_arch.vsd
new file mode 100644
index 00000000000..1ca1f50f69d
--- /dev/null
+++ b/TAO/CIAO/docs/imgs/static_dance_arch.vsd
Binary files differ
diff --git a/TAO/CIAO/docs/imgs/static_dance_impl.jpg b/TAO/CIAO/docs/imgs/static_dance_impl.jpg
new file mode 100644
index 00000000000..1040e65c1db
--- /dev/null
+++ b/TAO/CIAO/docs/imgs/static_dance_impl.jpg
Binary files differ
diff --git a/TAO/CIAO/docs/imgs/static_dance_impl.vsd b/TAO/CIAO/docs/imgs/static_dance_impl.vsd
new file mode 100644
index 00000000000..6c21e6139d4
--- /dev/null
+++ b/TAO/CIAO/docs/imgs/static_dance_impl.vsd
Binary files differ
diff --git a/TAO/CIAO/docs/schema/CIAOEvents.xsd b/TAO/CIAO/docs/schema/CIAOEvents.xsd
new file mode 100644
index 00000000000..6ea307609f3
--- /dev/null
+++ b/TAO/CIAO/docs/schema/CIAOEvents.xsd
@@ -0,0 +1,112 @@
+<?xml version="1.0" encoding="utf-8"?>
+<xsd:schema targetNamespace="http://www.dre.vanderbilt.edu/CIAOEvents"
+ xmlns:CIAO="http://www.dre.vanderbilt.edu/CIAOEvents"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ attributeFormDefault="unqualified">
+
+ <xsd:element name="CIAOEvents" type="CIAO:CIAOEventsDef">
+ <xsd:annotation>
+ <xsd:documentation>
+ Root element for defining all the pub/sub services configuration
+ used by a DeploymentPlan.
+ A CIAO:Events document should reside in a separate file.
+ A DeploymentPlan can refer to one or more CIAO:Events file names
+ using the "infoProperty" tag.
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+
+<!-- =============================================================== -->
+<!-- CIAO Event Service Deployment Description -->
+<!-- =============================================================== -->
+
+ <xsd:simpleType name="EventServiceType">
+ <xsd:restriction base="xsd:NCName">
+ <xsd:enumeration value="EC"/>
+ <xsd:enumeration value="RTEC"/>
+ <xsd:enumeration value="NOTIFY"/>
+ <xsd:enumeration value="RTNOTIFY"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+
+ <xsd:complexType name="CIAOEventsDef">
+ <xsd:sequence>
+ <xsd:element name="eventServiceConfiguration" type="CIAO:EventServiceDescription" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ <xsd:attribute name="id" type="xsd:ID"/>
+ </xsd:complexType>
+
+ <xsd:complexType name="EventServiceDescription">
+ <xsd:sequence>
+ <xsd:element name="name" type="xsd:string"/>
+ <xsd:element name="node" type="xsd:string"/>
+ <xsd:element name="type" type="CIAO:EventServiceType"/>
+ <xsd:element name="svc_cfg_file" type="xsd:string"/>
+ <xsd:element name="filter" type="CIAO:Filter" minOccurs="0" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ <xsd:attribute name="id" type="xsd:ID"/>
+ </xsd:complexType>
+
+
+
+
+<!-- =============================================================== -->
+<!-- CIAO Event Filter Description -->
+<!-- =============================================================== -->
+
+ <xsd:simpleType name="FilterType">
+ <xsd:restriction base="xsd:NCName">
+ <xsd:enumeration value="CONJUNCTION"/>
+ <xsd:enumeration value="DISJUNCTION"/>
+ <xsd:enumeration value="LOGICAL_AND"/>
+ <xsd:enumeration value="NEGATE"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+
+ <xsd:complexType name="Filter">
+ <xsd:sequence>
+ <xsd:element name="name" type="xsd:string"/>
+ <xsd:element name="type" type="CIAO:FilterType"/>
+ <xsd:element name="source" type="xsd:string" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ <xsd:attribute name="id" type="xsd:ID"/>
+ </xsd:complexType>
+
+<!-- =============================================================== -->
+<!-- CIAO Event Service Federation Description -->
+<!-- =============================================================== -->
+
+ <xsd:complexType name="MCastSenderDescription">
+ <xsd:sequence>
+ <xsd:element name="node" type="xsd:string"/>
+ <xsd:element name="type" type="CIAO:EventServiceType"/>
+ <xsd:element name="svc_cfg_file" type="xsd:string"/>
+ </xsd:sequence>
+ <xsd:attribute name="id" type="xsd:ID"/>
+ </xsd:complexType>
+
+ <xsd:complexType name="MCastReceiverDescription">
+ <xsd:sequence>
+ <xsd:element name="node" type="xsd:string"/>
+ <xsd:element name="type" type="CIAO:EventServiceType"/>
+ <xsd:element name="svc_cfg_file" type="xsd:string"/>
+ </xsd:sequence>
+ <xsd:attribute name="id" type="xsd:ID"/>
+ </xsd:complexType>
+
+ <xsd:complexType name="EC_to_MCastSender">
+ <xsd:sequence>
+ <xsd:element name="destination" type="xsd:string"/>
+ </xsd:sequence>
+ <xsd:attribute name="id" type="xsd:ID"/>
+ </xsd:complexType>
+
+ <xsd:complexType name="MCastReceiver_to_EC">
+ <xsd:sequence>
+ <xsd:element name="source" type="xsd:string"/>
+ <xsd:element name="destination" type="xsd:string"/>
+ </xsd:sequence>
+ <xsd:attribute name="id" type="xsd:ID"/>
+ </xsd:complexType>
+
+</xsd:schema>
diff --git a/TAO/CIAO/docs/static_dance.html b/TAO/CIAO/docs/static_dance.html
new file mode 100644
index 00000000000..3bd6433e133
--- /dev/null
+++ b/TAO/CIAO/docs/static_dance.html
@@ -0,0 +1,214 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+<head>
+ <meta http-equiv="CONTENT-TYPE" content="text/html; charset=utf-8">
+ <title></title>
+<!-- $Id$ -->
+ <meta name="GENERATOR" content="OpenOffice.org 1.1.2 (Linux)">
+ <meta name="CREATED" content="20041128;11452700">
+ <meta name="CHANGED" content="20041210;11524200">
+ <style>
+ <!--
+ @page { size: 8.5in 11in; margin-left: 1.25in; margin-right: 1.25in; margin-top: 1in; margin-bottom: 1in }
+ P { margin-bottom: 0.08in }
+ H2.western { font-family: "Times New Roman", serif }
+ H2.cjk { font-family: "Arial Unicode MS" }
+ H2.ctl { font-family: "Tahoma" }
+ H3.western { font-family: "Times New Roman", serif }
+ H3.cjk { font-family: "Arial Unicode MS" }
+ H3.ctl { font-family: "Tahoma" }
+ -->
+ </style>
+</head>
+<body dir="ltr" lang="en-US">
+<h2 class="western" align="center">CIAO Static Configuration Support
+with DanCE for Real-Time Platforms </h2>
+<h3 class="western">1. Introduction</h3>
+<p>The dynamic packaging, assembly, and deployment mechanisms
+currently available in CIAO are useful for application domains where
+component metadata is less likely to be known a priori, where
+implementation upgrades may need to be performed on-line, and where
+platform features like loading and unloading dynamic libraries are
+both available and useful. We have already incorporated <a
+ href="http://www.cs.wustl.edu/%7Eschmidt/ACE_wrappers/TAO/CIAO/docs/static_ciao_index.html">static
+configuration support</a> for component configuration in CIAO on
+platforms like VxWorks, as a set of optional strategies and
+optimizations to the existing CIAO configuration capabilities (). In
+this white paper, we discuss implementation details for extending the
+static configuration capabilities as part of the new DanCE (D&amp;C
+support available with CIAO) framework.</p>
+<p>The fundamental intuition in understanding our approach is that in
+DRE systems the stages of the overall system lifecycle are similar to
+those in more dynamic conventional component-oriented client-server
+applications.However, in DRE systems several phases of the system
+lifecycle are compressed into the compile-time and
+system-initialization phases, so that (1) for testing and
+verification purposes the set of components in an application can be
+identified and analyzed before run-time, and (2) overheads for
+run-time operation following initialization are reduced and made more
+predictable. Furthermore, due to the nuances of the platforms
+traditionally used for deploying DRE systems, not all features of
+conventional platforms are available. Our approach therefore avoids
+certain mechanisms that are either unavailable or too costly in terms
+of performance. We follow these intuitions in our approach, taking
+the existing configuration phases in CIAO and pushing several of them
+earlier in the configuration lifecycle.</p>
+<h3 class="western">2. Current D&amp;C in CIAO with DanCE</h3>
+<p><img src="imgs/dance_arch.jpg" name="Graphic2"
+ style="border: 0px solid ; width: 600px; height: 400px;" alt=""
+ align="left"><br>
+</p>
+<p><br>
+</p>
+<p><br>
+</p>
+<p><br>
+</p>
+<p><br>
+</p>
+<p><br>
+</p>
+<p><br>
+</p>
+<p><br>
+</p>
+<p><br>
+</p>
+<p><br>
+</p>
+<p><br>
+</p>
+<p><br><b>Figure 1.</b> <b>Current D&amp;C process using DAnCE</b></p>
+One of the key concerns while supporting the static configuration
+within the DAnCE framework is to reuse the existing components in the
+DAnCE framework as much as possible. Figure 1 shows the current D&amp;C
+process using the DAnCE framework. This is the standard D&amp;C
+process as specified in the CCM D&amp;C specification.As seen from
+the figure, there are multiple processes (Executor, ExecutionManager,
+NodeManagers and NodeApplications) that are involved.
+<h3 class="western">3. Static Configuration with DanCE</h3>
+<p><img src="imgs/static_dance_arch.jpg" name="Graphic3"
+ style="border: 0px solid ; width: 800px; height: 800px;" alt=""
+ align="left"><br>
+</p>
+<p><br>
+</p>
+<p><br>
+</p>
+<p><br>
+</p>
+<p><br>
+</p>
+<p><br>
+</p>
+<p><br>
+</p>
+<p><br>
+</p>
+<p><br>
+</p>
+<p><br>
+</p>
+<p><br>
+</p>
+<p><br>
+</p>
+<p><br>
+</p>
+<p><br>
+</p>
+<p><br>
+</p>
+<p><br>
+</p>
+<p><br>
+</p>
+<p><br>
+</p>
+</p>
+<p><br>
+</p>
+<p><br>
+</p>
+<p><br>
+</p>
+<p><br>
+</p>
+<p><br>
+</p>
+<p><br><b>Figure 2.</b> <b>Static D&amp;C in DAnCE</b></p>
+<p>Figure 2 shows the static configuration approach in DAnCE. Here,
+the flattened deployment plan (.cdp) is parsed offline by an offline
+parser ($CIAO_ROOT/StaticConfigurator/StaticDAnCEParser) using the
+same XML parser classes that the dynamic configuration uses. The
+output of the parser is a C++ plan.h file, which contains the function
+entry points for home and home servant creation. The assumption here
+is that all the necessary (component implementations and other)
+libraries are statically linked to the driver application (see a
+template in
+$CIAO_ROOT/DAnCE/StaticConfigurator/StaticDAnCEApp.cpp.tmpl). </p>
+<p>The driver application is essentially a NodeManager which can be
+used to do deployment just the same as in DAnCE. To achieve maximum
+reusability of the existing classes in the DAnCE framework, we use
+the class hierarchy shown in Figure 3. </p>
+<br>
+<b></b>
+<p style="page-break-before: always;" align="left"><img
+ src="imgs/static_dance_impl.jpg" name="Graphic1"
+ style="border: 0px solid ; width: 700px; height: 700px;" alt=""
+ align="left"><br clear="left">
+<b>Figure 3. New class hierarchy to accommodate static configuration
+within DAnCE<br>
+</b></p>
+<h3 class="western">3.Example</h3>
+<p>To run the static version of Hello example, do the following,<br>
+</p>
+<ol>
+ <li>Build ACE+TAO+CIAO statically</li>
+ <li>Build $CIAO_ROOT/examples/Hello&nbsp;</li>
+ <li>Generate the static function entrypoints (plan.h)<br>
+ <span style="font-family: monospace;">&gt; cd
+$CIAO_ROOT/examples/Hello/descriptors</span><span
+ style="font-family: monospace;"><br>
+&gt; <span style="font-family: &quot;times new roman&quot;,serif;"><span
+ style="font-weight: bold;"></span></span>$CIAO_ROOT/DAnCE/StaticConfigurator/StaticDAnCEParser
+-p flattened_deploymentplan_without_ns.cdp</span><br>
+ <span style="font-family: monospace;">&gt; cp plan.h <span
+ style="font-weight: bold;"></span>$CIAO_ROOT/DAnCE/StaticConfigurator/</span><br>
+ </li>
+ <li>Build the static NodeManager for Hello example<span
+ style="font-family: monospace;"><br>
+&gt; cd $CIAO_ROOT/DAnCE/StaticConfigurator</span><br
+ style="font-family: monospace;">
+ <span style="font-family: monospace;"></span><span
+ style="font-family: monospace;">&gt; cp StaticDAnCEApp.cpp.tmpl
+StaticDAnCEApp.cpp</span><br style="font-family: monospace;">
+ <span style="font-family: monospace;">&gt; cp
+StaticDAnCEApp.mpc.tmpl StaticDAnCEApp.mpc<br>
+&gt; $ACE_ROOT/bin/mwc.pl<br>
+&gt; make<br>
+ </span></li>
+ <li>Run the static node managers. Note that the <span
+ style="font-family: monospace;">ORBEndpoint</span> values should
+correspond to the ones in&nbsp;<span style="font-family: monospace;">
+$CIAO_ROOT/examples/Hello/descriptors/TestNodeManagerMap.dat </span><br>
+&gt; <span style="font-family: monospace;">cd
+$CIAO_ROOT/DAnCE/StaticConfigurator<br>
+&gt; ./StaticDAnCEApp -ORBEndpoint iiop://localhost:60001 &amp;<br>
+ </span><span style="font-family: monospace;">&gt; ./StaticDAnCEApp
+-ORBEndpoint iiop://localhost:60002 &amp;</span><br>
+ </li>
+ <li>Do the deployment. This is just the same as the non-static
+version of DAnCE except that we have the NodeManagers already running
+and need not spawn node managers. To accomplish this, change&nbsp; <span
+ style="font-family: monospace;">$CIAO_ROOT/examples/Hello/descriptors/run_test_without_ns.pl
+to <span style="font-weight: bold;">*not*</span> run the node manager
+daemons.<br>
+ </span><span style="font-family: monospace;">&gt; cd
+$CIAO_ROOT/examples/Hello/descriptors<br>
+&gt; ./</span><span style="font-family: monospace;">run_test_without_ns.pl</span></li>
+</ol>
+<br>
+<p></p>
+</body>
+</html>
diff --git a/TAO/CIAO/docs/tutorials/CoSMIC/01.html b/TAO/CIAO/docs/tutorials/CoSMIC/01.html
new file mode 100644
index 00000000000..e43e2c148a8
--- /dev/null
+++ b/TAO/CIAO/docs/tutorials/CoSMIC/01.html
@@ -0,0 +1,125 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+<head>
+<!-- $Id$ -->
+ <title>Getting Started</title>
+</head>
+<body style="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255);"
+ link="#000fff" vlink="#ff0f0f">
+<h3>Getting Started<br>
+</h3>
+<b>Writing IDL files</b><br>
+<br>
+We will start from writing the idl file for each
+component. <br>
+&nbsp;&nbsp;&nbsp;1. Create a directory named <code> <span
+ style="font-style: italic;">MyQuoter</span></code><span
+ style="font-style: italic;">.</span><br>
+&nbsp;&nbsp;&nbsp;2. In <code style="font-style: italic;">MyQuoter</code><span
+ style="font-style: italic;"> </span>directory, create one
+directory <span style="font-style: italic;">Stock_Base</span> <code></code>for
+the base idl <code></code>and two more directories <span
+ style="font-style: italic;">Broker</span>, <span
+ style="font-style: italic;">Distributor </span>for each
+component<code></code>. In <code style="font-style: italic;">MyQuoter/Stock_Base</code>,
+place an idl file <code style="font-style: italic;">Stock_Base.idl</code>
+that
+you could copy from <a
+ href="../Quoter/Simple/Stock_Base/Stock_Base.idl">here</a>.
+This file defines the interfaces and events that will be used by both
+Stock Distributor and Stock Broker. We put together the
+common interface definitions so the base library can be shared by both
+components, reducing the size of "real" components. <br>
+&nbsp;&nbsp;&nbsp;3. In <code style="font-style: italic;">MyQuoter/Distributor</code>,
+place an idl
+file <code style="font-style: italic;">Distributor.idl</code> that
+looks like <a href="../Quoter/Simple/Distributor/Distributor.idl">this</a>.
+This file defines the StockDistributor component interfaces.<br>
+&nbsp;&nbsp;&nbsp;4. In <code style="font-style: italic;">MyQuoter/Broker</code>
+place an idl
+file <code><span style="font-style: italic;">Broker.id</span>l</code>
+that looks like <a href="../Quoter/Simple/Broker/Broker.idl">this</a>.
+This file defines the StockBroker component interface.<br>
+<br>
+<b>Importing IDL to PICML</b><br>
+<br>
+&nbsp;&nbsp; To quick start our Stock Quoter
+modeling process in GME, CoSMIC introduces <i style=""><span
+ style="font-size: 12pt; font-family: &quot;Times New Roman&quot;;" lang="EN-US">idl_to_picml
+</span></i>, which is an executable program that imports the IDL files
+you just created into PICML. <br>
+&nbsp;&nbsp;&nbsp; 1. Make sure <code>%COSMIC_ROOT%\bin</code> is
+included in the
+PATH variable, e.g., c:\Program Files\ISIS\CoSMIC\bin. <br>
+&nbsp;&nbsp;&nbsp; 2. Open a command prompt, run VCVARS32.BAT from the
+MSVC .NET folder if you haven't done so. It will set the environment
+for using Microsoft Visual Studio .NET tools so that <span
+ style="font-style: italic;">idl_to_picml</span> works
+properly.<br>
+in my machine, VCVARS32.bat is in C:\Program Files\Microsoft Visual
+Studio .NET 2003\Vc7\bin<br>
+&nbsp;&nbsp;&nbsp; 3. In the same command prompt, change directory to <code>MyQuoter\</code>,
+and type the following
+command:<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &gt; <span
+ style="font-family: monospace;">idl_to_picml</span><code> -x MyQuoter
+.\Stock_Base\Stock_Base.idl .\Broker\Broker.idl
+.\Distributor\Distributor.idl -I .\Stock_Base<br>
+&nbsp;&nbsp; (if the above command does not work, you may also try this<br>
+&nbsp;&nbsp; &gt;idl_to_picml -x MyQuoter .\Stock_Base\Stock_Base.idl
+.\Broker\Broker.idl
+.\Distributor\Distributor.idl&nbsp; -I .\Stock_Base -I %TAO_ROOT%
+-I %TAO_ROOT%\orbsvcs -I %CIAO_ROOT%\ciao)</code><br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span
+ style="font-style: italic;">idl_to_picml</span>
+will parse
+your IDL files and generated a <code>MyQuoter.xme</code> file in the <code>MyQuoter</code>
+directory. Note that if -x option is not used, the default xme file
+name will be <span
+ style="font-size: 12pt; font-family: &quot;Times New Roman&quot;;" lang="EN-US">PICML_default_xme_file.xme.</span><br>
+&nbsp;&nbsp;&nbsp; 4. Start GME, select <strong>File-&gt;Import xml..</strong>,
+and choose
+the xme file just generated. You should be able to see an imported
+PICML model similar to the one shown in Figure 2.<br>
+<br>
+<div style="text-align: center;"><img alt="" src="Images/fig2.jpg"
+ style="width: 781px; height: 635px;"><br>
+<br>
+Figure 2<br>
+<div style="text-align: left;">&nbsp;&nbsp;&nbsp;&nbsp; In the Browser
+of the generated model, the <em>PredefinedTypes
+</em>folder contains a bunch of atomic datatype elements that will be
+referenced by other modeling parts later. You don't have to worry about
+them for now. The models in <em>InterfaceDefinitions</em> folder
+are the PICML representations ofthe IDL files you just imported.
+Double-click to open <em>Broker</em>, it will show you
+a white, document-like entity which represents a
+&lt;&lt;FileRef&gt;&gt; instance and a yellow box-shaped entity
+representing a &lt;&lt;Package&gt;&gt; instance. Their equivalent
+representations in IDL files are "#include" and "module" respectively.
+Figure 3 gives you a clear view of
+GME representation of all the 3 idl files created. We will cover the
+other folders in the next section. <br>
+<div style="text-align: center;"><img alt="" src="Images/fig3.jpg"
+ style="width: 223px; height: 336px;"><br>
+<br>
+Figure 3<br>
+<br>
+<div style="text-align: left;">Now we are ready to model the rest of
+the Stock Quoter systems. <br>
+<br>
+<br>
+</div>
+</div>
+<span style="font-weight: bold;"><span style="font-weight: bold;"></span></span></div>
+</div>
+<big><big><small><span style="font-weight: bold;"><small><span
+ style="font-weight: bold;"><span style="font-weight: bold;"></span></span></small></span></small></big></big>&nbsp;&nbsp;&nbsp;
+<br style="font-style: italic;">
+<hr style="font-style: italic;">
+<address><a href="mailto:ming.xiong@vanderbilt.edu">Ming Xiong<br>
+</a></address>
+<!-- Created: Sat Nov 27 15:25:06 CST 1999 --><!-- hhmts start -->
+Last modified:<!-- hhmts end -->
+</body>
+</html>
diff --git a/TAO/CIAO/docs/tutorials/CoSMIC/02.html b/TAO/CIAO/docs/tutorials/CoSMIC/02.html
new file mode 100644
index 00000000000..6c8cee01aa2
--- /dev/null
+++ b/TAO/CIAO/docs/tutorials/CoSMIC/02.html
@@ -0,0 +1,422 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+<head>
+ <title>Building a Stock Quoter with TAO - A Tutorial</title>
+<!-- $Id$ -->
+</head>
+<body style="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255);"
+ link="#000fff" vlink="#ff0f0f">
+<h3>Building Stock Quoter system in PICML<br>
+</h3>
+Now we can start modelling the Quoter system using PICML. If there's
+anything that confuses you as we go through each step, <a
+ href="Model/Quoter.xme">here</a> is a pre-built Quoter model for your
+reference.
+It has everything that we will be achieving in this section.
+<blockquote>
+ <hr><strong>Note:</strong>
+In case you don't know, to importa a XML file, just select <span
+ style="font-weight: bold;">File-&gt;Import XML..</span> from
+GME and choose your XML model <br>
+ <hr></blockquote>
+The paradigm of PICML is designed keeping in mind the <a
+ href="http://www.omg.org/cgi-bin/doc?ptc/2003-07-08">OMG Deployment
+&amp; Configuration (D&amp;C) specification (ptc/2003-07-08)</a>, so
+the modeling process is straightforwrd if you are familar
+with the specification. Please go to <a
+ href="http://www.cs.wustl.edu/%7Eschmidt/ACE_wrappers/TAO/CIAO/docs/releasenotes/dance.html">DAnCE
+project</a> for more information. <br>
+<br>
+<hr>
+<h3>Table of Contents</h3>
+<ul>
+ <li><a href="#1">ImplementationArtifacts</a></li>
+ <li><a href="#2">ComponentImplementations</a></li>
+ <li><a href="#3">ComponentPackages</a></li>
+ <li><a href="#4">PackageConfiguration</a></li>
+ <li><a href="#5">TopLevelPackage</a></li>
+ <li><a href="#6">Targets</a></li>
+ <li><a href="#7">DeploymentPlan</a></li>
+</ul>
+<hr>
+The complete PICML Quoter model consists of modeling elements
+distributed in various folders.. <span style="font-style: italic;">idl_to_picml</span>
+has created
+all these folders and some of the modeling entities for us, as you
+might have seen. In
+the rest of the section, we will explain the purpose of each folder as
+well as the modeling entities contained in these folders. We will also
+show how to model some of the folders that have to be done by hand.
+Before we start, it is worth reminding you that, please don't forget to
+check the constraints when you are done with your model. In particular,
+whenever you are about to generate something from your model, check the
+constraint first by choosing <br>
+<span style="font-weight: bold;">File-&gt;Check-&gt;Check All</span> in
+GME. This will help you find a lot of logic error in your model.<br>
+<a name="1">
+<h3>ImplementationArtifacts<br>
+</h3>
+</a>This folder contains implementation artifacts associated with
+components. <span style="font-style: italic;">idl_to_picml</span> has
+created these artifacts for us, with their dependency relationships
+correctly captured. Figure 4 shows the Implementation Artifacts for <span
+ style="font-style: italic;">Broker</span>.
+<div style="text-align: center;"><img alt="" src="Images/fig4.jpg"
+ style="border: 1px solid ; width: 891px; height: 552px;"><a name="1"><br>
+Figure 4.<br>
+</a><br>
+<div style="text-align: left;"><a name="1"></a>
+<hr><a name="2">
+<h3>ComponentImplementation<br>
+</h3>
+</a>This folder contains models that describes the implementations of
+component interfaces. In the Quoter example, we will have two
+monolithic component implementations; respectively <span
+ style="font-style: italic;">StockDistributorImplementation </span><span
+ style="font-style: italic;">StockBroker</span>Implementation, and an
+assembly
+component implementation: <span style="font-style: italic;">StockQuoter</span>,
+which is an assembly of <span style="font-style: italic;">StockDistributorImplementation
+</span>and <span style="font-style: italic;">StockBrokerImplementaion</span>.
+<span style="font-style: italic;">idl_to_picml</span> has created the
+monolithic component implementations for us, as shown in figure 5 for
+example, but we have to put them together by hand in order to construct
+a Quoter system. <br>
+<br>
+<br>
+<div style="text-align: center;"><img alt="" src="Images/fig5.jpg"
+ style="border: 1px solid ; width: 922px; height: 639px;"><br>
+Figure 5<br>
+<div style="text-align: left;"><br>
+Assembly component is a recursive concept. It provides a boundary for
+the composition of monolithic components.Assembly component does not
+provide real implementation for any interface, i.e., it is a virtual
+component. Modeling an assembly component is different from modeling a
+monolithic component: you don't need to worry about the
+artifacts.Instead, you need to create connections between monolithic
+components so that they can talk via ports. Let's try to assemble the <span
+ style="font-style: italic;">StockQuoter</span>.<br>
+<ol>
+ <li>Right click folder <span style="font-style: italic;">ComponentImplementations</span>,
+choose <span style="font-weight: bold;">Insert
+Model-&gt;ComponentImplementationContainer</span>, rename it
+as "StockQuoterImplementation" in the Attribute Panel. Double click to
+open it.<br>
+ </li>
+ <li> From the Part Browser, drag a &lt;&lt;ComponentAssembly&gt;&gt;
+to the modeling window,
+name it "StockQuoter". Double click to open it.<br>
+ </li>
+ <li> Now we will create two instances for interfaces<span
+ style="font-style: italic;"> StockBroker </span>and <span
+ style="font-style: italic;">StockDistributor</span>. To do
+that, expand the folder <code><span style="font-style: italic;">InterfaceDefinitions</span></code>,
+then expand the <code><span style="font-style: italic;">InterfaceDefinitions/</span></code><span
+ style="font-style: italic;">Broker</span>, then <code><span
+ style="font-style: italic;">InterfaceDefinitions/</span></code><span
+ style="font-style: italic;">Broker/</span><span
+ style="font-style: italic;">Stock</span> until the interface
+definition of <span style="font-style: italic;">StockBroker </span>shows.
+While expanding the tree, always keep
+the "StockQuoter" &lt;&lt;ComponentAssembly&gt;&gt; window open.
+Then drag <code style="font-style: italic;">MyQuoter/InterfaceDefinitions/Broker/Stock/StockBroker</code>
+in the
+browser to the "StockQuoter" &lt;&lt;ComponentAssembly&gt;&gt; window
+while pressing ALT key. Repeat the
+same steps for <span style="font-style: italic;">My</span><code
+ style="font-style: italic;">Quoter/InterfaceDefinitions/Distributor/Stock/StockDistributor</code>,
+and you will see two instances of component interfaces have been
+created as shown in Figure 6 (the black line in the figure only
+indicates .mapping)<br>
+ </li>
+</ol>
+<br>
+<div style="text-align: center;"><img alt="" src="Images/fig6.jpg"
+ style="width: 972px; height: 714px;"><br>
+<br>
+Figure 6
+<br>
+<ol style="text-align: left;">
+ <li value="4"> Create an &lt;&lt;PublishConnector&gt;&gt;.<br>
+ </li>
+ <li> Now assemble the components together according to <a
+ href="Images/fig1.jpg">Figure 1</a>(make sure you change to connect
+mode <img alt="" src="Icons/AddConnMode.gif"
+ style="width: 20px; height: 17px;"> ) and
+the resulting assembly model should look like Figure 7. Note that to
+create connections between
+StockDistributor.notify_out and StockBroker.notify_in, you will need
+the intermediate connector &lt;&lt;PublishConnector&gt;&gt;. <br>
+ </li>
+</ol>
+<img alt="" src="Images/fig7.jpg" style="width: 724px; height: 402px;"><br>
+<br>
+Figure 7<br>
+</div>
+<hr>
+<a name="3"></a>
+<h3>ComponentPackage<br>
+</h3>
+This folder contains deployable component packages. Every instance in
+an assembly should have a corresponding monolithic implementation and
+packaged in a ComponentPackagebe To create a package for <em>StockBroker</em>.instance<br>
+<ol>
+ <li> Right click folder <span style="font-style: italic;">ComponentPackage</span>s
+,
+insert a &lt;&lt;PackageContainer&gt;&gt;, name it "Broker"; Double
+click to open it.<br>
+ </li>
+ <li> From the PartBrowser, add the following:<br>
+ <ul>
+ <li>a &lt;&lt;ComponentPackage&gt;&gt; named "Broker";</li>
+ <li>a &lt;&lt;ComponentImplementationReference&gt;&gt; named
+"Broker";</li>
+ <li>a &lt;&lt;ComponentRef&gt;&gt; named "Broker";</li>
+ </ul>
+ </li>
+ <li> Refer the &lt;&lt;ComponentImplementationReference&gt;&gt; <em>Broker</em>
+to <code>MyQuoter/ComponentImplementations/StockBroker</code>Implementation/StockBrokerMonolithicImpl.
+Refer the
+&lt;&lt;ComponentRef&gt;&gt; <em>Broker</em> to <code>MyQuoter/InterfaceDefinitions/Broker/Stock/StockBroker.
+To do a refering in GME, simply drage the tree node in the Browser
+"into" the reference model. For example, you should drage the tree node
+ </code><code>MyQuoter/ComponentImplementations/StockBroker</code>Implementation/StockBrokerMonolithicImpl
+into &lt;&lt;ComponentImplementationReference&gt;&gt; <em>Broker. </em><code>Check
+GME manual(tutorials) for more information.</code> </li>
+ <li> Switch to Connect Mode and create two connections according to
+the following relationship.<br>
+ <ul>
+ <li> &lt;&lt;ComponentImplementationReference&gt;&gt; <em>Broker</em>
+implements &lt;&lt;ComponentPackage&gt;&gt; <em>Broker</em>; </li>
+ <li> &lt;&lt;ComponentPackage&gt;&gt; <em>Broker </em>realizes
+&lt;&lt;ComponentRef&gt;&gt; <em>Broker</em>. </li>
+ </ul>
+ <br>
+ <br>
+&nbsp;&nbsp;&nbsp;&nbsp; The model you built should resemble Figure 8. <br>
+ <br>
+ <div style="text-align: center;"><img alt="" src="Images/fig8.jpg"
+ style="width: 675px; height: 497px;"><br>
+ <br>
+Figure 8<br>
+ <br>
+ <div style="text-align: left;">Now create a
+ComponentPackage/StockDistributor following the same steps.</div>
+ </div>
+ </li>
+ <br>
+ <div style="text-align: center;">
+ <div style="text-align: left;">We will also need to create a package
+for the assembly component
+StockQuoter. Remember assembly component is a virtual component, it
+does not "realize" a certain interface, so different from the Broker
+and Distributor packages, the
+StockQuoter does not need a &lt;&lt;ComponentRef&gt;&gt;. To create
+this model: </div>
+ </div>
+ <div style="text-align: center;">
+ <div style="text-align: left;">
+ <ol>
+ <il>1. Insert a &lt;&lt;ComponentPackage&gt;&gt; named "StockQuoter"<br>
+ </il><il><il>2. Add a
+&lt;&lt;ComponentImplementationReference&gt;&gt; named "StockQuoter",
+refer it to MyQuoter<span style="font-family: monospace;">/ComponentImplementations/StockQuoter/StockQuoter</span></il></il>
+ </ol>
+ <ol>
+ <il><il>3. Switch to connect mode and connect
+&lt;&lt;ComponentImplementationReference&gt;&gt; StockQuoter with
+&lt;&lt;ComponentPackage&gt;&gt; StockQuoter, as in Figure 9.<br>
+ </il></il>
+ </ol>
+ <ol>
+ <ul>
+ </ul>
+ </ol>
+ </div>
+ </div>
+ <div style="text-align: center;">
+ <div style="text-align: left;"> <br>
+ <br>
+ </div>
+ <div style="text-align: center;"><img alt="" src="Images/fig9.jpg"
+ style="width: 549px; height: 354px;"><br>
+ <br>
+Figure 9<br>
+ <br>
+ </div>
+ </div>
+</ol>
+<hr>
+<div style="text-align: left;"> <a name="4"></a>
+<h3>PackageConfiguration<br>
+</h3>
+This folder contains just one model capturing specific configuration of
+Component packages. <br>
+<ol>
+ <li> In the folder <span style="font-style: italic;">PackageConfiguratio</span>n,
+and create a
+&lt;&lt;PackageConfigurationContainer&gt;&gt;, name it "Default", click
+to
+open it.<br>
+ </li>
+ <li> Add a &lt;&lt;PackageConfiguration&gt;&gt; named "default" and a
+&lt;&lt;ComponentPackageReference&gt;&gt;, name it "StockQuoter",
+connect "Default" to "StockQuoter"<br>
+ </li>
+ <li> Refer &lt;&lt;ComponentPackageReference&gt;&gt; StockQuoter to
+&lt;&lt;ComponentPackage&gt;&gt; <code>MyQuoter/ComponentPackage/StockQuoter/StockQuoter
+ <br>
+(Not &lt;&lt;ComponentImplementationReference&gt;&gt; </code><code>MyQuoter/ComponentPackage/StockQuoter/StockQuoter!)&nbsp;</code>
+ </li>
+</ol>
+<br>
+<hr>
+<a name="5"></a>
+<h3>ToplevelPackage<br>
+</h3>
+This folder contains one model capturing information about the
+top-level element that will be fed to
+the application. <br>
+<ol>
+ <li>In the folder <span style="font-style: italic;">ToplevelPackage</span>,
+and create a
+&lt;&lt;ToplevelPackageContainer&gt;&gt;, name it "Default", double
+click to open it.<br>
+ </li>
+ <li> Add a &lt;&lt;ToplevelPackage&gt;&gt; named "ToplevelPackage"
+and a &lt;&lt;PackageConfigurationReference&gt;&gt;, name it "Default",
+connect "ToplevelPackage" to "Default" <br>
+ </li>
+ <li> Refer "Default" to My<code>Quoter/PackageConfiguration/Default/Default</code><br>
+ </li>
+</ol>
+<br>
+<hr>
+<a name="6"></a>
+<h3>Targets<br>
+</h3>
+This folder contains domain-specific models capturing information about
+the target
+environment in which component-based application will be deployed. In
+this Quoter example, we can either deploy the two components into ONE
+host, or into TWO different host. We will deploy the Quoter into two
+different host. <br>
+<ol>
+ <li> In the folder <span style="font-style: italic;">Targets</span>,
+insert a new &lt;&lt;Domain&gt;&gt; named "Domain"; double click to
+open it.<br>
+ </li>
+ <li> From the Part Browser, add two &lt;&lt;Node&gt;&gt; named
+"Broker" and "Distributor" respectively.<br>
+ </li>
+</ol>
+<br>
+Now we are ready to deploy our Components to the actual physical
+environment.<br>
+<hr>
+<a name="7"></a>
+<h3>DeploymentPlan<br>
+</h3>
+This folder contains a plan model that captures information about the
+assignment of component to nodes. <br>
+<ol>
+ <li> In the folder <span style="font-style: italic;">DeploymentPlan</span>,
+insert a model
+&lt;&lt;DeploymentPlan&gt;&gt;; name it "Plan", click to open it<br>
+ </li>
+ <li> From the PartBrowser, add the following:<br>
+ <ul>
+ <li>Two &lt;&lt;CollocationGroup&gt;&gt;</li>
+ <li>Two &lt;&lt;NodeReference&gt;&gt; named "Node_Broker" and
+"Node_Distributor" respectively, refering to <code>MyQuoter/Targets/Domain/Broker</code>
+and <code>MyQuoter/Targets/Domain/Distributor<code> respectively</code></code></li>
+ <li>Two &lt;&lt;ComponentRef&gt;&gt; named "StockBroker" and
+"StockDistributor" respectively, refering to <code>MyQuoter/ComponentImplementations/StockQuoterImplementation/StockQuoter/StockBroker</code>
+and <code>MyQuoter/ComponentImplementations/StockQuoterImplementation/StockQuoter/StockDistributor</code>
+respectively. Note that the &lt;&lt;ComponentRef&gt;&gt; in
+DeploymentPlan is not refering to the interface, but rather, the actual
+instance of the implementation.</li>
+ </ul>
+ </li>
+ <li> Switch to Connect Mode, connect one
+&lt;&lt;CollocationGroup&gt;&gt; to &lt;&lt;NodeReference&gt;&gt; <em>Node_Broker</em>,
+connect another
+&lt;&lt;CollocationGroup&gt;&gt; to &lt;&lt;NodeReference&gt;&gt; <span
+ style="font-style: italic;">Node_</span><em>Distributor</em>.
+Now the model looks like the following.<br>
+ <br>
+ <div style="text-align: center;"><img alt="" src="Images/fig10.jpg"
+ style="width: 752px; height: 530px;"><br>
+ <br>
+Figure 10.<br>
+ <br>
+ </div>
+ </li>
+ <li> Now we need to associate &lt;&lt;ComponentRef&gt;&gt;
+StockBroker to the
+&lt;&lt;CollocationGroup&gt;&gt; running on the
+&lt;&lt;NodeReference&gt;&gt; Broker, and &lt;&lt;ComponentRef&gt;&gt;
+StockDistributor to the &lt;&lt;CollocationGroup&gt;&gt; running on the
+&lt;&lt;NodeReference&gt;&gt; Distributor. To do that, switch the Edit
+Mode Bar to Set Mode (<img alt="" src="Icons/SetMode.gif"
+ style="width: 20px; height: 17px;">), and move
+the cursor to the &lt;&lt;CollocationGroup&gt;&gt; running on
+&lt;&lt;NodeReference&gt;&gt; Distributor, right-click on it. You will
+find the cursor is changed to set mode cursor, and only the
+&lt;&lt;CollocationGroup&gt;&gt; you clicked in is highlighted, as
+shown
+in Figure 11.<br>
+ <br>
+ </li>
+</ol>
+</div>
+<div style="text-align: center;"><img alt="" src="Images/fig11.jpg"
+ style="width: 672px; height: 505px;"><br>
+<br>
+Figure 11<br>
+<br>
+</div>
+<div style="text-align: left;">&nbsp;Now move your cursor to
+&lt;&lt;ComponentRef&gt;&gt;&nbsp; StockDistributor, and left-click it,
+so that it looks like Figure 12.<br>
+</div>
+<br>
+<div style="text-align: center;"><img alt="" src="Images/fig12.jpg"
+ style="width: 672px; height: 505px;"><br>
+<br>
+Figure 12<br>
+<br>
+</div>
+<div style="text-align: left;">&nbsp;&nbsp; This operation
+associates <em>StockDistributor</em> component to the
+&lt;&lt;CollocationGroup&gt;&gt; running on <em>Distributor</em> node.
+To do the same with
+Broker, just right-click on another &lt;&lt;CollocationGroup&gt;&gt;,
+and left-click on StockBroker &lt;&lt;CollocationGroup&gt;&gt; which is
+highlighted. <br>
+<br>
+<hr>
+<a name="8"></a></div>
+<br>
+Up to this point, we are basiclly done with the modeling part. Before
+we generate anything from this model though, please <span
+ style="font-weight: bold;">DO </span>remember to check the
+constraints of the model as we mentioned earlier.<br>
+<br>
+After we are done with the modeling, the flattened_deploymentplan
+interpreter that comes along with PICML will help us to generate a
+flattened_deploymentplan.cdp file. Please make sure you generate this
+file to MyQuoter/descriptors.
+<address><span style="font-style: italic;"></span><br>
+<span style="font-style: italic;"></span><br>
+<br>
+<a href="mailto:ming.xiong@vanderbilt.edu">Ming Xiong<br>
+</a></address>
+<!-- Created: Sat Nov 27 15:25:06 CST 1999 --><!-- hhmts start -->
+Last modified:<!-- hhmts end -->
+</div>
+</div>
+</div>
+</div>
+</body>
+</html>
diff --git a/TAO/CIAO/docs/tutorials/CoSMIC/03.html b/TAO/CIAO/docs/tutorials/CoSMIC/03.html
new file mode 100644
index 00000000000..df614e1b2bc
--- /dev/null
+++ b/TAO/CIAO/docs/tutorials/CoSMIC/03.html
@@ -0,0 +1,68 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+<head>
+ <title>Building a Stock Quoter with TAO - A Tutorial</title>
+<!-- $Id$ -->
+</head>
+<body style="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255);"
+ link="#000fff" vlink="#ff0f0f">
+<h3>Implementing Quoter Components with DAnCE<br>
+</h3>
+We discuss this section after the PICML modeling only because we would
+like to focus our attention more on the modeling stage. It does not
+indicate that the implementation of components has to be
+subsequent to the work we've done under GME. They are totally
+orthogonal to each other. In fact, they are so orthogonal&nbsp; that we
+won't go into details as to how DAnCE programming should be done. We'll
+briefly go through the functionality of each component and provides the
+links to their implementations respectively. For a hands on experience
+on DAnCE programming, please refer to $CIAO_ROOT/DAnCE/examples/Hello. <br>
+<br>
+<big><big><small>Broker Component<br>
+&nbsp;&nbsp;&nbsp; </small></big></big>The Broker componennt waits to
+be notified by the Distributor component about stock changes. When a
+stock change event arrives,&nbsp; it will go back to Distributor
+component and retrieve the information it interest in and output them
+to the console. The users are allowed to subscribe to the interested
+stock value through the interface supported by Broker component. Here's
+the complete version of <a href="../Quoter/Simple/Broker/Broker_exec.h">Broker_exec.h</a>
+and <a href="../Quoter/Simple/Broker/Broker_exec.cpp">Broker_exec.cpp</a>.
+<br>
+<br>
+<big><big><small>Distributor Component<br>
+&nbsp;&nbsp; </small></big></big>The Distributor componennt monitors
+the real time stock database and publishes events whenever it detects
+stock change. In our program, we use a ACE_Task&nbsp; to simmulate this
+real-life activity. The task will run in a seperate thread and
+periodically increment the stock value by 1. In the same time the stock
+value is incremented, an <span style="font-style: italic;">StockName</span>
+event along with the name of the changed stock will be sent. Here's the
+complete version of <a
+ href="../Quoter/Simple/Distributor/Distributor_exec.h">Distributor_exec.h</a>
+and <a href="../Quoter/Simple/Distributor/Distributor_exec.cpp">Distributor_exec.cpp</a><br>
+<big><big><small><span style="font-style: italic;"><span
+ style="font-style: italic;"></span></span><br>
+Broker client<br>
+&nbsp;&nbsp;&nbsp; </small></big></big>The Broker client program is
+the driver program for client to control Broker component, subscribe
+and unsubscribe to a specific stock. Here's the complete version of
+<a href="../Quoter/Simple/Broker/Broker.cpp">Broker.cpp</a><br>
+<big><big><small><br>
+Distributor client<br>
+&nbsp;&nbsp;&nbsp;&nbsp; </small></big></big>The Distributor client
+program is the driver program for client
+to control Distributor component, turn on and off the distribution
+service, set up the frequency, etc. Here's the complete version of
+<a href="../Quoter/Simple/Distributor/Distributor.cpp">Distributor.cpp</a><a
+ name="2"><br>
+<big><big><small><br>
+</small></big></big></a><br>
+<div style="text-align: center;"><br>
+</div>
+<address><a href="mailto:ming.xiong@vanderbilt.edu">Ming Xiong<br>
+</a></address>
+<!-- Created: Sat Nov 27 15:25:06 CST 1999 --><!-- hhmts start -->
+<a href="mailto:ming.xiong@vanderbilt.edu">Last modified:<!-- hhmts end -->
+</a>
+</body>
+</html>
diff --git a/TAO/CIAO/docs/tutorials/CoSMIC/04.html b/TAO/CIAO/docs/tutorials/CoSMIC/04.html
new file mode 100644
index 00000000000..27a5344af23
--- /dev/null
+++ b/TAO/CIAO/docs/tutorials/CoSMIC/04.html
@@ -0,0 +1,57 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+<head>
+ <title>Building a Stock Quoter with TAO - A Tutorial</title>
+<!-- $Id$ -->
+</head>
+<body style="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255);"
+ link="#000fff" vlink="#ff0f0f">
+<h3>Running the application<br></h3>
+
+Now that we have all the components and driver programs successfully built, along with the flattened_deploymentplan generated by PICML, we will be able to run our application<BR><BR>
+
+From different command prompts in <code>%CIAO_ROOT%/docs/tutorials/Quoter/Simple/descriptors/</code>
+directory:<ul>
+ <li>Start NodeManagers (NodeDameon) by running <CODE>runNodeDaemon.pl</CODE> </li>
+ <li>Start the execution manager
+<CODE>%CIAO_ROOT%/DAnCE/ExecutionManager/Execution_Manager -o ior -i Stock.dat</CODE>&nbsp;
+</ul>
+<p>The <CODE>Stock.dat</CODE> file describes the deployment daemons CIAO's Execution_Manager
+will contact to instantiate ComponentServer's, home's, and component instances.
+Each line specify the name of a installation &quot;destination&quot; and the corresponding
+IOR for the CIAO_Daemon.</p>
+<ul type="square">
+ <li><em>NOTE</em>: As one can see, we use the &quot;Stock.dat&quot; file to instruct the
+ Execution_Manager how to find the endpoint of each individual NodeManager
+ (i.e., Node Daemon) where component(s) will be deployed, so this is
+ non-standard. We plan to use Naming Service to do this in the future. </li>
+</ul>
+<ul>
+ <li> Start the plan_launcher by running
+<CODE>%CIAO_ROOT%/DAnCE/Plan_Launcher/Plan_Launcher -p
+flattened_deploymentplan.cdp -k file://ior</CODE></li>
+ <li>By now the components should be successfully deployed. You may
+run the driver program to start the application. e.g. you can try the
+following<br>
+ </li>
+</ul>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+<CODE>%CIAO_ROOT%/docs/tutorials/Quoter/Simple/Distributor/Distributor.exe -o </CODE><br>
+<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+<CODE>%CIAO_ROOT%/docs/tutorials/Quoter/Simple/Broker/Broker.exe -s MSFT</CODE><br>
+<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+<CODE>%CIAO_ROOT%/docs/tutorials/Quoter/Simple/Broker/Broker.exe -s IBM</CODE><br>
+<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+<CODE>%CIAO_ROOT%/docs/tutorials/Quoter/Simple/Broker/Broker.exe -u MSFT</CODE><br>
+<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+<CODE>%CIAO_ROOT%/docs/tutorials/Quoter/Simple/Distributor/Distributor.exe -f </CODE><br>
+<br>
+
+
+
+</body>
+</html>
diff --git a/TAO/CIAO/docs/tutorials/CoSMIC/Icons/AddConnMode.gif b/TAO/CIAO/docs/tutorials/CoSMIC/Icons/AddConnMode.gif
new file mode 100644
index 00000000000..3604d32946d
--- /dev/null
+++ b/TAO/CIAO/docs/tutorials/CoSMIC/Icons/AddConnMode.gif
Binary files differ
diff --git a/TAO/CIAO/docs/tutorials/CoSMIC/Icons/SetMode.gif b/TAO/CIAO/docs/tutorials/CoSMIC/Icons/SetMode.gif
new file mode 100644
index 00000000000..6dcad861f07
--- /dev/null
+++ b/TAO/CIAO/docs/tutorials/CoSMIC/Icons/SetMode.gif
Binary files differ
diff --git a/TAO/CIAO/docs/tutorials/CoSMIC/Images/fig1.jpg b/TAO/CIAO/docs/tutorials/CoSMIC/Images/fig1.jpg
new file mode 100644
index 00000000000..a8550fe1176
--- /dev/null
+++ b/TAO/CIAO/docs/tutorials/CoSMIC/Images/fig1.jpg
Binary files differ
diff --git a/TAO/CIAO/docs/tutorials/CoSMIC/Images/fig10.jpg b/TAO/CIAO/docs/tutorials/CoSMIC/Images/fig10.jpg
new file mode 100644
index 00000000000..3db5ac174e0
--- /dev/null
+++ b/TAO/CIAO/docs/tutorials/CoSMIC/Images/fig10.jpg
Binary files differ
diff --git a/TAO/CIAO/docs/tutorials/CoSMIC/Images/fig11.jpg b/TAO/CIAO/docs/tutorials/CoSMIC/Images/fig11.jpg
new file mode 100644
index 00000000000..c5eaf705384
--- /dev/null
+++ b/TAO/CIAO/docs/tutorials/CoSMIC/Images/fig11.jpg
Binary files differ
diff --git a/TAO/CIAO/docs/tutorials/CoSMIC/Images/fig12.jpg b/TAO/CIAO/docs/tutorials/CoSMIC/Images/fig12.jpg
new file mode 100644
index 00000000000..ea2a885af6b
--- /dev/null
+++ b/TAO/CIAO/docs/tutorials/CoSMIC/Images/fig12.jpg
Binary files differ
diff --git a/TAO/CIAO/docs/tutorials/CoSMIC/Images/fig2.jpg b/TAO/CIAO/docs/tutorials/CoSMIC/Images/fig2.jpg
new file mode 100644
index 00000000000..49d6f90c3b0
--- /dev/null
+++ b/TAO/CIAO/docs/tutorials/CoSMIC/Images/fig2.jpg
Binary files differ
diff --git a/TAO/CIAO/docs/tutorials/CoSMIC/Images/fig3.jpg b/TAO/CIAO/docs/tutorials/CoSMIC/Images/fig3.jpg
new file mode 100644
index 00000000000..0559dc7382b
--- /dev/null
+++ b/TAO/CIAO/docs/tutorials/CoSMIC/Images/fig3.jpg
Binary files differ
diff --git a/TAO/CIAO/docs/tutorials/CoSMIC/Images/fig4.jpg b/TAO/CIAO/docs/tutorials/CoSMIC/Images/fig4.jpg
new file mode 100644
index 00000000000..8fb89eccb57
--- /dev/null
+++ b/TAO/CIAO/docs/tutorials/CoSMIC/Images/fig4.jpg
Binary files differ
diff --git a/TAO/CIAO/docs/tutorials/CoSMIC/Images/fig5.jpg b/TAO/CIAO/docs/tutorials/CoSMIC/Images/fig5.jpg
new file mode 100644
index 00000000000..e847b9290d6
--- /dev/null
+++ b/TAO/CIAO/docs/tutorials/CoSMIC/Images/fig5.jpg
Binary files differ
diff --git a/TAO/CIAO/docs/tutorials/CoSMIC/Images/fig6.jpg b/TAO/CIAO/docs/tutorials/CoSMIC/Images/fig6.jpg
new file mode 100644
index 00000000000..0a214c84ea8
--- /dev/null
+++ b/TAO/CIAO/docs/tutorials/CoSMIC/Images/fig6.jpg
Binary files differ
diff --git a/TAO/CIAO/docs/tutorials/CoSMIC/Images/fig7.jpg b/TAO/CIAO/docs/tutorials/CoSMIC/Images/fig7.jpg
new file mode 100644
index 00000000000..67d90b775b0
--- /dev/null
+++ b/TAO/CIAO/docs/tutorials/CoSMIC/Images/fig7.jpg
Binary files differ
diff --git a/TAO/CIAO/docs/tutorials/CoSMIC/Images/fig8.jpg b/TAO/CIAO/docs/tutorials/CoSMIC/Images/fig8.jpg
new file mode 100644
index 00000000000..a565c2ab989
--- /dev/null
+++ b/TAO/CIAO/docs/tutorials/CoSMIC/Images/fig8.jpg
Binary files differ
diff --git a/TAO/CIAO/docs/tutorials/CoSMIC/Images/fig9.jpg b/TAO/CIAO/docs/tutorials/CoSMIC/Images/fig9.jpg
new file mode 100644
index 00000000000..996d90d800b
--- /dev/null
+++ b/TAO/CIAO/docs/tutorials/CoSMIC/Images/fig9.jpg
Binary files differ
diff --git a/TAO/CIAO/docs/tutorials/CoSMIC/Model/Quoter.xme b/TAO/CIAO/docs/tutorials/CoSMIC/Model/Quoter.xme
new file mode 100644
index 00000000000..10f968f69ca
--- /dev/null
+++ b/TAO/CIAO/docs/tutorials/CoSMIC/Model/Quoter.xme
@@ -0,0 +1,2003 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE project SYSTEM "mga.dtd">
+
+<project guid="{693BB5A4-CC13-45F0-8470-8F189DE22CF8}" cdate="Thu Feb 02 21:46:10 2006" mdate="Thu Feb 02 21:46:10 2006" version="" metaguid="{3F14D74F-DE80-4071-8F14-550B6023233F}" metaversion="" metaname="PICML">
+ <name>MyQuoter</name>
+ <comment></comment>
+ <author></author>
+ <folder id="id-006a-00000001" relid="0x1" childrelidcntr="0x2" kind="RootFolder">
+ <name>MyQuoter</name>
+ <folder id="id-006a-00000002" relid="0x2" childrelidcntr="0x3" kind="InterfaceDefinitions">
+ <name>InterfaceDefinitions</name>
+ <model id="id-0065-00000001" kind="File" relid="0x1" childrelidcntr="0x1">
+ <name>Stock_Base</name>
+ <attribute kind="PrefixTag" status="meta">
+ <value></value>
+ </attribute>
+ <model id="id-0065-00000002" kind="Package" role="Package" relid="0x1" childrelidcntr="0x5">
+ <name>Stock</name>
+ <regnode name="PartRegs" isopaque="yes">
+ <value></value>
+ <regnode name="InterfaceDefinition" isopaque="yes">
+ <value></value>
+ <regnode name="Position" isopaque="yes">
+ <value>293,153</value>
+ </regnode>
+ </regnode>
+ </regnode>
+ <attribute kind="PrefixTag" status="meta">
+ <value></value>
+ </attribute>
+ <attribute kind="SpecifyIdTag" status="meta">
+ <value></value>
+ </attribute>
+ <attribute kind="VersionTag" status="meta">
+ <value></value>
+ </attribute>
+ <model id="id-0065-00000003" kind="Exception" role="Exception" relid="0x1" childrelidcntr="0x0">
+ <name>Invalid_Stock</name>
+ <regnode name="PartRegs" isopaque="yes">
+ <value></value>
+ <regnode name="InterfaceDefinition" isopaque="yes">
+ <value></value>
+ <regnode name="Position" isopaque="yes">
+ <value>151,84</value>
+ </regnode>
+ </regnode>
+ </regnode>
+ <attribute kind="SpecifyIdTag" status="meta">
+ <value></value>
+ </attribute>
+ <attribute kind="VersionTag" status="meta">
+ <value></value>
+ </attribute>
+ </model>
+ <model id="id-0065-00000004" kind="Aggregate" role="Aggregate" relid="0x3" childrelidcntr="0x4">
+ <name>StockInfo</name>
+ <regnode name="PartRegs" isopaque="yes">
+ <value></value>
+ <regnode name="InterfaceDefinition" isopaque="yes">
+ <value></value>
+ <regnode name="Position" isopaque="yes">
+ <value>517,316</value>
+ </regnode>
+ </regnode>
+ </regnode>
+ <attribute kind="SpecifyIdTag" status="meta">
+ <value></value>
+ </attribute>
+ <attribute kind="VersionTag" status="meta">
+ <value></value>
+ </attribute>
+ <reference id="id-0067-00000018" kind="Member" role="Member" relid="0x1" referred="id-0066-00000003">
+ <name>name</name>
+ <regnode name="PartRegs" isopaque="yes">
+ <value></value>
+ <regnode name="InterfaceDefinition" isopaque="yes">
+ <value></value>
+ <regnode name="Position" isopaque="yes">
+ <value>188,108</value>
+ </regnode>
+ </regnode>
+ </regnode>
+ </reference>
+ <reference id="id-0067-00000019" kind="Member" role="Member" relid="0x2" referred="id-0066-00000007">
+ <name>high</name>
+ <regnode name="PartRegs" isopaque="yes">
+ <value></value>
+ <regnode name="InterfaceDefinition" isopaque="yes">
+ <value></value>
+ <regnode name="Position" isopaque="yes">
+ <value>408,248</value>
+ </regnode>
+ </regnode>
+ </regnode>
+ </reference>
+ <reference id="id-0067-0000001a" kind="Member" role="Member" relid="0x3" referred="id-0066-00000007">
+ <name>low</name>
+ <regnode name="PartRegs" isopaque="yes">
+ <value></value>
+ <regnode name="InterfaceDefinition" isopaque="yes">
+ <value></value>
+ <regnode name="Position" isopaque="yes">
+ <value>628,388</value>
+ </regnode>
+ </regnode>
+ </regnode>
+ </reference>
+ <reference id="id-0067-0000001b" kind="Member" role="Member" relid="0x4" referred="id-0066-00000007">
+ <name>last</name>
+ <regnode name="PartRegs" isopaque="yes">
+ <value></value>
+ <regnode name="InterfaceDefinition" isopaque="yes">
+ <value></value>
+ <regnode name="Position" isopaque="yes">
+ <value>848,528</value>
+ </regnode>
+ </regnode>
+ </regnode>
+ </reference>
+ </model>
+ <model id="id-0065-00000005" kind="Object" role="Object" relid="0x4" childrelidcntr="0x1">
+ <name>StockQuoter</name>
+ <regnode name="PartRegs" isopaque="yes">
+ <value></value>
+ <regnode name="InterfaceDefinition" isopaque="yes">
+ <value></value>
+ <regnode name="Position" isopaque="yes">
+ <value>700,432</value>
+ </regnode>
+ </regnode>
+ </regnode>
+ <attribute kind="PrefixTag" status="meta">
+ <value></value>
+ </attribute>
+ <attribute kind="SpecifyIdTag" status="meta">
+ <value></value>
+ </attribute>
+ <attribute kind="VersionTag" status="meta">
+ <value></value>
+ </attribute>
+ <attribute kind="abstract" status="meta">
+ <value>false</value>
+ </attribute>
+ <attribute kind="local" status="meta">
+ <value>false</value>
+ </attribute>
+ <model id="id-0065-00000006" kind="TwowayOperation" role="TwowayOperation" relid="0x1" childrelidcntr="0x3">
+ <name>get_stock_info</name>
+ <regnode name="PartRegs" isopaque="yes">
+ <value></value>
+ <regnode name="InterfaceDefinition" isopaque="yes">
+ <value></value>
+ <regnode name="Position" isopaque="yes">
+ <value>518,318</value>
+ </regnode>
+ </regnode>
+ </regnode>
+ <attribute kind="SpecifyIdTag" status="meta">
+ <value></value>
+ </attribute>
+ <attribute kind="VersionTag" status="meta">
+ <value></value>
+ </attribute>
+ <reference id="id-0067-00000001" kind="ReturnType" role="ReturnType" relid="0x1" referred="id-0065-00000004">
+ <name>ReturnType</name>
+ <regnode name="PartRegs" isopaque="yes">
+ <value></value>
+ <regnode name="InterfaceDefinition" isopaque="yes">
+ <value></value>
+ <regnode name="Position" isopaque="yes">
+ <value>243,143</value>
+ </regnode>
+ </regnode>
+ </regnode>
+ </reference>
+ <reference id="id-0067-00000002" kind="ExceptionRef" role="ExceptionRef" relid="0x4" referred="id-0065-00000003">
+ <name>ExceptionRef</name>
+ <regnode name="PartRegs" isopaque="yes">
+ <value></value>
+ <regnode name="InterfaceDefinition" isopaque="yes">
+ <value></value>
+ <regnode name="Position" isopaque="yes">
+ <value>1068,668</value>
+ </regnode>
+ </regnode>
+ </regnode>
+ </reference>
+ <reference id="id-0067-0000001c" kind="InParameter" role="InParameter" relid="0x3" referred="id-0066-00000003">
+ <name>stock_name</name>
+ <regnode name="PartRegs" isopaque="yes">
+ <value></value>
+ <regnode name="InterfaceDefinition" isopaque="yes">
+ <value></value>
+ <regnode name="Position" isopaque="yes">
+ <value>793,493</value>
+ </regnode>
+ </regnode>
+ </regnode>
+ </reference>
+ </model>
+ </model>
+ <model id="id-0065-00000007" kind="Event" role="Event" relid="0x5" childrelidcntr="0x1">
+ <name>StockName</name>
+ <regnode name="PartRegs" isopaque="yes">
+ <value></value>
+ <regnode name="InterfaceDefinition" isopaque="yes">
+ <value></value>
+ <regnode name="Position" isopaque="yes">
+ <value>883,548</value>
+ </regnode>
+ </regnode>
+ </regnode>
+ <attribute kind="PrefixTag" status="meta">
+ <value></value>
+ </attribute>
+ <attribute kind="SpecifyIdTag" status="meta">
+ <value></value>
+ </attribute>
+ <attribute kind="VersionTag" status="meta">
+ <value></value>
+ </attribute>
+ <attribute kind="abstract" status="meta">
+ <value>false</value>
+ </attribute>
+ <reference id="id-0067-0000001d" kind="Member" role="Member" relid="0x1" referred="id-0066-00000003">
+ <name>name</name>
+ <regnode name="PartRegs" isopaque="yes">
+ <value></value>
+ <regnode name="InterfaceDefinition" isopaque="yes">
+ <value></value>
+ <regnode name="Position" isopaque="yes">
+ <value>518,318</value>
+ </regnode>
+ </regnode>
+ </regnode>
+ </reference>
+ </model>
+ <reference id="id-0067-00000017" kind="Collection" role="Collection" relid="0x2" referred="id-0066-0000000b">
+ <name>ImageBlob</name>
+ <regnode name="PartRegs" isopaque="yes">
+ <value></value>
+ <regnode name="InterfaceDefinition" isopaque="yes">
+ <value></value>
+ <regnode name="Position" isopaque="yes">
+ <value>334,200</value>
+ </regnode>
+ </regnode>
+ </regnode>
+ <attribute kind="SpecifyIdTag" status="meta">
+ <value></value>
+ </attribute>
+ <attribute kind="VersionTag" status="meta">
+ <value></value>
+ </attribute>
+ </reference>
+ </model>
+ </model>
+ <model id="id-0065-00000008" kind="File" relid="0x2" childrelidcntr="0x2">
+ <name>Broker</name>
+ <attribute kind="PrefixTag" status="meta">
+ <value></value>
+ </attribute>
+ <model id="id-0065-00000009" kind="Package" role="Package" relid="0x2" childrelidcntr="0x4">
+ <name>Stock</name>
+ <regnode name="PartRegs" isopaque="yes">
+ <value></value>
+ <regnode name="InterfaceDefinition" isopaque="yes">
+ <value></value>
+ <regnode name="Position" isopaque="yes">
+ <value>314,216</value>
+ </regnode>
+ </regnode>
+ </regnode>
+ <attribute kind="PrefixTag" status="meta">
+ <value></value>
+ </attribute>
+ <attribute kind="SpecifyIdTag" status="meta">
+ <value></value>
+ </attribute>
+ <attribute kind="VersionTag" status="meta">
+ <value></value>
+ </attribute>
+ <model id="id-0065-0000000a" kind="Object" role="Object" relid="0x1" childrelidcntr="0x2">
+ <name>StockSubscriber</name>
+ <regnode name="PartRegs" isopaque="yes">
+ <value></value>
+ <regnode name="InterfaceDefinition" isopaque="yes">
+ <value></value>
+ <regnode name="Position" isopaque="yes">
+ <value>243,143</value>
+ </regnode>
+ </regnode>
+ </regnode>
+ <attribute kind="PrefixTag" status="meta">
+ <value></value>
+ </attribute>
+ <attribute kind="SpecifyIdTag" status="meta">
+ <value></value>
+ </attribute>
+ <attribute kind="VersionTag" status="meta">
+ <value></value>
+ </attribute>
+ <attribute kind="abstract" status="meta">
+ <value>false</value>
+ </attribute>
+ <attribute kind="local" status="meta">
+ <value>false</value>
+ </attribute>
+ <model id="id-0065-0000000b" kind="TwowayOperation" role="TwowayOperation" relid="0x1" childrelidcntr="0x2">
+ <name>stock_subscribe</name>
+ <regnode name="PartRegs" isopaque="yes">
+ <value></value>
+ <regnode name="InterfaceDefinition" isopaque="yes">
+ <value></value>
+ <regnode name="Position" isopaque="yes">
+ <value>334,201</value>
+ </regnode>
+ </regnode>
+ </regnode>
+ <attribute kind="SpecifyIdTag" status="meta">
+ <value></value>
+ </attribute>
+ <attribute kind="VersionTag" status="meta">
+ <value></value>
+ </attribute>
+ <reference id="id-0067-00000004" kind="ExceptionRef" role="ExceptionRef" relid="0x2" referred="id-0065-00000003">
+ <name>ExceptionRef</name>
+ <regnode name="PartRegs" isopaque="yes">
+ <value></value>
+ <regnode name="InterfaceDefinition" isopaque="yes">
+ <value></value>
+ <regnode name="Position" isopaque="yes">
+ <value>700,434</value>
+ </regnode>
+ </regnode>
+ </regnode>
+ </reference>
+ <reference id="id-0067-0000001e" kind="InParameter" role="InParameter" relid="0x1" referred="id-0066-00000003">
+ <name>stock_name</name>
+ <regnode name="PartRegs" isopaque="yes">
+ <value></value>
+ <regnode name="InterfaceDefinition" isopaque="yes">
+ <value></value>
+ <regnode name="Position" isopaque="yes">
+ <value>334,201</value>
+ </regnode>
+ </regnode>
+ </regnode>
+ </reference>
+ </model>
+ <model id="id-0065-0000000c" kind="TwowayOperation" role="TwowayOperation" relid="0x2" childrelidcntr="0x2">
+ <name>stock_unsubscribe</name>
+ <regnode name="PartRegs" isopaque="yes">
+ <value></value>
+ <regnode name="InterfaceDefinition" isopaque="yes">
+ <value></value>
+ <regnode name="Position" isopaque="yes">
+ <value>700,434</value>
+ </regnode>
+ </regnode>
+ </regnode>
+ <attribute kind="SpecifyIdTag" status="meta">
+ <value></value>
+ </attribute>
+ <attribute kind="VersionTag" status="meta">
+ <value></value>
+ </attribute>
+ <reference id="id-0067-00000005" kind="ExceptionRef" role="ExceptionRef" relid="0x2" referred="id-0065-00000003">
+ <name>ExceptionRef</name>
+ <regnode name="PartRegs" isopaque="yes">
+ <value></value>
+ <regnode name="InterfaceDefinition" isopaque="yes">
+ <value></value>
+ <regnode name="Position" isopaque="yes">
+ <value>700,434</value>
+ </regnode>
+ </regnode>
+ </regnode>
+ </reference>
+ <reference id="id-0067-0000001f" kind="InParameter" role="InParameter" relid="0x1" referred="id-0066-00000003">
+ <name>stock_name</name>
+ <regnode name="PartRegs" isopaque="yes">
+ <value></value>
+ <regnode name="InterfaceDefinition" isopaque="yes">
+ <value></value>
+ <regnode name="Position" isopaque="yes">
+ <value>334,201</value>
+ </regnode>
+ </regnode>
+ </regnode>
+ </reference>
+ </model>
+ </model>
+ <model id="id-0065-0000000d" kind="Component" role="Component" relid="0x2" childrelidcntr="0x3">
+ <name>StockBroker</name>
+ <regnode name="PartRegs" isopaque="yes">
+ <value></value>
+ <regnode name="InterfaceDefinition" isopaque="yes">
+ <value></value>
+ <regnode name="Position" isopaque="yes">
+ <value>426,242</value>
+ </regnode>
+ </regnode>
+ </regnode>
+ <attribute kind="SpecifyIdTag" status="meta">
+ <value></value>
+ </attribute>
+ <attribute kind="UUID">
+ <value>58E736A4-F9F5-44CF-AA0F-83A280F907A6</value>
+ </attribute>
+ <attribute kind="VersionTag" status="meta">
+ <value></value>
+ </attribute>
+ <attribute kind="label" status="meta">
+ <value></value>
+ </attribute>
+ <reference id="id-0067-00000006" kind="Supports" role="Supports" relid="0x1" referred="id-0065-0000000a">
+ <name>Supports</name>
+ <regnode name="PartRegs" isopaque="yes">
+ <value></value>
+ <regnode name="InterfaceDefinition" isopaque="yes">
+ <value></value>
+ <regnode name="Position" isopaque="yes">
+ <value>55,160</value>
+ </regnode>
+ </regnode>
+ </regnode>
+ </reference>
+ <reference id="id-0067-00000007" kind="RequiredRequestPort" role="RequiredRequestPort" relid="0x2" referred="id-0065-00000005">
+ <name>read_quoter</name>
+ <regnode name="PartRegs" isopaque="yes">
+ <value></value>
+ <regnode name="InterfaceDefinition" isopaque="yes">
+ <value></value>
+ <regnode name="Position" isopaque="yes">
+ <value>69,307</value>
+ </regnode>
+ </regnode>
+ </regnode>
+ <attribute kind="SpecifyIdTag" status="meta">
+ <value></value>
+ </attribute>
+ <attribute kind="VersionTag" status="meta">
+ <value></value>
+ </attribute>
+ <attribute kind="exclusiveProvider" status="meta">
+ <value>false</value>
+ </attribute>
+ <attribute kind="exclusiveUser" status="meta">
+ <value>false</value>
+ </attribute>
+ <attribute kind="multiple_connections">
+ <value>false</value>
+ </attribute>
+ <attribute kind="optional" status="meta">
+ <value>false</value>
+ </attribute>
+ </reference>
+ <reference id="id-0067-00000008" kind="InEventPort" role="InEventPort" relid="0x3" referred="id-0065-00000007">
+ <name>notify_in</name>
+ <regnode name="PartRegs" isopaque="yes">
+ <value></value>
+ <regnode name="InterfaceDefinition" isopaque="yes">
+ <value></value>
+ <regnode name="Position" isopaque="yes">
+ <value>83,433</value>
+ </regnode>
+ </regnode>
+ </regnode>
+ <attribute kind="SpecifyIdTag" status="meta">
+ <value></value>
+ </attribute>
+ <attribute kind="VersionTag" status="meta">
+ <value></value>
+ </attribute>
+ <attribute kind="exclusiveProvider" status="meta">
+ <value>false</value>
+ </attribute>
+ <attribute kind="exclusiveUser" status="meta">
+ <value>false</value>
+ </attribute>
+ <attribute kind="optional" status="meta">
+ <value>false</value>
+ </attribute>
+ </reference>
+ </model>
+ <model id="id-0065-0000000e" kind="ComponentFactory" role="ComponentFactory" relid="0x3" childrelidcntr="0x0">
+ <name>StockBrokerHome</name>
+ <regnode name="PartRegs" isopaque="yes">
+ <value></value>
+ <regnode name="InterfaceDefinition" isopaque="yes">
+ <value></value>
+ <regnode name="Position" isopaque="yes">
+ <value>793,493</value>
+ </regnode>
+ </regnode>
+ </regnode>
+ <attribute kind="SpecifyIdTag" status="meta">
+ <value></value>
+ </attribute>
+ <attribute kind="VersionTag" status="meta">
+ <value></value>
+ </attribute>
+ </model>
+ <connection id="id-0068-00000001" kind="ManagesComponent" role="ManagesComponent" relid="0x4">
+ <name>ManagesComponent</name>
+ <regnode name="autorouterPref" isopaque="yes">
+ <value>Ws</value>
+ </regnode>
+ <connpoint role="dst" target="id-0065-0000000d"/>
+ <connpoint role="src" target="id-0065-0000000e"/>
+ </connection>
+ </model>
+ <reference id="id-0067-00000003" kind="FileRef" role="FileRef" relid="0x1" referred="id-0065-00000001">
+ <name>FileRef</name>
+ <regnode name="PartRegs" isopaque="yes">
+ <value></value>
+ <regnode name="InterfaceDefinition" isopaque="yes">
+ <value></value>
+ <regnode name="Position" isopaque="yes">
+ <value>174,181</value>
+ </regnode>
+ </regnode>
+ </regnode>
+ </reference>
+ </model>
+ <model id="id-0065-0000000f" kind="File" relid="0x3" childrelidcntr="0x2">
+ <name>Distributor</name>
+ <attribute kind="PrefixTag" status="meta">
+ <value></value>
+ </attribute>
+ <model id="id-0065-00000010" kind="Package" role="Package" relid="0x2" childrelidcntr="0x4">
+ <name>Stock</name>
+ <regnode name="PartRegs" isopaque="yes">
+ <value></value>
+ <regnode name="InterfaceDefinition" isopaque="yes">
+ <value></value>
+ <regnode name="Position" isopaque="yes">
+ <value>700,434</value>
+ </regnode>
+ </regnode>
+ </regnode>
+ <attribute kind="PrefixTag" status="meta">
+ <value></value>
+ </attribute>
+ <attribute kind="SpecifyIdTag" status="meta">
+ <value></value>
+ </attribute>
+ <attribute kind="VersionTag" status="meta">
+ <value></value>
+ </attribute>
+ <model id="id-0065-00000011" kind="Object" role="Object" relid="0x1" childrelidcntr="0x2">
+ <name>Trigger</name>
+ <regnode name="PartRegs" isopaque="yes">
+ <value></value>
+ <regnode name="InterfaceDefinition" isopaque="yes">
+ <value></value>
+ <regnode name="Position" isopaque="yes">
+ <value>243,143</value>
+ </regnode>
+ </regnode>
+ </regnode>
+ <attribute kind="PrefixTag" status="meta">
+ <value></value>
+ </attribute>
+ <attribute kind="SpecifyIdTag" status="meta">
+ <value></value>
+ </attribute>
+ <attribute kind="VersionTag" status="meta">
+ <value></value>
+ </attribute>
+ <attribute kind="abstract" status="meta">
+ <value>false</value>
+ </attribute>
+ <attribute kind="local" status="meta">
+ <value>false</value>
+ </attribute>
+ <model id="id-0065-00000012" kind="TwowayOperation" role="TwowayOperation" relid="0x1" childrelidcntr="0x0">
+ <name>start</name>
+ <regnode name="PartRegs" isopaque="yes">
+ <value></value>
+ <regnode name="InterfaceDefinition" isopaque="yes">
+ <value></value>
+ <regnode name="Position" isopaque="yes">
+ <value>334,201</value>
+ </regnode>
+ </regnode>
+ </regnode>
+ <attribute kind="SpecifyIdTag" status="meta">
+ <value></value>
+ </attribute>
+ <attribute kind="VersionTag" status="meta">
+ <value></value>
+ </attribute>
+ </model>
+ <model id="id-0065-00000013" kind="TwowayOperation" role="TwowayOperation" relid="0x2" childrelidcntr="0x0">
+ <name>stop</name>
+ <regnode name="PartRegs" isopaque="yes">
+ <value></value>
+ <regnode name="InterfaceDefinition" isopaque="yes">
+ <value></value>
+ <regnode name="Position" isopaque="yes">
+ <value>700,434</value>
+ </regnode>
+ </regnode>
+ </regnode>
+ <attribute kind="SpecifyIdTag" status="meta">
+ <value></value>
+ </attribute>
+ <attribute kind="VersionTag" status="meta">
+ <value></value>
+ </attribute>
+ </model>
+ </model>
+ <model id="id-0065-00000014" kind="Component" role="Component" relid="0x2" childrelidcntr="0x4">
+ <name>StockDistributor</name>
+ <regnode name="PartRegs" isopaque="yes">
+ <value></value>
+ <regnode name="InterfaceDefinition" isopaque="yes">
+ <value></value>
+ <regnode name="Position" isopaque="yes">
+ <value>518,318</value>
+ </regnode>
+ </regnode>
+ </regnode>
+ <attribute kind="SpecifyIdTag" status="meta">
+ <value></value>
+ </attribute>
+ <attribute kind="UUID">
+ <value>B124B4A8-F51C-4F63-9A08-35256C9A9259</value>
+ </attribute>
+ <attribute kind="VersionTag" status="meta">
+ <value></value>
+ </attribute>
+ <attribute kind="label" status="meta">
+ <value></value>
+ </attribute>
+ <model id="id-0065-00000015" kind="Attribute" role="Attribute" relid="0x4" childrelidcntr="0x1">
+ <name>rate</name>
+ <regnode name="PartRegs" isopaque="yes">
+ <value></value>
+ <regnode name="InterfaceDefinition" isopaque="yes">
+ <value></value>
+ <regnode name="Position" isopaque="yes">
+ <value>848,528</value>
+ </regnode>
+ </regnode>
+ </regnode>
+ <attribute kind="SpecifyIdTag" status="meta">
+ <value></value>
+ </attribute>
+ <attribute kind="VersionTag" status="meta">
+ <value></value>
+ </attribute>
+ <reference id="id-0067-00000020" kind="AttributeMember" role="AttributeMember" relid="0x1" referred="id-0066-00000007">
+ <name>AttributeMember</name>
+ <regnode name="PartRegs" isopaque="yes">
+ <value></value>
+ <regnode name="InterfaceDefinition" isopaque="yes">
+ <value></value>
+ <regnode name="Position" isopaque="yes">
+ <value>518,318</value>
+ </regnode>
+ </regnode>
+ </regnode>
+ </reference>
+ </model>
+ <reference id="id-0067-0000000a" kind="Supports" role="Supports" relid="0x1" referred="id-0065-00000011">
+ <name>Supports</name>
+ <regnode name="PartRegs" isopaque="yes">
+ <value></value>
+ <regnode name="InterfaceDefinition" isopaque="yes">
+ <value></value>
+ <regnode name="Position" isopaque="yes">
+ <value>188,108</value>
+ </regnode>
+ </regnode>
+ </regnode>
+ </reference>
+ <reference id="id-0067-0000000b" kind="ProvidedRequestPort" role="ProvidedRequestPort" relid="0x2" referred="id-0065-00000005">
+ <name>push_quoter</name>
+ <regnode name="PartRegs" isopaque="yes">
+ <value></value>
+ <regnode name="InterfaceDefinition" isopaque="yes">
+ <value></value>
+ <regnode name="Position" isopaque="yes">
+ <value>608,216</value>
+ </regnode>
+ </regnode>
+ </regnode>
+ <attribute kind="SpecifyIdTag" status="meta">
+ <value></value>
+ </attribute>
+ <attribute kind="VersionTag" status="meta">
+ <value></value>
+ </attribute>
+ <attribute kind="exclusiveProvider" status="meta">
+ <value>false</value>
+ </attribute>
+ <attribute kind="exclusiveUser" status="meta">
+ <value>false</value>
+ </attribute>
+ <attribute kind="optional" status="meta">
+ <value>false</value>
+ </attribute>
+ </reference>
+ <reference id="id-0067-0000000c" kind="OutEventPort" role="OutEventPort" relid="0x3" referred="id-0065-00000007">
+ <name>notify_out</name>
+ <regnode name="PartRegs" isopaque="yes">
+ <value></value>
+ <regnode name="InterfaceDefinition" isopaque="yes">
+ <value></value>
+ <regnode name="Position" isopaque="yes">
+ <value>628,388</value>
+ </regnode>
+ </regnode>
+ </regnode>
+ <attribute kind="SpecifyIdTag" status="meta">
+ <value></value>
+ </attribute>
+ <attribute kind="VersionTag" status="meta">
+ <value></value>
+ </attribute>
+ <attribute kind="exclusiveProvider" status="meta">
+ <value>false</value>
+ </attribute>
+ <attribute kind="exclusiveUser" status="meta">
+ <value>false</value>
+ </attribute>
+ <attribute kind="optional" status="meta">
+ <value>false</value>
+ </attribute>
+ <attribute kind="out_event_port_type" status="meta">
+ <value>DirectConnect</value>
+ </attribute>
+ <attribute kind="single_destination">
+ <value>false</value>
+ </attribute>
+ </reference>
+ </model>
+ <model id="id-0065-00000016" kind="ComponentFactory" role="ComponentFactory" relid="0x3" childrelidcntr="0x0">
+ <name>StockDistributorHome</name>
+ <regnode name="PartRegs" isopaque="yes">
+ <value></value>
+ <regnode name="InterfaceDefinition" isopaque="yes">
+ <value></value>
+ <regnode name="Position" isopaque="yes">
+ <value>793,493</value>
+ </regnode>
+ </regnode>
+ </regnode>
+ <attribute kind="SpecifyIdTag" status="meta">
+ <value></value>
+ </attribute>
+ <attribute kind="VersionTag" status="meta">
+ <value></value>
+ </attribute>
+ </model>
+ <connection id="id-0068-00000002" kind="ManagesComponent" role="ManagesComponent" relid="0x4">
+ <name>ManagesComponent</name>
+ <regnode name="autorouterPref" isopaque="yes">
+ <value>Ws</value>
+ </regnode>
+ <connpoint role="dst" target="id-0065-00000014"/>
+ <connpoint role="src" target="id-0065-00000016"/>
+ </connection>
+ </model>
+ <reference id="id-0067-00000009" kind="FileRef" role="FileRef" relid="0x1" referred="id-0065-00000001">
+ <name>FileRef</name>
+ <regnode name="PartRegs" isopaque="yes">
+ <value></value>
+ <regnode name="InterfaceDefinition" isopaque="yes">
+ <value></value>
+ <regnode name="Position" isopaque="yes">
+ <value>334,201</value>
+ </regnode>
+ </regnode>
+ </regnode>
+ </reference>
+ </model>
+ </folder>
+ <folder id="id-006a-00000003" relid="0x1" childrelidcntr="0xb" kind="PredefinedTypes">
+ <name>PredefinedTypes</name>
+ <atom id="id-0066-00000001" kind="TypeKind" relid="0xb">
+ <name>TypeKind</name>
+ </atom>
+ <atom id="id-0066-00000002" kind="TypeEncoding" relid="0xa">
+ <name>TypeEncoding</name>
+ </atom>
+ <atom id="id-0066-00000003" kind="String" relid="0x9">
+ <name>String</name>
+ </atom>
+ <atom id="id-0066-00000004" kind="Boolean" relid="0x8">
+ <name>Boolean</name>
+ </atom>
+ <atom id="id-0066-00000005" kind="ShortInteger" relid="0x7">
+ <name>ShortInteger</name>
+ </atom>
+ <atom id="id-0066-00000006" kind="RealNumber" relid="0x6">
+ <name>RealNumber</name>
+ </atom>
+ <atom id="id-0066-00000007" kind="LongInteger" relid="0x5">
+ <name>LongInteger</name>
+ </atom>
+ <atom id="id-0066-00000008" kind="GenericValueObject" relid="0x4">
+ <name>GenericValueObject</name>
+ </atom>
+ <atom id="id-0066-00000009" kind="GenericValue" relid="0x3">
+ <name>GenericValue</name>
+ </atom>
+ <atom id="id-0066-0000000a" kind="GenericObject" relid="0x2">
+ <name>GenericObject</name>
+ </atom>
+ <atom id="id-0066-0000000b" kind="Byte" relid="0x1">
+ <name>Byte</name>
+ </atom>
+ </folder>
+ <folder id="id-006a-00000004" relid="0x3" childrelidcntr="0x1" kind="ComponentImplementations">
+ <name>ComponentImplementations</name>
+ <model id="id-0065-00000017" kind="ComponentImplementationContainer" relid="0x1" childrelidcntr="0xb">
+ <name>StockBrokerImplementation</name>
+ <model id="id-0065-00000018" kind="Property" role="Property" relid="0x2" childrelidcntr="0x2">
+ <name>ComponentIOR</name>
+ <regnode name="PartRegs" isopaque="yes">
+ <value></value>
+ <regnode name="Packaging" isopaque="yes">
+ <value></value>
+ <regnode name="Position" isopaque="yes">
+ <value>282,168</value>
+ </regnode>
+ </regnode>
+ </regnode>
+ <attribute kind="DataValue">
+ <value>StockBroker.ior</value>
+ </attribute>
+ <reference id="id-0067-0000000d" kind="DataType" role="DataType" relid="0x2" referred="id-0066-00000003">
+ <name>String</name>
+ <regnode name="PartRegs" isopaque="yes">
+ <value></value>
+ <regnode name="Packaging" isopaque="yes">
+ <value></value>
+ <regnode name="Position" isopaque="yes">
+ <value>518,318</value>
+ </regnode>
+ </regnode>
+ </regnode>
+ </reference>
+ </model>
+ <atom id="id-0066-0000000c" kind="MonolithicImplementation" role="MonolithicImplementation" relid="0x1">
+ <name>StockBrokerMonolithicImpl</name>
+ <regnode name="PartRegs" isopaque="yes">
+ <value></value>
+ <regnode name="Packaging" isopaque="yes">
+ <value></value>
+ <regnode name="Position" isopaque="yes">
+ <value>125,68</value>
+ </regnode>
+ </regnode>
+ </regnode>
+ <attribute kind="UUID" status="meta">
+ <value></value>
+ </attribute>
+ <attribute kind="label" status="meta">
+ <value></value>
+ </attribute>
+ </atom>
+ <reference id="id-0067-0000000e" kind="ComponentRef" role="ComponentRef" relid="0x9" referred="id-0065-0000000d">
+ <name>StockBrokerRef</name>
+ <regnode name="PartRegs" isopaque="yes">
+ <value></value>
+ <regnode name="Packaging" isopaque="yes">
+ <value></value>
+ <regnode name="Position" isopaque="yes">
+ <value>783,557</value>
+ </regnode>
+ </regnode>
+ </regnode>
+ </reference>
+ <reference id="id-0067-00000021" kind="ImplementationArtifactReference" role="ImplementationArtifactReference" relid="0x3" referred="id-0066-0000000e">
+ <name>StockBroker_stubRef</name>
+ <regnode name="PartRegs" isopaque="yes">
+ <value></value>
+ <regnode name="Packaging" isopaque="yes">
+ <value></value>
+ <regnode name="Position" isopaque="yes">
+ <value>461,265</value>
+ </regnode>
+ </regnode>
+ </regnode>
+ </reference>
+ <reference id="id-0067-00000022" kind="ImplementationArtifactReference" role="ImplementationArtifactReference" relid="0x4" referred="id-0066-0000000f">
+ <name>StockBroker_svntRef</name>
+ <regnode name="PartRegs" isopaque="yes">
+ <value></value>
+ <regnode name="Packaging" isopaque="yes">
+ <value></value>
+ <regnode name="Position" isopaque="yes">
+ <value>566,363</value>
+ </regnode>
+ </regnode>
+ </regnode>
+ </reference>
+ <reference id="id-0067-00000023" kind="ImplementationArtifactReference" role="ImplementationArtifactReference" relid="0x5" referred="id-0066-00000010">
+ <name>StockBroker_execRef</name>
+ <regnode name="PartRegs" isopaque="yes">
+ <value></value>
+ <regnode name="Packaging" isopaque="yes">
+ <value></value>
+ <regnode name="Position" isopaque="yes">
+ <value>741,468</value>
+ </regnode>
+ </regnode>
+ </regnode>
+ </reference>
+ <connection id="id-0068-00000003" kind="ConfigProperty" role="ConfigProperty" relid="0xa">
+ <name>ConfigProperty</name>
+ <connpoint role="dst" target="id-0065-00000018"/>
+ <connpoint role="src" target="id-0066-0000000c"/>
+ </connection>
+ <connection id="id-0068-00000004" kind="MonolithprimaryArtifact" role="MonolithprimaryArtifact" relid="0x6">
+ <name>MonolithprimaryArtifact</name>
+ <connpoint role="src" target="id-0066-0000000c"/>
+ <connpoint role="dst" target="id-0067-00000021"/>
+ </connection>
+ <connection id="id-0068-00000005" kind="MonolithprimaryArtifact" role="MonolithprimaryArtifact" relid="0x7">
+ <name>MonolithprimaryArtifact</name>
+ <connpoint role="src" target="id-0066-0000000c"/>
+ <connpoint role="dst" target="id-0067-00000022"/>
+ </connection>
+ <connection id="id-0068-00000006" kind="MonolithprimaryArtifact" role="MonolithprimaryArtifact" relid="0x8">
+ <name>MonolithprimaryArtifact</name>
+ <connpoint role="src" target="id-0066-0000000c"/>
+ <connpoint role="dst" target="id-0067-00000023"/>
+ </connection>
+ <connection id="id-0068-00000007" kind="Implements" role="Implements" relid="0xb">
+ <name>Implements</name>
+ <connpoint role="src" target="id-0066-0000000c"/>
+ <connpoint role="dst" target="id-0067-0000000e"/>
+ </connection>
+ </model>
+ <model id="id-0065-00000019" kind="ComponentImplementationContainer" relid="0x2" childrelidcntr="0xb">
+ <name>StockDistributorImplementation</name>
+ <model id="id-0065-0000001a" kind="Property" role="Property" relid="0x2" childrelidcntr="0x2">
+ <name>ComponentIOR</name>
+ <regnode name="PartRegs" isopaque="yes">
+ <value></value>
+ <regnode name="Packaging" isopaque="yes">
+ <value></value>
+ <regnode name="Position" isopaque="yes">
+ <value>282,168</value>
+ </regnode>
+ </regnode>
+ </regnode>
+ <attribute kind="DataValue">
+ <value>StockDistributor.ior</value>
+ </attribute>
+ <reference id="id-0067-0000000f" kind="DataType" role="DataType" relid="0x2" referred="id-0066-00000003">
+ <name>String</name>
+ <regnode name="PartRegs" isopaque="yes">
+ <value></value>
+ <regnode name="Packaging" isopaque="yes">
+ <value></value>
+ <regnode name="Position" isopaque="yes">
+ <value>518,318</value>
+ </regnode>
+ </regnode>
+ </regnode>
+ </reference>
+ </model>
+ <atom id="id-0066-0000000d" kind="MonolithicImplementation" role="MonolithicImplementation" relid="0x1">
+ <name>StockDistributorMonolithicImpl</name>
+ <regnode name="PartRegs" isopaque="yes">
+ <value></value>
+ <regnode name="Packaging" isopaque="yes">
+ <value></value>
+ <regnode name="Position" isopaque="yes">
+ <value>125,68</value>
+ </regnode>
+ </regnode>
+ </regnode>
+ <attribute kind="UUID" status="meta">
+ <value></value>
+ </attribute>
+ <attribute kind="label" status="meta">
+ <value></value>
+ </attribute>
+ </atom>
+ <reference id="id-0067-00000010" kind="ComponentRef" role="ComponentRef" relid="0x9" referred="id-0065-00000014">
+ <name>StockDistributorRef</name>
+ <regnode name="PartRegs" isopaque="yes">
+ <value></value>
+ <regnode name="Packaging" isopaque="yes">
+ <value></value>
+ <regnode name="Position" isopaque="yes">
+ <value>910,568</value>
+ </regnode>
+ </regnode>
+ </regnode>
+ </reference>
+ <reference id="id-0067-00000024" kind="ImplementationArtifactReference" role="ImplementationArtifactReference" relid="0x3" referred="id-0066-00000011">
+ <name>StockDistributor_stubRef</name>
+ <regnode name="PartRegs" isopaque="yes">
+ <value></value>
+ <regnode name="Packaging" isopaque="yes">
+ <value></value>
+ <regnode name="Position" isopaque="yes">
+ <value>439,268</value>
+ </regnode>
+ </regnode>
+ </regnode>
+ </reference>
+ <reference id="id-0067-00000025" kind="ImplementationArtifactReference" role="ImplementationArtifactReference" relid="0x4" referred="id-0066-00000012">
+ <name>StockDistributor_svntRef</name>
+ <regnode name="PartRegs" isopaque="yes">
+ <value></value>
+ <regnode name="Packaging" isopaque="yes">
+ <value></value>
+ <regnode name="Position" isopaque="yes">
+ <value>596,368</value>
+ </regnode>
+ </regnode>
+ </regnode>
+ </reference>
+ <reference id="id-0067-00000026" kind="ImplementationArtifactReference" role="ImplementationArtifactReference" relid="0x5" referred="id-0066-00000013">
+ <name>StockDistributor_execRef</name>
+ <regnode name="PartRegs" isopaque="yes">
+ <value></value>
+ <regnode name="Packaging" isopaque="yes">
+ <value></value>
+ <regnode name="Position" isopaque="yes">
+ <value>753,468</value>
+ </regnode>
+ </regnode>
+ </regnode>
+ </reference>
+ <connection id="id-0068-00000008" kind="ConfigProperty" role="ConfigProperty" relid="0xa">
+ <name>ConfigProperty</name>
+ <connpoint role="dst" target="id-0065-0000001a"/>
+ <connpoint role="src" target="id-0066-0000000d"/>
+ </connection>
+ <connection id="id-0068-00000009" kind="MonolithprimaryArtifact" role="MonolithprimaryArtifact" relid="0x6">
+ <name>MonolithprimaryArtifact</name>
+ <connpoint role="src" target="id-0066-0000000d"/>
+ <connpoint role="dst" target="id-0067-00000024"/>
+ </connection>
+ <connection id="id-0068-0000000a" kind="MonolithprimaryArtifact" role="MonolithprimaryArtifact" relid="0x7">
+ <name>MonolithprimaryArtifact</name>
+ <connpoint role="src" target="id-0066-0000000d"/>
+ <connpoint role="dst" target="id-0067-00000025"/>
+ </connection>
+ <connection id="id-0068-0000000b" kind="MonolithprimaryArtifact" role="MonolithprimaryArtifact" relid="0x8">
+ <name>MonolithprimaryArtifact</name>
+ <connpoint role="src" target="id-0066-0000000d"/>
+ <connpoint role="dst" target="id-0067-00000026"/>
+ </connection>
+ <connection id="id-0068-0000000c" kind="Implements" role="Implements" relid="0xb">
+ <name>Implements</name>
+ <connpoint role="src" target="id-0066-0000000d"/>
+ <connpoint role="dst" target="id-0067-00000010"/>
+ </connection>
+ </model>
+ <model id="id-0065-00000023" kind="ComponentImplementationContainer" relid="0x1" childrelidcntr="0x1">
+ <name>StockQuoterImplementation</name>
+ <model id="id-0065-00000024" kind="ComponentAssembly" role="ComponentAssembly" relid="0x1" childrelidcntr="0x6">
+ <name>StockQuoter</name>
+ <regnode name="PartRegs" status="undefined">
+ <value></value>
+ <regnode name="Packaging" status="undefined">
+ <value></value>
+ <regnode name="Position" isopaque="yes">
+ <value>307,221</value>
+ </regnode>
+ </regnode>
+ <regnode name="QoSModelAspect" status="undefined">
+ <value></value>
+ <regnode name="Position" isopaque="yes">
+ <value>331,198</value>
+ </regnode>
+ </regnode>
+ </regnode>
+ <attribute kind="UUID">
+ <value>EBE916A6-E4E5-469C-A8EE-EDDFCA4B9CE3</value>
+ </attribute>
+ <attribute kind="label" status="meta">
+ <value></value>
+ </attribute>
+ <model id="id-0065-00000025" kind="Component" role="Component" derivedfrom="id-0065-0000000d" isinstance="yes" isprimary="yes" relid="0x1" childrelidcntr="0x0">
+ <name>StockBroker</name>
+ <regnode name="PartRegs">
+ <value></value>
+ <regnode name="Packaging" status="undefined">
+ <value></value>
+ <regnode name="Position" isopaque="yes">
+ <value>447,116</value>
+ </regnode>
+ </regnode>
+ </regnode>
+ <attribute kind="SpecifyIdTag" status="meta">
+ <value></value>
+ </attribute>
+ <attribute kind="UUID">
+ <value>94A1586C-2E9A-4FFD-8D75-7FC5A54F6B71</value>
+ </attribute>
+ <attribute kind="VersionTag" status="meta">
+ <value></value>
+ </attribute>
+ <attribute kind="label" status="meta">
+ <value></value>
+ </attribute>
+ <reference id="id-0067-00000027" kind="InEventPort" role="InEventPort" derivedfrom="id-0067-00000008" isinstance="yes" isprimary="no" referred="id-0065-00000007" isbound="yes">
+ <name>notify_in</name>
+ <attribute kind="SpecifyIdTag" status="meta">
+ <value></value>
+ </attribute>
+ <attribute kind="VersionTag" status="meta">
+ <value></value>
+ </attribute>
+ <attribute kind="exclusiveProvider" status="meta">
+ <value>false</value>
+ </attribute>
+ <attribute kind="exclusiveUser" status="meta">
+ <value>false</value>
+ </attribute>
+ <attribute kind="optional" status="meta">
+ <value>false</value>
+ </attribute>
+ </reference>
+ <reference id="id-0067-00000028" kind="RequiredRequestPort" role="RequiredRequestPort" derivedfrom="id-0067-00000007" isinstance="yes" isprimary="no" referred="id-0065-00000005" isbound="yes">
+ <name>read_quoter</name>
+ <attribute kind="SpecifyIdTag" status="meta">
+ <value></value>
+ </attribute>
+ <attribute kind="VersionTag" status="meta">
+ <value></value>
+ </attribute>
+ <attribute kind="exclusiveProvider" status="meta">
+ <value>false</value>
+ </attribute>
+ <attribute kind="exclusiveUser" status="meta">
+ <value>false</value>
+ </attribute>
+ <attribute kind="multiple_connections" status="inherited">
+ <value>false</value>
+ </attribute>
+ <attribute kind="optional" status="meta">
+ <value>false</value>
+ </attribute>
+ </reference>
+ <reference id="id-0067-00000029" kind="Supports" role="Supports" derivedfrom="id-0067-00000006" isinstance="yes" isprimary="no" referred="id-0065-0000000a" isbound="yes">
+ <name>Supports</name>
+ </reference>
+ </model>
+ <model id="id-0065-00000026" kind="Component" role="Component" derivedfrom="id-0065-00000014" isinstance="yes" isprimary="yes" relid="0x2" childrelidcntr="0x0">
+ <name>StockDistributor</name>
+ <regnode name="PartRegs">
+ <value></value>
+ <regnode name="Packaging" status="undefined">
+ <value></value>
+ <regnode name="Position" isopaque="yes">
+ <value>83,123</value>
+ </regnode>
+ </regnode>
+ </regnode>
+ <attribute kind="SpecifyIdTag" status="meta">
+ <value></value>
+ </attribute>
+ <attribute kind="UUID">
+ <value>2DBE2452-FDE3-4399-9210-509CAC49139A</value>
+ </attribute>
+ <attribute kind="VersionTag" status="meta">
+ <value></value>
+ </attribute>
+ <attribute kind="label" status="meta">
+ <value></value>
+ </attribute>
+ <model id="id-0065-00000027" kind="Attribute" role="Attribute" derivedfrom="id-0065-00000015" isinstance="yes" isprimary="no" childrelidcntr="0x0">
+ <name>rate</name>
+ <attribute kind="SpecifyIdTag" status="meta">
+ <value></value>
+ </attribute>
+ <attribute kind="VersionTag" status="meta">
+ <value></value>
+ </attribute>
+ <reference id="id-0067-0000002a" kind="AttributeMember" role="AttributeMember" derivedfrom="id-0067-00000020" isinstance="yes" isprimary="no" referred="id-0066-00000007" isbound="yes">
+ <name>AttributeMember</name>
+ </reference>
+ </model>
+ <reference id="id-0067-0000002b" kind="OutEventPort" role="OutEventPort" derivedfrom="id-0067-0000000c" isinstance="yes" isprimary="no" referred="id-0065-00000007" isbound="yes">
+ <name>notify_out</name>
+ <attribute kind="SpecifyIdTag" status="meta">
+ <value></value>
+ </attribute>
+ <attribute kind="VersionTag" status="meta">
+ <value></value>
+ </attribute>
+ <attribute kind="exclusiveProvider" status="meta">
+ <value>false</value>
+ </attribute>
+ <attribute kind="exclusiveUser" status="meta">
+ <value>false</value>
+ </attribute>
+ <attribute kind="optional" status="meta">
+ <value>false</value>
+ </attribute>
+ <attribute kind="out_event_port_type" status="meta">
+ <value>DirectConnect</value>
+ </attribute>
+ <attribute kind="single_destination" status="inherited">
+ <value>false</value>
+ </attribute>
+ </reference>
+ <reference id="id-0067-0000002c" kind="ProvidedRequestPort" role="ProvidedRequestPort" derivedfrom="id-0067-0000000b" isinstance="yes" isprimary="no" referred="id-0065-00000005" isbound="yes">
+ <name>push_quoter</name>
+ <attribute kind="SpecifyIdTag" status="meta">
+ <value></value>
+ </attribute>
+ <attribute kind="VersionTag" status="meta">
+ <value></value>
+ </attribute>
+ <attribute kind="exclusiveProvider" status="meta">
+ <value>false</value>
+ </attribute>
+ <attribute kind="exclusiveUser" status="meta">
+ <value>false</value>
+ </attribute>
+ <attribute kind="optional" status="meta">
+ <value>false</value>
+ </attribute>
+ </reference>
+ <reference id="id-0067-0000002d" kind="Supports" role="Supports" derivedfrom="id-0067-0000000a" isinstance="yes" isprimary="no" referred="id-0065-00000011" isbound="yes">
+ <name>Supports</name>
+ </reference>
+ </model>
+ <atom id="id-0066-00000014" kind="PublishConnector" role="PublishConnector" relid="0x3">
+ <name>PublishConnector</name>
+ <regnode name="PartRegs" status="undefined">
+ <value></value>
+ <regnode name="Packaging" status="undefined">
+ <value></value>
+ <regnode name="Position" isopaque="yes">
+ <value>329,154</value>
+ </regnode>
+ </regnode>
+ </regnode>
+ </atom>
+ <connection id="id-0068-00000017" kind="invoke" role="invoke" relid="0x4">
+ <name>invoke</name>
+ <connpoint role="src" target="id-0067-00000028"/>
+ <connpoint role="dst" target="id-0067-0000002c"/>
+ </connection>
+ <connection id="id-0068-00000018" kind="publish" role="publish" relid="0x5">
+ <name>publish</name>
+ <connpoint role="dst" target="id-0066-00000014"/>
+ <connpoint role="src" target="id-0067-0000002b"/>
+ </connection>
+ <connection id="id-0068-00000019" kind="deliverTo" role="deliverTo" relid="0x6">
+ <name>deliverTo</name>
+ <regnode name="autorouterPref" isopaque="yes">
+ <value>E</value>
+ </regnode>
+ <connpoint role="src" target="id-0066-00000014"/>
+ <connpoint role="dst" target="id-0067-00000027"/>
+ </connection>
+ </model>
+ </model>
+ </folder>
+ <folder id="id-006a-00000005" relid="0x4" childrelidcntr="0x0" kind="ImplementationArtifacts">
+ <name>ImplementationArtifacts</name>
+ <model id="id-0065-0000001b" kind="ArtifactContainer" relid="0x1" childrelidcntr="0xa">
+ <name>StockBrokerArtifacts</name>
+ <model id="id-0065-0000001c" kind="Property" role="Property" relid="0x2" childrelidcntr="0x2">
+ <name>entryPoint</name>
+ <regnode name="PartRegs" isopaque="yes">
+ <value></value>
+ <regnode name="Packaging" isopaque="yes">
+ <value></value>
+ <regnode name="Position" isopaque="yes">
+ <value>334,200</value>
+ </regnode>
+ </regnode>
+ </regnode>
+ <attribute kind="DataValue">
+ <value>createStockBrokerHome_Servant</value>
+ </attribute>
+ <reference id="id-0067-00000011" kind="DataType" role="DataType" relid="0x2" referred="id-0066-00000003">
+ <name>String</name>
+ <regnode name="PartRegs" isopaque="yes">
+ <value></value>
+ <regnode name="Packaging" isopaque="yes">
+ <value></value>
+ <regnode name="Position" isopaque="yes">
+ <value>298,193</value>
+ </regnode>
+ </regnode>
+ </regnode>
+ </reference>
+ </model>
+ <model id="id-0065-0000001d" kind="Property" role="Property" relid="0x4" childrelidcntr="0x2">
+ <name>entryPoint</name>
+ <regnode name="PartRegs" isopaque="yes">
+ <value></value>
+ <regnode name="Packaging" isopaque="yes">
+ <value></value>
+ <regnode name="Position" isopaque="yes">
+ <value>700,432</value>
+ </regnode>
+ </regnode>
+ </regnode>
+ <attribute kind="DataValue">
+ <value>createStockBrokerHome_Impl</value>
+ </attribute>
+ <reference id="id-0067-00000012" kind="DataType" role="DataType" relid="0x2" referred="id-0066-00000003">
+ <name>String</name>
+ <regnode name="PartRegs" isopaque="yes">
+ <value></value>
+ <regnode name="Packaging" isopaque="yes">
+ <value></value>
+ <regnode name="Position" isopaque="yes">
+ <value>340,172</value>
+ </regnode>
+ </regnode>
+ </regnode>
+ </reference>
+ </model>
+ <atom id="id-0066-0000000e" kind="ImplementationArtifact" role="ImplementationArtifact" relid="0x1">
+ <name>StockBroker_stub</name>
+ <regnode name="PartRegs" isopaque="yes">
+ <value></value>
+ <regnode name="Packaging" isopaque="yes">
+ <value></value>
+ <regnode name="Position" isopaque="yes">
+ <value>151,84</value>
+ </regnode>
+ </regnode>
+ </regnode>
+ <attribute kind="UUID" status="meta">
+ <value></value>
+ </attribute>
+ <attribute kind="configuration" status="meta">
+ <value></value>
+ </attribute>
+ <attribute kind="label">
+ <value></value>
+ </attribute>
+ <attribute kind="location">
+ <value>StockBroker_stub</value>
+ </attribute>
+ </atom>
+ <atom id="id-0066-0000000f" kind="ImplementationArtifact" role="ImplementationArtifact" relid="0x3">
+ <name>StockBroker_svnt</name>
+ <regnode name="PartRegs" isopaque="yes">
+ <value></value>
+ <regnode name="Packaging" isopaque="yes">
+ <value></value>
+ <regnode name="Position" isopaque="yes">
+ <value>517,316</value>
+ </regnode>
+ </regnode>
+ </regnode>
+ <attribute kind="UUID" status="meta">
+ <value></value>
+ </attribute>
+ <attribute kind="configuration" status="meta">
+ <value></value>
+ </attribute>
+ <attribute kind="label">
+ <value></value>
+ </attribute>
+ <attribute kind="location">
+ <value>StockBroker_svnt</value>
+ </attribute>
+ </atom>
+ <atom id="id-0066-00000010" kind="ImplementationArtifact" role="ImplementationArtifact" relid="0x5">
+ <name>StockBroker_exec</name>
+ <regnode name="PartRegs" isopaque="yes">
+ <value></value>
+ <regnode name="Packaging" isopaque="yes">
+ <value></value>
+ <regnode name="Position" isopaque="yes">
+ <value>883,548</value>
+ </regnode>
+ </regnode>
+ </regnode>
+ <attribute kind="UUID" status="meta">
+ <value></value>
+ </attribute>
+ <attribute kind="configuration" status="meta">
+ <value></value>
+ </attribute>
+ <attribute kind="label">
+ <value></value>
+ </attribute>
+ <attribute kind="location">
+ <value>StockBroker_exec</value>
+ </attribute>
+ </atom>
+ <connection id="id-0068-0000000d" kind="ArtifactExecParameter" role="ArtifactExecParameter" relid="0x7">
+ <name>ArtifactExecParameter</name>
+ <connpoint role="dst" target="id-0065-0000001c"/>
+ <connpoint role="src" target="id-0066-0000000f"/>
+ </connection>
+ <connection id="id-0068-0000000e" kind="ArtifactDependency" role="ArtifactDependency" relid="0x8">
+ <name>ArtifactDependency</name>
+ <connpoint role="dst" target="id-0066-0000000e"/>
+ <connpoint role="src" target="id-0066-0000000f"/>
+ </connection>
+ <connection id="id-0068-0000000f" kind="ArtifactExecParameter" role="ArtifactExecParameter" relid="0x8">
+ <name>ArtifactExecParameter</name>
+ <connpoint role="dst" target="id-0065-0000001d"/>
+ <connpoint role="src" target="id-0066-00000010"/>
+ </connection>
+ <connection id="id-0068-00000010" kind="ArtifactDependency" role="ArtifactDependency" relid="0x9">
+ <name>ArtifactDependency</name>
+ <connpoint role="dst" target="id-0066-0000000f"/>
+ <connpoint role="src" target="id-0066-00000010"/>
+ </connection>
+ <connection id="id-0068-00000011" kind="ArtifactDependency" role="ArtifactDependency" relid="0xa">
+ <name>ArtifactDependency</name>
+ <connpoint role="dst" target="id-0066-0000000e"/>
+ <connpoint role="src" target="id-0066-00000010"/>
+ </connection>
+ </model>
+ <model id="id-0065-0000001e" kind="ArtifactContainer" relid="0x2" childrelidcntr="0xa">
+ <name>StockDistributorArtifacts</name>
+ <model id="id-0065-0000001f" kind="Property" role="Property" relid="0x2" childrelidcntr="0x2">
+ <name>entryPoint</name>
+ <regnode name="PartRegs" isopaque="yes">
+ <value></value>
+ <regnode name="Packaging" isopaque="yes">
+ <value></value>
+ <regnode name="Position" isopaque="yes">
+ <value>334,200</value>
+ </regnode>
+ </regnode>
+ </regnode>
+ <attribute kind="DataValue">
+ <value>createStockDistributorHome_Servant</value>
+ </attribute>
+ <reference id="id-0067-00000013" kind="DataType" role="DataType" relid="0x2" referred="id-0066-00000003">
+ <name>String</name>
+ <regnode name="PartRegs" isopaque="yes">
+ <value></value>
+ <regnode name="Packaging" isopaque="yes">
+ <value></value>
+ <regnode name="Position" isopaque="yes">
+ <value>518,318</value>
+ </regnode>
+ </regnode>
+ </regnode>
+ </reference>
+ </model>
+ <model id="id-0065-00000020" kind="Property" role="Property" relid="0x4" childrelidcntr="0x2">
+ <name>entryPoint</name>
+ <regnode name="PartRegs" isopaque="yes">
+ <value></value>
+ <regnode name="Packaging" isopaque="yes">
+ <value></value>
+ <regnode name="Position" isopaque="yes">
+ <value>700,432</value>
+ </regnode>
+ </regnode>
+ </regnode>
+ <attribute kind="DataValue">
+ <value>createStockDistributorHome_Impl</value>
+ </attribute>
+ <reference id="id-0067-00000014" kind="DataType" role="DataType" relid="0x2" referred="id-0066-00000003">
+ <name>String</name>
+ <regnode name="PartRegs" isopaque="yes">
+ <value></value>
+ <regnode name="Packaging" isopaque="yes">
+ <value></value>
+ <regnode name="Position" isopaque="yes">
+ <value>518,318</value>
+ </regnode>
+ </regnode>
+ </regnode>
+ </reference>
+ </model>
+ <atom id="id-0066-00000011" kind="ImplementationArtifact" role="ImplementationArtifact" relid="0x1">
+ <name>StockDistributor_stub</name>
+ <regnode name="PartRegs" isopaque="yes">
+ <value></value>
+ <regnode name="Packaging" isopaque="yes">
+ <value></value>
+ <regnode name="Position" isopaque="yes">
+ <value>151,84</value>
+ </regnode>
+ </regnode>
+ </regnode>
+ <attribute kind="UUID" status="meta">
+ <value></value>
+ </attribute>
+ <attribute kind="configuration" status="meta">
+ <value></value>
+ </attribute>
+ <attribute kind="label">
+ <value></value>
+ </attribute>
+ <attribute kind="location">
+ <value>StockDistributor_stub</value>
+ </attribute>
+ </atom>
+ <atom id="id-0066-00000012" kind="ImplementationArtifact" role="ImplementationArtifact" relid="0x3">
+ <name>StockDistributor_svnt</name>
+ <regnode name="PartRegs" isopaque="yes">
+ <value></value>
+ <regnode name="Packaging" isopaque="yes">
+ <value></value>
+ <regnode name="Position" isopaque="yes">
+ <value>517,316</value>
+ </regnode>
+ </regnode>
+ </regnode>
+ <attribute kind="UUID" status="meta">
+ <value></value>
+ </attribute>
+ <attribute kind="configuration" status="meta">
+ <value></value>
+ </attribute>
+ <attribute kind="label">
+ <value></value>
+ </attribute>
+ <attribute kind="location">
+ <value>StockDistributor_svnt</value>
+ </attribute>
+ </atom>
+ <atom id="id-0066-00000013" kind="ImplementationArtifact" role="ImplementationArtifact" relid="0x5">
+ <name>StockDistributor_exec</name>
+ <regnode name="PartRegs" isopaque="yes">
+ <value></value>
+ <regnode name="Packaging" isopaque="yes">
+ <value></value>
+ <regnode name="Position" isopaque="yes">
+ <value>883,548</value>
+ </regnode>
+ </regnode>
+ </regnode>
+ <attribute kind="UUID" status="meta">
+ <value></value>
+ </attribute>
+ <attribute kind="configuration" status="meta">
+ <value></value>
+ </attribute>
+ <attribute kind="label">
+ <value></value>
+ </attribute>
+ <attribute kind="location">
+ <value>StockDistributor_exec</value>
+ </attribute>
+ </atom>
+ <connection id="id-0068-00000012" kind="ArtifactExecParameter" role="ArtifactExecParameter" relid="0x7">
+ <name>ArtifactExecParameter</name>
+ <connpoint role="dst" target="id-0065-0000001f"/>
+ <connpoint role="src" target="id-0066-00000012"/>
+ </connection>
+ <connection id="id-0068-00000013" kind="ArtifactDependency" role="ArtifactDependency" relid="0x8">
+ <name>ArtifactDependency</name>
+ <connpoint role="dst" target="id-0066-00000011"/>
+ <connpoint role="src" target="id-0066-00000012"/>
+ </connection>
+ <connection id="id-0068-00000014" kind="ArtifactExecParameter" role="ArtifactExecParameter" relid="0x8">
+ <name>ArtifactExecParameter</name>
+ <connpoint role="dst" target="id-0065-00000020"/>
+ <connpoint role="src" target="id-0066-00000013"/>
+ </connection>
+ <connection id="id-0068-00000015" kind="ArtifactDependency" role="ArtifactDependency" relid="0x9">
+ <name>ArtifactDependency</name>
+ <connpoint role="dst" target="id-0066-00000012"/>
+ <connpoint role="src" target="id-0066-00000013"/>
+ </connection>
+ <connection id="id-0068-00000016" kind="ArtifactDependency" role="ArtifactDependency" relid="0xa">
+ <name>ArtifactDependency</name>
+ <connpoint role="dst" target="id-0066-00000011"/>
+ <connpoint role="src" target="id-0066-00000013"/>
+ </connection>
+ </model>
+ </folder>
+ <folder id="id-006a-00000006" relid="0x5" childrelidcntr="0x0" kind="ComponentTypes">
+ <name>ComponentTypes</name>
+ <model id="id-0065-00000021" kind="ComponentContainer" relid="0x1" childrelidcntr="0x1">
+ <name>StockBrokerContainer</name>
+ <reference id="id-0067-00000015" kind="ComponentRef" role="ComponentRef" relid="0x1" referred="id-0065-0000000d">
+ <name>StockBrokerRef</name>
+ <regnode name="PartRegs" isopaque="yes">
+ <value></value>
+ <regnode name="Packaging" isopaque="yes">
+ <value></value>
+ <regnode name="Position" isopaque="yes">
+ <value>244,214</value>
+ </regnode>
+ </regnode>
+ </regnode>
+ </reference>
+ </model>
+ <model id="id-0065-00000022" kind="ComponentContainer" relid="0x2" childrelidcntr="0x1">
+ <name>StockDistributorContainer</name>
+ <reference id="id-0067-00000016" kind="ComponentRef" role="ComponentRef" relid="0x1" referred="id-0065-00000014">
+ <name>StockDistributorRef</name>
+ <regnode name="PartRegs" isopaque="yes">
+ <value></value>
+ <regnode name="Packaging" isopaque="yes">
+ <value></value>
+ <regnode name="Position" isopaque="yes">
+ <value>202,249</value>
+ </regnode>
+ </regnode>
+ </regnode>
+ </reference>
+ </model>
+ </folder>
+ <folder id="id-006a-00000007" relid="0x6" childrelidcntr="0x1" kind="PackageConfigurations">
+ <name>PackageConfigurations</name>
+ <model id="id-0065-0000002b" kind="PackageConfigurationContainer" relid="0x1" childrelidcntr="0x2">
+ <name>Default</name>
+ <atom id="id-0066-00000018" kind="PackageConfiguration" role="PackageConfiguration" relid="0x1">
+ <name>Default</name>
+ <regnode name="PartRegs" status="undefined">
+ <value></value>
+ <regnode name="Packaging" status="undefined">
+ <value></value>
+ <regnode name="Position" isopaque="yes">
+ <value>163,226</value>
+ </regnode>
+ </regnode>
+ </regnode>
+ <attribute kind="UUID" status="meta">
+ <value></value>
+ </attribute>
+ <attribute kind="label" status="meta">
+ <value></value>
+ </attribute>
+ </atom>
+ <reference id="id-0067-00000033" kind="ComponentPackageReference" role="ComponentPackageReference" relid="0x2" referred="id-0066-00000017">
+ <name>StockQuoter</name>
+ <regnode name="PartRegs" status="undefined">
+ <value></value>
+ <regnode name="Packaging" status="undefined">
+ <value></value>
+ <regnode name="Position" isopaque="yes">
+ <value>391,230</value>
+ </regnode>
+ </regnode>
+ </regnode>
+ <attribute kind="requiredName" status="meta">
+ <value></value>
+ </attribute>
+ <attribute kind="requiredType" status="meta">
+ <value></value>
+ </attribute>
+ <attribute kind="requiredUUID" status="meta">
+ <value></value>
+ </attribute>
+ </reference>
+ </model>
+ </folder>
+ <folder id="id-006a-00000008" relid="0x7" childrelidcntr="0x3" kind="ComponentPackages">
+ <name>ComponentPackages</name>
+ <model id="id-0065-00000028" kind="PackageContainer" relid="0x1" childrelidcntr="0x5">
+ <name>Broker</name>
+ <atom id="id-0066-00000015" kind="ComponentPackage" role="ComponentPackage" relid="0x1">
+ <name>Broker</name>
+ <regnode name="PartRegs" status="undefined">
+ <value></value>
+ <regnode name="Packaging" status="undefined">
+ <value></value>
+ <regnode name="Position" isopaque="yes">
+ <value>272,195</value>
+ </regnode>
+ </regnode>
+ </regnode>
+ <attribute kind="UUID" status="meta">
+ <value></value>
+ </attribute>
+ <attribute kind="label" status="meta">
+ <value></value>
+ </attribute>
+ </atom>
+ <reference id="id-0067-0000002e" kind="ComponentImplementationReference" role="ComponentImplementationReference" relid="0x2" referred="id-0066-0000000c">
+ <name>Broker</name>
+ <regnode name="PartRegs" status="undefined">
+ <value></value>
+ <regnode name="Packaging" status="undefined">
+ <value></value>
+ <regnode name="Position" isopaque="yes">
+ <value>96,194</value>
+ </regnode>
+ </regnode>
+ </regnode>
+ </reference>
+ <reference id="id-0067-0000002f" kind="ComponentRef" role="ComponentRef" relid="0x3" referred="id-0065-0000000d">
+ <name>Broker</name>
+ <regnode name="PartRegs" status="undefined">
+ <value></value>
+ <regnode name="Packaging" status="undefined">
+ <value></value>
+ <regnode name="Position" isopaque="yes">
+ <value>440,172</value>
+ </regnode>
+ </regnode>
+ </regnode>
+ </reference>
+ <connection id="id-0068-0000001b" kind="Implementation" role="Implementation" relid="0x4">
+ <name>Implementation</name>
+ <regnode name="autorouterPref" isopaque="yes">
+ <value>We</value>
+ </regnode>
+ <connpoint role="src" target="id-0066-00000015"/>
+ <connpoint role="dst" target="id-0067-0000002e"/>
+ </connection>
+ <connection id="id-0068-0000001c" kind="PackageInterface" role="PackageInterface" relid="0x5">
+ <name>PackageInterface</name>
+ <regnode name="autorouterPref" isopaque="yes">
+ <value>Ew</value>
+ </regnode>
+ <connpoint role="src" target="id-0066-00000015"/>
+ <connpoint role="dst" target="id-0067-0000002f"/>
+ </connection>
+ </model>
+ <model id="id-0065-00000029" kind="PackageContainer" relid="0x2" childrelidcntr="0x5">
+ <name>Distributor</name>
+ <atom id="id-0066-00000016" kind="ComponentPackage" role="ComponentPackage" relid="0x2">
+ <name>Distributor</name>
+ <regnode name="PartRegs" status="undefined">
+ <value></value>
+ <regnode name="Packaging" status="undefined">
+ <value></value>
+ <regnode name="Position" isopaque="yes">
+ <value>272,195</value>
+ </regnode>
+ </regnode>
+ </regnode>
+ <attribute kind="UUID" status="meta">
+ <value></value>
+ </attribute>
+ <attribute kind="label" status="meta">
+ <value></value>
+ </attribute>
+ </atom>
+ <reference id="id-0067-00000030" kind="ComponentImplementationReference" role="ComponentImplementationReference" relid="0x1" referred="id-0066-0000000d">
+ <name>Distributor</name>
+ <regnode name="PartRegs" status="undefined">
+ <value></value>
+ <regnode name="Packaging" status="undefined">
+ <value></value>
+ <regnode name="Position" isopaque="yes">
+ <value>96,194</value>
+ </regnode>
+ </regnode>
+ </regnode>
+ </reference>
+ <reference id="id-0067-00000031" kind="ComponentRef" role="ComponentRef" relid="0x3" referred="id-0065-00000014">
+ <name>Distributor</name>
+ <regnode name="PartRegs" status="undefined">
+ <value></value>
+ <regnode name="Packaging" status="undefined">
+ <value></value>
+ <regnode name="Position" isopaque="yes">
+ <value>440,172</value>
+ </regnode>
+ </regnode>
+ </regnode>
+ </reference>
+ <connection id="id-0068-0000001d" kind="Implementation" role="Implementation" relid="0x4">
+ <name>Implementation</name>
+ <regnode name="autorouterPref" isopaque="yes">
+ <value>We</value>
+ </regnode>
+ <connpoint role="src" target="id-0066-00000016"/>
+ <connpoint role="dst" target="id-0067-00000030"/>
+ </connection>
+ <connection id="id-0068-0000001e" kind="PackageInterface" role="PackageInterface" relid="0x5">
+ <name>PackageInterface</name>
+ <regnode name="autorouterPref" isopaque="yes">
+ <value>Ew</value>
+ </regnode>
+ <connpoint role="src" target="id-0066-00000016"/>
+ <connpoint role="dst" target="id-0067-00000031"/>
+ </connection>
+ </model>
+ <model id="id-0065-0000002a" kind="PackageContainer" relid="0x3" childrelidcntr="0x3">
+ <name>StockQuoter</name>
+ <atom id="id-0066-00000017" kind="ComponentPackage" role="ComponentPackage" relid="0x2">
+ <name>StockQuoter</name>
+ <regnode name="PartRegs" status="undefined">
+ <value></value>
+ <regnode name="Packaging" status="undefined">
+ <value></value>
+ <regnode name="Position" isopaque="yes">
+ <value>391,125</value>
+ </regnode>
+ </regnode>
+ </regnode>
+ <attribute kind="UUID" status="meta">
+ <value></value>
+ </attribute>
+ <attribute kind="label" status="meta">
+ <value></value>
+ </attribute>
+ </atom>
+ <reference id="id-0067-00000032" kind="ComponentImplementationReference" role="ComponentImplementationReference" relid="0x1" referred="id-0065-00000024">
+ <name>StockQuoter</name>
+ <regnode name="PartRegs" status="undefined">
+ <value></value>
+ <regnode name="Packaging" status="undefined">
+ <value></value>
+ <regnode name="Position" isopaque="yes">
+ <value>96,103</value>
+ </regnode>
+ </regnode>
+ </regnode>
+ </reference>
+ <connection id="id-0068-0000001f" kind="Implementation" role="Implementation" relid="0x3">
+ <name>Implementation</name>
+ <regnode name="autorouterPref" isopaque="yes">
+ <value>We</value>
+ </regnode>
+ <connpoint role="src" target="id-0066-00000017"/>
+ <connpoint role="dst" target="id-0067-00000032"/>
+ </connection>
+ </model>
+ </folder>
+ <folder id="id-006a-00000009" relid="0x8" childrelidcntr="0x1" kind="DeploymentPlans">
+ <name>DeploymentPlans</name>
+ <model id="id-0065-00000030" kind="DeploymentPlan" relid="0x1" childrelidcntr="0x8">
+ <name>Plan</name>
+ <attribute kind="label" status="meta">
+ <value></value>
+ </attribute>
+ <reference id="id-0067-00000035" kind="NodeReference" role="NodeReference" relid="0x3" referred="id-0065-0000002e">
+ <name>Node_Broker</name>
+ <regnode name="PartRegs" status="undefined">
+ <value></value>
+ <regnode name="NodeMapping" status="undefined">
+ <value></value>
+ <regnode name="Position" isopaque="yes">
+ <value>284,137</value>
+ </regnode>
+ </regnode>
+ </regnode>
+ </reference>
+ <reference id="id-0067-00000036" kind="NodeReference" role="NodeReference" relid="0x4" referred="id-0065-0000002f">
+ <name>Node_Distributor</name>
+ <regnode name="PartRegs" status="undefined">
+ <value></value>
+ <regnode name="NodeMapping" status="undefined">
+ <value></value>
+ <regnode name="Position" isopaque="yes">
+ <value>284,298</value>
+ </regnode>
+ </regnode>
+ </regnode>
+ </reference>
+ <reference id="id-0067-00000037" kind="ComponentRef" role="ComponentRef" relid="0x5" referred="id-0065-00000025">
+ <name>StockBroker</name>
+ <regnode name="PartRegs" status="undefined">
+ <value></value>
+ <regnode name="NodeMapping" status="undefined">
+ <value></value>
+ <regnode name="Position" isopaque="yes">
+ <value>412,95</value>
+ </regnode>
+ </regnode>
+ </regnode>
+ </reference>
+ <reference id="id-0067-00000038" kind="ComponentRef" role="ComponentRef" relid="0x6" referred="id-0065-00000026">
+ <name>StockDistributor</name>
+ <regnode name="PartRegs" status="undefined">
+ <value></value>
+ <regnode name="NodeMapping" status="undefined">
+ <value></value>
+ <regnode name="Position" isopaque="yes">
+ <value>412,270</value>
+ </regnode>
+ </regnode>
+ </regnode>
+ </reference>
+ <connection id="id-0068-00000021" kind="InstanceMapping" role="InstanceMapping" relid="0x7">
+ <name>InstanceMapping</name>
+ <regnode name="autorouterPref" isopaque="yes">
+ <value>Ew</value>
+ </regnode>
+ <connpoint role="dst" target="id-0067-00000035"/>
+ <connpoint role="src" target="id-0069-00000001"/>
+ </connection>
+ <connection id="id-0068-00000022" kind="InstanceMapping" role="InstanceMapping" relid="0x8">
+ <name>InstanceMapping</name>
+ <regnode name="autorouterPref" isopaque="yes">
+ <value>Ew</value>
+ </regnode>
+ <connpoint role="dst" target="id-0067-00000036"/>
+ <connpoint role="src" target="id-0069-00000002"/>
+ </connection>
+ <set id="id-0069-00000001" kind="CollocationGroup" role="CollocationGroup" relid="0x1" members="id-0067-00000037">
+ <name>CollocationGroup</name>
+ <regnode name="PartRegs" status="undefined">
+ <value></value>
+ <regnode name="NodeMapping" status="undefined">
+ <value></value>
+ <regnode name="Position" isopaque="yes">
+ <value>118,125</value>
+ </regnode>
+ </regnode>
+ </regnode>
+ </set>
+ <set id="id-0069-00000002" kind="CollocationGroup" role="CollocationGroup" relid="0x2" members="id-0067-00000038">
+ <name>CollocationGroup</name>
+ <regnode name="PartRegs" status="undefined">
+ <value></value>
+ <regnode name="NodeMapping" status="undefined">
+ <value></value>
+ <regnode name="Position" isopaque="yes">
+ <value>97,279</value>
+ </regnode>
+ </regnode>
+ </regnode>
+ </set>
+ </model>
+ </folder>
+ <folder id="id-006a-0000000a" relid="0x9" childrelidcntr="0x1" kind="Targets">
+ <name>Targets</name>
+ <model id="id-0065-0000002d" kind="Domain" relid="0x1" childrelidcntr="0x2">
+ <name>Domain</name>
+ <attribute kind="UUID" status="meta">
+ <value></value>
+ </attribute>
+ <attribute kind="label" status="meta">
+ <value></value>
+ </attribute>
+ <model id="id-0065-0000002e" kind="Node" role="Node" relid="0x1" childrelidcntr="0x0">
+ <name>Broker</name>
+ <regnode name="PartRegs" status="undefined">
+ <value></value>
+ <regnode name="Target" status="undefined">
+ <value></value>
+ <regnode name="Position" isopaque="yes">
+ <value>198,261</value>
+ </regnode>
+ </regnode>
+ </regnode>
+ <attribute kind="label" status="meta">
+ <value></value>
+ </attribute>
+ </model>
+ <model id="id-0065-0000002f" kind="Node" role="Node" relid="0x2" childrelidcntr="0x0">
+ <name>Distributor</name>
+ <regnode name="PartRegs" status="undefined">
+ <value></value>
+ <regnode name="Target" status="undefined">
+ <value></value>
+ <regnode name="Position" isopaque="yes">
+ <value>394,310</value>
+ </regnode>
+ </regnode>
+ </regnode>
+ <attribute kind="label" status="meta">
+ <value></value>
+ </attribute>
+ </model>
+ </model>
+ </folder>
+ <folder id="id-006a-0000000b" relid="0xa" childrelidcntr="0x1" kind="TopLevelPackages">
+ <name>TopLevelPackages</name>
+ <model id="id-0065-0000002c" kind="TopLevelPackageContainer" relid="0x1" childrelidcntr="0x3">
+ <name>Default</name>
+ <atom id="id-0066-00000019" kind="TopLevelPackage" role="TopLevelPackage" relid="0x1">
+ <name>TopLevelPackage</name>
+ <regnode name="PartRegs" status="undefined">
+ <value></value>
+ <regnode name="Packaging" status="undefined">
+ <value></value>
+ <regnode name="Position" isopaque="yes">
+ <value>132,275</value>
+ </regnode>
+ </regnode>
+ </regnode>
+ </atom>
+ <reference id="id-0067-00000034" kind="PackageConfigurationReference" role="PackageConfigurationReference" relid="0x2" referred="id-0066-00000018">
+ <name>Default</name>
+ <regnode name="PartRegs" status="undefined">
+ <value></value>
+ <regnode name="Packaging" status="undefined">
+ <value></value>
+ <regnode name="Position" isopaque="yes">
+ <value>370,265</value>
+ </regnode>
+ </regnode>
+ </regnode>
+ </reference>
+ <connection id="id-0068-00000020" kind="package" role="package" relid="0x3">
+ <name>package</name>
+ <regnode name="autorouterPref" isopaque="yes">
+ <value>Ew</value>
+ </regnode>
+ <connpoint role="src" target="id-0066-00000019"/>
+ <connpoint role="dst" target="id-0067-00000034"/>
+ </connection>
+ </model>
+ </folder>
+ <folder id="id-006a-0000000c" relid="0xb" childrelidcntr="0x0" kind="ComponentBuild">
+ <name>ComponentBuild</name>
+ </folder>
+ </folder>
+</project>
diff --git a/TAO/CIAO/docs/tutorials/CoSMIC/index.html b/TAO/CIAO/docs/tutorials/CoSMIC/index.html
new file mode 100644
index 00000000000..30d5fde64f1
--- /dev/null
+++ b/TAO/CIAO/docs/tutorials/CoSMIC/index.html
@@ -0,0 +1,135 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+<head>
+ <title>Building a Stock Quoter with TAO - A Tutorial</title>
+<!-- $Id$ -->
+</head>
+<body style="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255);"
+ link="#000fff" vlink="#ff0f0f">
+<h3>Building a Stock Quoter with CoSMIC and DAnCE - A Tutorial<br>
+</h3>
+<p>This tutorial provides a step-by-step lesson on developing
+component-based distributed applications using <a
+ href="http://www.dre.vanderbilt.edu/cosmic/">CoSMIC</a> modeling
+toolkit and <a href="http://www.cs.wustl.edu/%7Eschmidt/CIAO.html">CIAO
+DAnCE</a> framework. The example application used in this tutorial is a
+Stock Quoter that consists of two components; the <span
+ style="font-style: italic;">StockDistributor</span>
+and the <span style="font-style: italic;">StockBroker</span>. The <span
+ style="font-style: italic;">StockDistributor</span>
+notifies one or more stock brokers whenever a stock price changes. Upon
+receiving the notification, the <span style="font-style: italic;">StockBroker</span>
+fetches information about a particular stock from the <span
+ style="font-style: italic;">StockDistributor</span>. The figure bellow
+shows the application diagram.
+This Stock Quoter application
+is based on a series of <a
+ href="http://www.cs.wustl.edu/%7Eschmidt/report-doc.html">CORBA
+component model</a> columns written by <a
+ href="http://www.cs.wustl.edu/%7Eschmidt/">Doug Schmidt</a> and <a
+ href="http://www.iona.com/hyplan/vinoski/">Steve Vinoski</a> for <a
+ href="http://www.cuj.com">C/C++ Users Journal</a> and has consistently
+been
+used as an example for <a
+ href="http://www.cs.wustl.edu/%7Eschmidt/TAO.html">TAO</a>.<br>
+</p>
+<div style="text-align: center;"><img alt="" src="Images/fig1.jpg"
+ style="width: 362px; height: 193px;"><br>
+<br>
+Stock Quoter application Diagram <br>
+</div>
+<p>This tutorial will show you how to use generic modeling techniques <a
+ href="http://www.dre.vanderbilt.edu/cosmic/">CoSMIC</a> to assist the
+development process of CIAO applications. All the necessary steps to
+build a component-based application model via <a
+ href="http://www.dre.vanderbilt.edu/cosmic/">CoSMIC</a>
+toolkit are documented here.
+</p>
+<blockquote>
+ <hr><strong>Note:</strong> <br>
+1. Although the descriptor files generated by CoSMIC toolkits are
+portable, the modeling environment required by CoSMIC (GME) only
+supports MS Windows platforms currently. So this tutorial will focus on
+Windows users.<br>
+2. The CIAO/DAnCE codes used for this tutorial <span
+ style="font-family: monospace;">can be found in </span><code>%CIAO_ROOT%/docs/tutorials/Quoter/Simple</code>.
+ <br>
+3. The current tutorial is tested under GME 5.9.21, and&nbsp; CosMIC
+0.4.8. It will be subject to change as version of GME and CoSMIC
+evolves.<br>
+ <hr></blockquote>
+<span style="font-weight: bold;"><big>Prerequisite<br>
+<br>
+</big></span>&nbsp;&nbsp;&nbsp;Before you start,
+you need the following:<br>
+&nbsp;&nbsp;&nbsp;&nbsp; 1. ACE+TAO+CIAO (Component Integraated
+ACE ORB)<br>
+&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ACE + TAO + CIAO provide the CCM
+infrastructure necessary to enable the CCM-based distributed component
+interaction. You can click <a
+ href="http://deuce.doc.wustl.edu/Download.html"> here</a> to download
+the latest
+ACE + TAO + CIAO and click <a
+ href="http://www.cs.wustl.edu/%7Eschmidt/ACE_wrappers/TAO/CIAO/CIAO-INSTALL.html">here</a>
+for information on how
+to build ACE+TAO+CIAO.<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2. GME (Generic Modeling Environment)<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span
+ class="intbody">GME is a configurable toolkit for creating
+domain-specific modeling and program synthesis environments. It
+provides the execution environment for CoSMIC toolkits. Click
+<a href="http://www.isis.vanderbilt.edu/Projects/gme/download.html">here</a>
+to download
+GME.<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3. CoSMIC toolkit<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Click
+<a href="http://www.dre.vanderbilt.edu/cosmic/">here</a> to download
+the
+latest CoSMIC release.<br>
+<blockquote>
+ <hr> <strong>Note:</strong><br>
+1.Usually you should download the latest GME, but it is possible that
+CoSMIC hasn't been updated yet to support the very latest GME..The
+installation process of CoSMIC will tell you which version it is
+expecting.&nbsp; So <span class="intbody">please make sure the GME
+version you are using is the version required by CoSMIC. A different
+version of </span>GME may result in
+undefined errors. <br>
+2.Make susre that you
+install GME first before you start with CoSMIC toolkits.<br>
+ <hr></blockquote>
+</span><br>
+<a style="font-weight: bold;" href="01.html">Getting Started</a><br>
+<br>
+&nbsp;&nbsp; This section describes the IDL files used by the example
+and
+shows you how to import IDL into <a
+ href="http://www.cs.wustl.edu/%7Eschmidt/PDF/RTAS05-PICML.pdf">
+PICML (Platform-Independent Component Modeling Language)</a>; a
+domain-specific modeling language which is defined using GME. PICML is
+designed to help to bridge the gap between design-time verification and
+model-checking tools and the deployment of component implementations.
+<br>
+<br>
+<a style="font-weight: bold;" href="02.html">Modeling
+StockQuoter system with PICML</a><br>
+<br>
+&nbsp;&nbsp;&nbsp; This section describes how to model the Stock
+Quoter components in PICML.<br>
+&nbsp;&nbsp;&nbsp;&nbsp; <br>
+<a href="03.html"><b>Implementing Quoter components with DAnCE</b></a><br>
+<br>
+&nbsp;&nbsp;&nbsp; This section provides codes for the Quoter example.<br>
+<br>
+<a style="font-weight: bold;" href="04.html">Running the application</a><br>
+<br>
+&nbsp;&nbsp; After all the components and descriptors generated by
+PICML are in place. You are ready to compile and run the application.<br>
+<br>
+<hr>
+<address><a href="mailto:ming.xiong@vanderbilt.edu">Ming Xiong<br>
+</a></address>
+<!-- Created: Sat Nov 27 15:25:06 CST 1999 --><!-- hhmts start -->
+Last modified:<!-- hhmts end -->
+</body>
+</html>
diff --git a/TAO/CIAO/examples/Hello/ReDaC-Usage.html b/TAO/CIAO/examples/Hello/ReDaC-Usage.html
new file mode 100644
index 00000000000..eb9b8c729b7
--- /dev/null
+++ b/TAO/CIAO/examples/Hello/ReDaC-Usage.html
@@ -0,0 +1,308 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<!--//$Id$ -->
+
+
+
+ <title>ReDaC Service Usage</title>
+</head>
+
+
+<body style="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255);" alink="#0000ff" link="#000fff" vlink="#ff0f0f">
+
+
+<hr>
+<h2>Simple Tutorial for using ReDaC (<span style="font-style: italic;">Redeployment and Reconfiguration</span>)</h2>
+
+
+<span style="font-weight: bold;">Prerequisite</span><b>:<br>
+
+
+<br>
+
+
+</b>Before you proceed further, please read the <a href="./step-by-step.html">step-by-step</a> tutorial
+page first.<b><br>
+
+
+<br>
+
+
+</b><b>Note:</b>
+<br>
+
+
+<ul>
+
+
+ <li>ReDaC is a middleware service provided by the <a href="http://www.cs.wustl.edu/%7Eschmidt/ACE_wrappers/TAO/CIAO/docs/releasenotes/dance.html">DAnCE</a>
+framework.</li>
+
+
+ <li>ReDaC service is used for redeployment and/or
+reconfiguration of your&nbsp;running component-based application on
+the fly without shutting down your application.&nbsp;</li>
+
+
+ <li>ReDaC currently works for CIAO QoS-enabled component
+middleware only.</li>
+
+
+</ul>
+
+
+<hr>
+<h2>Example Description</h2>
+
+
+We will use the Hello example to illustrate how one could use ReDaC
+service to perform redeployment and reconfiguration.
+<hr>
+<h3>Initial Deployment</h3>
+
+
+Below steps are required for the initial deployment of your application,
+which is performed by DAnCE. The below steps are different from those
+presented in the <a href="./step-by-step.html">step-by-step</a>
+tutorial page in the sense that we pass different command line options
+to the <span style="font-style: italic;">Plan_Launcher</span>
+client:<br>
+
+
+<ul>
+
+
+ <li> Go into the <em> descriptors </em> directory
+Start NodeManagers (NodeDameons) by running <code>
+run_NodeDaemons.pl </code> </li>
+
+
+
+ <ul>
+
+
+ <li>This step is the same as the one presented in the
+&nbsp;<a href="step-by-step.html">step-by-step</a>
+tutorial page. </li>
+
+
+
+ </ul>
+
+
+ <li> Start the execution manager: <code>$CIAO_ROOT/DAnCE/ExecutionManager/Execution_Manager
+-o EM.ior -i NodeManagerMap.dat </code> </li>
+
+
+
+ <ul>
+
+
+ <li> As one can see, we use the
+"NodeManagerMap.dat" file to instruct the Execution_Manager how to find
+the endpoint of each individual NodeManager (i.e., Node Daemon) where
+component(s) will be deployed.</li>
+
+
+
+ </ul>
+
+
+
+ <ul>
+
+
+ <li>This step is the same as the one presented in the
+&nbsp;<a href="step-by-step.html">step-by-step</a>
+tutorial page. </li>
+
+
+
+ </ul>
+
+
+ <li> Start the plan launcher: <code>
+$CIAO_ROOT/DAnCE/Plan_Launcher/plan_launcher -p
+flattened_deploymentplan_without_ns.cdp -k file://EM.ior -o DAM.ior</code>&nbsp;</li>
+
+
+
+ <ul>
+
+
+ <li>After this, components should be deployed
+successfully. </li>
+
+
+ <li>This step is different &nbsp;from the one presented
+in the
+&nbsp;<a href="step-by-step.html">step-by-step</a>
+tutorial page in the way that we added an additional "<code>-o</code>"
+option when running <code>Plan_Launcher</code>, which
+dumps an IOR file of DAnCE's DomainApplicationManager. &nbsp;With
+this option added, the <code>plan_launcher </code>will
+exit immediately after the application is deployed, instead of staying
+in the interactive mode. (As a normal user, you don't need to worry
+about the details of what exactly a DomainApplicationManager is.)</li>
+
+
+
+ </ul>
+
+
+</ul>
+
+
+<hr>
+<h3>Redeployment and Reconfiguration</h3>
+
+
+Basically, you could use ReDaC service in two ways. <br>
+
+
+<ol style="font-weight: bold;">
+
+
+ <li>Use ReDaC service <span style="font-style: italic;">directly</span>
+through DAnCE's&nbsp;<span style="font-style: italic;">Plan_Launcher</span>
+client</li>
+
+
+ <li><span style="font-weight: bold;">Use ReDaC
+service <span style="font-style: italic;">programmatically</span>
+by writing your own client</span></li>
+
+
+</ol>
+
+
+This tutorial illustrates how exactly you could use ReDaC.<br>
+
+
+<br style="font-weight: bold;">
+
+
+<span style="font-weight: bold;">Use ReDaC service through
+</span><span style="font-style: italic; font-weight: bold;">Plan_Launcher</span><span style="font-weight: bold;">&nbsp; of DAnCE:</span><br>
+
+
+<ul>
+
+
+ <li>As we've already mentioned, you should first deploy your
+Hello application with DAnCE, which is described in the above "Initial
+Deployment" section of this tutorial.<code> </code>
+ </li>
+
+
+ <li>
+
+ <p> Use ReDaC service through <code>Plan_Launcher</code>'s
+"-r" command line option to perform redeployment and reconfiguration.<br>
+
+
+Run the command
+ <code>$CIAO_ROOT/DAnCE/Plan_Launcher/plan_launcher -r
+flattened_deploymentplan_without_ns_add.cdp </code>will add
+additional components to the existing running assembly.</p>
+
+
+ </li>
+
+
+ <li>
+
+ <p>Run the command
+ <code>$CIAO_ROOT/DAnCE/Plan_Launcher/plan_launcher -r
+flattened_deploymentplan_without_ns_remove.cdp </code>will
+remove components from the existing running assembly.</p>
+
+
+ </li>
+
+
+ <li>Run the command
+ <code></code><code>$CIAO_ROOT/DAnCE/Plan_Launcher/plan_launcher
+-i file://DAM.ior</code> will tear down your entire application
+completely.</li>
+
+
+</ul>
+
+
+<br>
+
+
+<div style="margin-left: 40px;"><span style="font-weight: bold;">NOTE: &nbsp;</span>By
+using ReDaC through Plan_Launcher, as a user you must provide a new
+DeploymentPlan (.cdp) XML file, which captures the new deployment and
+configuration settings of your application, and the Plan_UUID of the
+new DeploymentPlan should be&nbsp;the same as the one of the old
+(running) DeploymentPlan. Otherwise, DAnCE will think you want to
+deploy a totally different deployment plan, instead of applying some
+changes to the existing plan. One could use <a href="http://www.dre.vanderbilt.edu/cosmic">CoSMIC</a> MDD tool to create such a deployment plan XML file.<br>
+
+</div>
+
+
+<br>
+
+
+<span style="font-weight: bold;">Use ReDaC service <span style="font-style: italic;">programmatically</span>:</span><span style="font-weight: bold;"></span>
+<ul>
+
+
+
+ <p> You could also use ReDaC service programmatically by writing your
+own client to invoke ReDaC service. Basically, to accomplish this, your
+client program needs to:</p>
+
+
+ <ol>
+
+ <li>Obtain the&nbsp;<code>ExecutionManager</code> object reference, either through naming service or through IOR file.</li>
+
+ <li>Invoke the operation&nbsp;<code>perform_redeployment</code> on this interface by passing a single argument type called&nbsp;<code>DeploymentPlan</code>.</li>
+
+
+ </ol>
+
+
+</ul>
+
+
+<div style="margin-left: 40px;">The IDL signature of this operation is as follows:<br>
+
+<code><br>
+
+&nbsp;&nbsp;&nbsp; void perform_redeployment (in DeploymentPlan new_plan)<br>
+
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; raises (PlanError,<br>
+
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; InstallationFailure,<br>
+
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; UnknownImplId,<br>
+
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ImplEntryPointNotFound,<br>
+
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; InvalidConnection,<br>
+
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; InvalidProperty,<br>
+
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ::Components::RemoveFailure);</code><br>
+
+</div>
+
+
+<br>
+<div style="margin-left: 40px;">In order to simplify the creation of a the&nbsp;<code>"new_plan", </code>we are implementing a utility class which allows a developer to easily manipulate a deployment plan data structure.</div>
+
+
+<hr>
+<b>Email: </b>
+<address>ciao-users@cse.wustl.edu</address>
+
+
+</body>
+</html>
diff --git a/TAO/CIAO/examples/Hello/descriptors_RTCCM/NodeManagerMap.dat b/TAO/CIAO/examples/Hello/descriptors_RTCCM/NodeManagerMap.dat
new file mode 100644
index 00000000000..fe88523971e
--- /dev/null
+++ b/TAO/CIAO/examples/Hello/descriptors_RTCCM/NodeManagerMap.dat
@@ -0,0 +1,2 @@
+SenderNode corbaloc:iiop:localhost:60001/NodeManager
+ReceiverNode corbaloc:iiop:localhost:60002/NodeManager
diff --git a/TAO/CIAO/examples/Hello/descriptors_RTCCM/RTsvc.conf b/TAO/CIAO/examples/Hello/descriptors_RTCCM/RTsvc.conf
new file mode 100644
index 00000000000..1bfd9e8eaba
--- /dev/null
+++ b/TAO/CIAO/examples/Hello/descriptors_RTCCM/RTsvc.conf
@@ -0,0 +1,5 @@
+# No options required for regular testing
+
+# For real-time testing, uncomment the following line:
+static RT_ORB_Loader "-ORBSchedPolicy SCHED_FIFO -ORBScopePolicy SYSTEM"
+
diff --git a/TAO/CIAO/examples/Hello/descriptors_RTCCM/input.csr b/TAO/CIAO/examples/Hello/descriptors_RTCCM/input.csr
new file mode 100644
index 00000000000..a3881225930
--- /dev/null
+++ b/TAO/CIAO/examples/Hello/descriptors_RTCCM/input.csr
@@ -0,0 +1,70 @@
+
+<CIAO:ServerResources
+ xmlns:CIAO="http://www.dre.vanderbilt.edu/ServerResources"
+ xmlns:xmi="http://www.omg.org/XMI"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://www.dre.vanderbilt.edu/ServerResources CIAOServerResources.xsd">
+
+ <cmdline>
+ <arg> -ORBDebugLevel 10 -ORBEndpoint corbaloc://foo/bar</arg>
+ </cmdline>
+
+ <svcconf>
+ <uri>
+ svcconf.uri
+ </uri>
+ </svcconf>
+
+ <orbConfigs>
+ <resources>
+ <threadpool id="threadpool-1">
+ <stacksize>100</stacksize>
+ <static_threads>50</static_threads>
+ <dynamic_threads>25</dynamic_threads>
+ <default_priority>5</default_priority>
+ <allow_request_buffering>true</allow_request_buffering>
+ <max_buffered_requests>10</max_buffered_requests>
+ <max_request_buffered_size>20</max_request_buffered_size>
+ </threadpool>
+
+ <threadpoolWithLanes id="threadpool-2">
+ <threadpoolLane>
+ <static_threads>50</static_threads>
+ <dynamic_threads>25</dynamic_threads>
+ <priority>36</priority>
+ </threadpoolLane>
+ <stacksize>100</stacksize>
+ <allow_borrowing>true</allow_borrowing>
+ <allow_request_buffering>true</allow_request_buffering>
+ <max_buffered_requests>10</max_buffered_requests>
+ <max_request_buffered_size>20</max_request_buffered_size>
+ </threadpoolWithLanes>
+
+ <connectionBands id="cb-1">
+ <band>
+ <low>0</low>
+ <high>10</high>
+ </band>
+ <band>
+ <low>11</low>
+ <high>20</high>
+ </band>
+ </connectionBands>
+ </resources>
+
+ <policySet id="test_policy_set_id">
+ <priorityModel server_priority="10">
+ <priority_model>SERVER_DECLARED</priority_model>
+ </priorityModel>
+ <priorityModel>
+ <priority_model>CLIENT_PROPAGATED</priority_model>
+ </priorityModel>
+
+ <threadpool>threadpool-1</threadpool>
+ <threadpool>threadpool-2</threadpool>
+
+ <priorityBandedConnection>cb-1</priorityBandedConnection>
+
+ </policySet>
+ </orbConfigs>
+</CIAO:ServerResources> \ No newline at end of file
diff --git a/TAO/CIAO/examples/Hello/descriptors_RTCCM/rt-config-example.cdp b/TAO/CIAO/examples/Hello/descriptors_RTCCM/rt-config-example.cdp
new file mode 100644
index 00000000000..72e1694b1c3
--- /dev/null
+++ b/TAO/CIAO/examples/Hello/descriptors_RTCCM/rt-config-example.cdp
@@ -0,0 +1,215 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
+<Deployment:deploymentPlan
+ xmlns:Deployment="http://www.omg.org/Deployment"
+ xmlns:xmi="http://www.omg.org/XMI"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://www.omg.org/Deployment Modified_Deployment.xsd">
+
+ <label>Hello-DeploymentPlan</label>
+
+ <UUID>Hello_Plan_UUID_0001</UUID>
+
+ <realizes>
+ <label>BasicSP-realizes-cid</label>
+ <UUID>c0965470-7b83-11d9-9669-0800200c9a66</UUID>
+ <specificType/>
+ <supportedType>IDL:Hello/Sender:1.0</supportedType>
+ <port>
+ <name>read_message</name>
+ <specificType>IDL:Hello/ReadMessage:1.0</specificType>
+ <supportedType>IDL:Hello/ReadMessage:1.0</supportedType>
+ <provider>false</provider>
+ <exclusiveProvider>false</exclusiveProvider>
+ <exclusiveUser>true</exclusiveUser>
+ <optional>false</optional>
+ <kind>SimplexReceptacle</kind>
+ </port>
+ </realizes>
+
+ <implementation id="Hello-Sender-mdd">
+ <name>Hello-Sender-mdd</name>
+ <source/>
+ <artifact>Hello-Sender_exec</artifact>
+ <artifact>Hello-Sender_svnt</artifact>
+ </implementation>
+
+ <implementation id="Hello-Receiver-mdd">
+ <name>Hello-Receiver-mdd</name>
+ <source/>
+ <artifact>Hello-Receiver_exec</artifact>
+ <artifact>Hello-Receiver_svnt</artifact>
+ </implementation>
+
+ <instance id="Hello-Sender-idd">
+ <name>Hello-Sender-idd</name>
+ <node>SenderNode</node>
+ <source/>
+ <implementation>Hello-Sender-mdd</implementation>
+ <configProperty>
+ <name>ComponentIOR</name>
+ <value>
+ <type>
+ <kind>tk_string</kind>
+ </type>
+ <value>
+ <string>Sender.ior</string>
+ </value>
+ </value>
+ </configProperty>
+ <configProperty>
+ <name>local_message</name>
+ <value>
+ <type>
+ <kind>tk_string</kind>
+ </type>
+ <value>
+ <string>This is a test message passed in through XML.</string>
+ </value>
+ </value>
+ </configProperty>
+ <deployedResource>
+ <resourceUsage>InstanceUsesResource</resourceUsage>
+ <requirementName>CIAO:PolicySet</requirementName>
+ <resourceName>test_server_resource_id</resourceName>
+ <resourceValue>
+ <type>
+ <kind>tk_string</kind>
+ </type>
+ <value>
+ <string>test_policy_set_id</string>
+ </value>
+ </resourceValue>
+ </deployedResource>
+ </instance>
+
+ <instance id="Hello-Receiver-idd">
+ <name>Hello-Receiver-idd</name>
+ <node>ReceiverNode</node>
+ <source/>
+ <implementation>Hello-Receiver-mdd</implementation>
+ <configProperty>
+ <name>ComponentIOR</name>
+ <value>
+ <type>
+ <kind>tk_string</kind>
+ </type>
+ <value>
+ <string>Receiver.ior</string>
+ </value>
+ </value>
+ </configProperty>
+ </instance>
+
+ <connection>
+ <name>hell_event_connection</name>
+ <internalEndpoint>
+ <portName>click_out</portName>
+ <kind>EventPublisher</kind>
+ <instance>Hello-Sender-idd</instance>
+ </internalEndpoint>
+ <internalEndpoint>
+ <portName>click_in</portName>
+ <kind>EventConsumer</kind>
+ <instance>Hello-Receiver-idd</instance>
+ </internalEndpoint>
+ </connection>
+
+ <connection>
+ <name>hello_facet_connection</name>
+ <internalEndpoint>
+ <portName>push_message</portName>
+ <kind>Facet</kind>
+ <instance>Hello-Sender-idd</instance>
+ </internalEndpoint>
+ <internalEndpoint>
+ <portName>read_message</portName>
+ <kind>SimplexReceptacle</kind>
+ <instance>Hello-Receiver-idd</instance>
+ </internalEndpoint>
+ </connection>
+
+ <artifact id="Hello-Sender_exec">
+ <name>Sender_exec</name>
+ <source/>
+ <node/>
+ <location>Sender_DnC_exec</location>
+ <execParameter>
+ <name>entryPoint</name>
+ <value>
+ <type>
+ <kind>tk_string</kind>
+ </type>
+ <value>
+ <string>createSenderHome_Impl</string>
+ </value>
+ </value>
+ </execParameter>
+ </artifact>
+
+ <artifact id="Hello-Sender_svnt">
+ <name>Sender_svnt</name>
+ <source/>
+ <node/>
+ <location>Sender_DnC_svnt</location>
+ <execParameter>
+ <name>entryPoint</name>
+ <value>
+ <type>
+ <kind>tk_string</kind>
+ </type>
+ <value>
+ <string>create_Hello_SenderHome_Servant</string>
+ </value>
+ </value>
+ </execParameter>
+ </artifact>
+
+ <artifact id="Hello-Receiver_exec">
+ <name>Receiver_exec</name>
+ <source/>
+ <node/>
+ <location>Receiver_DnC_exec</location>
+ <execParameter>
+ <name>entryPoint</name>
+ <value>
+ <type>
+ <kind>tk_string</kind>
+ </type>
+ <value>
+ <string>createReceiverHome_Impl</string>
+ </value>
+ </value>
+ </execParameter>
+ </artifact>
+
+ <artifact id="Hello-Receiver_svnt">
+ <name>Receiver_svnt</name>
+ <source/>
+ <node/>
+ <location>Receiver_DnC_svnt</location>
+ <execParameter>
+ <name>entryPoint</name>
+ <value>
+ <type>
+ <kind>tk_string</kind>
+ </type>
+ <value>
+ <string>create_Hello_ReceiverHome_Servant</string>
+ </value>
+ </value>
+ </execParameter>
+ </artifact>
+
+ <infoProperty>
+ <name>CIAOServerResources</name>
+ <value>
+ <type>
+ <kind>tk_string</kind>
+ </type>
+ <value>
+ <string>rt-config-example.csr</string>
+ </value>
+ </value>
+ </infoProperty>
+
+</Deployment:deploymentPlan>
diff --git a/TAO/CIAO/examples/Hello/descriptors_RTCCM/rt-config-example.csr b/TAO/CIAO/examples/Hello/descriptors_RTCCM/rt-config-example.csr
new file mode 100644
index 00000000000..cd3d1bf8f7d
--- /dev/null
+++ b/TAO/CIAO/examples/Hello/descriptors_RTCCM/rt-config-example.csr
@@ -0,0 +1,75 @@
+
+<CIAO:ServerResources
+ xmlns:CIAO="http://www.dre.vanderbilt.edu/ServerResources"
+ xmlns:xmi="http://www.omg.org/XMI"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://www.dre.vanderbilt.edu/ServerResources CIAOServerResources.xsd"
+ id="test_server_resource_id">
+
+ <cmdline>
+ <arg>-r</arg>
+ </cmdline>
+
+ <svcconf>
+ <uri>
+ RTsvc.conf
+ </uri>
+ </svcconf>
+
+ <orbConfigs>
+ <resources>
+ <threadpool id="threadpool-1">
+ <stacksize>0</stacksize>
+ <static_threads>5</static_threads>
+ <dynamic_threads>0</dynamic_threads>
+ <default_priority>1</default_priority>
+ <allow_request_buffering>false</allow_request_buffering>
+ <max_buffered_requests>0</max_buffered_requests>
+ <max_request_buffered_size>0</max_request_buffered_size>
+ </threadpool>
+
+ <threadpoolWithLanes id="threadpool-2">
+ <threadpoolLane>
+ <static_threads>5</static_threads>
+ <dynamic_threads>0</dynamic_threads>
+ <priority>2</priority>
+ </threadpoolLane>
+ <threadpoolLane>
+ <static_threads>5</static_threads>
+ <dynamic_threads>0</dynamic_threads>
+ <priority>1</priority>
+ </threadpoolLane>
+ <stacksize>0</stacksize>
+ <allow_borrowing>false</allow_borrowing>
+ <allow_request_buffering>false</allow_request_buffering>
+ <max_buffered_requests>0</max_buffered_requests>
+ <max_request_buffered_size>0</max_request_buffered_size>
+ </threadpoolWithLanes>
+
+ <connectionBands id="cb-1">
+ <band>
+ <low>0</low>
+ <high>10</high>
+ </band>
+ <band>
+ <low>11</low>
+ <high>20</high>
+ </band>
+ </connectionBands>
+ </resources>
+
+ <policySet id="test_policy_set_id">
+ <priorityModel server_priority="1">
+ <priority_model>SERVER_DECLARED</priority_model>
+ </priorityModel>
+ </policySet>
+
+ <policySet id="test_policy_set_2">
+ <priorityModel>
+ <priority_model>CLIENT_PROPAGATED</priority_model>
+ </priorityModel>
+ <threadpool>threadpool-2</threadpool>
+ </policySet>
+
+ </orbConfigs>
+</CIAO:ServerResources>
diff --git a/TAO/CIAO/examples/Hello/descriptors_RTCCM/rt-example.cdp b/TAO/CIAO/examples/Hello/descriptors_RTCCM/rt-example.cdp
new file mode 100644
index 00000000000..10317dbe33e
--- /dev/null
+++ b/TAO/CIAO/examples/Hello/descriptors_RTCCM/rt-example.cdp
@@ -0,0 +1,265 @@
+<Deployment:deploymentPlan
+ xmlns:Deployment="http://www.omg.org/Deployment"
+ xmlns:xmi="http://www.omg.org/XMI"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://www.omg.org/Deployment Deployment.xsd">
+
+ <label>Hello-DeploymentPlan</label>
+ <UUID>Hello_Plan_UUID_0001</UUID>
+ <!-- Could be ZERO -->
+ <realizes>
+ <label>BasicSP-realizes-cid</label>
+ <UUID>c0965470-7b83-11d9-9669-0800200c9a66</UUID>
+ <specificType><!-- @@ What does here? --></specificType>
+ <supportedType>IDL:BasicSP/EC:1.0</supportedType>
+ <port>
+ <name>read_message</name>
+ <specificType>IDL:Hello/ReadMessage:1.0</specificType>
+ <supportedType>IDL:Hello/ReadMessage:1.0</supportedType>
+ <provider>false</provider>
+ <exclusiveProvider>false</exclusiveProvider>
+ <exclusiveUser>true</exclusiveUser>
+ <optional>false</optional>
+ <kind>SimplexReceptacle</kind>
+ </port>
+ </realizes>
+
+ <implementation id="Hello-Sender-mdd">
+ <name>Hello-Sender-mdd</name>
+ <source><!-- @@ Don't know what goes here --></source>
+ <artifact>Hello-Sender_exec</artifact>
+ <artifact>Hello-Sender_svnt</artifact>
+ <!--
+ <execParameter></execParameter>
+ <deployRequirement></deployRequirement>
+ -->
+ </implementation>
+
+ <implementation id="Hello-Receiver-mdd">
+ <name>Hello-Receiver-mdd</name>
+ <source><!-- @@ Don't know what goes here --></source>
+ <artifact>Hello-Receiver_exec</artifact>
+ <artifact>Hello-Receiver_svnt</artifact>
+ <!--
+ <execParameter></execParameter>
+ <deployRequirement></deployRequirement>
+ -->
+ </implementation>
+
+ <instance id="Hello-Sender-idd">
+ <name>Hello-Sender-idd</name>
+ <node>SenderNode</node>
+ <source><!-- @@ What goes here --></source>
+ <implementation>Hello-Sender-mdd</implementation>
+
+ <!-- Add this property if you want to write component reference to IOR -->
+ <configProperty>
+ <name>ComponentIOR</name>
+ <value>
+ <type>
+ <kind>tk_string</kind>
+ </type>
+ <value>
+ <string>Sender.ior</string>
+ </value>
+ </value>
+ </configProperty>
+
+ <!-- Add this property if you want to initialize component attribute -->
+ <configProperty>
+ <name>local_message</name>
+ <value>
+ <type>
+ <kind>tk_string</kind>
+ </type>
+ <value>
+ <string>This is a test message passed in through XML.</string>
+ </value>
+ </value>
+ </configProperty>
+
+ <!-- This attribute initializes an enumerated value -->
+ <configProperty>
+ <name>color</name>
+ <value>
+ <type>
+ <kind>tk_enum</kind>
+ <enum>
+ <name>COLOR_SELECTION</name>
+ <typeId>IDL:Hello/COLOR_SELECTION:1.0</typeId>
+ <member>empty</member>
+ <member>white</member>
+ <member>red</member>
+ <member>yellow</member>
+ </enum>
+ </type>
+ <value>
+ <enum>yellow</enum>
+ </value>
+ </value>
+ </configProperty>
+
+ <deployedResource>
+ <resourceUsage>InstanceUsesResource</resourceUsage>
+ <requirementName>CIAO:PolicySet</requirementName>
+ <resourceName>test_server_resource_id</resourceName>
+ <resourceValue>
+ <type>
+ <kind>tk_string</kind>
+ </type>
+ <value>
+ <string>test_policy_set_id</string>
+ </value>
+ </resourceValue>
+ </deployedResource>
+
+ </instance>
+
+ <instance id="Hello-Receiver-idd">
+ <name>Hello-Receiver-idd</name>
+ <node>SenderNode</node>
+ <source><!-- @@ What goes here --></source>
+ <implementation>Hello-Receiver-mdd</implementation>
+ <configProperty>
+ <name>ComponentIOR</name>
+ <value>
+ <type>
+ <kind>tk_string</kind>
+ </type>
+ <value>
+ <string>Receiver.ior</string>
+ </value>
+ </value>
+ </configProperty>
+
+ <deployedResource>
+ <resourceUsage>InstanceUsesResource</resourceUsage>
+ <requirementName>CIAO:PolicySet</requirementName>
+ <resourceName>test_server_resource_id</resourceName>
+ <resourceValue>
+ <type>
+ <kind>tk_string</kind>
+ </type>
+ <value>
+ <string>test_policy_set_id</string>
+ </value>
+ </resourceValue>
+ </deployedResource>
+
+ </instance>
+
+
+ <connection>
+ <name>hell_event_connection</name>
+ <internalEndpoint>
+ <portName>click_out</portName>
+ <kind>EventPublisher</kind>
+ <instance>Hello-Sender-idd</instance>
+ </internalEndpoint>
+ <internalEndpoint>
+ <portName>click_in</portName>
+ <kind>EventConsumer</kind>
+ <instance>Hello-Receiver-idd</instance>
+ </internalEndpoint>
+ </connection>
+
+ <connection>
+ <name>hello_facet_connection</name>
+ <internalEndpoint>
+ <portName>push_message</portName>
+ <kind>Facet</kind>
+ <instance>Hello-Sender-idd</instance>
+ </internalEndpoint>
+ <internalEndpoint>
+ <portName>read_message</portName>
+ <kind>SimplexReceptacle</kind>
+ <instance>Hello-Receiver-idd</instance>
+ </internalEndpoint>
+ </connection>
+
+ <!-- @@ Runtime library name must match exactly in "location" tag -->
+ <artifact id="Hello-Sender_exec">
+ <name>Sender_exec</name>
+ <source><!-- @@ Not sure about this--></source>
+ <node><!-- blank --></node>
+ <location>Sender_DnC_exec</location>
+ <execParameter>
+ <name>entryPoint</name>
+ <value>
+ <type>
+ <kind>tk_string</kind>
+ </type>
+ <value>
+ <string>createSenderHome_Impl</string>
+ </value>
+ </value>
+ </execParameter>
+ </artifact>
+
+ <artifact id="Hello-Sender_svnt">
+ <name>Sender_svnt</name>
+ <source><!-- @@ Not sure --></source>
+ <node><!-- blank --></node>
+ <location>Sender_DnC_svnt</location>
+ <execParameter>
+ <name>entryPoint</name>
+ <value>
+ <type>
+ <kind>tk_string</kind>
+ </type>
+ <value>
+ <string>create_Hello_SenderHome_Servant</string>
+ </value>
+ </value>
+ </execParameter>
+ </artifact>
+
+ <artifact id="Hello-Receiver_exec">
+ <name>Receiver_exec</name>
+ <source><!-- @@ Not sure about this--></source>
+ <node><!-- blank --></node>
+ <location>Receiver_DnC_exec</location>
+ <execParameter>
+ <name>entryPoint</name>
+ <value>
+ <type>
+ <kind>tk_string</kind>
+ </type>
+ <value>
+ <string>createReceiverHome_Impl</string>
+ </value>
+ </value>
+ </execParameter>
+ </artifact>
+
+ <artifact id="Hello-Receiver_svnt">
+ <name>Receiver_svnt</name>
+ <source><!-- @@ Not sure --></source>
+ <node><!-- blank --></node>
+ <location>Receiver_DnC_svnt</location>
+ <execParameter>
+ <name>entryPoint</name>
+ <value>
+ <type>
+ <kind>tk_string</kind>
+ </type>
+ <value>
+ <string>create_Hello_ReceiverHome_Servant</string>
+ </value>
+ </value>
+ </execParameter>
+ </artifact>
+
+ <infoProperty>
+ <name>CIAOServerResources</name>
+ <value>
+ <type>
+ <kind>tk_string</kind>
+ </type>
+ <value>
+ <string>rt-config-example.csr</string>
+ </value>
+ </value>
+ </infoProperty>
+
+</Deployment:deploymentPlan>
diff --git a/TAO/CIAO/examples/Hello/descriptors_RTCCM/rt_run_test.pl b/TAO/CIAO/examples/Hello/descriptors_RTCCM/rt_run_test.pl
new file mode 100644
index 00000000000..a790fef1be0
--- /dev/null
+++ b/TAO/CIAO/examples/Hello/descriptors_RTCCM/rt_run_test.pl
@@ -0,0 +1,163 @@
+eval '(exit $?0)' && eval 'exec perl -S $0 ${1+"$@"}'
+ & eval 'exec perl -S $0 $argv:q'
+ if 0;
+
+# $Id$
+# -*- perl -*-
+
+use lib "$ENV{'ACE_ROOT'}/bin";
+use PerlACE::Run_Test;
+$CIAO_ROOT = "$ENV{'CIAO_ROOT'}";
+$DAnCE = "$ENV{'ACE_ROOT'}/TAO/CIAO/DAnCE";
+
+$daemons_running = 0;
+$em_running = 0;
+$daemons = 2;
+@ports = ( 60001, 60002 );
+@iorfiles = ( "NodeApp1.ior", "NodeApp2.ior" );
+$status = 0;
+$dat_file = "NodeManagerMap.dat";
+$cdp_file = "DeploymentPlan.cdp";
+$controller_exec = "$CIAO_ROOT/examples/Hello/Sender/starter";
+
+$E = 0;
+$EM = 0;
+
+# Delete if there are any .ior files.
+sub delete_ior_files {
+ for ($i = 0; $i < $daemons; ++$i) {
+ unlink $iorfiles[$i];
+ }
+ unlink PerlACE::LocalFile ("EM.ior");
+ unlink PerlACE::LocalFile ("Receiver.ior");
+ unlink PerlACE::LocalFile ("Sender.ior");
+ unlink PerlACE::LocalFile ("DAM.ior");
+}
+
+sub kill_node_daemons {
+ for ($i = 0; $i < $daemons; ++$i) {
+ $Daemons[$i]->Kill (); $Daemons[$i]->TimedWait (1);
+ }
+}
+
+sub kill_open_processes {
+ if ($daemons_running == 1) {
+ kill_node_daemons ();
+ }
+
+ if ($em_running == 1) {
+ $EM->Kill ();
+ $EM->TimedWait (1);
+ }
+}
+
+sub run_node_daemons {
+ for ($i = 0; $i < $daemons; ++$i)
+ {
+ $iorfile = $iorfiles[$i];
+ $port = $ports[$i];
+
+ $iiop = "iiop://localhost:$port";
+ $node_app = "$DAnCE/NodeApplication/NodeApplication";
+
+ $d_cmd = "$DAnCE/NodeManager/NodeManager";
+
+ # NON-RT
+# $d_param = "-ORBEndpoint $iiop -s $node_app -o $iorfile";
+
+ # RT enabled
+ $d_param = "-ORBEndpoint $iiop -s $node_app -a \"-r\" -o $iorfile";
+
+ $Daemons[$i] = new PerlACE::Process ($d_cmd, $d_param);
+ $result = $Daemons[$i]->Spawn ();
+ push(@processes, $Daemons[$i]);
+
+ if (PerlACE::waitforfile_timed ($iorfile,
+ $PerlACE::wait_interval_for_process_creation) == -1) {
+ print STDERR
+ "ERROR: The ior file of node daemon $i could not be found\n";
+ for (; $i > 0; --$i) {
+ $Daemons[$i]->Kill (); $Daemons[$i]->TimedWait (1);
+ }
+ return -1;
+ }
+ }
+ $daemons_running = 1;
+ return 0;
+}
+
+delete_ior_files ();
+
+# Invoke node daemons.
+print "Invoking node daemons\n";
+$status = run_node_daemons ();
+
+if ($status != 0) {
+ print STDERR "ERROR: Unable to execute the node daemons\n";
+ exit 1;
+}
+
+$ns_running = 1;
+
+# Invoke execution manager.
+print "Invoking execution manager\n";
+$EM = new PerlACE::Process ("$DAnCE/ExecutionManager/Execution_Manager",
+ "-o EM.ior -i $dat_file");
+$EM->Spawn ();
+
+if (PerlACE::waitforfile_timed ("EM.ior",
+ $PerlACE::wait_interval_for_process_creation) == -1) {
+ print STDERR
+ "ERROR: The ior file of execution manager could not be found\n";
+ kill_open_processes ();
+ exit 1;
+}
+
+$em_running = 1;
+
+# Invoke executor - start the application -.
+print "Invoking executor - start the application -\n";
+$E =
+ new PerlACE::Process ("$DAnCE/Plan_Launcher/plan_launcher",
+ "-p rt-example.cdp -k file://EM.ior -o DAM.ior");
+
+$E->SpawnWaitKill (5000);
+
+if (PerlACE::waitforfile_timed (
+ "Receiver.ior",
+ $PerlACE::wait_interval_for_process_creation) == -1) {
+ print STDERR "ERROR: The ior file of receiver could not be found\n";
+ kill_open_processes ();
+ exit 1;
+}
+
+if (PerlACE::waitforfile_timed ("Sender.ior",
+ $PerlACE::wait_interval_for_process_creation) == -1) {
+ print STDERR "ERROR: The ior file of sender could not be found\n";
+ kill_open_processes ();
+ exit 1;
+}
+
+print "Invoking the controller\n";
+$controller = new PerlACE::Process ("$controller_exec", "-k file://Sender.ior");
+$result = $controller->SpawnWaitKill (3000);
+
+if ($result != 0) {
+ print STDERR "ERROR: The controller returned $result\n";
+ $status = 1;
+}
+
+# Invoke executor - stop the application -.
+print "Invoking executor - stop the application -\n";
+$E =
+ new PerlACE::Process ("$DAnCE/Plan_Launcher/plan_launcher",
+ "-k file://EM.ior -i file://DAM.ior");
+$E->SpawnWaitKill (3000);
+
+print "Executor returned.\n";
+print "Shutting down rest of the processes.\n";
+
+delete_ior_files ();
+kill_open_processes ();
+
+exit $status;
diff --git a/TAO/CIAO/examples/Hello/descriptors_ReDaC/deploymentplan.cdp b/TAO/CIAO/examples/Hello/descriptors_ReDaC/deploymentplan.cdp
new file mode 100644
index 00000000000..8b42fa056ef
--- /dev/null
+++ b/TAO/CIAO/examples/Hello/descriptors_ReDaC/deploymentplan.cdp
@@ -0,0 +1,222 @@
+<Deployment:deploymentPlan
+ xmlns:Deployment="http://www.omg.org/Deployment"
+ xmlns:xmi="http://www.omg.org/XMI"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://www.omg.org/Deployment Deployment.xsd">
+
+ <label>Hello-DeploymentPlan</label>
+ <UUID>Hello_Plan_UUID_0001</UUID>
+ <!-- Could be ZERO -->
+ <realizes>
+ <label>BasicSP-realizes-cid</label>
+ <UUID>c0965470-7b83-11d9-9669-0800200c9a66</UUID>
+ <specificType><!-- @@ What does here? --></specificType>
+ <supportedType>IDL:BasicSP/EC:1.0</supportedType>
+ <port>
+ <name>read_message</name>
+ <specificType>IDL:Hello/ReadMessage:1.0</specificType>
+ <supportedType>IDL:Hello/ReadMessage:1.0</supportedType>
+ <provider>false</provider>
+ <exclusiveProvider>false</exclusiveProvider>
+ <exclusiveUser>true</exclusiveUser>
+ <optional>false</optional>
+ <kind>SimplexReceptacle</kind>
+ </port>
+ </realizes>
+
+ <implementation id="Hello-Sender-mdd">
+ <name>Hello-Sender-mdd</name>
+ <source><!-- @@ Don't know what goes here --></source>
+ <artifact>Hello-Sender_exec</artifact>
+ <artifact>Hello-Sender_svnt</artifact>
+ <!--
+ <execParameter></execParameter>
+ <deployRequirement></deployRequirement>
+ -->
+ </implementation>
+
+ <implementation id="Hello-Receiver-mdd">
+ <name>Hello-Receiver-mdd</name>
+ <source><!-- @@ Don't know what goes here --></source>
+ <artifact>Hello-Receiver_exec</artifact>
+ <artifact>Hello-Receiver_svnt</artifact>
+ <!--
+ <execParameter></execParameter>
+ <deployRequirement></deployRequirement>
+ -->
+ </implementation>
+
+ <instance id="Hello-Sender-idd">
+ <name>Hello-Sender-idd</name>
+ <node>SenderNode</node>
+ <source><!-- @@ What goes here --></source>
+ <implementation>Hello-Sender-mdd</implementation>
+
+ <!-- Add this property if you want to write component reference to IOR -->
+ <configProperty>
+ <name>ComponentIOR</name>
+ <value>
+ <type>
+ <kind>tk_string</kind>
+ </type>
+ <value>
+ <string>Sender.ior</string>
+ </value>
+ </value>
+ </configProperty>
+
+ <!-- Add this property if you want to initialize component attribute -->
+ <configProperty>
+ <name>local_message</name>
+ <value>
+ <type>
+ <kind>tk_string</kind>
+ </type>
+ <value>
+ <string>This is a test message passed in through XML.</string>
+ </value>
+ </value>
+ </configProperty>
+
+ <!-- This attribute initializes an enumerated value -->
+ <configProperty>
+ <name>color</name>
+ <value>
+ <type>
+ <kind>tk_enum</kind>
+ <enum>
+ <name>COLOR_SELECTION</name>
+ <typeId>IDL:Hello/COLOR_SELECTION:1.0</typeId>
+ <member>empty</member>
+ <member>white</member>
+ <member>red</member>
+ <member>yellow</member>
+ </enum>
+ </type>
+ <value>
+ <enum>yellow</enum>
+ </value>
+ </value>
+ </configProperty>
+ </instance>
+
+ <instance id="Hello-Receiver-idd">
+ <name>Hello-Receiver-idd</name>
+ <node>SenderNode</node>
+ <source><!-- @@ What goes here --></source>
+ <implementation>Hello-Receiver-mdd</implementation>
+ <configProperty>
+ <name>ComponentIOR</name>
+ <value>
+ <type>
+ <kind>tk_string</kind>
+ </type>
+ <value>
+ <string>Receiver.ior</string>
+ </value>
+ </value>
+ </configProperty>
+ </instance>
+
+
+ <connection>
+ <name>hello_event_connection</name>
+ <internalEndpoint>
+ <portName>click_out</portName>
+ <kind>EventPublisher</kind>
+ <instance>Hello-Sender-idd</instance>
+ </internalEndpoint>
+ <internalEndpoint>
+ <portName>click_in</portName>
+ <kind>EventConsumer</kind>
+ <instance>Hello-Receiver-idd</instance>
+ </internalEndpoint>
+ </connection>
+
+ <connection>
+ <name>hello_facet_connection</name>
+ <internalEndpoint>
+ <portName>push_message</portName>
+ <kind>Facet</kind>
+ <instance>Hello-Sender-idd</instance>
+ </internalEndpoint>
+ <internalEndpoint>
+ <portName>read_message</portName>
+ <kind>SimplexReceptacle</kind>
+ <instance>Hello-Receiver-idd</instance>
+ </internalEndpoint>
+ </connection>
+
+ <!-- @@ Runtime library name must match exactly in "location" tag -->
+ <artifact id="Hello-Sender_exec">
+ <name>Sender_exec</name>
+ <source><!-- @@ Not sure about this--></source>
+ <node><!-- blank --></node>
+ <location>Sender_DnC_exec</location>
+ <execParameter>
+ <name>entryPoint</name>
+ <value>
+ <type>
+ <kind>tk_string</kind>
+ </type>
+ <value>
+ <string>createSenderHome_Impl</string>
+ </value>
+ </value>
+ </execParameter>
+ </artifact>
+
+ <artifact id="Hello-Sender_svnt">
+ <name>Sender_svnt</name>
+ <source><!-- @@ Not sure --></source>
+ <node><!-- blank --></node>
+ <location>Sender_DnC_svnt</location>
+ <execParameter>
+ <name>entryPoint</name>
+ <value>
+ <type>
+ <kind>tk_string</kind>
+ </type>
+ <value>
+ <string>create_Hello_SenderHome_Servant</string>
+ </value>
+ </value>
+ </execParameter>
+ </artifact>
+
+ <artifact id="Hello-Receiver_exec">
+ <name>Receiver_exec</name>
+ <source><!-- @@ Not sure about this--></source>
+ <node><!-- blank --></node>
+ <location>Receiver_DnC_exec</location>
+ <execParameter>
+ <name>entryPoint</name>
+ <value>
+ <type>
+ <kind>tk_string</kind>
+ </type>
+ <value>
+ <string>createReceiverHome_Impl</string>
+ </value>
+ </value>
+ </execParameter>
+ </artifact>
+
+ <artifact id="Hello-Receiver_svnt">
+ <name>Receiver_svnt</name>
+ <source><!-- @@ Not sure --></source>
+ <node><!-- blank --></node>
+ <location>Receiver_DnC_svnt</location>
+ <execParameter>
+ <name>entryPoint</name>
+ <value>
+ <type>
+ <kind>tk_string</kind>
+ </type>
+ <value>
+ <string>create_Hello_ReceiverHome_Servant</string>
+ </value>
+ </value>
+ </execParameter>
+ </artifact>
+</Deployment:deploymentPlan>
diff --git a/TAO/CIAO/examples/Hello/descriptors_ReDaC/deploymentplan_add.cdp b/TAO/CIAO/examples/Hello/descriptors_ReDaC/deploymentplan_add.cdp
new file mode 100644
index 00000000000..3cd860509a6
--- /dev/null
+++ b/TAO/CIAO/examples/Hello/descriptors_ReDaC/deploymentplan_add.cdp
@@ -0,0 +1,267 @@
+<Deployment:deploymentPlan
+ xmlns:Deployment="http://www.omg.org/Deployment"
+ xmlns:xmi="http://www.omg.org/XMI"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://www.omg.org/Deployment Deployment.xsd">
+
+ <label>Hello-DeploymentPlan</label>
+ <UUID>Hello_Plan_UUID_0001</UUID>
+ <!-- Could be ZERO -->
+ <realizes>
+ <label>BasicSP-realizes-cid</label>
+ <UUID>c0965470-7b83-11d9-9669-0800200c9a66</UUID>
+ <specificType><!-- @@ What does here? --></specificType>
+ <supportedType>IDL:BasicSP/EC:1.0</supportedType>
+ <port>
+ <name>read_message</name>
+ <specificType>IDL:Hello/ReadMessage:1.0</specificType>
+ <supportedType>IDL:Hello/ReadMessage:1.0</supportedType>
+ <provider>false</provider>
+ <exclusiveProvider>false</exclusiveProvider>
+ <exclusiveUser>true</exclusiveUser>
+ <optional>false</optional>
+ <kind>SimplexReceptacle</kind>
+ </port>
+ </realizes>
+
+ <implementation id="Hello-Sender-mdd">
+ <name>Hello-Sender-mdd</name>
+ <source><!-- @@ Don't know what goes here --></source>
+ <artifact>Hello-Sender_exec</artifact>
+ <artifact>Hello-Sender_svnt</artifact>
+ <!--
+ <execParameter></execParameter>
+ <deployRequirement></deployRequirement>
+ -->
+ </implementation>
+
+ <implementation id="Hello-Receiver-mdd">
+ <name>Hello-Receiver-mdd</name>
+ <source><!-- @@ Don't know what goes here --></source>
+ <artifact>Hello-Receiver_exec</artifact>
+ <artifact>Hello-Receiver_svnt</artifact>
+ <!--
+ <execParameter></execParameter>
+ <deployRequirement></deployRequirement>
+ -->
+ </implementation>
+
+ <instance id="Hello-Sender-idd">
+ <name>Hello-Sender-idd</name>
+ <node>SenderNode</node>
+ <source><!-- @@ What goes here --></source>
+ <implementation>Hello-Sender-mdd</implementation>
+
+ <!-- Add this property if you want to write component reference to IOR -->
+ <configProperty>
+ <name>ComponentIOR</name>
+ <value>
+ <type>
+ <kind>tk_string</kind>
+ </type>
+ <value>
+ <string>Sender.ior</string>
+ </value>
+ </value>
+ </configProperty>
+
+ <!-- Add this property if you want to initialize component attribute -->
+ <configProperty>
+ <name>local_message</name>
+ <value>
+ <type>
+ <kind>tk_string</kind>
+ </type>
+ <value>
+ <string>This is a test message passed in through XML.</string>
+ </value>
+ </value>
+ </configProperty>
+
+ <!-- This attribute initializes an enumerated value -->
+ <configProperty>
+ <name>color</name>
+ <value>
+ <type>
+ <kind>tk_enum</kind>
+ <enum>
+ <name>COLOR_SELECTION</name>
+ <typeId>IDL:Hello/COLOR_SELECTION:1.0</typeId>
+ <member>empty</member>
+ <member>white</member>
+ <member>red</member>
+ <member>yellow</member>
+ </enum>
+ </type>
+ <value>
+ <enum>yellow</enum>
+ </value>
+ </value>
+ </configProperty>
+ </instance>
+
+ <instance id="Hello-Receiver-idd">
+ <name>Hello-Receiver-idd</name>
+ <node>SenderNode</node>
+ <source><!-- @@ What goes here --></source>
+ <implementation>Hello-Receiver-mdd</implementation>
+ <configProperty>
+ <name>ComponentIOR</name>
+ <value>
+ <type>
+ <kind>tk_string</kind>
+ </type>
+ <value>
+ <string>Receiver.ior</string>
+ </value>
+ </value>
+ </configProperty>
+ </instance>
+
+ <instance id="Hello-Receiver-idd-UPDATE-XXXXXXXX">
+ <name>Hello-Receiver-idd-UPDATE-XXXXXXXXX</name>
+ <node>ReceiverNode</node>
+ <source><!-- @@ What goes here --></source>
+ <implementation>Hello-Receiver-mdd</implementation>
+ <configProperty>
+ <name>ComponentIOR</name>
+ <value>
+ <type>
+ <kind>tk_string</kind>
+ </type>
+ <value>
+ <string>Receiver_2.ior</string>
+ </value>
+ </value>
+ </configProperty>
+ </instance>
+
+ <connection>
+ <name>hello_event_connection</name>
+ <internalEndpoint>
+ <portName>click_out</portName>
+ <kind>EventPublisher</kind>
+ <instance>Hello-Sender-idd</instance>
+ </internalEndpoint>
+ <internalEndpoint>
+ <portName>click_in</portName>
+ <kind>EventConsumer</kind>
+ <instance>Hello-Receiver-idd</instance>
+ </internalEndpoint>
+ </connection>
+
+ <connection>
+ <name>hello_facet_connection</name>
+ <internalEndpoint>
+ <portName>push_message</portName>
+ <kind>Facet</kind>
+ <instance>Hello-Sender-idd</instance>
+ </internalEndpoint>
+ <internalEndpoint>
+ <portName>read_message</portName>
+ <kind>SimplexReceptacle</kind>
+ <instance>Hello-Receiver-idd</instance>
+ </internalEndpoint>
+ </connection>
+
+ <connection>
+ <name>hello_event_connection_new</name>
+ <internalEndpoint>
+ <portName>click_out</portName>
+ <kind>EventPublisher</kind>
+ <instance>Hello-Sender-idd</instance>
+ </internalEndpoint>
+ <internalEndpoint>
+ <portName>click_in</portName>
+ <kind>EventConsumer</kind>
+ <instance>Hello-Receiver-idd-UPDATE-XXXXXXXX</instance>
+ </internalEndpoint>
+ </connection>
+
+ <connection>
+ <name>hello_facet_connection_new</name>
+ <internalEndpoint>
+ <portName>push_message</portName>
+ <kind>Facet</kind>
+ <instance>Hello-Sender-idd</instance>
+ </internalEndpoint>
+ <internalEndpoint>
+ <portName>read_message</portName>
+ <kind>SimplexReceptacle</kind>
+ <instance>Hello-Receiver-idd-UPDATE-XXXXXXXX</instance>
+ </internalEndpoint>
+ </connection>
+
+ <!-- @@ Runtime library name must match exactly in "location" tag -->
+ <artifact id="Hello-Sender_exec">
+ <name>Sender_exec</name>
+ <source><!-- @@ Not sure about this--></source>
+ <node><!-- blank --></node>
+ <location>Sender_DnC_exec</location>
+ <execParameter>
+ <name>entryPoint</name>
+ <value>
+ <type>
+ <kind>tk_string</kind>
+ </type>
+ <value>
+ <string>createSenderHome_Impl</string>
+ </value>
+ </value>
+ </execParameter>
+ </artifact>
+
+ <artifact id="Hello-Sender_svnt">
+ <name>Sender_svnt</name>
+ <source><!-- @@ Not sure --></source>
+ <node><!-- blank --></node>
+ <location>Sender_DnC_svnt</location>
+ <execParameter>
+ <name>entryPoint</name>
+ <value>
+ <type>
+ <kind>tk_string</kind>
+ </type>
+ <value>
+ <string>create_Hello_SenderHome_Servant</string>
+ </value>
+ </value>
+ </execParameter>
+ </artifact>
+
+ <artifact id="Hello-Receiver_exec">
+ <name>Receiver_exec</name>
+ <source><!-- @@ Not sure about this--></source>
+ <node><!-- blank --></node>
+ <location>Receiver_DnC_exec</location>
+ <execParameter>
+ <name>entryPoint</name>
+ <value>
+ <type>
+ <kind>tk_string</kind>
+ </type>
+ <value>
+ <string>createReceiverHome_Impl</string>
+ </value>
+ </value>
+ </execParameter>
+ </artifact>
+
+ <artifact id="Hello-Receiver_svnt">
+ <name>Receiver_svnt</name>
+ <source><!-- @@ Not sure --></source>
+ <node><!-- blank --></node>
+ <location>Receiver_DnC_svnt</location>
+ <execParameter>
+ <name>entryPoint</name>
+ <value>
+ <type>
+ <kind>tk_string</kind>
+ </type>
+ <value>
+ <string>create_Hello_ReceiverHome_Servant</string>
+ </value>
+ </value>
+ </execParameter>
+ </artifact>
+</Deployment:deploymentPlan>
diff --git a/TAO/CIAO/examples/Hello/descriptors_ReDaC/deploymentplan_remove.cdp b/TAO/CIAO/examples/Hello/descriptors_ReDaC/deploymentplan_remove.cdp
new file mode 100644
index 00000000000..6a34f62e7b0
--- /dev/null
+++ b/TAO/CIAO/examples/Hello/descriptors_ReDaC/deploymentplan_remove.cdp
@@ -0,0 +1,223 @@
+<Deployment:deploymentPlan
+ xmlns:Deployment="http://www.omg.org/Deployment"
+ xmlns:xmi="http://www.omg.org/XMI"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://www.omg.org/Deployment Deployment.xsd">
+
+ <label>Hello-DeploymentPlan</label>
+ <UUID>Hello_Plan_UUID_0001</UUID>
+ <!-- Could be ZERO -->
+ <realizes>
+ <label>BasicSP-realizes-cid</label>
+ <UUID>c0965470-7b83-11d9-9669-0800200c9a66</UUID>
+ <specificType><!-- @@ What does here? --></specificType>
+ <supportedType>IDL:BasicSP/EC:1.0</supportedType>
+ <port>
+ <name>read_message</name>
+ <specificType>IDL:Hello/ReadMessage:1.0</specificType>
+ <supportedType>IDL:Hello/ReadMessage:1.0</supportedType>
+ <provider>false</provider>
+ <exclusiveProvider>false</exclusiveProvider>
+ <exclusiveUser>true</exclusiveUser>
+ <optional>false</optional>
+ <kind>SimplexReceptacle</kind>
+ </port>
+ </realizes>
+
+ <implementation id="Hello-Sender-mdd">
+ <name>Hello-Sender-mdd</name>
+ <source><!-- @@ Don't know what goes here --></source>
+ <artifact>Hello-Sender_exec</artifact>
+ <artifact>Hello-Sender_svnt</artifact>
+ <!--
+ <execParameter></execParameter>
+ <deployRequirement></deployRequirement>
+ -->
+ </implementation>
+
+ <implementation id="Hello-Receiver-mdd">
+ <name>Hello-Receiver-mdd</name>
+ <source><!-- @@ Don't know what goes here --></source>
+ <artifact>Hello-Receiver_exec</artifact>
+ <artifact>Hello-Receiver_svnt</artifact>
+ <!--
+ <execParameter></execParameter>
+ <deployRequirement></deployRequirement>
+ -->
+ </implementation>
+
+ <instance id="Hello-Sender-idd">
+ <name>Hello-Sender-idd</name>
+ <node>SenderNode</node>
+ <source><!-- @@ What goes here --></source>
+ <implementation>Hello-Sender-mdd</implementation>
+
+ <!-- Add this property if you want to write component reference to IOR -->
+ <configProperty>
+ <name>ComponentIOR</name>
+ <value>
+ <type>
+ <kind>tk_string</kind>
+ </type>
+ <value>
+ <string>Sender.ior</string>
+ </value>
+ </value>
+ </configProperty>
+
+ <!-- Add this property if you want to initialize component attribute -->
+ <configProperty>
+ <name>local_message</name>
+ <value>
+ <type>
+ <kind>tk_string</kind>
+ </type>
+ <value>
+ <string>This is a test message passed in through XML.</string>
+ </value>
+ </value>
+ </configProperty>
+
+ <!-- This attribute initializes an enumerated value -->
+ <configProperty>
+ <name>color</name>
+ <value>
+ <type>
+ <kind>tk_enum</kind>
+ <enum>
+ <name>COLOR_SELECTION</name>
+ <typeId>IDL:Hello/COLOR_SELECTION:1.0</typeId>
+ <member>empty</member>
+ <member>white</member>
+ <member>red</member>
+ <member>yellow</member>
+ </enum>
+ </type>
+ <value>
+ <enum>yellow</enum>
+ </value>
+ </value>
+ </configProperty>
+ </instance>
+
+
+ <instance id="Hello-Receiver-idd-UPDATE-XXXXXXXX">
+ <name>Hello-Receiver-idd-UPDATE-XXXXXXXXX</name>
+ <node>ReceiverNode</node>
+ <source><!-- @@ What goes here --></source>
+ <implementation>Hello-Receiver-mdd</implementation>
+ <configProperty>
+ <name>ComponentIOR</name>
+ <value>
+ <type>
+ <kind>tk_string</kind>
+ </type>
+ <value>
+ <string>Receiver_2.ior</string>
+ </value>
+ </value>
+ </configProperty>
+ </instance>
+
+
+ <connection>
+ <name>hello_event_connection_new</name>
+ <internalEndpoint>
+ <portName>click_out</portName>
+ <kind>EventPublisher</kind>
+ <instance>Hello-Sender-idd</instance>
+ </internalEndpoint>
+ <internalEndpoint>
+ <portName>click_in</portName>
+ <kind>EventConsumer</kind>
+ <instance>Hello-Receiver-idd-UPDATE-XXXXXXXX</instance>
+ </internalEndpoint>
+ </connection>
+
+ <connection>
+ <name>hello_facet_connection_new</name>
+ <internalEndpoint>
+ <portName>push_message</portName>
+ <kind>Facet</kind>
+ <instance>Hello-Sender-idd</instance>
+ </internalEndpoint>
+ <internalEndpoint>
+ <portName>read_message</portName>
+ <kind>SimplexReceptacle</kind>
+ <instance>Hello-Receiver-idd-UPDATE-XXXXXXXX</instance>
+ </internalEndpoint>
+ </connection>
+
+ <!-- @@ Runtime library name must match exactly in "location" tag -->
+ <artifact id="Hello-Sender_exec">
+ <name>Sender_exec</name>
+ <source><!-- @@ Not sure about this--></source>
+ <node><!-- blank --></node>
+ <location>Sender_DnC_exec</location>
+ <execParameter>
+ <name>entryPoint</name>
+ <value>
+ <type>
+ <kind>tk_string</kind>
+ </type>
+ <value>
+ <string>createSenderHome_Impl</string>
+ </value>
+ </value>
+ </execParameter>
+ </artifact>
+
+ <artifact id="Hello-Sender_svnt">
+ <name>Sender_svnt</name>
+ <source><!-- @@ Not sure --></source>
+ <node><!-- blank --></node>
+ <location>Sender_DnC_svnt</location>
+ <execParameter>
+ <name>entryPoint</name>
+ <value>
+ <type>
+ <kind>tk_string</kind>
+ </type>
+ <value>
+ <string>create_Hello_SenderHome_Servant</string>
+ </value>
+ </value>
+ </execParameter>
+ </artifact>
+
+ <artifact id="Hello-Receiver_exec">
+ <name>Receiver_exec</name>
+ <source><!-- @@ Not sure about this--></source>
+ <node><!-- blank --></node>
+ <location>Receiver_DnC_exec</location>
+ <execParameter>
+ <name>entryPoint</name>
+ <value>
+ <type>
+ <kind>tk_string</kind>
+ </type>
+ <value>
+ <string>createReceiverHome_Impl</string>
+ </value>
+ </value>
+ </execParameter>
+ </artifact>
+
+ <artifact id="Hello-Receiver_svnt">
+ <name>Receiver_svnt</name>
+ <source><!-- @@ Not sure --></source>
+ <node><!-- blank --></node>
+ <location>Receiver_DnC_svnt</location>
+ <execParameter>
+ <name>entryPoint</name>
+ <value>
+ <type>
+ <kind>tk_string</kind>
+ </type>
+ <value>
+ <string>create_Hello_ReceiverHome_Servant</string>
+ </value>
+ </value>
+ </execParameter>
+ </artifact>
+</Deployment:deploymentPlan>
diff --git a/TAO/CIAO/examples/Hello/descriptors_events/ciao-events-example-with-filters.ced b/TAO/CIAO/examples/Hello/descriptors_events/ciao-events-example-with-filters.ced
new file mode 100644
index 00000000000..916a9e465c7
--- /dev/null
+++ b/TAO/CIAO/examples/Hello/descriptors_events/ciao-events-example-with-filters.ced
@@ -0,0 +1,37 @@
+<!-- $ID$ -->
+
+<CIAO:CIAOEvents
+ xmlns:CIAO="http://www.dre.vanderbilt.edu/CIAOEvents"
+ xmlns:xmi="http://www.omg.org/XMI"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://www.dre.vanderbilt.edu/CIAOEvents CIAOEvents.xsd">
+
+ <eventServiceConfiguration id="es_configuration-01">
+ <name>ES_01</name>
+ <node>SenderNode</node>
+ <type>RTEC</type>
+ <svc_cfg_file>svc.conf</svc_cfg_file>
+
+ <filter>
+ <name>my_filter_01</name>
+ <type>DISJUNCTION</type>
+ <source>Hello-Sender-idd_click_out</source>
+ <source>Hello-Sender-idd-02_click_out</source>
+ </filter>
+
+ <filter>
+ <name>my_filter_02</name>
+ <type>CONJUNCTION</type>
+ <source>Hello-Sender-idd_click_out</source>
+ <source>Hello-Sender-idd-02_click_out</source>
+ </filter>
+ </eventServiceConfiguration>
+
+ <eventServiceConfiguration id="es_configuration-02">
+ <name>ES_02</name>
+ <node>SenderNode</node>
+ <type>RTEC</type>
+ <svc_cfg_file>svc.conf</svc_cfg_file>
+ </eventServiceConfiguration>
+
+</CIAO:CIAOEvents>
diff --git a/TAO/CIAO/examples/Hello/descriptors_events/ciao-events-example.ced b/TAO/CIAO/examples/Hello/descriptors_events/ciao-events-example.ced
new file mode 100644
index 00000000000..9ee5b20ccc0
--- /dev/null
+++ b/TAO/CIAO/examples/Hello/descriptors_events/ciao-events-example.ced
@@ -0,0 +1,21 @@
+<CIAO:CIAOEvents
+ xmlns:CIAO="http://www.dre.vanderbilt.edu/CIAOEvents"
+ xmlns:xmi="http://www.omg.org/XMI"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://www.dre.vanderbilt.edu/CIAOEvents CIAOEvents.xsd">
+
+ <eventServiceConfiguration id="es_configuration-01">
+ <name>ES_01</name>
+ <node>SenderNode</node>
+ <type>RTEC</type>
+ <svc_cfg_file>svc.conf</svc_cfg_file>
+ </eventServiceConfiguration>
+
+ <eventServiceConfiguration id="es_configuration-02">
+ <name>ES_02</name>
+ <node>SenderNode</node>
+ <type>RTEC</type>
+ <svc_cfg_file>svc.conf</svc_cfg_file>
+ </eventServiceConfiguration>
+
+</CIAO:CIAOEvents>
diff --git a/TAO/CIAO/examples/Hello/descriptors_events/flattened_deploymentplan_events.cdp b/TAO/CIAO/examples/Hello/descriptors_events/flattened_deploymentplan_events.cdp
new file mode 100644
index 00000000000..b2c75e78c02
--- /dev/null
+++ b/TAO/CIAO/examples/Hello/descriptors_events/flattened_deploymentplan_events.cdp
@@ -0,0 +1,260 @@
+<Deployment:deploymentPlan
+ xmlns:Deployment="http://www.omg.org/Deployment"
+ xmlns:xmi="http://www.omg.org/XMI"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://www.omg.org/Deployment Deployment.xsd">
+
+ <label>Hello-DeploymentPlan</label>
+ <UUID>Hello_Plan_UUID_0001</UUID>
+ <!-- Could be ZERO -->
+ <realizes>
+ <label>BasicSP-realizes-cid</label>
+ <UUID>c0965470-7b83-11d9-9669-0800200c9a66</UUID>
+ <specificType><!-- @@ What does here? --></specificType>
+ <supportedType>IDL:BasicSP/EC:1.0</supportedType>
+ <port>
+ <name>read_message</name>
+ <specificType>IDL:Hello/ReadMessage:1.0</specificType>
+ <supportedType>IDL:Hello/ReadMessage:1.0</supportedType>
+ <provider>false</provider>
+ <exclusiveProvider>false</exclusiveProvider>
+ <exclusiveUser>true</exclusiveUser>
+ <optional>false</optional>
+ <kind>SimplexReceptacle</kind>
+ </port>
+ </realizes>
+
+ <implementation id="Hello-Sender-mdd">
+ <name>Hello-Sender-mdd</name>
+ <source><!-- @@ Don't know what goes here --></source>
+ <artifact>Hello-Sender_exec</artifact>
+ <artifact>Hello-Sender_svnt</artifact>
+ <!--
+ <execParameter></execParameter>
+ <deployRequirement></deployRequirement>
+ -->
+ </implementation>
+
+ <implementation id="Hello-Receiver-mdd">
+ <name>Hello-Receiver-mdd</name>
+ <source><!-- @@ Don't know what goes here --></source>
+ <artifact>Hello-Receiver_exec</artifact>
+ <artifact>Hello-Receiver_svnt</artifact>
+ <!--
+ <execParameter></execParameter>
+ <deployRequirement></deployRequirement>
+ -->
+ </implementation>
+
+ <instance id="Hello-Sender-idd">
+ <name>Hello-Sender-idd</name>
+ <node>SenderNode</node>
+ <source><!-- @@ What goes here --></source>
+ <implementation>Hello-Sender-mdd</implementation>
+
+ <!-- Add this property if you want to write component reference to IOR -->
+ <configProperty>
+ <name>ComponentIOR</name>
+ <value>
+ <type>
+ <kind>tk_string</kind>
+ </type>
+ <value>
+ <string>Sender.ior</string>
+ </value>
+ </value>
+ </configProperty>
+
+ <!-- Add this property if you want to initialize component attribute -->
+ <configProperty>
+ <name>local_message</name>
+ <value>
+ <type>
+ <kind>tk_string</kind>
+ </type>
+ <value>
+ <string>This is a test message passed in through XML.</string>
+ </value>
+ </value>
+ </configProperty>
+
+ <!-- This attribute initializes an enumerated value -->
+ <configProperty>
+ <name>color</name>
+ <value>
+ <type>
+ <kind>tk_enum</kind>
+ <enum>
+ <name>COLOR_SELECTION</name>
+ <typeId>IDL:Hello/COLOR_SELECTION:1.0</typeId>
+ <member>empty</member>
+ <member>white</member>
+ <member>red</member>
+ <member>yellow</member>
+ </enum>
+ </type>
+ <value>
+ <enum>yellow</enum>
+ </value>
+ </value>
+ </configProperty>
+ </instance>
+
+ <instance id="Hello-Receiver-idd">
+ <name>Hello-Receiver-idd</name>
+ <node>SenderNode</node>
+ <source><!-- @@ What goes here --></source>
+ <implementation>Hello-Receiver-mdd</implementation>
+ <configProperty>
+ <name>ComponentIOR</name>
+ <value>
+ <type>
+ <kind>tk_string</kind>
+ </type>
+ <value>
+ <string>Receiver.ior</string>
+ </value>
+ </value>
+ </configProperty>
+ </instance>
+
+
+ <connection>
+ <name>hello_facet_connection</name>
+ <internalEndpoint>
+ <portName>push_message</portName>
+ <kind>Facet</kind>
+ <instance>Hello-Sender-idd</instance>
+ </internalEndpoint>
+ <internalEndpoint>
+ <portName>read_message</portName>
+ <kind>SimplexReceptacle</kind>
+ <instance>Hello-Receiver-idd</instance>
+ </internalEndpoint>
+ </connection>
+
+<!--
+ <connection>
+ <name>hello_event_connection</name>
+ <internalEndpoint>
+ <portName>click_out</portName>
+ <kind>EventPublisher</kind>
+ <instance>Hello-Sender-idd</instance>
+ </internalEndpoint>
+ <internalEndpoint>
+ <portName>click_in</portName>
+ <kind>EventConsumer</kind>
+ <instance>Hello-Receiver-idd</instance>
+ </internalEndpoint>
+ </connection>
+-->
+
+ <connection>
+ <name>hello_event_ec_publisher_connection</name>
+ <internalEndpoint>
+ <portName>click_out</portName>
+ <kind>rtecEventPublisher</kind>
+ <instance>Hello-Sender-idd</instance>
+ </internalEndpoint>
+ <externalReference>
+ <location>ES_01</location>
+ </externalReference>
+ </connection>
+
+ <connection>
+ <name>hello_event_ec_consumer_connection</name>
+ <internalEndpoint>
+ <portName>click_in</portName>
+ <kind>rtecEventConsumer</kind>
+ <instance>Hello-Receiver-idd</instance>
+ </internalEndpoint>
+ <externalReference>
+ <location>ES_01</location>
+ </externalReference>
+ </connection>
+
+ <!-- @@ Runtime library name must match exactly in "location" tag -->
+ <artifact id="Hello-Sender_exec">
+ <name>Sender_exec</name>
+ <source><!-- @@ Not sure about this--></source>
+ <node><!-- blank --></node>
+ <location>Sender_DnC_exec</location>
+ <execParameter>
+ <name>entryPoint</name>
+ <value>
+ <type>
+ <kind>tk_string</kind>
+ </type>
+ <value>
+ <string>createSenderHome_Impl</string>
+ </value>
+ </value>
+ </execParameter>
+ </artifact>
+
+ <artifact id="Hello-Sender_svnt">
+ <name>Sender_svnt</name>
+ <source><!-- @@ Not sure --></source>
+ <node><!-- blank --></node>
+ <location>Sender_DnC_svnt</location>
+ <execParameter>
+ <name>entryPoint</name>
+ <value>
+ <type>
+ <kind>tk_string</kind>
+ </type>
+ <value>
+ <string>create_Hello_SenderHome_Servant</string>
+ </value>
+ </value>
+ </execParameter>
+ </artifact>
+
+ <artifact id="Hello-Receiver_exec">
+ <name>Receiver_exec</name>
+ <source><!-- @@ Not sure about this--></source>
+ <node><!-- blank --></node>
+ <location>Receiver_DnC_exec</location>
+ <execParameter>
+ <name>entryPoint</name>
+ <value>
+ <type>
+ <kind>tk_string</kind>
+ </type>
+ <value>
+ <string>createReceiverHome_Impl</string>
+ </value>
+ </value>
+ </execParameter>
+ </artifact>
+
+ <artifact id="Hello-Receiver_svnt">
+ <name>Receiver_svnt</name>
+ <source><!-- @@ Not sure --></source>
+ <node><!-- blank --></node>
+ <location>Receiver_DnC_svnt</location>
+ <execParameter>
+ <name>entryPoint</name>
+ <value>
+ <type>
+ <kind>tk_string</kind>
+ </type>
+ <value>
+ <string>create_Hello_ReceiverHome_Servant</string>
+ </value>
+ </value>
+ </execParameter>
+ </artifact>
+
+ <infoProperty>
+ <name>CIAOEvents</name>
+ <value>
+ <type>
+ <kind>tk_string</kind>
+ </type>
+ <value>
+ <string>ciao-events-example.ced</string>
+ </value>
+ </value>
+ </infoProperty>
+</Deployment:deploymentPlan>
diff --git a/TAO/CIAO/examples/Hello/descriptors_events/flattened_deploymentplan_with_filters.cdp b/TAO/CIAO/examples/Hello/descriptors_events/flattened_deploymentplan_with_filters.cdp
new file mode 100644
index 00000000000..9ad178d6dfc
--- /dev/null
+++ b/TAO/CIAO/examples/Hello/descriptors_events/flattened_deploymentplan_with_filters.cdp
@@ -0,0 +1,278 @@
+<Deployment:deploymentPlan
+ xmlns:Deployment="http://www.omg.org/Deployment"
+ xmlns:xmi="http://www.omg.org/XMI"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://www.omg.org/Deployment Deployment.xsd">
+
+ <label>Hello-DeploymentPlan</label>
+ <UUID>Hello_Plan_UUID_0001</UUID>
+ <!-- Could be ZERO -->
+ <realizes>
+ <label>BasicSP-realizes-cid</label>
+ <UUID>c0965470-7b83-11d9-9669-0800200c9a66</UUID>
+ <specificType><!-- @@ What does here? --></specificType>
+ <supportedType>IDL:BasicSP/EC:1.0</supportedType>
+ <port>
+ <name>read_message</name>
+ <specificType>IDL:Hello/ReadMessage:1.0</specificType>
+ <supportedType>IDL:Hello/ReadMessage:1.0</supportedType>
+ <provider>false</provider>
+ <exclusiveProvider>false</exclusiveProvider>
+ <exclusiveUser>true</exclusiveUser>
+ <optional>false</optional>
+ <kind>SimplexReceptacle</kind>
+ </port>
+ </realizes>
+
+ <implementation id="Hello-Sender-mdd">
+ <name>Hello-Sender-mdd</name>
+ <source><!-- @@ Don't know what goes here --></source>
+ <artifact>Hello-Sender_exec</artifact>
+ <artifact>Hello-Sender_svnt</artifact>
+ <!--
+ <execParameter></execParameter>
+ <deployRequirement></deployRequirement>
+ -->
+ </implementation>
+
+ <implementation id="Hello-Receiver-mdd">
+ <name>Hello-Receiver-mdd</name>
+ <source><!-- @@ Don't know what goes here --></source>
+ <artifact>Hello-Receiver_exec</artifact>
+ <artifact>Hello-Receiver_svnt</artifact>
+ <!--
+ <execParameter></execParameter>
+ <deployRequirement></deployRequirement>
+ -->
+ </implementation>
+
+ <instance id="Hello-Sender-idd">
+ <name>Hello-Sender-idd</name>
+ <node>SenderNode</node>
+ <source><!-- @@ What goes here --></source>
+ <implementation>Hello-Sender-mdd</implementation>
+
+ <!-- Add this property if you want to write component reference to IOR -->
+ <configProperty>
+ <name>ComponentIOR</name>
+ <value>
+ <type>
+ <kind>tk_string</kind>
+ </type>
+ <value>
+ <string>Sender.ior</string>
+ </value>
+ </value>
+ </configProperty>
+
+ <!-- Add this property if you want to initialize component attribute -->
+ <configProperty>
+ <name>local_message</name>
+ <value>
+ <type>
+ <kind>tk_string</kind>
+ </type>
+ <value>
+ <string>This is a test message passed in through XML.</string>
+ </value>
+ </value>
+ </configProperty>
+
+ <!-- This attribute initializes an enumerated value -->
+ <configProperty>
+ <name>color</name>
+ <value>
+ <type>
+ <kind>tk_enum</kind>
+ <enum>
+ <name>COLOR_SELECTION</name>
+ <typeId>IDL:Hello/COLOR_SELECTION:1.0</typeId>
+ <member>empty</member>
+ <member>white</member>
+ <member>red</member>
+ <member>yellow</member>
+ </enum>
+ </type>
+ <value>
+ <enum>yellow</enum>
+ </value>
+ </value>
+ </configProperty>
+ </instance>
+
+ <instance id="Hello-Receiver-idd">
+ <name>Hello-Receiver-idd</name>
+ <node>SenderNode</node>
+ <source><!-- @@ What goes here --></source>
+ <implementation>Hello-Receiver-mdd</implementation>
+ <configProperty>
+ <name>ComponentIOR</name>
+ <value>
+ <type>
+ <kind>tk_string</kind>
+ </type>
+ <value>
+ <string>Receiver.ior</string>
+ </value>
+ </value>
+ </configProperty>
+ </instance>
+
+
+ <connection>
+ <name>hello_facet_connection</name>
+ <internalEndpoint>
+ <portName>push_message</portName>
+ <kind>Facet</kind>
+ <instance>Hello-Sender-idd</instance>
+ </internalEndpoint>
+ <internalEndpoint>
+ <portName>read_message</portName>
+ <kind>SimplexReceptacle</kind>
+ <instance>Hello-Receiver-idd</instance>
+ </internalEndpoint>
+ </connection>
+
+<!--
+ <connection>
+ <name>hello_event_connection</name>
+ <internalEndpoint>
+ <portName>click_out</portName>
+ <kind>EventPublisher</kind>
+ <instance>Hello-Sender-idd</instance>
+ </internalEndpoint>
+ <internalEndpoint>
+ <portName>click_in</portName>
+ <kind>EventConsumer</kind>
+ <instance>Hello-Receiver-idd</instance>
+ </internalEndpoint>
+ </connection>
+-->
+
+ <connection>
+ <name>hello_event_ec_publisher_connection</name>
+ <internalEndpoint>
+ <portName>click_out</portName>
+ <kind>rtecEventPublisher</kind>
+ <instance>Hello-Sender-idd</instance>
+ </internalEndpoint>
+ <externalReference>
+ <location>ES_01</location>
+ </externalReference>
+ </connection>
+
+ <connection>
+ <name>hello_event_ec_consumer_connection</name>
+
+ <!-- The position of the below "deployRequirement" element matters -->
+ <deployRequirement>
+ <resourceType>EventFilter</resourceType>
+ <name>my_filter_01</name>
+ <property>
+ <name>EventFilter</name>
+ <value>
+ <type>
+ <kind>tk_string</kind>
+ </type>
+ <value>
+ <string>my_filter</string>
+ </value>
+ </value>
+ </property>
+ </deployRequirement>
+
+ <internalEndpoint>
+ <portName>click_in</portName>
+ <kind>rtecEventConsumer</kind>
+ <instance>Hello-Receiver-idd</instance>
+ </internalEndpoint>
+ <externalReference>
+ <location>ES_01</location>
+ </externalReference>
+ </connection>
+
+ <!-- @@ Runtime library name must match exactly in "location" tag -->
+ <artifact id="Hello-Sender_exec">
+ <name>Sender_exec</name>
+ <source><!-- @@ Not sure about this--></source>
+ <node><!-- blank --></node>
+ <location>Sender_DnC_exec</location>
+ <execParameter>
+ <name>entryPoint</name>
+ <value>
+ <type>
+ <kind>tk_string</kind>
+ </type>
+ <value>
+ <string>createSenderHome_Impl</string>
+ </value>
+ </value>
+ </execParameter>
+ </artifact>
+
+ <artifact id="Hello-Sender_svnt">
+ <name>Sender_svnt</name>
+ <source><!-- @@ Not sure --></source>
+ <node><!-- blank --></node>
+ <location>Sender_DnC_svnt</location>
+ <execParameter>
+ <name>entryPoint</name>
+ <value>
+ <type>
+ <kind>tk_string</kind>
+ </type>
+ <value>
+ <string>create_Hello_SenderHome_Servant</string>
+ </value>
+ </value>
+ </execParameter>
+ </artifact>
+
+ <artifact id="Hello-Receiver_exec">
+ <name>Receiver_exec</name>
+ <source><!-- @@ Not sure about this--></source>
+ <node><!-- blank --></node>
+ <location>Receiver_DnC_exec</location>
+ <execParameter>
+ <name>entryPoint</name>
+ <value>
+ <type>
+ <kind>tk_string</kind>
+ </type>
+ <value>
+ <string>createReceiverHome_Impl</string>
+ </value>
+ </value>
+ </execParameter>
+ </artifact>
+
+ <artifact id="Hello-Receiver_svnt">
+ <name>Receiver_svnt</name>
+ <source><!-- @@ Not sure --></source>
+ <node><!-- blank --></node>
+ <location>Receiver_DnC_svnt</location>
+ <execParameter>
+ <name>entryPoint</name>
+ <value>
+ <type>
+ <kind>tk_string</kind>
+ </type>
+ <value>
+ <string>create_Hello_ReceiverHome_Servant</string>
+ </value>
+ </value>
+ </execParameter>
+ </artifact>
+
+ <infoProperty>
+ <name>CIAOEvents</name>
+ <value>
+ <type>
+ <kind>tk_string</kind>
+ </type>
+ <value>
+ <string>ciao-events-example-with-filters.ced</string>
+ </value>
+ </value>
+ </infoProperty>
+</Deployment:deploymentPlan>
diff --git a/TAO/CIAO/examples/Hello/descriptors_naming/deploymentplan_naming.cdp b/TAO/CIAO/examples/Hello/descriptors_naming/deploymentplan_naming.cdp
new file mode 100644
index 00000000000..7192a2bc061
--- /dev/null
+++ b/TAO/CIAO/examples/Hello/descriptors_naming/deploymentplan_naming.cdp
@@ -0,0 +1,240 @@
+<!-- This flattened deployment plan allows component instance to
+ register to naming service, if you don't want to use naming
+ service at all, you can use the flattened_deployment_without_ns.cdp
+ as your deployment descriptor. -->
+
+<Deployment:deploymentPlan
+ xmlns:Deployment="http://www.omg.org/Deployment"
+ xmlns:xmi="http://www.omg.org/XMI"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://www.omg.org/Deployment Deployment.xsd">
+
+ <label>Hello-DeploymentPlan</label>
+ <UUID>Hello_Plan_UUID_0001</UUID>
+ <!-- Could be ZERO -->
+ <realizes>
+ <label>BasicSP-realizes-cid</label>
+ <UUID>c0965470-7b83-11d9-9669-0800200c9a66</UUID>
+ <specificType><!-- @@ What does here? --></specificType>
+ <supportedType>IDL:BasicSP/EC:1.0</supportedType>
+ <port>
+ <name>read_message</name>
+ <specificType>IDL:Hello/ReadMessage:1.0</specificType>
+ <supportedType>IDL:Hello/ReadMessage:1.0</supportedType>
+ <provider>false></provider>
+ <exclusiveProvider>false</exclusiveProvider>
+ <exclusiveUser>true</exclusiveUser>
+ <optional>false</optional>
+ <kind>SimplexReceptacle</kind>
+ </port>
+ </realizes>
+
+ <implementation id="Hello-Sender-mdd">
+ <name>Hello-Sender-mdd</name>
+ <source><!-- @@ Don't know what goes here --></source>
+ <artifact>Hello-Sender_exec</artifact>
+ <artifact>Hello-Sender_svnt</artifact>
+ <!--
+ <execParameter></execParameter>
+ <deployRequirement></deployRequirement>
+ -->
+ </implementation>
+
+ <implementation id="Hello-Receiver-mdd">
+ <name>Hello-Receiver-mdd</name>
+ <source><!-- @@ Don't know what goes here --></source>
+ <artifact>Hello-Receiver_exec</artifact>
+ <artifact>Hello-Receiver_svnt</artifact>
+ <!--
+ <execParameter></execParameter>
+ <deployRequirement></deployRequirement>
+ -->
+ </implementation>
+
+ <instance id="Hello-Sender-idd">
+ <name>Hello-Sender-idd</name>
+ <node>SenderNode</node>
+ <source><!-- @@ What goes here --></source>
+ <implementation>Hello-Sender-mdd</implementation>
+
+ <!-- Add this property if you want to write component reference to IOR -->
+ <configProperty>
+ <name>ComponentIOR</name>
+ <value>
+ <type>
+ <kind>tk_string</kind>
+ </type>
+ <value>
+ <string>Sender.ior</string>
+ </value>
+ </value>
+ </configProperty>
+
+ <!-- Add this property if you want to register with naming service -->
+ <!-- The string is the naming context to bind to naming service -->
+ <configProperty>
+ <name>RegisterNaming</name>
+ <value>
+ <type>
+ <kind>tk_string</kind>
+ </type>
+ <value>
+ <string>Sender_001</string>
+ </value>
+ </value>
+ </configProperty>
+
+ <!-- Add this property if you want to initialize component attribute -->
+ <configProperty>
+ <name>local_message</name>
+ <value>
+ <type>
+ <kind>tk_string</kind>
+ </type>
+ <value>
+ <string>This is a test message passed in through XML.</string>
+ </value>
+ </value>
+ </configProperty>
+ <!-- This attribute initializes an enumerated value -->
+ <configProperty>
+ <name>color</name>
+ <value>
+ <type>
+ <kind>tk_enum</kind>
+ <enum>
+ <name>COLOR_SELECTION</name>
+ <typeId>IDL:Hello/COLOR_SELECTION:1.0</typeId>
+ <member>empty</member>
+ <member>white</member>
+ <member>red</member>
+ <member>yellow</member>
+ </enum>
+ </type>
+ <value>
+ <enum>yellow</enum>
+ </value>
+ </value>
+ </configProperty>
+ </instance>
+
+ <instance id="Hello-Receiver-idd">
+ <name>Hello-Receiver-idd</name>
+ <node>ReceiverNode</node>
+ <source><!-- @@ What goes here --></source>
+ <implementation>Hello-Receiver-mdd</implementation>
+ <configProperty>
+ <name>ComponentIOR</name>
+ <value>
+ <type>
+ <kind>tk_string</kind>
+ </type>
+ <value>
+ <string>Receiver.ior</string>
+ </value>
+ </value>
+ </configProperty>
+ </instance>
+
+
+ <connection>
+ <name>hell_event_connection</name>
+ <internalEndpoint>
+ <portName>click_out</portName>
+ <kind>EventPublisher</kind>
+ <instance>Hello-Sender-idd</instance>
+ </internalEndpoint>
+ <internalEndpoint>
+ <portName>click_in</portName>
+ <kind>EventConsumer</kind>
+ <instance>Hello-Receiver-idd</instance>
+ </internalEndpoint>
+ </connection>
+
+ <connection>
+ <name>hello_facet_connection</name>
+ <internalEndpoint>
+ <portName>push_message</portName>
+ <kind>Facet</kind>
+ <instance>Hello-Sender-idd</instance>
+ </internalEndpoint>
+ <internalEndpoint>
+ <portName>read_message</portName>
+ <kind>SimplexReceptacle</kind>
+ <instance>Hello-Receiver-idd</instance>
+ </internalEndpoint>
+ </connection>
+
+ <!-- @@ Runtime library name must match exactly in "location" tag -->
+ <artifact id="Hello-Sender_exec">
+ <name>Sender_exec</name>
+ <source><!-- @@ Not sure about this--></source>
+ <node><!-- blank --></node>
+ <location>Sender_DnC_exec</location>
+ <execParameter>
+ <name>entryPoint</name>
+ <value>
+ <type>
+ <kind>tk_string</kind>
+ </type>
+ <value>
+ <string>createSenderHome_Impl</string>
+ </value>
+ </value>
+ </execParameter>
+ </artifact>
+
+ <artifact id="Hello-Sender_svnt">
+ <name>Sender_svnt</name>
+ <source><!-- @@ Not sure --></source>
+ <node><!-- blank --></node>
+ <location>Sender_DnC_svnt</location>
+ <execParameter>
+ <name>entryPoint</name>
+ <value>
+ <type>
+ <kind>tk_string</kind>
+ </type>
+ <value>
+ <string>create_Hello_SenderHome_Servant</string>
+ </value>
+ </value>
+ </execParameter>
+ </artifact>
+
+ <artifact id="Hello-Receiver_exec">
+ <name>Receiver_exec</name>
+ <source><!-- @@ Not sure about this--></source>
+ <node><!-- blank --></node>
+ <location>Receiver_DnC_exec</location>
+ <execParameter>
+ <name>entryPoint</name>
+ <value>
+ <type>
+ <kind>tk_string</kind>
+ </type>
+ <value>
+ <string>createReceiverHome_Impl</string>
+ </value>
+ </value>
+ </execParameter>
+ </artifact>
+
+ <artifact id="Hello-Receiver_svnt">
+ <name>Receiver_svnt</name>
+ <source><!-- @@ Not sure --></source>
+ <node><!-- blank --></node>
+ <location>Receiver_DnC_svnt</location>
+ <execParameter>
+ <name>entryPoint</name>
+ <value>
+ <type>
+ <kind>tk_string</kind>
+ </type>
+ <value>
+ <string>create_Hello_ReceiverHome_Servant</string>
+ </value>
+ </value>
+ </execParameter>
+ </artifact>
+</Deployment:deploymentPlan>
diff --git a/TAO/CIAO/examples/Hello/descriptors_shared_components/deploymentplan.cdp b/TAO/CIAO/examples/Hello/descriptors_shared_components/deploymentplan.cdp
new file mode 100644
index 00000000000..a206dc64080
--- /dev/null
+++ b/TAO/CIAO/examples/Hello/descriptors_shared_components/deploymentplan.cdp
@@ -0,0 +1,224 @@
+<Deployment:deploymentPlan
+ xmlns:Deployment="http://www.omg.org/Deployment"
+ xmlns:xmi="http://www.omg.org/XMI"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://www.omg.org/Deployment Deployment.xsd">
+
+ <label>Hello-DeploymentPlan</label>
+ <UUID>Hello_Plan_UUID_0001</UUID>
+ <!-- Could be ZERO -->
+ <realizes>
+ <label>BasicSP-realizes-cid</label>
+ <UUID>c0965470-7b83-11d9-9669-0800200c9a66</UUID>
+ <specificType><!-- @@ What does here? --></specificType>
+ <supportedType>IDL:BasicSP/EC:1.0</supportedType>
+ <port>
+ <name>read_message</name>
+ <specificType>IDL:Hello/ReadMessage:1.0</specificType>
+ <supportedType>IDL:Hello/ReadMessage:1.0</supportedType>
+ <provider>false</provider>
+ <exclusiveProvider>false</exclusiveProvider>
+ <exclusiveUser>true</exclusiveUser>
+ <optional>false</optional>
+ <kind>SimplexReceptacle</kind>
+ </port>
+ </realizes>
+
+ <implementation id="Hello-Sender-mdd">
+ <name>Hello-Sender-mdd</name>
+ <source><!-- @@ Don't know what goes here --></source>
+ <artifact>Hello-Sender_exec</artifact>
+ <artifact>Hello-Sender_svnt</artifact>
+ <!--
+ <execParameter></execParameter>
+ <deployRequirement></deployRequirement>
+ -->
+ </implementation>
+
+ <implementation id="Hello-Receiver-mdd">
+ <name>Hello-Receiver-mdd</name>
+ <source><!-- @@ Don't know what goes here --></source>
+ <artifact>Hello-Receiver_exec</artifact>
+ <artifact>Hello-Receiver_svnt</artifact>
+ <!--
+ <execParameter></execParameter>
+ <deployRequirement></deployRequirement>
+ -->
+ </implementation>
+
+ <instance id="Hello-Sender-idd">
+ <name>Hello-Sender-idd</name>
+ <node>SenderNode</node>
+ <source><!-- @@ What goes here --></source>
+ <implementation>Hello-Sender-mdd</implementation>
+
+ <!-- Add this property if you want to write component reference to IOR -->
+ <configProperty>
+ <name>ComponentIOR</name>
+ <value>
+ <type>
+ <kind>tk_string</kind>
+ </type>
+ <value>
+ <string>Sender.ior</string>
+ </value>
+ </value>
+ </configProperty>
+
+ <!-- Add this property if you want to initialize component attribute -->
+ <configProperty>
+ <name>local_message</name>
+ <value>
+ <type>
+ <kind>tk_string</kind>
+ </type>
+ <value>
+ <string>This is a test message passed in through XML.</string>
+ </value>
+ </value>
+ </configProperty>
+
+ <!-- This attribute initializes an enumerated value -->
+ <configProperty>
+ <name>color</name>
+ <value>
+ <type>
+ <kind>tk_enum</kind>
+ <enum>
+ <name>COLOR_SELECTION</name>
+ <typeId>IDL:Hello/COLOR_SELECTION:1.0</typeId>
+ <member>empty</member>
+ <member>white</member>
+ <member>red</member>
+ <member>yellow</member>
+ </enum>
+ </type>
+ <value>
+ <enum>yellow</enum>
+ </value>
+ </value>
+ </configProperty>
+ </instance>
+
+ <instance id="Hello-Receiver-idd">
+ <name>Hello-Receiver-idd</name>
+ <node>ReceiverNode</node>
+ <source><!-- @@ What goes here --></source>
+ <implementation>Hello-Receiver-mdd</implementation>
+ <configProperty>
+ <name>ComponentIOR</name>
+ <value>
+ <type>
+ <kind>tk_string</kind>
+ </type>
+ <value>
+ <string>Receiver.ior</string>
+ </value>
+ </value>
+ </configProperty>
+ </instance>
+
+
+ <connection>
+ <name>hello_event_connection</name>
+ <internalEndpoint>
+ <portName>click_out</portName>
+ <kind>EventPublisher</kind>
+ <instance>Hello-Sender-idd</instance>
+ </internalEndpoint>
+ <internalEndpoint>
+ <portName>click_in</portName>
+ <kind>EventConsumer</kind>
+ <instance>Hello-Receiver-idd</instance>
+ </internalEndpoint>
+ </connection>
+
+<!--
+ <connection>
+ <name>hello_facet_connection</name>
+ <internalEndpoint>
+ <portName>push_message</portName>
+ <kind>Facet</kind>
+ <instance>Hello-Sender-idd</instance>
+ </internalEndpoint>
+ <internalEndpoint>
+ <portName>read_message</portName>
+ <kind>SimplexReceptacle</kind>
+ <instance>Hello-Receiver-idd</instance>
+ </internalEndpoint>
+ </connection>
+-->
+
+ <!-- @@ Runtime library name must match exactly in "location" tag -->
+ <artifact id="Hello-Sender_exec">
+ <name>Sender_exec</name>
+ <source><!-- @@ Not sure about this--></source>
+ <node><!-- blank --></node>
+ <location>Sender_DnC_exec</location>
+ <execParameter>
+ <name>entryPoint</name>
+ <value>
+ <type>
+ <kind>tk_string</kind>
+ </type>
+ <value>
+ <string>createSenderHome_Impl</string>
+ </value>
+ </value>
+ </execParameter>
+ </artifact>
+
+ <artifact id="Hello-Sender_svnt">
+ <name>Sender_svnt</name>
+ <source><!-- @@ Not sure --></source>
+ <node><!-- blank --></node>
+ <location>Sender_DnC_svnt</location>
+ <execParameter>
+ <name>entryPoint</name>
+ <value>
+ <type>
+ <kind>tk_string</kind>
+ </type>
+ <value>
+ <string>create_Hello_SenderHome_Servant</string>
+ </value>
+ </value>
+ </execParameter>
+ </artifact>
+
+ <artifact id="Hello-Receiver_exec">
+ <name>Receiver_exec</name>
+ <source><!-- @@ Not sure about this--></source>
+ <node><!-- blank --></node>
+ <location>Receiver_DnC_exec</location>
+ <execParameter>
+ <name>entryPoint</name>
+ <value>
+ <type>
+ <kind>tk_string</kind>
+ </type>
+ <value>
+ <string>createReceiverHome_Impl</string>
+ </value>
+ </value>
+ </execParameter>
+ </artifact>
+
+ <artifact id="Hello-Receiver_svnt">
+ <name>Receiver_svnt</name>
+ <source><!-- @@ Not sure --></source>
+ <node><!-- blank --></node>
+ <location>Receiver_DnC_svnt</location>
+ <execParameter>
+ <name>entryPoint</name>
+ <value>
+ <type>
+ <kind>tk_string</kind>
+ </type>
+ <value>
+ <string>create_Hello_ReceiverHome_Servant</string>
+ </value>
+ </value>
+ </execParameter>
+ </artifact>
+</Deployment:deploymentPlan>
diff --git a/TAO/CIAO/examples/Hello/descriptors_shared_components/deploymentplan_shared_components.cdp b/TAO/CIAO/examples/Hello/descriptors_shared_components/deploymentplan_shared_components.cdp
new file mode 100644
index 00000000000..1acfa45c985
--- /dev/null
+++ b/TAO/CIAO/examples/Hello/descriptors_shared_components/deploymentplan_shared_components.cdp
@@ -0,0 +1,229 @@
+<Deployment:deploymentPlan
+ xmlns:Deployment="http://www.omg.org/Deployment"
+ xmlns:xmi="http://www.omg.org/XMI"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://www.omg.org/Deployment Deployment.xsd">
+
+ <label>Hello-DeploymentPlan</label>
+ <UUID>Hello_Plan_UUID_0002</UUID>
+ <!-- Could be ZERO -->
+ <realizes>
+ <label>BasicSP-realizes-cid</label>
+ <UUID>c0965470-7b83-11d9-9669-0800200c9a66</UUID>
+ <specificType><!-- @@ What does here? --></specificType>
+ <supportedType>IDL:BasicSP/EC:1.0</supportedType>
+ <port>
+ <name>read_message</name>
+ <specificType>IDL:Hello/ReadMessage:1.0</specificType>
+ <supportedType>IDL:Hello/ReadMessage:1.0</supportedType>
+ <provider>false</provider>
+ <exclusiveProvider>false</exclusiveProvider>
+ <exclusiveUser>true</exclusiveUser>
+ <optional>false</optional>
+ <kind>SimplexReceptacle</kind>
+ </port>
+ </realizes>
+
+ <implementation id="Hello-Sender-mdd">
+ <name>Hello-Sender-mdd</name>
+ <source><!-- @@ Don't know what goes here --></source>
+ <artifact>Hello-Sender_exec</artifact>
+ <artifact>Hello-Sender_svnt</artifact>
+ <!--
+ <execParameter></execParameter>
+ <deployRequirement></deployRequirement>
+ -->
+ </implementation>
+
+ <implementation id="Hello-Receiver-mdd">
+ <name>Hello-Receiver-mdd</name>
+ <source><!-- @@ Don't know what goes here --></source>
+ <artifact>Hello-Receiver_exec</artifact>
+ <artifact>Hello-Receiver_svnt</artifact>
+ <!--
+ <execParameter></execParameter>
+ <deployRequirement></deployRequirement>
+ -->
+ </implementation>
+
+ <instance id="Hello-Sender-idd-new-component">
+ <name>Hello-Sender-idd-new-component</name>
+ <node>SenderNode</node>
+ <source><!-- @@ What goes here --></source>
+ <implementation>Hello-Sender-mdd</implementation>
+
+ <!-- Add this property if you want to write component reference to IOR -->
+ <configProperty>
+ <name>ComponentIOR</name>
+ <value>
+ <type>
+ <kind>tk_string</kind>
+ </type>
+ <value>
+ <string>Sender_new_component.ior</string>
+ </value>
+ </value>
+ </configProperty>
+
+ <!-- Add this property if you want to initialize component attribute -->
+ <configProperty>
+ <name>local_message</name>
+ <value>
+ <type>
+ <kind>tk_string</kind>
+ </type>
+ <value>
+ <string>This is a test message passed in through XML.</string>
+ </value>
+ </value>
+ </configProperty>
+
+ <!-- This attribute initializes an enumerated value -->
+ <configProperty>
+ <name>color</name>
+ <value>
+ <type>
+ <kind>tk_enum</kind>
+ <enum>
+ <name>COLOR_SELECTION</name>
+ <typeId>IDL:Hello/COLOR_SELECTION:1.0</typeId>
+ <member>empty</member>
+ <member>white</member>
+ <member>red</member>
+ <member>yellow</member>
+ </enum>
+ </type>
+ <value>
+ <enum>yellow</enum>
+ </value>
+ </value>
+ </configProperty>
+ </instance>
+
+ <instance id="Hello-Receiver-idd">
+ <name>Hello-Receiver-idd</name>
+ <node>ReceiverNode</node>
+ <source><!-- @@ What goes here --></source>
+ <implementation>Hello-Receiver-mdd</implementation>
+ <configProperty>
+ <name>ComponentIOR</name>
+ <value>
+ <type>
+ <kind>tk_string</kind>
+ </type>
+ <value>
+ <!-- ****************************************
+ This IOR file should NOT be generated.
+ DAnCE should NOT create this component instance
+ because it is a "shared" component
+ **************************************** -->
+ <string>Receiver_new_component.ior</string>
+ </value>
+ </value>
+ </configProperty>
+ </instance>
+
+
+ <connection>
+ <name>hello_event_connection</name>
+ <internalEndpoint>
+ <portName>click_out</portName>
+ <kind>EventPublisher</kind>
+ <instance>Hello-Sender-idd-new-component</instance>
+ </internalEndpoint>
+ <internalEndpoint>
+ <portName>click_in</portName>
+ <kind>EventConsumer</kind>
+ <instance>Hello-Receiver-idd</instance>
+ </internalEndpoint>
+ </connection>
+
+
+ <connection>
+ <name>hello_facet_connection</name>
+ <internalEndpoint>
+ <portName>push_message</portName>
+ <kind>Facet</kind>
+ <instance>Hello-Sender-idd-new-component</instance>
+ </internalEndpoint>
+ <internalEndpoint>
+ <portName>read_message</portName>
+ <kind>SimplexReceptacle</kind>
+ <instance>Hello-Receiver-idd</instance>
+ </internalEndpoint>
+ </connection>
+
+
+ <!-- @@ Runtime library name must match exactly in "location" tag -->
+ <artifact id="Hello-Sender_exec">
+ <name>Sender_exec</name>
+ <source><!-- @@ Not sure about this--></source>
+ <node><!-- blank --></node>
+ <location>Sender_DnC_exec</location>
+ <execParameter>
+ <name>entryPoint</name>
+ <value>
+ <type>
+ <kind>tk_string</kind>
+ </type>
+ <value>
+ <string>createSenderHome_Impl</string>
+ </value>
+ </value>
+ </execParameter>
+ </artifact>
+
+ <artifact id="Hello-Sender_svnt">
+ <name>Sender_svnt</name>
+ <source><!-- @@ Not sure --></source>
+ <node><!-- blank --></node>
+ <location>Sender_DnC_svnt</location>
+ <execParameter>
+ <name>entryPoint</name>
+ <value>
+ <type>
+ <kind>tk_string</kind>
+ </type>
+ <value>
+ <string>create_Hello_SenderHome_Servant</string>
+ </value>
+ </value>
+ </execParameter>
+ </artifact>
+
+ <artifact id="Hello-Receiver_exec">
+ <name>Receiver_exec</name>
+ <source><!-- @@ Not sure about this--></source>
+ <node><!-- blank --></node>
+ <location>Receiver_DnC_exec</location>
+ <execParameter>
+ <name>entryPoint</name>
+ <value>
+ <type>
+ <kind>tk_string</kind>
+ </type>
+ <value>
+ <string>createReceiverHome_Impl</string>
+ </value>
+ </value>
+ </execParameter>
+ </artifact>
+
+ <artifact id="Hello-Receiver_svnt">
+ <name>Receiver_svnt</name>
+ <source><!-- @@ Not sure --></source>
+ <node><!-- blank --></node>
+ <location>Receiver_DnC_svnt</location>
+ <execParameter>
+ <name>entryPoint</name>
+ <value>
+ <type>
+ <kind>tk_string</kind>
+ </type>
+ <value>
+ <string>create_Hello_ReceiverHome_Servant</string>
+ </value>
+ </value>
+ </execParameter>
+ </artifact>
+</Deployment:deploymentPlan>
diff --git a/TAO/CIAO/tests/Bug_2130_Regression/Logs/PROBLEM-REPORT-FORM b/TAO/CIAO/tests/Bug_2130_Regression/Logs/PROBLEM-REPORT-FORM
new file mode 100644
index 00000000000..df98c63f06d
--- /dev/null
+++ b/TAO/CIAO/tests/Bug_2130_Regression/Logs/PROBLEM-REPORT-FORM
@@ -0,0 +1,93 @@
+To: ciao-users@cs.wustl.edu
+Subject: RTComponentServer: Session_Container::get_objref blocks
+
+ CIAO VERSION: 0.4.7
+ TAO VERSION : 1.4.7
+ ACE VERSION : 5.4.7
+
+ HOST MACHINE and OPERATING SYSTEM:
+ Intel(R) Pentium(R) D CPU 3.00GHZ
+ Microsoft Windows XP Professional Version 2002 Service Pack 2
+
+ COMPILER NAME AND VERSION (AND PATCHLEVEL):
+ Microsoft Visual C++ .NET 2003
+ Microsoft (R) 32-Bit C/C++-Optimierungscompiler Version 13.10.3077
+
+ THE $ACE_ROOT/ace/config.h FILE [if you use a link to a platform-
+ specific file, simply state which one]:
+ #include "ace/config-win32.h"
+
+ THE $ACE_ROOT/include/makeinclude/platform_macros.GNU FILE [if you
+ use a link to a platform-specific file, simply state which one
+ (unless this isn't used in this case, e.g., with Microsoft Visual
+ C++)]:
+
+ CONTENTS OF $ACE_ROOT/bin/MakeProjectCreator/config/default.features
+ ssl=0
+ qos=1
+ cidl=0
+ rwho=0
+ sctp=0
+ qt=1
+
+ AREA/CLASS/EXAMPLE AFFECTED:
+ CIAO/ciao/Session_Container::get_objref
+
+
+ DOES THE PROBLEM AFFECT:
+ COMPILATION?
+ No
+ LINKING?
+ No
+ EXECUTION?
+ Yes
+ OTHER (please specify)?
+[Please indicate whether ACE/TAO/CIAO, your application, or both are affected.]
+
+ SYNOPSIS:
+ A call of Session_Container::get_objref blocks forever.
+
+ DESCRIPTION:
+ I'm running two clients simultaneously callings the methods acquireSession
+ and releaseSession of the CORBA component TSEC_CheckPoint ( please see
+ sample code in TSEC_CheckPoint_exec.cpp lines 233... and 283... and also
+ controller.cpp line 150... ) configured with realtime policies. After the
+ start of the second client the component TSEC_CheckPoint blocks in the
+ method Session_Container::get_objref ( please see the log file
+ DebuggerCallStack.log ).
+
+ The serious code line of TSEC_CheckPoint_exec.cpp is:
+ CORBA::Object_var obj = this->getObjRef( p_sessionImpl) ;
+
+ If only one client is calling acquireSession every thing works fine.
+ But if I start a second client which is calling acquireSession then the
+ block happens.
+
+ I'm using the patch from 20051612 for the files
+ Container_Base.cpp and Container_Base.h which I merge with the CIAO
+ version 047.
+
+ If i use CIAO version < 043 everythings works fine with no blocks.
+
+ REPEAT BY:
+ Please build the sample code:
+ - cd interfaces
+ - mwc.pl -type nmake
+ - nmake realclean clean depend all
+ - touch *.idl
+ - nmake
+ - cd SEC_CheckPoint
+ - mwc.pl -type nmake
+ - nmake realclean clean depend all
+
+ Please run the sample:
+ - cd descriptors
+ - start_da.bat
+ - start_am.bat
+ - start_test.bat
+ - start_testcase_1.bat
+ - start_testcase_2.bat
+
+
+ SAMPLE FIX/WORKAROUND:
+[If available ]
diff --git a/TAO/CIAO/tests/Bug_2130_Regression/SEC_CheckPoint/TSEC_CheckPoint.cidl b/TAO/CIAO/tests/Bug_2130_Regression/SEC_CheckPoint/TSEC_CheckPoint.cidl
new file mode 100644
index 00000000000..07748288e51
--- /dev/null
+++ b/TAO/CIAO/tests/Bug_2130_Regression/SEC_CheckPoint/TSEC_CheckPoint.cidl
@@ -0,0 +1,17 @@
+//$Id$
+
+#ifndef TSEC_CHECKPOINT_CIDL
+#define TSEC_CHECKPOINT_CIDL
+
+#include "TSEC_CheckPoint.idl"
+
+composition session TSEC_CheckPoint_Impl
+{
+ home executor TSEC_CheckPointHome_Exec
+ {
+ implements ENW::TSEC_CheckPointHome;
+ manages TSEC_CheckPoint_Exec;
+ };
+};
+
+#endif // TSEC_CHECKPOINT_CIDL
diff --git a/TAO/CIAO/tests/Bug_2130_Regression/SEC_CheckPoint/TSEC_CheckPoint.idl b/TAO/CIAO/tests/Bug_2130_Regression/SEC_CheckPoint/TSEC_CheckPoint.idl
new file mode 100644
index 00000000000..83d68fc4353
--- /dev/null
+++ b/TAO/CIAO/tests/Bug_2130_Regression/SEC_CheckPoint/TSEC_CheckPoint.idl
@@ -0,0 +1,27 @@
+//$Id$
+
+#ifndef TSEC_CHECKPOINT_IDL
+#define TSEC_CHECKPOINT_IDL
+
+#include "../interfaces/ENW.idl"
+
+
+module ENW
+{
+ component TSEC_CheckPoint supports ISessionService
+ {
+ provides ISessionService sessionService;
+
+ consumes ET_LifeToken lifeTokenIn;
+ publishes ET_LifeToken lifeTokenOut;
+
+ };
+
+ home TSEC_CheckPointHome manages TSEC_CheckPoint
+ {
+ factory new_TSEC_CheckPoint( in string Version );
+ };
+};
+
+
+#endif // TSEC_CHECKPOINT_IDL
diff --git a/TAO/CIAO/tests/Bug_2130_Regression/SEC_CheckPoint/TSEC_CheckPoint.mpc b/TAO/CIAO/tests/Bug_2130_Regression/SEC_CheckPoint/TSEC_CheckPoint.mpc
new file mode 100644
index 00000000000..41501f86b1e
--- /dev/null
+++ b/TAO/CIAO/tests/Bug_2130_Regression/SEC_CheckPoint/TSEC_CheckPoint.mpc
@@ -0,0 +1,91 @@
+//$Id$
+
+project(TSEC_CheckPoint_stub): ciao_client_dnc, event {
+ avoids += ace_for_tao
+ after += ENW_stub
+ libpaths += ../interfaces
+ libs += ENW_stub
+ sharedname = TSEC_CheckPoint_stub
+ idlflags += -Wb,stub_export_macro=TSEC_CHECKPOINT_STUB_Export -Wb,stub_export_include=TSEC_CheckPoint_stub_export.h -Wb,skel_export_macro=TSEC_CHECKPOINT_SVNT_Export -Wb,skel_export_include=TSEC_CheckPoint_svnt_export.h
+ dynamicflags = TSEC_CHECKPOINT_STUB_BUILD_DLL
+
+ IDL_Files {
+ TSEC_CheckPoint.idl
+ }
+
+ Source_Files {
+ TSEC_CheckPointC.cpp
+ }
+}
+
+project(TSEC_CheckPoint_svnt) : ciao_servant_dnc, event {
+ avoids += ace_for_tao
+ after += TSEC_CheckPoint_stub
+ after += ENW_svnt ENW_stub
+ sharedname = TSEC_CheckPoint_svnt
+ libpaths += ../interfaces
+ libs += TSEC_CheckPoint_stub
+ libs += ENW_stub ENW_svnt
+
+ idlflags += -Wb,export_macro=TSEC_CHECKPOINT_SVNT_Export -Wb,export_include=TSEC_CheckPoint_svnt_export.h
+ dynamicflags = TSEC_CHECKPOINT_SVNT_BUILD_DLL
+
+ CIDL_Files {
+ TSEC_CheckPoint.cidl
+ }
+
+ IDL_Files {
+ TSEC_CheckPointE.idl
+ }
+
+ Source_Files {
+ TSEC_CheckPointEC.cpp
+ TSEC_CheckPointS.cpp
+ TSEC_CheckPoint_svnt.cpp
+ }
+}
+
+
+project(TSEC_CheckPoint_exec) : ciao_component_dnc, event {
+ avoids += ace_for_tao
+ after += TSEC_CheckPoint_svnt
+ after += ENW_svnt ENW_stub
+
+ includes += ../interfaces
+
+ sharedname = TSEC_CheckPoint_exec
+ libpaths += ../interfaces
+ libs += TSEC_CheckPoint_stub TSEC_CheckPoint_svnt
+ libs += ENW_stub ENW_svnt CIAO_DnC_Server TAO_CosNaming
+
+ idlflags += -Wb,export_macro=TSEC_CHECKPOINT_EXEC_Export -Wb,export_include=TSEC_CheckPoint_exec_export.h
+ dynamicflags = TSEC_CHECKPOINT_EXEC_BUILD_DLL
+
+ IDL_Files {
+ TSEC_CheckPointEI.idl
+ }
+
+ Source_Files {
+ TSEC_CheckPointEIC.cpp
+ TSEC_CheckPoint_exec.cpp
+ }
+}
+
+
+project(TSEC_CheckPoint_controller) : ciao_client_dnc, valuetype, event {
+ avoids += ace_for_tao
+ exename = controller
+ after += TSEC_CheckPoint_stub
+ libs += TSEC_CheckPoint_stub ENW_stub
+ libpaths += ../interfaces
+
+ IDL_Files {
+ }
+
+ Source_Files {
+ controller.cpp
+ }
+}
+
+
+
diff --git a/TAO/CIAO/tests/Bug_2130_Regression/SEC_CheckPoint/TSEC_CheckPointEI.idl b/TAO/CIAO/tests/Bug_2130_Regression/SEC_CheckPoint/TSEC_CheckPointEI.idl
new file mode 100644
index 00000000000..9cd47181299
--- /dev/null
+++ b/TAO/CIAO/tests/Bug_2130_Regression/SEC_CheckPoint/TSEC_CheckPointEI.idl
@@ -0,0 +1,19 @@
+// $Id$
+
+#ifndef TSEC_CHECKPOINTEI_IDL
+#define TSEC_CHECKPOINTEI_IDL
+
+#include "TSEC_CheckPointE.idl"
+
+module ENW
+{
+ local interface TSEC_CheckPoint_Exec :
+ CCM_TSEC_CheckPoint,
+ CCM_ISessionService,
+ Components::SessionComponent
+ {
+ };
+
+};
+
+#endif /* TSEC_CHECKPOINTEI_IDL */
diff --git a/TAO/CIAO/tests/Bug_2130_Regression/SEC_CheckPoint/TSEC_CheckPoint_exec.cpp b/TAO/CIAO/tests/Bug_2130_Regression/SEC_CheckPoint/TSEC_CheckPoint_exec.cpp
new file mode 100644
index 00000000000..4e51b2b0e0d
--- /dev/null
+++ b/TAO/CIAO/tests/Bug_2130_Regression/SEC_CheckPoint/TSEC_CheckPoint_exec.cpp
@@ -0,0 +1,635 @@
+//$Id$
+
+//-------------------------------------------------------------------
+// Includes
+//-------------------------------------------------------------------
+
+#include "ace/Timer_Queue.h"
+#include "ace/Reactor.h"
+
+#include "tao/LocalObject.h"
+#include <orbsvcs/CosNamingC.h>
+
+#include "ciao/CIAO_common.h"
+#include "ciao/Version.h"
+
+#include "TSEC_CheckPoint_exec.h"
+#include "TSEC_CheckPoint_svnt.h"
+
+
+//-------------------------------------------------------------------
+// Defines
+//-------------------------------------------------------------------
+
+#define SEPARATION_LINE "----------------------------------------" \
+ "----------------------------------------\n"
+
+
+//-------------------------------------------------------------------
+// Statics
+//-------------------------------------------------------------------
+
+static const char* argv[] =
+{
+ "TSEC_CheckPoint"
+};
+
+
+//-------------------------------------------------------------------
+// Operation
+//-------------------------------------------------------------------
+
+Impl::TSEC_SessionEntry::TSEC_SessionEntry()
+: _p_sessionImpl( 0 )
+{
+}
+
+
+//-------------------------------------------------------------------
+// Operation
+//-------------------------------------------------------------------
+
+Impl::TSEC_SessionEntry::TSEC_SessionEntry
+(
+ TSEC_Session_impl* pSessionImpl,
+ ENW::TSession_ptr Session
+)
+: _p_sessionImpl( pSessionImpl )
+{
+ if( !CORBA::is_nil( Session ) )
+ {
+ _session = ENW::TSession::_duplicate( Session );
+ }
+}
+
+
+//-------------------------------------------------------------------
+// Operation
+//-------------------------------------------------------------------
+
+Impl::TSEC_Session_impl::TSEC_Session_impl
+(
+ TSEC_CheckPoint_exec_i& Parent,
+ CORBA::Long Ident
+)
+ : _isInUse(0),_ident( Ident ),_parent( Parent )
+{
+}
+
+
+//-------------------------------------------------------------------
+// Operation
+//-------------------------------------------------------------------
+
+Impl::TSEC_Session_impl::~TSEC_Session_impl()
+{
+}
+
+
+//-------------------------------------------------------------------
+// Operation
+//-------------------------------------------------------------------
+
+CORBA::ULong
+Impl::TSEC_Session_impl::hash
+(
+ CORBA::ULong Maximum
+ ACE_ENV_ARG_DECL_NOT_USED
+)
+{
+ CORBA::ULong hash =
+ static_cast <CORBA::ULong> (reinterpret_cast <ptrdiff_t> (this));
+
+ return hash % Maximum;
+}
+
+
+//-------------------------------------------------------------------
+// Operation
+//-------------------------------------------------------------------
+
+CORBA::Long
+Impl::TSEC_Session_impl::getIdent
+(
+ ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS
+) ACE_THROW_SPEC( ( CORBA::SystemException ) )
+{
+ //ACE_GUARD_RETURN( TMutex, guard, _parent.getMutex(), -1 );
+
+ return _ident;
+}
+
+
+//-------------------------------------------------------------------
+// Operation
+//-------------------------------------------------------------------
+
+CORBA::Boolean
+Impl::TSEC_Session_impl::isInUse
+(
+ ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS
+) ACE_THROW_SPEC( ( CORBA::SystemException ) )
+{
+ //ACE_GUARD_RETURN( TMutex, guard, _parent.getMutex(), FALSE );
+ return _isInUse;
+}
+
+
+//-------------------------------------------------------------------
+// Operation
+//-------------------------------------------------------------------
+
+Impl::TSEC_CheckPoint_exec_i::TSEC_CheckPoint_exec_i()
+: _p_sessionContainer( 0 ),
+ _isActivated( false )
+{
+ ACE_DEBUG( ( LM_DEBUG, "Impl::TSEC_CheckPoint_exec_i::"
+ "TSEC_CheckPoint_exec_i\n" ) );
+
+ this->init();
+}
+
+
+//-------------------------------------------------------------------
+// Operation
+//-------------------------------------------------------------------
+
+Impl::TSEC_CheckPoint_exec_i::TSEC_CheckPoint_exec_i
+(
+ const char* /*Version*/
+)
+: _p_sessionContainer( 0 ),
+ _isActivated( false )
+{
+ ACE_DEBUG( ( LM_DEBUG, "Impl::TSEC_CheckPoint_exec_i::"
+ "TSEC_CheckPoint_exec_i\n" ) );
+ this->init();
+}
+
+
+//-------------------------------------------------------------------
+// Operation
+//-------------------------------------------------------------------
+
+Impl::TSEC_CheckPoint_exec_i::~TSEC_CheckPoint_exec_i()
+{
+ ACE_DEBUG( ( LM_DEBUG, "Impl::TSEC_CheckPoint_exec_i::"
+ "~TSEC_CheckPoint_exec_i\n" ) );
+}
+
+
+//-------------------------------------------------------------------
+// Operation
+//-------------------------------------------------------------------
+
+CORBA::Object_ptr
+Impl::TSEC_CheckPoint_exec_i::getObjRef
+(
+ PortableServer::Servant Servant
+ ACE_ENV_ARG_DECL_WITH_DEFAULTS
+) ACE_THROW_SPEC( (CORBA::SystemException ) )
+{
+ return this->_p_sessionContainer->get_objref( Servant ACE_ENV_ARG_PARAMETER );
+}
+
+
+//-------------------------------------------------------------------
+// Operation
+//-------------------------------------------------------------------
+
+int
+Impl::TSEC_CheckPoint_exec_i::init
+(
+) ACE_THROW_SPEC( ( CORBA::SystemException ) )
+{
+ ACE_DEBUG ((LM_DEBUG, "Impl::TSEC_CheckPoint_exec_i::init\n"));
+
+ int argc = sizeof( argv ) / sizeof( argv[0] );
+
+ CORBA::ORB_var orb = CORBA::ORB_init( argc,
+ const_cast<char **> (argv)
+ ACE_ENV_ARG_PARAMETER );
+ _orb = CORBA::ORB::_duplicate( orb.in () );
+
+ return 0;
+}
+
+
+//-------------------------------------------------------------------
+// Operation
+//-------------------------------------------------------------------
+
+CORBA::Object_ptr
+Impl::TSEC_CheckPoint_exec_i::installServant
+(
+ PortableServer::Servant Servant
+ ACE_ENV_ARG_DECL
+) ACE_THROW_SPEC( ( CORBA::SystemException ) )
+{
+ assert( this->_p_sessionContainer );
+
+ return this->_p_sessionContainer->install_servant( Servant,
+ CIAO::Container::Component ACE_ENV_ARG_PARAMETER );
+}
+
+
+//-------------------------------------------------------------------
+// Operation
+//-------------------------------------------------------------------
+
+void
+Impl::TSEC_CheckPoint_exec_i::uninstallServant
+(
+ CORBA::Object_ptr ObjRef
+ ACE_ENV_ARG_DECL
+) ACE_THROW_SPEC( ( CORBA::SystemException ) )
+{
+ assert( this->_p_sessionContainer );
+
+ this->_p_sessionContainer->uninstall( ObjRef, CIAO::Container::Component );
+}
+
+
+//-------------------------------------------------------------------
+// Operation
+//-------------------------------------------------------------------
+
+ENW::TSession_ptr
+Impl::TSEC_CheckPoint_exec_i::createSession
+(
+ ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS
+) ACE_THROW_SPEC( ( CORBA::SystemException ) )
+{
+ static long cnt = 0L;
+
+ ENW::TSession_var session = ENW::TSession::_nil();
+
+ ACE_DEBUG( ( LM_DEBUG, "(%P|%t@%T) TSEC_CheckPoint_exec_i::createSession...\n" ) );
+
+ TSEC_Session_impl* p_sessionImpl = new TSEC_Session_impl( *this, ++cnt );
+ PortableServer::ServantBase_var safe_servant( p_sessionImpl );
+ CORBA::Object_var obj = this->installServant( p_sessionImpl
+ ACE_ENV_ARG_PARAMETER );
+ session = ENW::TSession::_narrow ( obj.in () ACE_ENV_ARG_PARAMETER );
+
+ ACE_DEBUG( ( LM_DEBUG, "(%P|%t@%T) TSEC_CheckPoint_exec_i::createSession...[DONE]\n" ) );
+
+ return session._retn();
+}
+
+
+//-------------------------------------------------------------------
+// Operation
+//-------------------------------------------------------------------
+
+::CORBA::Boolean
+Impl::TSEC_CheckPoint_exec_i::destroySession
+(
+ ENW::TSession_ptr Session
+ ACE_ENV_ARG_DECL_WITH_DEFAULTS
+) ACE_THROW_SPEC( ( CORBA::SystemException ) )
+{
+ ACE_DEBUG( ( LM_DEBUG, "(%P|%t@%T) TSEC_CheckPoint_exec_i::destroySession...\n" ) );
+
+ if( CORBA::is_nil( Session ) )
+ {
+ ACE_DEBUG( ( LM_DEBUG, "(%P|%t@%T) TSEC_CheckPoint_exec_i::destroySession...[ERROR]\n" ) );
+ return 0;
+ }
+
+ this->uninstallServant( Session );
+
+ return 1;
+}
+
+
+//-------------------------------------------------------------------
+// Operation
+//-------------------------------------------------------------------
+
+ENW::TSession_ptr
+Impl::TSEC_CheckPoint_exec_i::acquireSession
+(
+ CORBA::Long Ident
+ ACE_ENV_ARG_DECL_WITH_DEFAULTS
+) ACE_THROW_SPEC( ( CORBA::SystemException,
+ ENW::EUnknownIdent ) )
+{
+ ACE_DEBUG( ( LM_DEBUG, "(%P|%t@%T) TSEC_CheckPoint_exec_i::acquireSession...\n" ) );
+
+ if( Ident <= 0 || Ident > TSEC_SESSION_MAX_IDENT )
+ {
+ if( Ident != -1 )
+ {
+ ACE_DEBUG( ( LM_DEBUG, "(%P|%t@%T) TSEC_CheckPoint_exec_i::releaseSession...[ERROR]\n" ) );
+ throw ENW::EUnknownIdent();
+ }
+ }
+
+ ENW::TSession_var session = ENW::TSession::_nil();
+ TSEC_Session_impl* p_sessionImpl = 0;
+
+ ACE_TRY_NEW_ENV
+ {
+ {
+ //ACE_GUARD_RETURN( TMutex, guard, _mutex, ENW::TSession::_nil() );
+ p_sessionImpl = sessionVector[Ident-1]._p_sessionImpl;
+ }
+
+ p_sessionImpl->isInUse( 1 );
+ CORBA::Object_var obj = this->getObjRef( p_sessionImpl) ;
+ session = ENW::TSession::_narrow ( obj.in () ACE_ENV_ARG_PARAMETER );
+ //session = sessionVector[Ident-1]._session;
+ }
+ ACE_CATCHANY
+ {
+ ACE_PRINT_EXCEPTION( ACE_ANY_EXCEPTION, "Reason\n" );
+ ACE_DEBUG( ( LM_DEBUG, "(%P|%t@%T) TSEC_CheckPoint_exec_i::releaseSession...[ERROR]\n" ) );
+
+ return session._retn();
+ }
+ ACE_ENDTRY;
+
+ ACE_DEBUG( ( LM_DEBUG, "(%P|%t@%T) TSEC_CheckPoint_exec_i::releaseSession...[DONE]\n" ) );
+
+ return session._retn();
+}
+
+
+//-------------------------------------------------------------------
+// Operation
+//-------------------------------------------------------------------
+
+::CORBA::Boolean
+Impl::TSEC_CheckPoint_exec_i::releaseSession
+(
+ CORBA::Long Ident,
+ ENW::TSession_ptr Session
+ ACE_ENV_ARG_DECL_WITH_DEFAULTS
+) ACE_THROW_SPEC( ( CORBA::SystemException,
+ ENW::EUnknownSession ) )
+{
+ ACE_DEBUG( ( LM_DEBUG, "(%P|%t@%T) TSEC_CheckPoint_exec_i::releaseSession...\n" ) );
+
+ if( CORBA::is_nil( Session ) )
+ {
+ ACE_DEBUG( ( LM_DEBUG, "(%P|%t@%T) TSEC_CheckPoint_exec_i::releaseSession...[ERROR]\n" ) );
+ throw ENW::EUnknownSession();
+ }
+
+ //CORBA::Long ident = Session->getIdent();
+ CORBA::Long ident = Ident;
+
+ if( ident <= 0 || ident > TSEC_SESSION_MAX_IDENT )
+ {
+ ACE_DEBUG( ( LM_DEBUG, "(%P|%t@%T) TSEC_CheckPoint_exec_i::releaseSession...[ERROR]\n" ) );
+ return 0;;
+ }
+
+ TSEC_Session_impl* p_sessionImpl = 0;
+
+ {
+ //ACE_GUARD_RETURN( TMutex, guard, _mutex, FALSE );
+
+ p_sessionImpl = sessionVector[ident-1]._p_sessionImpl;
+ }
+
+ assert( p_sessionImpl );
+
+
+ if( !p_sessionImpl->isInUse() )
+ {
+ ACE_DEBUG( ( LM_DEBUG, "(%P|%t@%T) TSEC_CheckPoint_exec_i::releaseSession...[ERROR]\n" ) );
+ return 0;
+ }
+
+ p_sessionImpl->isInUse( 0);
+
+ ACE_DEBUG( ( LM_DEBUG, "(%P|%t@%T) TSEC_CheckPoint_exec_i::releaseSession...[DONE]\n" ) );
+
+ return 1;
+}
+
+
+//-------------------------------------------------------------------
+// Operation
+//-------------------------------------------------------------------
+
+ENW::CCM_ISessionService_ptr
+Impl::TSEC_CheckPoint_exec_i::get_sessionService
+(
+ ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS
+) ACE_THROW_SPEC( ( CORBA::SystemException ) )
+{
+ return ENW::CCM_ISessionService::_duplicate( this );
+}
+
+
+//-------------------------------------------------------------------
+// Operation
+//-------------------------------------------------------------------
+
+void
+Impl::TSEC_CheckPoint_exec_i::set_session_context
+(
+ Components::SessionContext_ptr Ctx
+ ACE_ENV_ARG_DECL_WITH_DEFAULTS
+) ACE_THROW_SPEC( ( CORBA::SystemException,
+ Components::CCMException ) )
+{
+ ACE_DEBUG( ( LM_DEBUG,
+ "Impl::TSEC_CheckPoint_exec_i::set_session_context\n" ) );
+
+ this->_context =
+ ENW::CCM_TSEC_CheckPoint_Context::_narrow( Ctx
+ ACE_ENV_ARG_PARAMETER );
+ ACE_CHECK;
+
+ if( CORBA::is_nil( this->_context.in() ) )
+ {
+ ACE_THROW( CORBA::INTERNAL() );
+ }
+
+ CIDL_TSEC_CheckPoint_Impl::TSEC_CheckPoint_Context* p_checkPoint_Context =
+ CIDL_TSEC_CheckPoint_Impl::TSEC_CheckPoint_Context::_narrow( Ctx );
+
+ if( !p_checkPoint_Context )
+ {
+ ACE_THROW( CORBA::INTERNAL() );
+ }
+
+ this->_p_sessionContainer = p_checkPoint_Context->_ciao_the_Container();
+
+ if( !_p_sessionContainer )
+ {
+ ACE_THROW( CORBA::INTERNAL() );
+ }
+}
+
+
+//-------------------------------------------------------------------
+// Operation
+//-------------------------------------------------------------------
+
+void
+Impl::TSEC_CheckPoint_exec_i::push_lifeTokenIn
+(
+ ENW::ET_LifeToken* /* Event */
+ ACE_ENV_ARG_DECL_WITH_DEFAULTS
+) ACE_THROW_SPEC( ( CORBA::SystemException ) )
+{
+ _awaitingLifeToken = false;
+}
+
+
+//-------------------------------------------------------------------
+// Operation
+//-------------------------------------------------------------------
+
+void
+Impl::TSEC_CheckPoint_exec_i::ciao_preactivate
+(
+ ACE_ENV_SINGLE_ARG_DECL_NOT_USED
+) ACE_THROW_SPEC( ( CORBA::SystemException,
+ Components::CCMException ) )
+{
+ ACE_DEBUG( ( LM_DEBUG, "Impl::TSEC_CheckPoint_exec_i::ciao_preactivate\n" ) );
+}
+
+
+//-------------------------------------------------------------------
+// Operation
+//-------------------------------------------------------------------
+
+void
+Impl::TSEC_CheckPoint_exec_i::ccm_activate
+(
+ ACE_ENV_SINGLE_ARG_DECL_NOT_USED
+) ACE_THROW_SPEC( ( CORBA::SystemException,
+ Components::CCMException ) )
+{
+ ACE_DEBUG( ( LM_DEBUG, "Impl::TSEC_CheckPoint_exec_i::ccm_activate\n" ) );
+
+ TSEC_Session_impl* p_sessionImpl = 0;
+
+ for( CORBA::Long i = 0; i < TSEC_SESSION_MAX_IDENT; ++i )
+ {
+ p_sessionImpl = new TSEC_Session_impl( *this, i + 1 );
+ PortableServer::ServantBase_var safe_servant( p_sessionImpl );
+ CORBA::Object_var obj = this->installServant( p_sessionImpl
+ ACE_ENV_ARG_PARAMETER );
+ ENW::TSession_var session =
+ ENW::TSession::_narrow ( obj.in () ACE_ENV_ARG_PARAMETER );
+ sessionVector[i] = TSEC_SessionEntry( p_sessionImpl, session.in () );
+ }
+
+ _isActivated = true;
+}
+
+
+//-------------------------------------------------------------------
+// Operation
+//-------------------------------------------------------------------
+
+void
+Impl::TSEC_CheckPoint_exec_i::ciao_postactivate
+(
+ ACE_ENV_SINGLE_ARG_DECL_NOT_USED
+) ACE_THROW_SPEC( ( CORBA::SystemException,
+ Components::CCMException ) )
+{
+ ACE_DEBUG( ( LM_DEBUG, "Impl::TSEC_CheckPoint_exec_i::ciao_postactivate\n" ) );
+}
+
+
+//-------------------------------------------------------------------
+// Operation
+//-------------------------------------------------------------------
+
+void
+Impl::TSEC_CheckPoint_exec_i::ccm_passivate
+(
+ ACE_ENV_SINGLE_ARG_DECL_NOT_USED
+) ACE_THROW_SPEC( ( CORBA::SystemException,
+ Components::CCMException ) )
+{
+ ACE_DEBUG( ( LM_DEBUG, "Impl::TSEC_CheckPoint_exec_i::ccm_passivate\n" ) );
+ _isActivated = false;
+}
+
+
+//-------------------------------------------------------------------
+// Operation
+//-------------------------------------------------------------------
+
+void
+Impl::TSEC_CheckPoint_exec_i::ccm_remove
+(
+ ACE_ENV_SINGLE_ARG_DECL_NOT_USED
+) ACE_THROW_SPEC( ( CORBA::SystemException,
+ Components::CCMException ) )
+{
+ ACE_DEBUG( ( LM_DEBUG, "Impl::TSEC_CheckPoint_exec_i::ccm_remove\n" ) );
+ _isActivated = false;
+}
+
+
+//-------------------------------------------------------------------
+// Operation
+//-------------------------------------------------------------------
+
+Impl::TSEC_CheckPointHome_exec_i::TSEC_CheckPointHome_exec_i()
+{
+}
+
+
+//-------------------------------------------------------------------
+// Operation
+//-------------------------------------------------------------------
+
+Impl::TSEC_CheckPointHome_exec_i::~TSEC_CheckPointHome_exec_i()
+{
+}
+
+
+//-------------------------------------------------------------------
+// Operation
+//-------------------------------------------------------------------
+
+::Components::EnterpriseComponent_ptr
+Impl::TSEC_CheckPointHome_exec_i::new_TSEC_CheckPoint
+(
+ const char* Version
+ ACE_ENV_ARG_DECL_WITH_DEFAULTS
+ ) ACE_THROW_SPEC( ( CORBA::SystemException ))
+{
+ return new Impl::TSEC_CheckPoint_exec_i( Version );
+}
+
+
+//-------------------------------------------------------------------
+// Operation
+//-------------------------------------------------------------------
+
+::Components::EnterpriseComponent_ptr
+Impl::TSEC_CheckPointHome_exec_i::create
+(
+ ACE_ENV_SINGLE_ARG_DECL
+) ACE_THROW_SPEC( ( CORBA::SystemException,
+ Components::CCMException ) )
+{
+
+ return new Impl::TSEC_CheckPoint_exec_i();
+}
+
+
+//-------------------------------------------------------------------
+// Operation
+//-------------------------------------------------------------------
+
+extern "C" TSEC_CHECKPOINT_EXEC_Export ::Components::HomeExecutorBase_ptr
+createTSEC_CheckPointHome_Impl()
+{
+ return new Impl::TSEC_CheckPointHome_exec_i();
+}
+
diff --git a/TAO/CIAO/tests/Bug_2130_Regression/SEC_CheckPoint/TSEC_CheckPoint_exec.h b/TAO/CIAO/tests/Bug_2130_Regression/SEC_CheckPoint/TSEC_CheckPoint_exec.h
new file mode 100644
index 00000000000..8aab825250b
--- /dev/null
+++ b/TAO/CIAO/tests/Bug_2130_Regression/SEC_CheckPoint/TSEC_CheckPoint_exec.h
@@ -0,0 +1,278 @@
+//$Id$
+
+//===================================================================
+/**
+ * @file TSEC_CheckPoint_exec.h
+ *
+ * Header file for the Executor implementation.
+ */
+//===================================================================
+
+#ifndef TSEC_CheckPoint_EXEC_H
+#define TSEC_CheckPoint_EXEC_H
+
+//-------------------------------------------------------------------
+// Includes
+//-------------------------------------------------------------------
+
+#include "ace/Thread_Manager.h"
+#include "ace/Task.h"
+
+#include "tao/LocalObject.h"
+
+#include "ciao/Container_Base.h"
+
+#include "ENWS.h"
+#include "TSEC_CheckPointEIC.h"
+#include "TSEC_CheckPoint_exec_export.h"
+
+
+//-------------------------------------------------------------------
+// Defines
+//-------------------------------------------------------------------
+
+#define TSEC_SESSION_ID_MAX 0xffffffff
+#define TSEC_SESSION_MAX_IDENT 2
+
+
+//-------------------------------------------------------------------
+// Type definitions
+//-------------------------------------------------------------------
+
+
+//-------------------------------------------------------------------
+// Forward declarations
+//-------------------------------------------------------------------
+
+
+//-------------------------------------------------------------------
+// Classes
+//-------------------------------------------------------------------
+
+namespace Impl
+{
+ typedef ACE_SYNCH_MUTEX TMutex;
+
+ class TSEC_CheckPoint_exec_i;
+
+ class TSEC_Session_impl :
+ public virtual POA_ENW::TSession,
+ public virtual TAO_Local_RefCounted_Object
+ {
+ public:
+
+ TSEC_Session_impl
+ (
+ TSEC_CheckPoint_exec_i& Parent,
+ CORBA::Long Ident
+ );
+
+ virtual ~TSEC_Session_impl();
+
+ CORBA::Long getIdent() ACE_THROW_SPEC( ( CORBA::SystemException ) );
+ CORBA::Boolean isInUse() ACE_THROW_SPEC( ( CORBA::SystemException ) );
+ void isInUse( CORBA::Boolean Flag ) { _isInUse = Flag; }
+
+ protected:
+ CORBA::Boolean _isInUse;
+ CORBA::Long _ident;
+
+ TSEC_CheckPoint_exec_i& _parent;
+
+ CORBA::ULong hash
+ (
+ CORBA::ULong Maximum
+ ACE_ENV_ARG_DECL_NOT_USED
+ );
+
+ TSEC_CheckPoint_exec_i& getParent() { return _parent; }
+
+ };
+
+ struct TSEC_SessionEntry
+ {
+ TSEC_SessionEntry();
+
+ TSEC_SessionEntry
+ (
+ TSEC_Session_impl* pSessionImpl,
+ ENW::TSession_ptr Session
+ );
+
+ TSEC_Session_impl* _p_sessionImpl;
+ ENW::TSession_var _session;
+ };
+
+ class TSEC_CHECKPOINT_EXEC_Export TSEC_CheckPoint_exec_i :
+ public virtual ENW::TSEC_CheckPoint_Exec,
+ public virtual TAO_Local_RefCounted_Object
+ {
+ public:
+ TSEC_CheckPoint_exec_i();
+ TSEC_CheckPoint_exec_i( const char* Version );
+
+ virtual ~TSEC_CheckPoint_exec_i();
+
+ // Attribute Operationen:
+ //
+
+
+ // Interface ISessionService
+ //
+
+ virtual ENW::CCM_ISessionService_ptr get_sessionService
+ (
+ ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS
+ ) ACE_THROW_SPEC( ( CORBA::SystemException ) );
+
+
+ virtual ENW::TSession_ptr createSession
+ (
+ ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS
+ ) ACE_THROW_SPEC( ( CORBA::SystemException ) );
+
+ virtual CORBA::Boolean destroySession
+ (
+ ENW::TSession_ptr Session
+ ACE_ENV_ARG_DECL_WITH_DEFAULTS
+ ) ACE_THROW_SPEC( ( CORBA::SystemException ) );
+
+ virtual ENW::TSession_ptr acquireSession
+ (
+ CORBA::Long Ident
+ ACE_ENV_ARG_DECL_WITH_DEFAULTS
+ ) ACE_THROW_SPEC( ( CORBA::SystemException,
+ ENW::EUnknownIdent ) );
+
+ virtual CORBA::Boolean releaseSession
+ (
+ CORBA::Long Ident,
+ ENW::TSession_ptr Session
+ ACE_ENV_ARG_DECL_WITH_DEFAULTS
+ ) ACE_THROW_SPEC( ( CORBA::SystemException,
+ ENW::EUnknownSession ) );
+
+
+ // Events
+ //
+
+ virtual void push_lifeTokenIn
+ (
+ ENW::ET_LifeToken* Event
+ ACE_ENV_ARG_DECL_WITH_DEFAULTS
+ ) ACE_THROW_SPEC( ( CORBA::SystemException ) );
+
+
+ // Operations from Components::SessionComponent
+ //
+
+ virtual void set_session_context
+ (
+ Components::SessionContext_ptr ctx
+ ACE_ENV_ARG_DECL_WITH_DEFAULTS
+ ) ACE_THROW_SPEC( ( CORBA::SystemException,
+ Components::CCMException ) );
+
+ virtual void ciao_preactivate
+ (
+ ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS
+ ) ACE_THROW_SPEC( ( CORBA::SystemException,
+ Components::CCMException ) );
+
+ virtual void ccm_activate
+ (
+ ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS
+ ) ACE_THROW_SPEC( ( CORBA::SystemException,
+ Components::CCMException ) );
+
+ virtual void ciao_postactivate
+ (
+ ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS
+ ) ACE_THROW_SPEC( ( CORBA::SystemException,
+ Components::CCMException ) );
+
+
+ virtual void ccm_passivate
+ (
+ ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS
+ ) ACE_THROW_SPEC( ( CORBA::SystemException,
+ Components::CCMException ) );
+
+ virtual void ccm_remove
+ (
+ ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS
+ ) ACE_THROW_SPEC( ( CORBA::SystemException,
+ Components::CCMException ) );
+
+ CORBA::Object_ptr getObjRef
+ (
+ PortableServer::Servant Servant
+ ACE_ENV_ARG_DECL_WITH_DEFAULTS
+ ) ACE_THROW_SPEC( ( CORBA::SystemException ) );
+
+ int init( ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS
+ )ACE_THROW_SPEC( ( CORBA::SystemException ) );
+
+ CORBA::Object_ptr installServant
+ (
+ PortableServer::Servant Servant
+ ACE_ENV_ARG_DECL_WITH_DEFAULTS
+ ) ACE_THROW_SPEC( ( CORBA::SystemException ) );
+
+ void uninstallServant
+ (
+ CORBA::Object_ptr ObjRef
+ ACE_ENV_ARG_DECL_WITH_DEFAULTS
+ ) ACE_THROW_SPEC( ( CORBA::SystemException ) );
+
+ TMutex& getMutex() { return _mutex; }
+
+ protected:
+ // Copmponent specific context
+
+ ENW::CCM_TSEC_CheckPoint_Context_var _context;
+ ::CIAO::Session_Container* _p_sessionContainer;
+ TMutex _mutex;
+ CORBA::ORB_var _orb;
+
+ private:
+ bool _awaitingLifeToken;
+ bool _isActivated;
+
+ //TSEC_Session_impl* sessionVector[TSEC_SESSION_MAX_IDENT];
+ TSEC_SessionEntry sessionVector[TSEC_SESSION_MAX_IDENT];
+ };
+
+ /**
+ * home executor implementation class.
+ */
+ class TSEC_CHECKPOINT_EXEC_Export TSEC_CheckPointHome_exec_i :
+ public virtual ENW::CCM_TSEC_CheckPointHome,
+ public virtual TAO_Local_RefCounted_Object
+ {
+ public:
+
+ TSEC_CheckPointHome_exec_i();
+
+ virtual ~TSEC_CheckPointHome_exec_i();
+
+ // Explicit home operations.
+ virtual ::Components::EnterpriseComponent_ptr new_TSEC_CheckPoint
+ (
+ const char* Version
+ ACE_ENV_ARG_DECL_WITH_DEFAULTS
+ ) ACE_THROW_SPEC(( CORBA::SystemException));
+
+ // Implicit home operations.
+ virtual ::Components::EnterpriseComponent_ptr create
+ (
+ ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS
+ ) ACE_THROW_SPEC( ( CORBA::SystemException,
+ Components::CCMException ) );
+ };
+} // Impl
+
+extern "C" TSEC_CHECKPOINT_EXEC_Export ::Components::HomeExecutorBase_ptr
+createTSEC_CheckPointHome_Impl();
+
+#endif // TSEC_CheckPoint_EXEC_H
diff --git a/TAO/CIAO/tests/Bug_2130_Regression/SEC_CheckPoint/TSEC_CheckPoint_exec_export.h b/TAO/CIAO/tests/Bug_2130_Regression/SEC_CheckPoint/TSEC_CheckPoint_exec_export.h
new file mode 100644
index 00000000000..4b0bf7770ef
--- /dev/null
+++ b/TAO/CIAO/tests/Bug_2130_Regression/SEC_CheckPoint/TSEC_CheckPoint_exec_export.h
@@ -0,0 +1,50 @@
+
+// -*- C++ -*-
+// $Id$
+// Definition for Win32 Export directives.
+// This file is generated automatically by generate_export_file.pl TSEC_CHECKPOINT_EXEC
+// ------------------------------
+#ifndef TSEC_CHECKPOINT_EXEC_EXPORT_H
+#define TSEC_CHECKPOINT_EXEC_EXPORT_H
+
+#include "ace/config-all.h"
+
+#if !defined (TSEC_CHECKPOINT_EXEC_HAS_DLL)
+# define TSEC_CHECKPOINT_EXEC_HAS_DLL 1
+#endif /* ! TSEC_CHECKPOINT_EXEC_HAS_DLL */
+
+#if defined (TSEC_CHECKPOINT_EXEC_HAS_DLL) && (TSEC_CHECKPOINT_EXEC_HAS_DLL == 1)
+# if defined (TSEC_CHECKPOINT_EXEC_BUILD_DLL)
+# define TSEC_CHECKPOINT_EXEC_Export ACE_Proper_Export_Flag
+# define TSEC_CHECKPOINT_EXEC_SINGLETON_DECLARATION(T) ACE_EXPORT_SINGLETON_DECLARATION (T)
+# define TSEC_CHECKPOINT_EXEC_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK) ACE_EXPORT_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK)
+# else /* TSEC_CHECKPOINT_EXEC_BUILD_DLL */
+# define TSEC_CHECKPOINT_EXEC_Export ACE_Proper_Import_Flag
+# define TSEC_CHECKPOINT_EXEC_SINGLETON_DECLARATION(T) ACE_IMPORT_SINGLETON_DECLARATION (T)
+# define TSEC_CHECKPOINT_EXEC_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK) ACE_IMPORT_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK)
+# endif /* TSEC_CHECKPOINT_EXEC_BUILD_DLL */
+#else /* TSEC_CHECKPOINT_EXEC_HAS_DLL == 1 */
+# define TSEC_CHECKPOINT_EXEC_Export
+# define TSEC_CHECKPOINT_EXEC_SINGLETON_DECLARATION(T)
+# define TSEC_CHECKPOINT_EXEC_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK)
+#endif /* TSEC_CHECKPOINT_EXEC_HAS_DLL == 1 */
+
+// Set TSEC_CHECKPOINT_EXEC_NTRACE = 0 to turn on library specific tracing even if
+// tracing is turned off for ACE.
+#if !defined (TSEC_CHECKPOINT_EXEC_NTRACE)
+# if (ACE_NTRACE == 1)
+# define TSEC_CHECKPOINT_EXEC_NTRACE 1
+# else /* (ACE_NTRACE == 1) */
+# define TSEC_CHECKPOINT_EXEC_NTRACE 0
+# endif /* (ACE_NTRACE == 1) */
+#endif /* !TSEC_CHECKPOINT_EXEC_NTRACE */
+
+#if (TSEC_CHECKPOINT_EXEC_NTRACE == 1)
+# define TSEC_CHECKPOINT_EXEC_TRACE(X)
+#else /* (TSEC_CHECKPOINT_EXEC_NTRACE == 1) */
+# define TSEC_CHECKPOINT_EXEC_TRACE(X) ACE_TRACE_IMPL(X)
+#endif /* (TSEC_CHECKPOINT_EXEC_NTRACE == 1) */
+
+#endif /* TSEC_CHECKPOINT_EXEC_EXPORT_H */
+
+// End of auto generated file.
diff --git a/TAO/CIAO/tests/Bug_2130_Regression/SEC_CheckPoint/TSEC_CheckPoint_stub_export.h b/TAO/CIAO/tests/Bug_2130_Regression/SEC_CheckPoint/TSEC_CheckPoint_stub_export.h
new file mode 100644
index 00000000000..5619f37d45d
--- /dev/null
+++ b/TAO/CIAO/tests/Bug_2130_Regression/SEC_CheckPoint/TSEC_CheckPoint_stub_export.h
@@ -0,0 +1,50 @@
+
+// -*- C++ -*-
+// $Id$
+// Definition for Win32 Export directives.
+// This file is generated automatically by generate_export_file.pl TSEC_CHECKPOINT_STUB
+// ------------------------------
+#ifndef TSEC_CHECKPOINT_STUB_EXPORT_H
+#define TSEC_CHECKPOINT_STUB_EXPORT_H
+
+#include "ace/config-all.h"
+
+#if !defined (TSEC_CHECKPOINT_STUB_HAS_DLL)
+# define TSEC_CHECKPOINT_STUB_HAS_DLL 1
+#endif /* ! TSEC_CHECKPOINT_STUB_HAS_DLL */
+
+#if defined (TSEC_CHECKPOINT_STUB_HAS_DLL) && (TSEC_CHECKPOINT_STUB_HAS_DLL == 1)
+# if defined (TSEC_CHECKPOINT_STUB_BUILD_DLL)
+# define TSEC_CHECKPOINT_STUB_Export ACE_Proper_Export_Flag
+# define TSEC_CHECKPOINT_STUB_SINGLETON_DECLARATION(T) ACE_EXPORT_SINGLETON_DECLARATION (T)
+# define TSEC_CHECKPOINT_STUB_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK) ACE_EXPORT_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK)
+# else /* TSEC_CHECKPOINT_STUB_BUILD_DLL */
+# define TSEC_CHECKPOINT_STUB_Export ACE_Proper_Import_Flag
+# define TSEC_CHECKPOINT_STUB_SINGLETON_DECLARATION(T) ACE_IMPORT_SINGLETON_DECLARATION (T)
+# define TSEC_CHECKPOINT_STUB_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK) ACE_IMPORT_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK)
+# endif /* TSEC_CHECKPOINT_STUB_BUILD_DLL */
+#else /* TSEC_CHECKPOINT_STUB_HAS_DLL == 1 */
+# define TSEC_CHECKPOINT_STUB_Export
+# define TSEC_CHECKPOINT_STUB_SINGLETON_DECLARATION(T)
+# define TSEC_CHECKPOINT_STUB_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK)
+#endif /* TSEC_CHECKPOINT_STUB_HAS_DLL == 1 */
+
+// Set TSEC_CHECKPOINT_STUB_NTRACE = 0 to turn on library specific tracing even if
+// tracing is turned off for ACE.
+#if !defined (TSEC_CHECKPOINT_STUB_NTRACE)
+# if (ACE_NTRACE == 1)
+# define TSEC_CHECKPOINT_STUB_NTRACE 1
+# else /* (ACE_NTRACE == 1) */
+# define TSEC_CHECKPOINT_STUB_NTRACE 0
+# endif /* (ACE_NTRACE == 1) */
+#endif /* !TSEC_CHECKPOINT_STUB_NTRACE */
+
+#if (TSEC_CHECKPOINT_STUB_NTRACE == 1)
+# define TSEC_CHECKPOINT_STUB_TRACE(X)
+#else /* (TSEC_CHECKPOINT_STUB_NTRACE == 1) */
+# define TSEC_CHECKPOINT_STUB_TRACE(X) ACE_TRACE_IMPL(X)
+#endif /* (TSEC_CHECKPOINT_STUB_NTRACE == 1) */
+
+#endif /* TSEC_CHECKPOINT_STUB_EXPORT_H */
+
+// End of auto generated file.
diff --git a/TAO/CIAO/tests/Bug_2130_Regression/SEC_CheckPoint/TSEC_CheckPoint_svnt_export.h b/TAO/CIAO/tests/Bug_2130_Regression/SEC_CheckPoint/TSEC_CheckPoint_svnt_export.h
new file mode 100644
index 00000000000..99666df89e6
--- /dev/null
+++ b/TAO/CIAO/tests/Bug_2130_Regression/SEC_CheckPoint/TSEC_CheckPoint_svnt_export.h
@@ -0,0 +1,50 @@
+
+// -*- C++ -*-
+// $Id$
+// Definition for Win32 Export directives.
+// This file is generated automatically by generate_export_file.pl TSEC_CHECKPOINT_SVNT
+// ------------------------------
+#ifndef TSEC_CHECKPOINT_SVNT_EXPORT_H
+#define TSEC_CHECKPOINT_SVNT_EXPORT_H
+
+#include "ace/config-all.h"
+
+#if !defined (TSEC_CHECKPOINT_SVNT_HAS_DLL)
+# define TSEC_CHECKPOINT_SVNT_HAS_DLL 1
+#endif /* ! TSEC_CHECKPOINT_SVNT_HAS_DLL */
+
+#if defined (TSEC_CHECKPOINT_SVNT_HAS_DLL) && (TSEC_CHECKPOINT_SVNT_HAS_DLL == 1)
+# if defined (TSEC_CHECKPOINT_SVNT_BUILD_DLL)
+# define TSEC_CHECKPOINT_SVNT_Export ACE_Proper_Export_Flag
+# define TSEC_CHECKPOINT_SVNT_SINGLETON_DECLARATION(T) ACE_EXPORT_SINGLETON_DECLARATION (T)
+# define TSEC_CHECKPOINT_SVNT_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK) ACE_EXPORT_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK)
+# else /* TSEC_CHECKPOINT_SVNT_BUILD_DLL */
+# define TSEC_CHECKPOINT_SVNT_Export ACE_Proper_Import_Flag
+# define TSEC_CHECKPOINT_SVNT_SINGLETON_DECLARATION(T) ACE_IMPORT_SINGLETON_DECLARATION (T)
+# define TSEC_CHECKPOINT_SVNT_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK) ACE_IMPORT_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK)
+# endif /* TSEC_CHECKPOINT_SVNT_BUILD_DLL */
+#else /* TSEC_CHECKPOINT_SVNT_HAS_DLL == 1 */
+# define TSEC_CHECKPOINT_SVNT_Export
+# define TSEC_CHECKPOINT_SVNT_SINGLETON_DECLARATION(T)
+# define TSEC_CHECKPOINT_SVNT_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK)
+#endif /* TSEC_CHECKPOINT_SVNT_HAS_DLL == 1 */
+
+// Set TSEC_CHECKPOINT_SVNT_NTRACE = 0 to turn on library specific tracing even if
+// tracing is turned off for ACE.
+#if !defined (TSEC_CHECKPOINT_SVNT_NTRACE)
+# if (ACE_NTRACE == 1)
+# define TSEC_CHECKPOINT_SVNT_NTRACE 1
+# else /* (ACE_NTRACE == 1) */
+# define TSEC_CHECKPOINT_SVNT_NTRACE 0
+# endif /* (ACE_NTRACE == 1) */
+#endif /* !TSEC_CHECKPOINT_SVNT_NTRACE */
+
+#if (TSEC_CHECKPOINT_SVNT_NTRACE == 1)
+# define TSEC_CHECKPOINT_SVNT_TRACE(X)
+#else /* (TSEC_CHECKPOINT_SVNT_NTRACE == 1) */
+# define TSEC_CHECKPOINT_SVNT_TRACE(X) ACE_TRACE_IMPL(X)
+#endif /* (TSEC_CHECKPOINT_SVNT_NTRACE == 1) */
+
+#endif /* TSEC_CHECKPOINT_SVNT_EXPORT_H */
+
+// End of auto generated file.
diff --git a/TAO/CIAO/tests/Bug_2130_Regression/SEC_CheckPoint/controller.cpp b/TAO/CIAO/tests/Bug_2130_Regression/SEC_CheckPoint/controller.cpp
new file mode 100644
index 00000000000..1adcc7a3e97
--- /dev/null
+++ b/TAO/CIAO/tests/Bug_2130_Regression/SEC_CheckPoint/controller.cpp
@@ -0,0 +1,203 @@
+//$Id$
+
+
+/**
+ * @file controller.cpp
+ *
+ * This program interact with a TSEC_CheckPoint component, using its supported
+ * interface "ISessionService"
+ */
+
+
+//-------------------------------------------------------------------
+// Includes
+//-------------------------------------------------------------------
+
+#include <ace/streams.h>
+#include <ace/Get_Opt.h>
+
+#include "TSEC_CheckPointC.h"
+
+
+//-------------------------------------------------------------------
+// Defines
+//-------------------------------------------------------------------
+
+#define SEPARATION_LINE "----------------------------------------" \
+ "----------------------------------------\n"
+
+#define TESTCASE_NOT_DEFINED 0
+#define TESTCASE_ACQUIRE_RELEASE_SESSION 1
+#define TESTCASE_CREATE_DESTROY_SESSION 2
+
+
+//-------------------------------------------------------------------
+// Statics
+//-------------------------------------------------------------------
+
+static int _testcase = TESTCASE_NOT_DEFINED;
+static int _loop = 0;
+static int _ident = 1;
+static const char* _sessionService_ior = 0;
+
+
+//-------------------------------------------------------------------
+// Function
+//-------------------------------------------------------------------
+
+int
+parse_args
+(
+ int argc,
+ char* argv[]
+)
+{
+ ACE_Get_Opt get_opts( argc, argv, "i:k:l:t:" );
+ int c;
+
+ while( ( c = get_opts() ) != -1 )
+ {
+ switch( c )
+ {
+ case 'i':
+ _ident = atoi( get_opts.opt_arg() );
+ break;
+
+ case 'k':
+ _sessionService_ior = get_opts.opt_arg();
+ break;
+
+ case 'l':
+ _loop = atoi( get_opts.opt_arg() );
+ break;
+
+ case 't':
+ _testcase = atoi( get_opts.opt_arg() );
+ break;
+
+ case '?': // display help for use of the server.
+ default:
+ ACE_ERROR_RETURN( ( LM_ERROR,
+ "usage: %s\n"
+ "-i <Ident> (default is 1)\n"
+ "-k <TSEC_CheckPoint IOR> (default is file://TSEC_CheckPoint.ior)\n"
+ "-t <testcase number> (default is 1)\n"
+ "\n",
+ argv[0] ),
+ -1 );
+ break;
+ }
+ }
+
+ if ( _sessionService_ior == 0 )
+ {
+ _sessionService_ior = "file://TSEC_CheckPoint.ior";
+ }
+
+ if( _testcase == 0 )
+ {
+ _testcase = TESTCASE_ACQUIRE_RELEASE_SESSION;
+ }
+
+ return 0;
+}
+
+
+//-------------------------------------------------------------------
+// Function
+//-------------------------------------------------------------------
+
+int
+main
+(
+ int argc,
+ char* argv[]
+)
+{
+ ACE_TRY_NEW_ENV
+ {
+ // Initialize orb
+ 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 obj = orb->string_to_object( _sessionService_ior
+ ACE_ENV_ARG_PARAMETER );
+ ACE_TRY_CHECK;
+
+ ENW::ISessionService_var sessionService =
+ ENW::ISessionService::_narrow (obj.in () ACE_ENV_ARG_PARAMETER );
+ ACE_TRY_CHECK;
+
+ if( CORBA::is_nil( sessionService.in() ) )
+ {
+ ACE_ERROR_RETURN( ( LM_ERROR,
+ "Unable to acquire 'SessionService' objref\n" ),
+ -1 );
+ }
+
+ ACE_DEBUG( ( LM_DEBUG, SEPARATION_LINE ) );
+
+ for( int i = 0; i < _loop; ++i )
+ {
+ switch( _testcase )
+ {
+ case TESTCASE_ACQUIRE_RELEASE_SESSION:
+ {
+ ACE_DEBUG( ( LM_DEBUG, "(%P|%t@%T) Executing testcase acquire release session...[running]\n" ) );
+
+ ENW::TSession_var session = sessionService->acquireSession( _ident );
+ //CORBA::Long ident = session->getIdent();
+ sessionService->releaseSession( _ident, session.in () );
+
+ ACE_DEBUG( ( LM_DEBUG, "(%P|%t@%T) Executing testcase acquire release session...[ready]\n" ) );
+ }
+
+ break;
+
+ case TESTCASE_CREATE_DESTROY_SESSION:
+ {
+ ACE_DEBUG( ( LM_DEBUG, "(%P|%t@%T) Executing testcase create destroy session...[running]\n" ) );
+
+ ENW::TSession_var session = sessionService->createSession();
+ CORBA::Long ident = session->getIdent();
+ ACE_DEBUG(( LM_DEBUG, "(%P|%t@%T) Ident: %d\n", ident ) );
+
+ if( !sessionService->destroySession( session.in () ) )
+ {
+ ACE_DEBUG( ( LM_DEBUG, "(%P|%t@%T) Executing testcase create destroy session...[ERROR]\n" ) );
+ }
+
+ ACE_DEBUG( ( LM_DEBUG, "(%P|%t@%T) Executing testcase create destroy session...[ready]\n" ) );
+ }
+
+ break;
+
+ default:
+ ACE_DEBUG( ( LM_DEBUG, "(%P|%t@%T) Testcase is undefined!\n" ) );
+ break;
+
+ }
+ }
+
+ orb->destroy( ACE_ENV_SINGLE_ARG_PARAMETER );
+ ACE_TRY_CHECK;
+ }
+ ACE_CATCHANY
+ {
+ ACE_PRINT_EXCEPTION( ACE_ANY_EXCEPTION,
+ "Who is the culprit \n" );
+ cerr << "Uncaught CORBA exception" << endl;
+
+ return 1;
+ }
+ ACE_ENDTRY;
+
+ return 0;
+}
+
diff --git a/TAO/CIAO/tests/Bug_2130_Regression/descriptors/DeploymentPlan.cdp b/TAO/CIAO/tests/Bug_2130_Regression/descriptors/DeploymentPlan.cdp
new file mode 100644
index 00000000000..d814af11a50
--- /dev/null
+++ b/TAO/CIAO/tests/Bug_2130_Regression/descriptors/DeploymentPlan.cdp
@@ -0,0 +1,117 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
+<Deployment:deploymentPlan
+ xmlns:Deployment="http://www.omg.org/Deployment"
+ xmlns:xmi="http://www.omg.org/XMI"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://www.omg.org/Deployment Modified_Deployment.xsd">
+
+ <label>CheckPoint-DeploymentPlan</label>
+
+ <UUID>CheckPoint_Plan_UUID_0001</UUID>
+
+ <realizes>
+ <label>CheckPoint-realizes-cid</label>
+ <UUID>c0965470-7b83-11d9-9669-0800200c9a66</UUID>
+ <specificType/>
+ <supportedType>IDL:ENW/Sender:1.0</supportedType>
+ <port>
+ <name>read_message</name>
+ <specificType>IDL:ENW/ISessionService:1.0</specificType>
+ <supportedType>IDL:ENW/ISessionService:1.0</supportedType>
+ <provider>false</provider>
+ <exclusiveProvider>false</exclusiveProvider>
+ <exclusiveUser>true</exclusiveUser>
+ <optional>false</optional>
+ <kind>SimplexReceptacle</kind>
+ </port>
+ </realizes>
+
+ <implementation id="CheckPoint-TSEC_CheckPoint-mdd">
+ <name>CheckPoint-TSEC_CheckPoint-mdd</name>
+ <source><!-- @@ Don't know what goes here --></source>
+ <artifact>CheckPoint-TSEC_CheckPoint_exec</artifact>
+ <artifact>CheckPoint-TSEC_CheckPoint_svnt</artifact>
+ </implementation>
+
+ <instance id="CheckPoint-TSEC_CheckPoint-idd">
+ <name>CheckPoint-TSEC_CheckPoint-idd</name>
+ <node>CheckPointNode</node>
+ <source/>
+ <implementation>CheckPoint-TSEC_CheckPoint-mdd</implementation>
+ <configProperty>
+ <name>ComponentIOR</name>
+ <value>
+ <type>
+ <kind>tk_string</kind>
+ </type>
+ <value>
+ <string>TSEC_CheckPoint.ior</string>
+ </value>
+ </value>
+ </configProperty>
+
+ <deployedResource>
+ <resourceUsage>InstanceUsesResource</resourceUsage>
+ <requirementName>CIAO:PolicySet</requirementName>
+ <resourceName>test_server_resource_id</resourceName>
+ <resourceValue>
+ <type>
+ <kind>tk_string</kind>
+ </type>
+ <value>
+ <string>test_policy_set_id</string>
+ </value>
+ </resourceValue>
+ </deployedResource>
+ </instance>
+
+ <artifact id="CheckPoint-TSEC_CheckPoint_exec">
+ <name>TSEC_CheckPoint_exec</name>
+ <source/>
+ <node/>
+ <location>TSEC_CheckPoint_exec</location>
+ <execParameter>
+ <name>entryPoint</name>
+ <value>
+ <type>
+ <kind>tk_string</kind>
+ </type>
+ <value>
+ <string>createTSEC_CheckPointHome_Impl</string>
+ </value>
+ </value>
+ </execParameter>
+ </artifact>
+
+ <artifact id="CheckPoint-TSEC_CheckPoint_svnt">
+ <name>TSEC_CheckPoint_svnt</name>
+ <source/>
+ <node/>
+ <location>TSEC_CheckPoint_svnt</location>
+ <execParameter>
+ <name>entryPoint</name>
+ <value>
+ <type>
+ <kind>tk_string</kind>
+ </type>
+ <value>
+ <string>create_ENW_TSEC_CheckPointHome_Servant</string>
+ </value>
+ </value>
+ </execParameter>
+ </artifact>
+
+ <infoProperty>
+ <name>CIAOServerResources</name>
+ <value>
+ <type>
+ <kind>tk_string</kind>
+ </type>
+ <value>
+ <string>rt-config-example.csr</string>
+ </value>
+ </value>
+ </infoProperty>
+
+</Deployment:deploymentPlan>
+
diff --git a/TAO/CIAO/tests/Bug_2130_Regression/descriptors/TestNodeManagerMap.dat b/TAO/CIAO/tests/Bug_2130_Regression/descriptors/TestNodeManagerMap.dat
new file mode 100644
index 00000000000..ec06179aca7
--- /dev/null
+++ b/TAO/CIAO/tests/Bug_2130_Regression/descriptors/TestNodeManagerMap.dat
@@ -0,0 +1,2 @@
+CheckPointNode corbaloc:iiop:localhost:30000/NodeManager
+
diff --git a/TAO/CIAO/tests/Bug_2130_Regression/descriptors/rt-config-example.csr b/TAO/CIAO/tests/Bug_2130_Regression/descriptors/rt-config-example.csr
new file mode 100644
index 00000000000..e1d120352aa
--- /dev/null
+++ b/TAO/CIAO/tests/Bug_2130_Regression/descriptors/rt-config-example.csr
@@ -0,0 +1,30 @@
+
+<CIAO:ServerResources
+ xmlns:CIAO="http://www.dre.vanderbilt.edu/ServerResources"
+ xmlns:xmi="http://www.omg.org/XMI"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://www.dre.vanderbilt.edu/ServerResources CIAOServerResources.xsd"
+ id="test_server_resource_id">
+
+ <orbConfigs>
+ <resources>
+ <threadpool id="threadpool-1">
+ <stacksize>0</stacksize>
+ <static_threads>6</static_threads>
+ <dynamic_threads>0</dynamic_threads>
+ <default_priority>2</default_priority>
+ <allow_request_buffering>false</allow_request_buffering>
+ <max_buffered_requests>0</max_buffered_requests>
+ <max_request_buffered_size>0</max_request_buffered_size>
+ </threadpool>
+ </resources>
+
+ <policySet id="test_policy_set_id">
+ <priorityModel server_priority="2">
+ <priority_model>SERVER_DECLARED</priority_model>
+ </priorityModel>
+ <threadpool>threadpool-1</threadpool>
+ </policySet>
+
+ </orbConfigs>
+</CIAO:ServerResources> \ No newline at end of file
diff --git a/TAO/CIAO/tests/Bug_2130_Regression/descriptors/run_test.pl b/TAO/CIAO/tests/Bug_2130_Regression/descriptors/run_test.pl
new file mode 100644
index 00000000000..6688e0a224f
--- /dev/null
+++ b/TAO/CIAO/tests/Bug_2130_Regression/descriptors/run_test.pl
@@ -0,0 +1,177 @@
+eval '(exit $?0)' && eval 'exec perl -S $0 ${1+"$@"}'
+ & eval 'exec perl -S $0 $argv:q'
+ if 0;
+
+# $Id$
+# -*- perl -*-
+
+use lib "$ENV{'ACE_ROOT'}/bin";
+use PerlACE::Run_Test;
+
+$DAnCE = "$ENV{'ACE_ROOT'}/TAO/CIAO/DAnCE";
+$CIAO_ROOT = "$ENV{'CIAO_ROOT'}";
+$TAO_ROOT = "$ENV{'TAO_ROOT'}";
+$daemons_running = 0;
+$em_running = 0;
+$daemons = 1;
+@ports = ( 30000 );
+@iorfiles = ( "NodeApp.ior" );
+$status = 0;
+$dat_file = "TestNodeManagerMap.dat";
+$cdp_file = "DeploymentPlan.cdp";
+$controller_exec = "../SEC_CheckPoint/controller";
+
+$E = 0;
+$EM = 0;
+
+# Delete if there are any .ior files.
+sub delete_ior_files {
+ for ($i = 0; $i < $daemons; ++$i) {
+ unlink $iorfiles[$i];
+ }
+ unlink PerlACE::LocalFile ("EM.ior");
+ unlink PerlACE::LocalFile ("TSEC_CheckPoint.ior");
+ unlink PerlACE::LocalFile ("DAM.ior");
+}
+
+sub kill_node_daemons {
+ for ($i = 0; $i < $daemons; ++$i) {
+ $Daemons[$i]->Kill (); $Daemons[$i]->TimedWait (1);
+ }
+}
+
+sub kill_open_processes {
+ if ($daemons_running == 1) {
+ kill_node_daemons ();
+ }
+
+ if ($em_running == 1) {
+ $EM->Kill ();
+ $EM->TimedWait (1);
+ }
+}
+
+sub run_node_daemons {
+ for ($i = 0; $i < $daemons; ++$i)
+ {
+ $iorfile = $iorfiles[$i];
+ $port = $ports[$i];
+
+ $iiop = "iiop://localhost:$port";
+ $node_app = "$DAnCE/NodeApplication/NodeApplication";
+
+ $d_cmd = "$DAnCE/NodeManager/NodeManager";
+ $d_param = "-ORBEndpoint $iiop -s $node_app -o $iorfile -a \"-r\"";
+
+ $Daemons[$i] = new PerlACE::Process ($d_cmd, $d_param);
+
+
+ $result = $Daemons[$i]->Spawn ();
+ push(@processes, $Daemons[$i]);
+
+ if (PerlACE::waitforfile_timed ($iorfile,
+ $PerlACE::wait_interval_for_process_creation) == -1) {
+ print STDERR
+ "ERROR: The ior file of node daemon $i could not be found\n";
+ for (; $i > 0; --$i) {
+ $Daemons[$i]->Kill (); $Daemons[$i]->TimedWait (1);
+ }
+ return -1;
+ }
+ }
+ $daemons_running = 1;
+ return 0;
+}
+
+delete_ior_files ();
+
+
+# Invoke node daemons.
+print "Invoking node daemons\n";
+$status = run_node_daemons ();
+
+if ($status != 0) {
+ print STDERR "ERROR: Unable to execute the node daemons\n";
+ exit 1;
+}
+
+$ns_running = 1;
+
+# Invoke execution manager.
+print "Invoking execution manager\n";
+$EM = new PerlACE::Process ("$DAnCE/ExecutionManager/Execution_Manager",
+ "-o EM.ior -i $dat_file");
+$EM->Spawn ();
+
+if (PerlACE::waitforfile_timed ("EM.ior",
+ $PerlACE::wait_interval_for_process_creation) == -1) {
+ print STDERR
+ "ERROR: The ior file of execution manager could not be found\n";
+ kill_open_processes ();
+ exit 1;
+}
+
+$em_running = 1;
+
+# Invoke executor - start the application -.
+print "Invoking executor - start the application -\n";
+$E =
+ new PerlACE::Process ("$DAnCE/Plan_Launcher/plan_launcher",
+ "-p DeploymentPlan.cdp -k file://EM.ior -o DAM.ior");
+
+$E->SpawnWaitKill (5000);
+
+
+if (PerlACE::waitforfile_timed ("TSEC_CheckPoint.ior",
+ $PerlACE::wait_interval_for_process_creation) == -1) {
+ print STDERR "ERROR: The ior file of sender could not be found\n";
+ kill_open_processes ();
+ exit 1;
+}
+
+print "Running testcase 1\n";
+
+$controller = new PerlACE::Process ("$controller_exec", "-i 1 -k file://TSEC_CheckPoint.ior -t 1 -l 100000");
+$result = $controller->SpawnWaitKill (3000);
+
+if ($result != 0) {
+ print STDERR "ERROR: The controller returned $result\n";
+ $status = 1;
+}
+
+
+print "Running testcase 2\n";
+
+$controller = new PerlACE::Process ("$controller_exec", "-i 2 -k file://TSEC_CheckPoint.ior -t 1 -l 100000");
+$result = $controller->SpawnWaitKill (3000);
+
+if ($result != 0) {
+ print STDERR "ERROR: The controller returned $result\n";
+ $status = 1;
+}
+
+print "Running testcase 3\n";
+
+$controller = new PerlACE::Process ("$controller_exec", "-k file://TSEC_CheckPoint.ior -t 2 -l 100000");
+$result = $controller->SpawnWaitKill (3000);
+
+if ($result != 0) {
+ print STDERR "ERROR: The controller returned $result\n";
+ $status = 1;
+}
+
+
+# Invoke executor - stop the application -.
+print "Invoking executor - stop the application -\n";
+$E =
+ new PerlACE::Process ("$DAnCE/Plan_Launcher/plan_launcher",
+ "-k file://EM.ior -i file://DAM.ior");
+$E->SpawnWaitKill (3000);
+
+print "Executor returned.\n";
+print "Shutting down rest of the processes.\n";
+
+delete_ior_files ();
+kill_open_processes ();
+
+exit $status;
diff --git a/TAO/CIAO/tests/Bug_2130_Regression/interfaces/ENW.idl b/TAO/CIAO/tests/Bug_2130_Regression/interfaces/ENW.idl
new file mode 100644
index 00000000000..f62febba8a3
--- /dev/null
+++ b/TAO/CIAO/tests/Bug_2130_Regression/interfaces/ENW.idl
@@ -0,0 +1,52 @@
+//$Id$
+
+#ifndef ENW_IDL
+#define ENW_IDL
+
+#include <Components.idl>
+
+
+module ENW
+{
+ exception EUnknownIdent
+ {
+ };
+
+ exception EUnknownSession
+ {
+ };
+
+ eventtype ET_LifeToken
+ {
+ };
+
+ //////////////////////////////////////////////////////////////////////////////
+ //
+ // ICheckPoint-Interfaces
+ //
+
+ const long IdNotDefined = -1;
+
+ interface TSession
+ {
+ long getIdent();
+ boolean isInUse();
+ };
+
+ interface ISessionService
+ {
+ TSession createSession();
+ boolean destroySession( in TSession Session );
+
+ TSession acquireSession( in long Ident )
+ raises( EUnknownIdent );
+
+ boolean releaseSession( in long Ident,
+ in TSession Session )
+ raises( EUnknownSession );
+ };
+
+};
+
+
+#endif //ENW_IDL
diff --git a/TAO/CIAO/tests/Bug_2130_Regression/interfaces/ENW.mpc b/TAO/CIAO/tests/Bug_2130_Regression/interfaces/ENW.mpc
new file mode 100644
index 00000000000..2991caf58f3
--- /dev/null
+++ b/TAO/CIAO/tests/Bug_2130_Regression/interfaces/ENW.mpc
@@ -0,0 +1,32 @@
+//$Id$
+
+project(ENW_stub): ciao_component_dnc, event {
+
+ sharedname = ENW_stub
+ idlflags += -Wb,stub_export_macro=ENW_STUB_Export -Wb,stub_export_include=ENW_stub_export.h -Wb,skel_export_macro=ENW_SVNT_Export -Wb,skel_export_include=ENW_svnt_export.h
+ dynamicflags = ENW_STUB_BUILD_DLL
+
+ IDL_Files {
+ ENW.idl
+ }
+
+ Source_Files {
+ ENWC.cpp
+ }
+}
+
+project(ENW_svnt) : ciao_servant_dnc, event {
+ after += ENW_stub
+ sharedname = ENW_svnt
+ libs += ENW_stub
+
+ dynamicflags = ENW_SVNT_BUILD_DLL
+
+ Source_Files {
+ ENWS.cpp
+ }
+}
+
+
+
+
diff --git a/TAO/CIAO/tests/Bug_2130_Regression/interfaces/ENW_stub_export.h b/TAO/CIAO/tests/Bug_2130_Regression/interfaces/ENW_stub_export.h
new file mode 100644
index 00000000000..ce5a4067f67
--- /dev/null
+++ b/TAO/CIAO/tests/Bug_2130_Regression/interfaces/ENW_stub_export.h
@@ -0,0 +1,50 @@
+
+// -*- C++ -*-
+// $Id$
+// Definition for Win32 Export directives.
+// This file is generated automatically by generate_export_file.pl ENW_STUB
+// ------------------------------
+#ifndef ENW_STUB_EXPORT_H
+#define ENW_STUB_EXPORT_H
+
+#include "ace/config-all.h"
+
+#if !defined (ENW_STUB_HAS_DLL)
+# define ENW_STUB_HAS_DLL 1
+#endif /* ! ENW_STUB_HAS_DLL */
+
+#if defined (ENW_STUB_HAS_DLL) && (ENW_STUB_HAS_DLL == 1)
+# if defined (ENW_STUB_BUILD_DLL)
+# define ENW_STUB_Export ACE_Proper_Export_Flag
+# define ENW_STUB_SINGLETON_DECLARATION(T) ACE_EXPORT_SINGLETON_DECLARATION (T)
+# define ENW_STUB_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK) ACE_EXPORT_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK)
+# else /* ENW_STUB_BUILD_DLL */
+# define ENW_STUB_Export ACE_Proper_Import_Flag
+# define ENW_STUB_SINGLETON_DECLARATION(T) ACE_IMPORT_SINGLETON_DECLARATION (T)
+# define ENW_STUB_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK) ACE_IMPORT_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK)
+# endif /* ENW_STUB_BUILD_DLL */
+#else /* ENW_STUB_HAS_DLL == 1 */
+# define ENW_STUB_Export
+# define ENW_STUB_SINGLETON_DECLARATION(T)
+# define ENW_STUB_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK)
+#endif /* ENW_STUB_HAS_DLL == 1 */
+
+// Set ENW_STUB_NTRACE = 0 to turn on library specific tracing even if
+// tracing is turned off for ACE.
+#if !defined (ENW_STUB_NTRACE)
+# if (ACE_NTRACE == 1)
+# define ENW_STUB_NTRACE 1
+# else /* (ACE_NTRACE == 1) */
+# define ENW_STUB_NTRACE 0
+# endif /* (ACE_NTRACE == 1) */
+#endif /* !ENW_STUB_NTRACE */
+
+#if (ENW_STUB_NTRACE == 1)
+# define ENW_STUB_TRACE(X)
+#else /* (ENW_STUB_NTRACE == 1) */
+# define ENW_STUB_TRACE(X) ACE_TRACE_IMPL(X)
+#endif /* (ENW_STUB_NTRACE == 1) */
+
+#endif /* ENW_STUB_EXPORT_H */
+
+// End of auto generated file.
diff --git a/TAO/CIAO/tests/Bug_2130_Regression/interfaces/ENW_svnt_export.h b/TAO/CIAO/tests/Bug_2130_Regression/interfaces/ENW_svnt_export.h
new file mode 100644
index 00000000000..2e4b7580702
--- /dev/null
+++ b/TAO/CIAO/tests/Bug_2130_Regression/interfaces/ENW_svnt_export.h
@@ -0,0 +1,50 @@
+
+// -*- C++ -*-
+// $Id$
+// Definition for Win32 Export directives.
+// This file is generated automatically by generate_export_file.pl ENW_SVNT
+// ------------------------------
+#ifndef ENW_SVNT_EXPORT_H
+#define ENW_SVNT_EXPORT_H
+
+#include "ace/config-all.h"
+
+#if !defined (ENW_SVNT_HAS_DLL)
+# define ENW_SVNT_HAS_DLL 1
+#endif /* ! ENW_SVNT_HAS_DLL */
+
+#if defined (ENW_SVNT_HAS_DLL) && (ENW_SVNT_HAS_DLL == 1)
+# if defined (ENW_SVNT_BUILD_DLL)
+# define ENW_SVNT_Export ACE_Proper_Export_Flag
+# define ENW_SVNT_SINGLETON_DECLARATION(T) ACE_EXPORT_SINGLETON_DECLARATION (T)
+# define ENW_SVNT_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK) ACE_EXPORT_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK)
+# else /* ENW_SVNT_BUILD_DLL */
+# define ENW_SVNT_Export ACE_Proper_Import_Flag
+# define ENW_SVNT_SINGLETON_DECLARATION(T) ACE_IMPORT_SINGLETON_DECLARATION (T)
+# define ENW_SVNT_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK) ACE_IMPORT_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK)
+# endif /* ENW_SVNT_BUILD_DLL */
+#else /* ENW_SVNT_HAS_DLL == 1 */
+# define ENW_SVNT_Export
+# define ENW_SVNT_SINGLETON_DECLARATION(T)
+# define ENW_SVNT_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK)
+#endif /* ENW_SVNT_HAS_DLL == 1 */
+
+// Set ENW_SVNT_NTRACE = 0 to turn on library specific tracing even if
+// tracing is turned off for ACE.
+#if !defined (ENW_SVNT_NTRACE)
+# if (ACE_NTRACE == 1)
+# define ENW_SVNT_NTRACE 1
+# else /* (ACE_NTRACE == 1) */
+# define ENW_SVNT_NTRACE 0
+# endif /* (ACE_NTRACE == 1) */
+#endif /* !ENW_SVNT_NTRACE */
+
+#if (ENW_SVNT_NTRACE == 1)
+# define ENW_SVNT_TRACE(X)
+#else /* (ENW_SVNT_NTRACE == 1) */
+# define ENW_SVNT_TRACE(X) ACE_TRACE_IMPL(X)
+#endif /* (ENW_SVNT_NTRACE == 1) */
+
+#endif /* ENW_SVNT_EXPORT_H */
+
+// End of auto generated file.
diff --git a/TAO/ChangeLogs/ChangeLog-05b b/TAO/ChangeLogs/ChangeLog-05b
new file mode 100644
index 00000000000..eb190783bb7
--- /dev/null
+++ b/TAO/ChangeLogs/ChangeLog-05b
@@ -0,0 +1,8407 @@
+Tue Aug 2 21:18:02 UTC 2005 Jeff Parsons <j.parsons@vanderbilt.edu>
+
+ * TAO_IDL/fe/idl.yy:
+ * TAO_IDL/fe/y.tab.cpp:
+
+ Fixed some mismatched allocate/deallocate errors. Thanks to
+ Johnny Willemsen <jwillemsen@rememdy.nl> for pointing them
+ out.
+
+Tue Aug 2 13:01:58 2005 Steve Totten <totten_s@ociweb.com>
+
+ Applied the following change from the OCI TAO 1.4a repository on
+ behalf of Abdel Rigumye:
+
+ Fri Jul 29 14:30 2005 Abdel Rigumye <rigumyea@ociweb.com>
+
+ * orbsvc/Naming_Service/README:
+
+ Added and documented the existence of the -u and -r persistence
+ options
+
+Tue Aug 2 09:53:23 2005 Simon McQueen <sm@prismtech.com>
+
+ * orbsvcs/tests/Bug_1630_Regression/test.mpc:
+
+ Use imr_client base project.
+
+Mon Aug 1 07:00:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * orbsvcs/tests/Bug_1395_Regression/Makefile.am:
+ Added ImR_Client
+
+Sat Jul 30 10:32:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * orbsvcs/tests/Bug_1395_Regression/Test_i.cpp:
+ Fixed casing of include
+
+Fri Jul 29 17:50:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tao/PortableServer/LifespanStrategyPersistent.cpp:
+ Added missing ACE_CHECK
+
+Fri Jul 29 18:41:50 2005 Simon McQueen <sm@prismtech.com>
+
+ * tao/ImR_Client/ImR_Client.cpp:
+
+ Fixed typo.
+
+ * orbsvcs/tests/Bug_1395_Regression/Bug_1395_Regression.mpc:
+ * orbsvcs/tests/Bug_1395_Regression/Test_i.cpp:
+
+ Forced link of ImR_Client to fix error on static builds.
+
+Fri Jul 29 17:55:23 2005 Simon McQueen <sm@prismtech.com>
+
+ * tao/ORB_Core.h:
+ * tao/ORB_Core.i:
+
+ Add accessor for use_implrepo_ value.
+
+ * tao/ImR_Client/ImR_Client.cpp:
+
+ Make calling imr_notify_startup when the ImR ref cannot be
+ found or narrowed into an error condition.
+
+ * tao/PortableServer/LifespanStrategyPersistent.h:
+ * tao/PortableServer/LifespanStrategyPersistent.cpp:
+
+ Read the use_imr_ value from the ORB core. Only try and load
+ the ImR_Client and call imr_notify_startup if use_imr_ set.
+
+Fri Jul 29 14:15:11 2005 Simon McQueen <sm@prismtech.com>
+
+ * tests/Bug_1020_Basic_Regression/Server_Task.cpp:
+
+ Added ACE_NOTREACHED to unreachable code to fix warning on
+ HP non stop build.
+
+Thu Jul 28 12:17:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * orbsvcs/tests/Bug_1630_Regression/testclient.cpp:
+ Added include of IFR_Client_Adapter_Impl, this should make sure
+ the IFR_Client is linked into the exe and the static initializers
+ are called. This should fix this test in the Windows static
+ builds
+
+Thu Jul 28 10:55:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tests/OctetSeq/client.cpp:
+ Don't test _repository_id in a minimum corba build
+
+Thu Jul 28 00:43:34 2005 Ossama Othman <ossama@dre.vanderbilt.edu>
+
+ * tao/CORBA_String.h:
+ * tao/CORBA_String.inl:
+
+ Removed operator==({W}String_var,{W}String_var) from the CORBA
+ namespace. It was TAO-specific, only existed so that
+ {W}String_var could be used as map key, and polluted the CORBA
+ namespace. Replaced with TAO::String_Var_Equal_To equality
+ functor.
+
+ * tao/ORB.cpp (_downcast):
+
+ Removed redundant/unnecessary repository ID string comparison
+ from ORB::InvalidName::_downcast() method. A simple
+ dynamic_cast<>-based check is sufficient.
+
+ (ORB_init):
+
+ Removed ORB shutdown check. The goal of the check was to cause
+ the CORBA::BAD_INV_ORDER system exception to be thrown if the
+ ORB was shutdown. However, that only applies to ORB methods,
+ not CORBA::ORB_init(). Just return the ORB. ORB methods
+ already check for ORB shutdown.
+
+ * tao/ORB_Table.cpp (bind):
+
+ Moved pair creation before the lock acquisition. Pair creation
+ in this case need not be synchronized across threads.
+
+ (unbind):
+
+ Pass the iterator returned from the underlaying map's find()
+ call to erase(). Saves us a duplicate element search found in
+ the erase() overload that accepts a key_type instead of an
+ iterator.
+
+ Removed work around described here in ChangeLog entry "Fri Jul
+ 22 10:07:12 UTC 2005 Johnny Willemsen
+ <jwillemsen@remedy.nl>". It is no longer necessary due to
+ changes in the ACE_Array_Map implementation. Also addresses
+ missing key object destruction in the workaround.
+
+ * tao/ORB_Table.h:
+ * tao/ORB_Table.inl:
+
+ Removed the ORB_Core_Ref_Counter equality operator. It is a
+ vestige of a transitional ORB_Table and ORB_Core_Ref_Counter
+ implementation, and is no longer needed.
+
+ Set the ACE_Array_Map equality functor template parameter to
+ TAO::String_Var_Equal_To. See changes to CORBA_String.h above
+ for details.
+
+ * tao/Object_Ref_Table.h:
+
+ Set the ACE_Array_Map equality functor template parameter to
+ TAO::String_Var_Equal_To. See changes to CORBA_String.h above
+ for details.
+
+ * tao/Object_Ref_Table.cpp (bind):
+
+ Moved pair creation before the lock acquisition. Pair creation
+ in this case need not be synchronized across threads.
+
+ * tao/PortableServer/Servant_Base.cpp:
+ * tao/PortableServer/Servant_Base.h:
+ * tao/PortableServer/Servant_Base.i:
+
+ Inlined one-liners. Reduces footprint.
+
+ Use the ACE_Atomic_Op<long> specialization as the underlying
+ synchronized reference counting mechanism instead of
+ ACE_Atomic_Op<CORBA::ULong>. Improves performance and reduces
+ footprint.
+
+Wed Jul 27 21:35:20 2005 J.T. Conklin <jtc@acorntoolworks.com>
+
+ * orbsvcs/performance-tests/LoadBalancing/LBPerf/RPS/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:
+
+ Regenerated.
+
+Wed Jul 27 15:59:54 2005 Gary Maxey <gary.maxey@hp.com>
+
+ * TAO_IDL/be/be_visitor_interface/any_op_ch.cpp
+ * TAO_IDL/be/be_visitor_interface/any_op_cs.cpp
+ * TAO_IDL/be/be_visitor_interface_fwd/any_op_ch.cpp
+ * TAO_IDL/be/be_visitor_valuebox/any_op_ch.cpp
+ * TAO_IDL/be/be_visitor_valuebox/any_op_cs.cpp
+ * TAO_IDL/be/be_visitor_valuetype/any_op_ch.cpp
+ * TAO_IDL/be/be_visitor_valuetype/any_op_cs.cpp
+ * TAO_IDL/be/be_visitor_valuetype_fwd/any_op_ch.cpp
+
+ When generating Any insertion and extraction operators
+ conditionally put them in a namespace that corresponds to their
+ enclosing module (if any). Addresses problem reported in
+ Bugzilla report #2071. Since some compilers do not implement
+ symbol lookup correctly the changed code is controlled by the
+ ACE_ANY_OPS_USE_NAMESPACE macro. Use this macro in config*.h if
+ your compiler implements symbol lookup correctly. Without the
+ macro the IDL generated code is as it was.
+
+Wed Jul 27 10:52:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tao/Wait_On_Leader_Follower.h:
+ Fixed typo in documentation
+
+Wed Jul 27 09:45:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tao/PortableServer/Collocated_Object_Proxy_Broker.cpp:
+ Fixed compile error in minimum build
+
+Wed Jul 27 07:34:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tests/OBV/ValueBox/client.cpp:
+ Fixed conversion warning
+
+Wed Jul 27 07:28:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * docs/tutorials/Quoter/Event_Service/index.html:
+ Updated documentation how to run this tutorial. Thanks to
+ Frederick Heckel <fwph at cse dot wustl dot edu> for
+ reporting that things didn't work.
+
+Tue Jul 26 12:11:36 2005 Gary Maxey <gary.maxey@hp.com>
+
+ * tests/OBV/ValueBox/client.cpp:
+
+ Plugged some memory leaks.
+
+Tue Jul 26 14:35:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * docs/Options.html:
+ Small link improvements
+
+Tue Jul 26 12:13:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tao/ORB_Core.cpp (destroy_interceptors):
+ Fixed memory leak of client/server request interceptor lists
+
+Tue Jul 26 12:00:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tests/Portable_Interceptors/Request_Interceptor_Flow/client.cpp:
+ * tests/Portable_Interceptors/Request_Interceptor_Flow/test.idl:
+ * tests/Portable_Interceptors/Request_Interceptor_Flow/test_i.{h,cpp}:
+ Added a CORBA::ULongSeq as out argument to the server_test
+ method to test for bug 2158. It seems this problem doesn't
+ exists anymore
+
+Tue Jul 26 11:56:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * TAO_IDL/be/be_interface.cpp:
+ Fixed problem in dynamic hash lookup table generation
+
+Tue Jul 26 10:45:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tests/Bug_1020_Basic_Regression/Server_Task.cpp:
+ Added return 0
+
+Tue Jul 26 10:10:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tao/Remote_Object_Proxy_Broker.cpp:
+ Fixed compile error in minimum build
+
+Tue Jul 26 09:57:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tao/PICurrent.{h,cpp}:
+ * tao/PICurrent_Loader.cpp:
+ Overruled _get_orb and store an ORB_Core reference instead of
+ a pointer
+
+Tue Jul 26 09:09:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tao/params.h:
+ Removed some old comment
+
+Tue Jul 26 08:58:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tests/OBV/ValueBox/client.cpp:
+ Added some missing CORBA::string_dup calls which caused this tet
+ to fail in a static build
+
+Tue Jul 26 08:51:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * TAO_IDL/be/be_visitor_valuebox/valuebox_cs.cpp:
+ No need to check for a nill pointer, the dynamic_cast handles that
+
+Tue Jul 26 08:20:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tests/Bug_1020_Regression/client.cpp:
+ Initialise pointer with 0
+
+Tue Jul 26 07:46:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tao/PortableServer/IdAssignmentStrategy.h:
+ * tao/PortableServer/IdAssignmentStrategyFactoryImpl.cpp:
+ * tao/PortableServer/IdAssignmentStrategySystem.cpp:
+ * tao/PortableServer/IdAssignmentStrategySystem.h:
+ * tao/PortableServer/IdAssignmentStrategyUser.cpp:
+ * tao/PortableServer/IdAssignmentStrategyUser.h:
+ * tao/PortableServer/IdUniquenessStrategyFactoryImpl.cpp:
+ * tao/PortableServer/IdUniquenessStrategyFactoryImpl.h:
+ * tao/PortableServer/IdUniquenessStrategyMultiple.cpp:
+ * tao/PortableServer/IdUniquenessStrategyUnique.cpp:
+ * tao/PortableServer/IdUniquenessStrategyUniqueFactoryImpl.cpp:
+ * tao/PortableServer/ImplicitActivationStrategy.h:
+ * tao/PortableServer/ImplicitActivationStrategyExplicit.cpp:
+ * tao/PortableServer/ImplicitActivationStrategyExplicit.h:
+ * tao/PortableServer/ImplicitActivationStrategyFactoryImpl.cpp:
+ * tao/PortableServer/ImplicitActivationStrategyFactoryImpl.h:
+ * tao/PortableServer/ImplicitActivationStrategyImplicit.cpp:
+ * tao/PortableServer/LifespanStrategy.h:
+ * tao/PortableServer/LifespanStrategyFactoryImpl.cpp:
+ * tao/PortableServer/LifespanStrategyPersistent.h:
+ * tao/PortableServer/LifespanStrategyPersistentFactoryImpl.cpp:
+ * tao/PortableServer/LifespanStrategyTransient.h:
+ * tao/PortableServer/LifespanStrategyTransientFactoryImpl.cpp:
+ * tao/PortableServer/Policy_Strategy.h:
+ * tao/PortableServer/RequestProcessingStrategy.h:
+ * tao/PortableServer/RequestProcessingStrategyAOMOnly.h:
+ * tao/PortableServer/RequestProcessingStrategyAOMOnlyFactoryImpl.cpp:
+ * tao/PortableServer/RequestProcessingStrategyDefaultServant.h:
+ * tao/PortableServer/RequestProcessingStrategyDefaultServantFI.cpp:
+ * tao/PortableServer/RequestProcessingStrategyFactoryImpl.cpp:
+ * tao/PortableServer/RequestProcessingStrategyServantActivator.h:
+ * tao/PortableServer/RequestProcessingStrategyServantActivatorFI.cpp:
+ * tao/PortableServer/RequestProcessingStrategyServantLocator.h:
+ * tao/PortableServer/RequestProcessingStrategyServantLocatorFI.cpp:
+ * tao/PortableServer/RequestProcessingStrategyServantManager.h:
+ * tao/PortableServer/ServantRetentionStrategy.h:
+ * tao/PortableServer/ServantRetentionStrategyFactoryImpl.cpp:
+ * tao/PortableServer/ServantRetentionStrategyNonRetain.h:
+ * tao/PortableServer/ServantRetentionStrategyNonRetainFactoryImpl.cpp:
+ * tao/PortableServer/ServantRetentionStrategyRetain.h:
+ * tao/PortableServer/ServantRetentionStrategyRetainFactoryImpl.cpp:
+ * tao/PortableServer/StrategyFactory.h:
+ * tao/PortableServer/ThreadStrategy.h:
+ * tao/PortableServer/ThreadStrategyFactory.h:
+ * tao/PortableServer/ThreadStrategyFactoryImpl.cpp:
+ * tao/PortableServer/ThreadStrategySingle.cpp:
+ * tao/PortableServer/ThreadStrategySingleFactoryImpl.cpp:
+ * tao/PortableServer/ThreadStrategySingleFactoryImpl.h:
+ Reduced the number of exports. This will reduce footprint in
+ Windows and GCC 4 builds.
+
+Tue Jul 26 06:30:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * orbsvcs/tests/ImplRepo/airplane_server_i.cpp:
+ Added missing include
+
+Tue Jul 26 06:21:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * orbsvcs/tests/Notify/lib/Task_Callback.{h,cpp}:
+ Added virtual destructor
+
+Mon Jul 25 15:48:05 2005 Gary Maxey <gary.maxey@hp.com>
+
+ * tests/OBV/ValueBox/client.cpp:
+
+ Plugged some memory leaks.
+
+Mon Jul 25 12:49:44 2005 Gary Maxey <gary.maxey@hp.com>
+
+ * tao/Array_VarOut_T.h:
+ * tao/Array_VarOut_T.inl:
+ * tao/Fixed_Array_Argument_T.inl:
+ * tao/PortableServer/Fixed_Array_SArgument_T.inl:
+
+ Removed "out" method from class TAO_Array_Var_Base_T and added
+ the method to classes TAO_FixedArray_Var_T and
+ TAO_VarArray_Var_T. For fixed arrays the "out" method now
+ returns T_slice * for fixed arrays. For variable arrays the
+ "out" method returns T_slice *& (same as previously).
+
+Mon Jul 25 12:37:34 2005 Gary Maxey <gary.maxey@hp.com>
+
+ * tests/OBV/ValueBox/client.cpp:
+
+ Fixed platform-specific compilation warnings.
+
+Mon Jul 25 13:34:03 2005 Justin Michel <michel_j@ociweb.com>
+
+ * orbsvcs/tests/ImplRepo/airplane_server.cpp:
+ * orbsvcs/tests/ImplRepo/airplane_server_i.cpp:
+
+ Add suicide capability to the server. This won't help any tests
+ pass, but should prevent airplane server processes from hanging.
+
+ * orbsvcs/tests/ImplRepo/run_test.pl:
+
+ Change the both_ir test to work as documented. The test should run
+ once with the servers running, and then once with the servers launched
+ by the activator. This works around some weird startup problems on
+ Windows.
+
+Mon Jul 25 18:12:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tao/PortableServer/ThreadStrategyORBControl.{h,cpp}:
+ Don't export this, this is only used internally in the
+ portableserver library.
+
+Mon Jul 25 18:00:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * TAO_IDL/be/be_interface.cpp:
+ * TAO_IDL/be/be_visitor_component/component_sh.cpp:
+ * TAO_IDL/be/be_visitor_interface/amh_sh.cpp:
+ * TAO_IDL/be/be_visitor_interface/interface_sh.cpp:
+ * TAO_IDL/be/be_visitor_interface/interface_ss.cpp:
+ * tao/Abstract_Servant_Base.h:
+ * tao/LocalObject.{h,cpp}:
+ * tao/Object.{h,cpp}:
+ * tao/Object_Proxy_Broker.h:
+ * tao/Remote_Object_Proxy_Broker.{h,cpp}:
+ * tao/PortableServer/Collocated_Object_Proxy_Broker.{h,cpp}:
+ * tao/PortableServer/Servant_Base.{h,cpp}:
+ Added CORBA::Object::_repository_id, this fixes bugzilla 2180
+
+ * tests/OctetSeq/client.cpp:
+ Call _repository_id
+
+ * tao/PortableServer/Active_Object_Map.h:
+ No need to export this class
+
+Mon Jul 25 15:28:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * orbsvcs/tests/AVStreams/Simple_Three_Stage/distributer.cpp:
+ * orbsvcs/tests/AVStreams/Asynch_Three_Stage/Connection_Manager.cpp:
+ Initialise pointers to 0 and fixed some typos in comments
+
+ * tao/PortableServer/Root_POA.{h,cpp}:
+ * tao/PortableServer/POAManager.{h,cpp}:
+ Overruled _get_orb as required by the CORBA spec
+
+Mon Jul 25 13:52:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * orbsvcs/orbsvcs/SSLIOP/SSLIOP_Acceptor.cpp:
+ Ensured access to codeset manager is guarded by a nil check.
+
+Mon Jul 25 07:38:47 2005 Phil Mesnier <mesnier_p@ociweb.com>
+
+ * tao/Strategies/DIOP_Acceptor.cpp:
+ * tao/Strategies/SCIOP_Acceptor.cpp:
+ * tao/Strategies/SHMIOP_Acceptor.cpp:
+ * tao/Strategies/UIOP_Acceptor.cpp:
+ * orbsvcs/orbsvcs/HTIOP/HTIOP_Acceptor.cpp:
+
+ Ensured access to codeset manager is guarded by a nil check.
+
+Sat Jul 23 19:02:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tao/PortableServer/ServantRetentionStrategyRetain.cpp:
+ * tao/PortableServer/Active_Object_Map.{h,i}:
+ Fixed a bug when we tried to deactivate a reference created with
+ a user id using a POA that uses servant activator.
+
+Sat Jul 23 12:32:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tests/POA/Etherealization/Etherealization.cpp:
+ Extended this test with two test cases where we create a
+ reference with user created id using a POA that has a
+ servant activator but don't do any calls and just deactivate
+ the object again. This is the same problem as we are seeing
+ in CIAO and this needs to be resolved as P1 bug
+
+Sat Jul 23 10:35:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tests/Bug_1020_Basic_Regression/Server_Task.cpp:
+ Fixed warning in MinGW build
+
+Fri Jul 22 15:39:18 2005 Gary Maxey <gary.maxey@hp.com>
+
+ * tests/OBV/ValueBox/client.cpp:
+
+ Guard against null pointers returned from _downcast()
+
+Fri Jul 22 18:40:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tao/ORBInitializer_Registry.cpp:
+ Fixed compile error on AIX. Thanks to Ventimiglia Chere
+ <Ventimiglia_Chere at emc dot com> for reporting this.
+
+Fri Jul 22 12:43:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * orbsvcs/orbsvcs/SSLIOP/SSLIOP_Util.cpp:
+ Updated for obj_ref_table interface change
+
+Fri Jul 22 12:04:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tao/PI/ORBInitInfo.cpp:
+ Fixed emulated excepton
+
+ * tao/Object_Ref_Table.{h,inl}:
+ * tao/ORB.cpp:
+ * tao/ORB_Core.i:
+ * tao/RTCORBA/RT_Protocols_Hooks.cpp:
+ * tao/RTScheduling/Current.cpp:
+ Changed resolve_initial_references to resolve_initial_reference
+ on the object ref table, this way the fuzz build doesn't trigger.
+
+Fri Jul 22 11:48:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tao/RTCORBA/RT_Protocols_Hooks.cpp:
+ * tao/RTPortableServer/RT_Policy_Validator.cpp:
+ * tao/RTScheduling/RTScheduler_Manager.i:
+ * tao/RTScheduling/Current.cpp:
+ Fixed problems with emulated exceptions
+
+Fri Jul 22 11:30:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tao/ORB_Core.{h,i}:
+ Removed exception macros from resolve_rt_orb and removed the
+ resolve_rt_current method because it is not used at all
+
+Fri Jul 22 11:07:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tao/ORB_Core.i:
+ Removed environment macro to resolve_initial_references on
+ objreftable
+
+Fri Jul 22 11:07:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tao/PI/ORBInitInfo.cpp:
+ * tao/ORB.cpp:
+ * tao/Object_Ref_Table.{h,inl}:
+ Corrected exceptions that should be thrown when a duplicate or
+ invalid name is passed with register_initial_reference. Also
+ removed some not needed exception argument macros. Fixes bug
+ 2087 and the associated regression test now works fine
+
+Fri Jul 22 10:26:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tao/Object_Ref_Table.inl (register_initial_reference):
+ When passed a nil object reference, throw a BAD_PARAM exception with
+ minor code 27
+
+Fri Jul 22 10:07:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tao/ORB_Table.cpp:
+ In the unbind, assign a default constructed refcount so that we
+ drop the refcount on the orb at this moment. The array_map uses
+ lazy destruction and only destructs then the ORB at process exit
+ and this causes then crashes with RTCorba.
+
+Fri Jul 22 09:52:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tests/OBV/ValueBox/client.cpp:
+ Fixed invalid remove_ref call
+
+Fri Jul 22 09:42:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * orbsvcs/orbsvcs/Log/BasicLogFactory_i.cpp:
+ * orbsvcs/orbsvcs/Log/EventLogFactory_i.cpp:
+ * orbsvcs/orbsvcs/Log/Hash_LogStore.cpp:
+ * orbsvcs/orbsvcs/Log/NotifyLogFactory_i.cpp:
+ * orbsvcs/orbsvcs/Log/RTEventLogFactory_i.cpp:
+ Fixed implicit conversion warning
+
+Fri Jul 22 09:34:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tests/OBV/ValueBox/client.cpp:
+ When assigning a hardcoded string, use CORBA::string_dup else
+ we get a crash when trying to free the string with some
+ runtimes.
+
+Fri Jul 22 09:21:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tests/OBV/ValueBox/client.cpp:
+ Fixed compile errors with Borland
+
+ * tao/Valuetype/ValueBase.{h,cpp}:
+ Use Atomic_Op for the refcount, initialize the refcount to 1 in
+ the copy constructor.
+
+Thu Jul 21 15:07:33 2005 J.T. Conklin <jtc@acorntoolworks.com>
+
+ * orbsvcs/FTRT_Event_Service/Factory_Service/Makefile.am:
+ * orbsvcs/FT_ReplicationManager/Makefile.am:
+ * orbsvcs/Fault_Detector/Makefile.am:
+ * orbsvcs/Fault_Notifier/Makefile.am:
+ * orbsvcs/LifeCycle_Service/Makefile.am:
+ * orbsvcs/Logging_Service/Notify_Logging_Service/Makefile.am:
+ * orbsvcs/Naming_Service/Makefile.am:
+ * orbsvcs/Notify_Service/Makefile.am:
+
+ Regenerated.
+
+Thu Jul 21 08:29:13 2005 J.T. Conklin <jtc@acorntoolworks.com>
+
+ * orbsvcs/orbsvcs/LogMgr_i.cpp:
+
+ Fix typo in last change.
+
+Thu Jul 21 07:42:40 2005 J.T. Conklin <jtc@acorntoolworks.com>
+
+ * orbsvcs/orbsvcs/LogMgr_i.cpp:
+
+ Don't set the servant retention policy when creating the log POA
+ in minimum CORBA builds.
+
+Thu Jul 21 07:26:27 2005 J.T. Conklin <jtc@acorntoolworks.com>
+
+ * orbscvs/orbsvcs/Hash_LogStore.cpp:
+ * orbsvcs/orbsvcs/Hash_LogRecordStore.cpp:
+
+ Use ACE_SYNCH_RW_MUTEX instead of ACE_RW_Thread_Mutex to fix
+ single threaded builds.
+
+Thu Jul 21 14:00:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tests/OBV/Valuebox/client.cpp:
+ Fixed problem with emulated exceptions
+
+Thu Jul 21 13:48:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * orbsvcs/orbsvcs/Notify/EventChannel.cpp:
+ Fixed compile error with Borland
+
+Thu Jul 21 07:08:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * orbsvcs/orbsvcs/Notify/Event_Manager.h:
+ * orbsvcs/orbsvcs/Log/Hash_LogStore.{h,cpp}:
+ Fixed problem with emulated exceptions
+
+Thu Jul 21 06:53:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * docs/tutorials/Quoter/Simple/Client/index.html:
+ * docs/tutorials/Quoter/Simple/Impl-Repo/index.html:
+ * docs/tutorials/Quoter/Simple/ImprovedServer/index.html:
+ * docs/tutorials/Quoter/Simple/Server/index.html:
+ Updated GNU makefile names with the MPC generated files.
+ Thanks to <gomezt at saic dot com> for reporting this.
+
+Wed Jul 20 13:48:49 2005 J.T. Conklin <jtc@acorntoolworks.com>
+
+ * orbsvcs/orbsvcs/Makefile.am:
+ * tao/Makefile.am:
+
+ Regenerated.
+
+Wed Jul 20 11:06:57 2005 Gary Maxey <gary.maxey@hp.com>
+
+ * tests/OBV/ValueBox/client.cpp
+ * tests/OBV/ValueBox/valuebox.idl
+ * tests/OBV/ValueBox/Test_impl.cpp
+ * tests/OBV/ValueBox/Test_impl.h
+
+ Resolved some test problems.
+
+Wed Jul 20 11:16:07 2005 Justin Michel <michel_j@ociweb.com>
+
+ * orbsvcs/orbsvcs/Notify/ConsumerAdmin.cpp:
+ * orbsvcs/orbsvcs/Notify/Default_Factory.cpp:
+ * orbsvcs/orbsvcs/Notify/EventChannel.cpp:
+ * orbsvcs/orbsvcs/Notify/Event_Manager.h:
+ * orbsvcs/orbsvcs/Notify/Event_Manager.cpp:
+ * orbsvcs/orbsvcs/Notify/Method_Request.h:
+ * orbsvcs/orbsvcs/Notify/Method_Request.cpp:
+ * orbsvcs/orbsvcs/Notify/Method_Request_Lookup.h:
+ * orbsvcs/orbsvcs/Notify/Peer.h:
+ * orbsvcs/orbsvcs/Notify/Peer.cpp:
+ * orbsvcs/orbsvcs/Notify/Routing_Slip.h:
+ * orbsvcs/orbsvcs/Notify/Routing_Slip.cpp:
+ * orbsvcs/orbsvcs/Notify/Routing_Slip_Queue.h:
+ * orbsvcs/orbsvcs/Notify/Routing_Slip_Queue.cpp:
+ * orbsvcs/orbsvcs/Notify/Subscription_Change_Worker.h:
+ * orbsvcs/orbsvcs/Notify/Subscription_Change_Worker.cpp:
+ * orbsvcs/orbsvcs/Notify/SupplierAdmin.cpp:
+ * orbsvcs/orbsvcs/Notify/ThreadPool_Task.h:
+ * orbsvcs/orbsvcs/Notify/ThreadPool_Task.cpp:
+
+ More cleanup to eliminate compile errors related to template
+ instantiation and #includes. The primary change consisted of
+ moving some ESF Worker classes to Event_Manager.cpp from
+ Event_Manager.h.
+
+ * orbsvcs/orbsvcs/Notify/Event_Manager.inl:
+ * orbsvcs/orbsvcs/Notify/Method_Request.inl:
+ * orbsvcs/orbsvcs/Notify/Peer.inl:
+ * orbsvcs/orbsvcs/Notify/Routing_Slip.inl:
+ * orbsvcs/orbsvcs/Notify/Routing_Slip_Queue.inl:
+ * orbsvcs/orbsvcs/Notify/Subscription_Change_Worker.inl:
+ * orbsvcs/orbsvcs/Notify/ThreadPool_Task.inl:
+
+ Removed these files.
+
+Wed Jul 20 07:06:10 2005 J.T. Conklin <jtc@acorntoolworks.com>
+
+ * orbsvcs/orbsvcs/Log/BasicLog_i.cpp:
+ * orbsvcs/orbsvcs/Log/EventLog_i.cpp:
+ * orbsvcs/orbsvcs/Log/NotifyLog_i.cpp:
+ * orbsvcs/orbsvcs/Log/RTEventLog_i.cpp:
+
+ Update callers.
+
+ * orbsvcs/orbsvcs/Log/Hash_LogStore.cpp:
+ * orbsvcs/orbsvcs/Log/Hash_LogStore.h:
+ * orbsvcs/orbsvcs/Log/LogMgr_i.cpp:
+ * orbsvcs/orbsvcs/Log/LogMgr_i.h:
+ * orbsvcs/orbsvcs/Log/LogStore.h:
+
+ Added emulated exception goo to ::exists() and ::remove()
+ methods.
+
+ * orbsvcs/orbsvcs/Log/LogMgr_i.cpp:
+
+ Work around MSV6 not supporting scoping of variables declared in
+ for loops.
+
+Wed Jul 20 13:54:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tests/Connection_Timeout/client.cpp:
+ Changed this test to test the timeout in a separate method so that
+ also in case of failure we cleanly destroy the ORB.
+
+Wed Jul 20 12:54:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tao/default_resource.cpp:
+ Delete the codeset_manager_, fixes a memory leak
+
+ * tao/Codeset/Codeset_Descriptor.cpp:
+ Use ACE_OS::free to delete the name, it is allocated with
+ ACE_OS::strdup, fixes an invalid read error with valgrind
+
+Wed Jul 20 12:34:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tests/Portable_Interceptors/Recursive_ORBInitializer/Client_ORBInitializer.cpp:
+ Emulated exception fix
+
+Wed Jul 20 12:17:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * orbsvcs/tests/BiDir_CORBALOC/TimeServer.cpp:
+ Removed %P|%t from the print exception, this is already done
+ by the print exception itself
+
+Wed Jul 20 11:59:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * orbsvcs/orbsvcs/Log/BasicLogFactory_i.cpp:
+ * orbsvcs/orbsvcs/Log/Log_i.cpp:
+ Fixed compile problem with emulated exceptions
+
+Wed Jul 20 11:44:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * orbsvcs/orbsvcs/Log/Hash_LogRecordStore.cpp:
+ Fixed compile problem with emulated exceptions
+
+Wed Jul 20 10:27:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tao/Messaging/Messaging_Loader.cpp:
+ Small layout improvement. Last change in my workspace for the
+ upcoming beta
+
+Wed Jul 20 10:21:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tao/Object_Proxy_Impl.{h,cpp}:
+ Removed these files, class is not used anymore, we will do soon
+ some cleanup in the TAO_IDL compiler related to this
+
+ * tao/tao.mpc:
+ * tao/Makefile.am:
+ Removed file above
+
+Wed Jul 20 07:43:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tao/BiDir_Adapter.h:
+ Removed activate call, we are using the init() call to register
+ the ORBInitializer
+
+ * tao/ORB_Core.{h,cpp}:
+ Removed bidirectional_giop_init, this is not needed anymore, get
+ the BiDIR adapter just in load_policy_validators
+
+ * tao/TAO_Internal:
+ Init BiDIR GIOP library as the other libs
+
+ * tao/BiDIR_GIOP/BiDirGIOP.{h,cpp}:
+ Use init() instead of activate() to register the ORBInitializer.
+
+ All these changes make sure that the BiDIR ORBInitializer is
+ registered before the ORBInitializer::pre_init() call, previously
+ if was registered after pre_init which resulted in the problem that
+ after fixing a bug now it doesn't get called anymore in post_init()
+
+Tue Jul 19 18:45:19 2005 J.T. Conklin <jtc@acorntoolworks.com>
+
+ * orbsvcs/orbsvcs/Log/Hash_LogRecordStore.h
+ * orbsvcs/orbsvcs/Log/Hash_LogStore.h
+
+ Use ACE_SYNCH_RW_MUTEX instead of ACE_RW_Thread_Mutex to fix
+ single threaded builds.
+
+ * orbsvcs/orbsvcs/Log/LogRecordStore.h
+ * orbsvcs/orbsvcs/Log/LogStore.h
+
+ Made constructor protected.
+ Made destructor virtual.
+
+ * orbsvcs/orbsvcs/Log/Log_i.cpp:
+
+ Fixed typo introduced in:
+ Tue Jul 19 14:14:37 2005 J.T. Conklin <jtc@acorntoolworks.com>
+
+Tue Jul 19 16:40:37 2005 Gary Maxey <gary.maxey@hp.com>
+
+ * orbsvcs/orbsvcs/IFRService/Container_i.cpp:
+
+ Exclude unsigned long long case in store_label() if platform
+ does not allow this type.
+
+Tue Jul 19 14:14:37 2005 J.T. Conklin <jtc@acorntoolworks.com>
+
+ * orbsvcs/orbsvcs/Log/BasicLogFactory_i.h:
+ * orbsvcs/orbsvcs/Log/EventLogFactory_i.h:
+ * orbsvcs/orbsvcs/Log/Hash_LogRecordStore.cpp:
+ * orbsvcs/orbsvcs/Log/Hash_LogRecordStore.h:
+ * orbsvcs/orbsvcs/Log/LogMgr_i.cpp:
+ * orbsvcs/orbsvcs/Log/LogMgr_i.h:
+ * orbsvcs/orbsvcs/Log/LogRecordStore.h:
+ * orbsvcs/orbsvcs/Log/LogStore.h:
+ * orbsvcs/orbsvcs/Log/Log_i.cpp:
+ * orbsvcs/orbsvcs/Log/NotifyLogFactory_i.h:
+ * orbsvcs/orbsvcs/Log/RTEventLogFactory_i.cpp:
+ * orbsvcs/orbsvcs/Log/RTEventLogFactory_i.h:
+
+ Fix assorted build errors, mostly related to emulated
+ exceptions. Thanks to Simon Massey and Don Sharp for
+ pointing out these problems.
+
+Tue Jul 19 16:02:32 2005 Justin Michel <michel_j@ociweb.com>
+
+ * orbsvcs/ImplRepo_Service/ImR_Activator_i.cpp:
+
+ Free process_map_ entries in handle_exit(). Thanks to
+ Yevgen Galchenko <yevgeng at softcomputer dot com> for finding
+ this memory leak.
+
+ * orbsvcs/orbsvcs/Notify/Any/AnyEvent.cpp:
+ * orbsvcs/orbsvcs/Notify/Consumer.inl:
+ * orbsvcs/orbsvcs/Notify/Consumer.cpp:
+ * orbsvcs/orbsvcs/Notify/Delivery_Request.inl:
+ * orbsvcs/orbsvcs/Notify/Delivery_Request.cpp:
+ * orbsvcs/orbsvcs/Notify/Event.h:
+ * orbsvcs/orbsvcs/Notify/Event_Manager.inl:
+ * orbsvcs/orbsvcs/Notify/Event_Manager.cpp:
+ * orbsvcs/orbsvcs/Notify/Method_Request.inl:
+ * orbsvcs/orbsvcs/Notify/Method_Request.cpp:
+ * orbsvcs/orbsvcs/Notify/Method_Request_Dispatch.cpp:
+ * orbsvcs/orbsvcs/Notify/Method_Request_Lookup.cpp:
+ * orbsvcs/orbsvcs/Notify/Object.h:
+ * orbsvcs/orbsvcs/Notify/Peer.inl:
+ * orbsvcs/orbsvcs/Notify/Peer.cpp:
+ * orbsvcs/orbsvcs/Notify/Property.h:
+ * orbsvcs/orbsvcs/Notify/ProxyConsumer.h:
+ * orbsvcs/orbsvcs/Notify/Routing_Slip.cpp:
+ * orbsvcs/orbsvcs/Notify/Structured/StructuredEvent.cpp:
+ * orbsvcs/orbsvcs/Notify/Subscription_Change_Worker.inl:
+ * orbsvcs/orbsvcs/Notify/Subscription_Change_Worker.cpp:
+ * orbsvcs/orbsvcs/Notify/SupplierAdmin.h:
+ * orbsvcs/orbsvcs/Notify/ThreadPool_Task.h:
+ * orbsvcs/orbsvcs/Notify/ThreadPool_Task.inl:
+ * orbsvcs/orbsvcs/Notify/ThreadPool_Task.cpp:
+ * orbsvcs/orbsvcs/Notify/Timer_Queue.h:
+ * orbsvcs/orbsvcs/Notify/Timer_Reactor.h:
+ * orbsvcs/orbsvcs/Notify/Topology_Loader.h:
+ * orbsvcs/orbsvcs/Notify/Topology_Object.h:
+
+ My previous checkin caused problems depending on the compiler
+ and the setting for __ACE_INLINE__. I took the opportunity to
+ clean up the #includes a little, and hopefully this fixes the
+ compile errors on all platforms.
+
+Tue Jul 19 19:17:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tao/PI/ORBInitializer_Registry_Impl.cpp:
+ Fixed emulated exception error
+
+Tue Jul 19 10:26:03 2005 Gary Maxey <gary.maxey@hp.com>
+
+ * orbsvcs/orbsvcs/ETCL/ETCL_l.cpp:
+
+ When parse error occurs flush input buffer so a subsequent parse
+ does not see tokens from the current one.
+
+Tue Jul 19 10:21:05 2005 Gary Maxey <gary.maxey@hp.com>
+
+ * orbsvcs/orbsvcs/ETCL/ETCL_y.cpp:
+ * orbsvcs/orbsvcs/ETCL/ETCL_l.cpp:
+ * orbsvcs/orbsvcs/ETCL/ETCL_y.cpp.diff:
+ * orbsvcs/orbsvcs/ETCL/ETCL_y.cpp.diff:
+
+ When parse error occurs flush input buffer so a subsequent parse
+ does not see tokens from the current one.
+
+Tue Jul 19 10:21:17 2005 Justin Michel <michel_j@ociweb.com>
+
+ * orbsvcs/orbsvcs/Notify/Admin.cpp:
+ * orbsvcs/orbsvcs/Notify/Builder.cpp:
+ * orbsvcs/orbsvcs/Notify/EventChannel.cpp:
+ * orbsvcs/orbsvcs/Notify/Method_Request_Lookup.cpp:
+ * orbsvcs/orbsvcs/Notify/Object.h:
+ * orbsvcs/orbsvcs/Notify/Object.cpp:
+
+ Fix some problems with compilers that use early template
+ instantiation.
+
+ * orbsvcs/tests/Notify/Ordering/Notify_Sequence_Push_Consumer.cpp:
+
+ Fix a warning about signed/unsigned comparison.
+
+Tue Jul 19 15:52:19 2005 Simon McQueen <sm@prismtech.com>
+
+ * tao/Union_TypeCode.cpp:
+
+ Put unreachable code back with ACE_NOTREACHED macro to fix
+ warning on Redhat implicit templates build.
+
+Tue Jul 19 14:00:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tests/Portable_Interceptors/Register_Initial_References/*
+ Added a new regression for register_initial_references on the ORB
+ and the ORBInitInfo. It seems we have some bugs to resolve. This is
+ to test for bugzilla bug 2087
+
+Tue Jul 19 13:14:51 UTC 2005 Jeff Parsons <j.parsons@vanderbilt.edu>
+
+ * TAO_IDL/be/be_visitor_interface/interface_ih.cpp:
+
+ Fixed error in generation of inheritance list for impl
+ class declaration. Thanks to Steven Hattons
+ <hattons@globalsymmetry.com> for reporting the bug.
+
+Tue Jul 19 12:57:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * TAO_IDL/be/be_visitor_interface/interface_ih.cpp:
+ Fixed bug when generating the implementation class, I removed
+ the base RefCountServantBase generation, but then also public
+ virtual shouldn't be generated. Thanks to Steven T. Hatton
+ <hattons at globalsymmetry dot com> for bringing this to my
+ attention.
+
+Tue Jul 19 12:35:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tao/PI/ORBInitializer_Registry_Impl.{h,cpp}:
+ Use a recursive mutex instead of a normal mutex to allow an
+ ORBInitializer to register another ORBInitializer during
+ pre/post init. Also use the mutex in the fini method to
+ prevent race conditions there. This fixes bugzilla bug
+ 2089.
+
+Tue Jul 19 12:24:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tao/ObjectKey_Table.cpp:
+ Removed explicit templates
+
+ * tao/ORB.cpp:
+ * tao/ORBInitializer_Registry_Adapter.h:
+ * tao/PI/ORBInitializer_Registry_Impl.{h,cpp}:
+ Change the interface to the ORBInitializer_Registry related to
+ bugzilla bug 2089. An ORBInitializer can register another
+ ORBInitializer during pre_init/post_init. I found that when
+ during pre_init a new ORBInitializer is registered, this is called
+ during post_init directly, but that shouldn't happen, the new
+ one should only be called when another ORB is initialized.
+ Changed the interface to the registry in such a way the pre_init
+ returns the number of initializers called, this is then passed
+ to post_init so that we only invoke the number of initializers
+ that where called during pre_init.
+
+ * tao/tests/Portable_Interceptors/Recursive_ORBInitializer/*:
+ New regression to test an ORBInitializer that registers
+ itself another ORBInitializer
+
+Tue Jul 19 11:57:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tests/Portable_Interceptors/Bug_2088/client.cpp:
+ Rewrote this test to test the draft 3.1 spec behaviour which
+ matches the current implementation. The 3.0.3 behaviour about
+ which I made this report doesn't seem usable for end users.
+ Fixes bugzilla bug 2088
+
+Tue Jul 19 11:31:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * orbsvcs/examples/ORT/Gateway_i.cpp:
+ Initialise pointer with 0
+
+ * tao/Object_Loader.cpp:
+ * tao/NVList.cpp:
+ Removed explicit templates
+
+Tue Jul 19 10:23:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tao/IORInterceptor_Adapter_Factory.{h,cpp}:
+ Added virtual destructor to fix gcc4 runtime error
+
+Tue Jul 19 10:21:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tests/Reliable_Oneways/Reliable_Oneways.mpc:
+ Simplified this MPC file
+
+Tue Jul 19 10:12:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tao/DynamicInterface/Server_Request.h:
+ * tao/DynamicInterface/Request.h:
+ Fixed documentation typo
+
+ * tao/DynamicInterface/Server_Request.cpp:
+ Use prefix operators for the refcount
+
+ * tao/DynamicInterface/Context.{h,cpp}:
+ * tao/True_RefCount_Policy.{h,inl}:
+ * tao/Principal.{h,cpp,i}:
+ * tao/NVList.{h,cpp}:
+ Use ACE_Atomic_Op for the refcount
+
+ * tao/Synch_Refcountable.{h,cpp,inl}:
+ * tao/Utils/Synch_Refcountable.{h,cpp,inl}:
+ Moved TAO_Synch_Refcountable to the Utils lib, it is a utility
+ class and not used anywhere in the complete TAO distribution
+
+ * tao/tao.mpc:
+ * tao/Makefile.am:
+ Updated for change above
+
+Tue Jul 19 09:08:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tao/Object.cpp:
+ Fixed the _non_existent to catch a OBJECT_NOT_EXIST and then return
+ true.
+
+ * tao/PortableServer/Servant_Base.cpp (_non_existent) :
+ Return false instead of 0
+
+ * tao/PortableServer/Collocated_Object_Proxy_Broker.cpp:
+ Removed try/catch. This is done in CORBA::Object.
+
+ This fixes bugzills 2174. Thanks to Torsten Kuepper
+ <torsten dot kuepper at nokia dot com> for reporting this
+
+Mon Jul 18 14:53:19 2005 J.T. Conklin <jtc@acorntoolworks.com>
+
+ * orbsvcs/orbsvcs/Log/Hash_LogRecordStore.cpp:
+
+ Changed to compute size of log record only once.
+
+ * orbsvcs/orbsvcs/Log/Log_i.cpp:
+ * orbsvcs/orbsvcs/Log/Hash_LogRecordStore.cpp:
+ * orbsvcs/orbsvcs/Log/Hash_LogRecordStore.h:
+
+ Update for below change.
+
+ * orbsvcs/orbsvcs/Log/LogRecordStore.h:
+
+ Changed TAO_LogRecordStore::log()'s log record parameter to a
+ const reference.
+
+ Prior to this change, TAO_Log_i::write_recordlist() copied the
+ indexed record (from the list) to a temporary before invoking
+ TAO_LogRecordStore::log(), since that updated the id and time-
+ stamp fields. Since this is not always true with dynamically
+ loaded strategies, we make the concrete LogRecordStore class
+ do the copy.
+
+Mon Jul 18 13:12:15 2005 Ciju John <john_c@ociweb.com>
+
+ * orbsvcs/Notify_Service/Notify_Service.mpc:
+
+ Linked in the ValueType library to the NamingService. This is
+ required in case the event embedds a valuetype. The event body
+ consists of several CORBA anys. The current implementation
+ demarshalls an any before touching app code. Thus if the any
+ were to contain a valuetype, the valuetype library will be
+ called upon to demarshall the data.
+
+Mon Jul 18 15:34:01 2005 Simon McQueen <sm@prismtech.com>
+
+ * tao/DynamicInterface/DII_Invocation.cpp:
+ * tao/PI_Server/PI_Server_Loader.cpp:
+ * tao/Union_TypeCode.cpp:
+ * tao/Union_TypeCode_Static.cpp:
+ * tests/Bug_1020_Basic_Regression/Server_Task.cpp:
+
+ Removed unreachable statements identified by HP non stop
+ MIPS build warnings.
+
+Mon Jul 18 14:23:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tests/Bug_2174_Regression/client.cpp:
+ Don't print the transient exception, this is expected
+
+ * tests/Bug_2174_Regression/server.cpp:
+ Removed commented out code
+
+Mon Jul 18 09:20:46 2005 Phil Mesnier <mesnier_p@ociweb.com>
+
+ * NEWS:
+ Added notes about codeset refactoring.
+
+Mon Jul 18 14:08:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tao/Any_Impl.cpp:
+ Fixed crash in Any cleanup
+
+Mon Jul 18 15:05:03 2005 Boris Kolpackov <boris@kolpackov.net>
+
+ * orbsvcs/examples/Notify/Federation/Agent/Agent.cpp:
+ * orbsvcs/examples/Notify/Federation/Gate/Gate.cpp:
+
+ Fixed a bunch of warnings.
+
+Mon Jul 18 08:13:14 2005 Justin Michel <michel_j@ociweb.com>
+
+ * orbsvcs/orbsvcs/Notify/Admin.cpp:
+
+ Attempt to fix compile errors on Irix resulting from partially
+ defined types.
+
+Mon Jul 18 05:15:49 2005 J.T. Conklin <jtc@acorntoolworks.com>
+
+ * orbsvcs/orbsvcs/Log/Hash_LogRecordStore.cpp:
+
+ #include "ace/OS_NS_sys_time.h" to bring ACE_OS::gettimeofday()
+ definition into scope for noinline builds.
+
+ * orbsvcs/orbsvcs/Log/Hash_LogStore.cpp:
+
+ #include "ace/Auto_Ptr.h" to bring auto_ptr<> template into
+ scope for noinline builds.
+
+ * orbsvcs/orbsvcs/Log/BasicLogFactory_i.cpp:
+ * orbsvcs/orbsvcs/Log/EventLogFactory_i.cpp:
+ * orbsvcs/orbsvcs/Log/NotifyLogFactory_i.cpp:
+ * orbsvcs/orbsvcs/Log/RTEventLogFactory_i.cpp:
+
+ #include "ace/OS_NS_stdio.h" to bring ACE_OS::sprintf()
+ definition into scope for noinline builds.
+
+Mon Jul 18 06:53:00 2005 Chad Elliott <elliott_c@ociweb.com>
+
+ * tao/PortableServer/RequestProcessingStrategyDefaultServant.cpp:
+
+ Fixed a bug where using reference_to_servant() with the
+ DefaultServant strategy incremented the reference count by two
+ instead of one.
+
+ * tests/POA/Default_Servant/Default_Servant.cpp:
+
+ Added tests to check that the reference count is correctly
+ maintained when using reference_to_servant() with the Root POA
+ and the Default Servant POA.
+
+Mon Jul 18 08:41:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tao/Any_Impl.{h,cpp}:
+ * tao/LocalObject.{h,cpp,i}:
+ * tao/Messaging/AMH_Response_Handler.cpp:
+ * tao/Valuetype/ValueFactory.{h,cpp}:
+ Use ACE_Atomic_Op for the refcount
+
+Mon Jul 18 08:43:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tao/Codeset_Descriptor_Base.h:
+ * orbsvcs/orbsvcs/Log/Hash_LogRecordStore.h:
+ Fixed fuzz errors
+
+Sun Jul 17 18:57:26 2005 Phil Mesnier <mesnier_p@ociweb.com>
+
+ * orbsvcs/orbsvcs/PortableGroup/Portable_Group_Map.cpp (operator):
+
+ Fixed a typo resulting from an earlier edit.
+
+Sun Jul 17 16:39:01 2005 Phil Mesnier <mesnier_p@ociweb.com>
+
+ * tao/Codeset_Descriptor_Base.h:
+ * tao/Codeset_Manager.cpp:
+ * tao/Codeset_Manager.h:
+ * tao/Codeset_Manager_Factory_Base.cpp:
+ * tao/Codeset_Manager_Factory_Base.h:
+ * tao/Makefile.am:
+ * tao/ORB_Core.cpp:
+ * tao/ORB_Core.h:
+ * tao/ORB_Core.i:
+ * tao/Resource_Factory.cpp:
+ * tao/Resource_Factory.h:
+ * tao/default_resource.cpp:
+ * tao/default_resource.h:
+ * tao/tao.mpc:
+ * tao/Codeset/Codeset_Manager_Factory.cpp:
+ * tao/Codeset/Codeset_Manager_Factory.h:
+ * tao/Codeset/Codeset_Manager_i.cpp:
+ * tao/Codeset/Codeset_Manager_i.h:
+ * tao/Codeset/Codeset_Translator_Factory.cpp:
+ * tao/Codeset/UTF16_BOM_Translator.cpp:
+ * tao/Codeset/Codeset_Descriptor.cpp:
+ * tao/Codeset/Codeset_Descriptor.h:
+
+ Moved the remaining codeset-specific details out of the ORB core
+ and into TAO_Codeset. This is accomplished by moving the codeset
+ descriptor interface out of the Resource_Factory.h and making it
+ accessible only through the Codeset_Manager interface. This
+ means that the codeset manager must be created earlier in
+ the start-up if the library is available. If one assumes that
+ specifying a native [w]char codeset, or translators in the
+ svc.conf file, one expects to use codeset negotiation, then this
+ earlier loading is not a problem. If no codeset configuration is
+ supplied and -ORBNegotiateCodesets 0 is supplied to ORB_init,
+ then the TAO_Codeset library will not be loaded.
+
+ With static linked applications, if TAO_Codeset is not linked in
+ and tao/Codeset/Codeset.h is not included, then any codeset
+ specific configuration is ignored by the resource factory.
+
+ This change requires regenerating makefiles for TAO and
+ TAO_Codeset. If rebuilding in an existing workspace, rebuilding
+ dependencies for these libraries is recommended.
+
+
+Sat Jul 16 18:01:26 2005 J.T. Conklin <jtc@acorntoolworks.com>
+
+ * orbsvcs/orbsvcs/Log/Log_i.cpp:
+
+ Changed init() method to not set the administrative and
+ forwarding states, since those may be from a persistent
+ data store.
+
+Sat Jul 16 17:48:15 2005 J.T. Conklin <jtc@acorntoolworks.com>
+
+ * orbsvcs/orbsvcs/Log/BasicLogFactory_i.cpp
+ * orbsvcs/orbsvcs/Log/Hash_LogStore.cpp
+ * orbsvcs/orbsvcs/Log/LogMgr_i.cpp
+
+ Remove stray ACE_DEBUGs.
+
+ * orbsvcs/orbsvcs/Log/Log_i.cpp:
+
+ Fix inverted conditional in set_administative_state().
+
+Sat Jul 16 17:17:30 2005 J.T. Conklin <jtc@acorntoolworks.com>
+
+ * orbsvcs/orbsvcs/Log/Hash_LogRecordStore.cpp:
+
+ Changed log record to use log_record_size() instead of sizeof()
+ when checking whether log is full.
+
+ * orbsvcs/orbsvcs/Log/Hash_LogRecordStore.cpp:
+ * orbsvcs/orbsvcs/Log/Hash_LogRecordStore.h:
+
+ Use the thread-safe interface pattern for remove() method.
+ Change all callers who already have the write lock to call
+ new remove_i() method. Avoids deadlock found by unit test.
+
+ * orbsvcs/orbsvcs/Log/Log_i.cpp:
+
+ Changed flush method to invoke flush on log record store.
+
+ * orbsvcs/orbsvcs/Log/Hash_LogRecordStore.cpp
+ * orbsvcs/orbsvcs/Log/Hash_LogRecordStore.h
+ * orbsvcs/orbsvcs/Log/LogRecordStore.h
+
+ Added flush method to ensure log records have been written
+ to persistent media.
+
+ * orbsvcs/orbsvcs/Log/Log_i.h:
+
+ Make remove_old_records public so it can be called by log
+ compaction timer.
+
+ * orbsvcs/orbsvcs/Log/Log_Compaction_Handler.cpp:
+
+ Changed to invoke remove_old_records() on log now that
+ Hash_LogRecordStore is protected by read/write locks.
+
+Sat Jul 16 15:46:21 2005 J.T. Conklin <jtc@acorntoolworks.com>
+
+ * orbsvcs/orbsvcs/Log/BasicLogFactory_i.cpp:
+ * orbsvcs/orbsvcs/Log/BasicLogFactory_i.h:
+ * orbsvcs/orbsvcs/Log/EventLogFactory_i.cpp:
+ * orbsvcs/orbsvcs/Log/EventLogFactory_i.h:
+ * orbsvcs/orbsvcs/Log/LogMgr_i.cpp:
+ * orbsvcs/orbsvcs/Log/LogMgr_i.h:
+ * orbsvcs/orbsvcs/Log/NotifyLogFactory_i.cpp:
+ * orbsvcs/orbsvcs/Log/NotifyLogFactory_i.h:
+ * orbsvcs/orbsvcs/Log/RTEventLogFactory_i.cpp:
+ * orbsvcs/orbsvcs/Log/RTEventLogFactory_i.h:
+
+ Refactor identical code to create the factory and log channel
+ POAs out of *LogFactory_i and into base class TAO_LogMgr_i.
+
+Sat Jul 16 14:46:36 2005 J.T. Conklin <jtc@acorntoolworks.com>
+
+ * orbsvcs/orbsvcs/Hash_LogRecordStore.cpp:
+
+ Add missing read/write guards.
+
+ * orbsvcs/orbsvcs/LogRecordStore.h:
+ * orbsvcs/orbsvcs/Hash_LogRecordStore.h:
+ * orbsvcs/orbsvcs/Hash_LogRecordStore.cpp:
+
+ Suppored emulated exceptions on all LogRecordStore methods.
+
+ * orbsvcs/orbsvcs/Log_Persistence_Strategy.h:
+ * orbsvcs/orbsvcs/LogStore.h:
+
+ New files that should have been committed as part of:
+ Fri Jul 15 17:01:34 2005 J.T. Conklin <jtc@acorntoolworks.com>
+
+Sat Jul 16 16:12:04 2005 Douglas C. Schmidt <schmidt@cs.wustl.edu>
+
+ * orbsvcs/orbsvcs/PortableGroup/Portable_Group_Map.cpp (dispatch):
+ Don't put the ACE_GUARDs in the TAO_GroupId*::operator() methods.
+ Thanks to J.T. for noticing this.
+
+Sat Jul 16 18:20:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tao/DynamicInterface/Request.inl:
+ Added include of NVList.h to fix compile errors in builds with
+ inlining enabled
+
+Sat Jul 16 10:24:36 2005 Douglas C. Schmidt <schmidt@cs.wustl.edu>
+
+ * orbsvcs/orbsvcs/PortableGroup/Portable_Group_Map.{cpp,h}: Added
+ a lock to prevent race conditions. Thanks to Frank Hunleth
+ <frank@hunleth.com> and Felix Perez Alamillo
+ <fpalamillo@indra.es> for helping with this.
+
+Sat Jul 16 02:18:12 UTC 2005 Jeff Parsons <j.parsons@vanderbilt.edu>
+
+ * TAO_IDL/be/be_visitor_valuebox/valuebox_ci.cpp:
+
+ Changed code generation of the _boxed_out() method for
+ boxed array types to return the type of the valuebox
+ member's .out() method. The _boxed_out() method previously
+ returned the member's .inout() method, which could
+ potentially cause a memory leak if the member _var's
+ contained pointer is non-zero when _boxed_out() is
+ called.
+
+Fri Jul 15 17:01:34 2005 J.T. Conklin <jtc@acorntoolworks.com>
+
+ * orbsvcs/orbsvcs/DsLogAdmin.mpc:
+
+ Added Hash_Persistence_Strategy.*, Hash_LogStore.*, and
+ Hash_LogRecordStore.* to DsLogAdmin_Serv project.
+
+ * orbsvcs/orbsvcs/Log/LogMgr_i.cpp:
+ * orbsvcs/orbsvcs/Log/LogMgr_i.h:
+
+ Use dynamically loaded persistence strategy to create
+ LogStore.
+
+ * orbsvcs/orbsvcs/Log/Log_Persistence_Strategy.h:
+ * orbsvcs/orbsvcs/Log/Hash_Persistence_Strategy.cpp:
+ * orbsvcs/orbsvcs/Log/Hash_Persistence_Strategy.h:
+
+ New TAO_Log_Persistence_Strategy abstract base class which
+ strategizes the log parameter and log record storage, with
+ concrete TAO_Hash_Persistence_Strategy.h implementation.
+
+ * orbsvcs/orbsvcs/Log/LogMgr_i.cpp:
+ * orbsvcs/orbsvcs/Log/LogMgr_i.h:
+ * orbsvcs/orbsvcs/Log/LogStore.h:
+ * orbsvcs/orbsvcs/Log/Hash_LogStore.cpp:
+ * orbsvcs/orbsvcs/Log/Hash_LogStore.h:
+
+ Refactor LogMgr_i class so it bridges to new LogStore abstract
+ base class, with concrete TAO_Hash_LogStore implementation.
+
+ * orbsvcs/orbsvcs/Log/LogRecordStore.h:
+ * orbsvcs/orbsvcs/Log/LogRecordStore.cpp:
+ * orbsvcs/orbsvcs/Log/Hash_LogRecordStore.cpp:
+ * orbsvcs/orbsvcs/Log/Hash_LogRecordStore.h:
+
+ Refactor TAO_LogRecordStore class into an abstract base class
+ with a concrete TAO_Hash_LogRecordStore implementartion.
+
+ * orbsvcs/orbsvcs/Log/Log_i.cpp (write_recordlist):
+
+ Throw DsLogAdmin::LogOffDuty if log is off duty.
+
+ * orbsvcs/orbsvcs/Log/EventLogFactory_i.cpp:
+
+ Use poa_ instead of _default_POA for collocated event channel.
+
+ * orbsvcs/orbsvcs/Log/BasicLogFactory_i.cpp:
+ * orbsvcs/orbsvcs/Log/EventLogFactory_i.cpp:
+ * orbsvcs/orbsvcs/Log/NotifyLogFactory_i.cpp:
+
+ Update callers.
+
+ * orbsvcs/orbsvcs/Log/BasicLog_i.cpp:
+ * orbsvcs/orbsvcs/Log/BasicLog_i.h:
+ * orbsvcs/orbsvcs/Log/EventLog_i.cpp:
+ * orbsvcs/orbsvcs/Log/EventLog_i.h:
+ * orbsvcs/orbsvcs/Log/NotifyLog_i.cpp:
+ * orbsvcs/orbsvcs/Log/NotifyLog_i.h:
+
+ Added poa_ member variable.
+
+ Changed constructor to take poa parameter.
+
+ Changed destroy to use poa_ member variable instead of using
+ _default_POA(), since there are now multiple POAs in play.
+
+ * orbsvcs/orbsvcs/Log/EventLogFactory_i.cpp:
+ * orbsvcs/orbsvcs/Log/NotifyLogFactory_i.cpp:
+ * orbsvcs/orbsvcs/Log/RTEventLogFactory_i.cpp:
+
+ Update callers.
+
+ * orbsvcs/orbsvcs/Log/NotifyLogFactory_i.cpp (object_creation):
+ * orbsvcs/orbsvcs/Log/NotifyLogFactory_i.h:
+
+ Removed unused Log argument.
+
+ * orbsvcs/orbsvcs/Log/BasicLogFactory_i.cpp:
+ * orbsvcs/orbsvcs/Log/BasicLogFactory_i.h:
+ * orbsvcs/orbsvcs/Log/EventLogFactory_i.cpp:
+ * orbsvcs/orbsvcs/Log/EventLogFactory_i.h:
+ * orbsvcs/orbsvcs/Log/NotifyLogFactory_i.cpp:
+ * orbsvcs/orbsvcs/Log/NotifyLogFactory_i.h:
+ * orbsvcs/orbsvcs/Log/RTEventLogFactory_i.cpp:
+ * orbsvcs/orbsvcs/Log/RTEventLogFactory_i.h:
+
+ Create persistent POAs for the log factory and log channels.
+
+ Activate factory and log channel objects explicitly instead
+ of using _this().
+
+ Fix assorted resource leaks, unchecked emulated exceptions.
+
+Fri Jul 15 16:17:34 2005 Phil Mesnier <mesnier_p@ociweb.com>
+
+ * docs/Options.html:
+ * tao/Codeset_Manager.cpp:
+ * tao/Codeset_Manager.h:
+ * tao/Makefile.am:
+ * tao/ORB_Core.cpp:
+ * tao/orbconf.h:
+ * tao/tao.mpc:
+ * tao/Codeset/Codeset.cpp:
+ * tao/Codeset/Codeset_Manager_Factory.cpp:
+ * tao/Codeset/Codeset_Manager_Factory.h:
+ * tao/Codeset/UTF16_BOM_Factory.cpp:
+ * tao/Codeset/UTF8_Latin1_Factory.cpp:
+
+ Another round of changes to reconcile the differences between
+ static and dynamic libraries. Static applications must
+ explicitly link libTAO_Codeset and include "tao/Codeset/Codeset"
+ to enable codeset support. Failing to do the include will cause
+ none of the TAO_Codeset code to actually link. Thus merely
+ adding -lTAO_Codeset to the link line is benign if no codeset
+ support is desired. The link line is modified automatically for
+ MPC projects depending on taoexe if the negotiate_codesets
+ feature is enabled in default.features.
+
+Fri Jul 15 11:00:03 2005 Gary Maxey <gary.maxey@hp.com>
+
+ * TAO_IDL/be/be_visitor_valuebox/valuebox_ci.cpp:
+
+ Fixed platform-specific errors.
+
+Fri Jul 15 08:48:55 2005 Gary Maxey <gary.maxey@hp.com>
+
+ * tests/OBV/ValueBox/client.cpp:
+
+ Fixed platform-specific errors.
+
+Fri Jul 15 17:18:44 2005 Boris Kolpackov <boris@kolpackov.net>
+
+ * orbsvcs/examples/Notify/Federation/Agent/Agent.cpp:
+ * orbsvcs/examples/Notify/Federation/Gate/Gate.cpp:
+ * orbsvcs/examples/Notify/Federation/SpaceCraft/SpaceCraft.cpp:
+
+ Fixed a number of warnings.
+
+Fri Jul 15 13:19:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tao/ORB.h:
+ Added forward declaration NVList
+
+ * tao/tao.mpc:
+ * tao/extra_core.mpb:
+ Moved ClientRequestInterceptor_Adapter and ServerRequestInterceptor_
+ Adapter to extra_core, don't need them in a minimum build. Removed
+ tao.mpc from tao.mpv, it is already in extra_core.mpb
+
+Fri Jul 15 13:09:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tao/DynamicInterface/Context.cpp:
+ * tao/DynamicInterface/DII_Invocation.cpp:
+ * tao/DynamicInterface/Request.{h,cpp}:
+ * tao/DynamicInterface/Server_Request.{h,cpp,inl}:
+ Use more forward declarations and reduced the includes done, doxygen
+ improvement and removed explicit templates
+
+Fri Jul 15 11:49:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tao/NVList.cpp:
+ Initialise pointers with 0
+
+Fri Jul 15 10:36:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tao/Any.h:
+ Removed not needed forward declaration of CORBA_NVList
+
+Thu Jul 14 22:15:02 2005 Phil Mesnier <mesnier_p@ociweb.com>
+
+ * tao/Codeset/Codeset.cpp:
+ * tao/Codeset/Codeset.h:
+ * tao/Codeset/Codeset_Manager_Factory.cpp:
+ * tao/Codeset/Codeset_Manager_Factory.h:
+ * tao/Codeset/Codeset_Manager_i.cpp:
+ * tao/Codeset/Codeset_Manager_i.h:
+
+ Separated the classes responsible for initailizing the codeset
+ library from the codeset manager implementation. This is an
+ effort to improve the integration with either static or shared
+ libraries.
+
+ * tao/Makefile.am:
+
+ Added the new files mentioned above.
+
+ * tao/orbconf.h:
+
+ Changed the default for codeset negotiation to be 0 for static
+ builds.
+
+Thu Jul 14 22:52:09 UTC 2005 Jeff Parsons <j.parsons@vanderbilt.edu>
+
+ * tao/PortableServer/Fixed_Array_SArgument_T.h:
+ * tao/PortableServer/Fixed_Array_SArgument_T.inl:
+
+ Changed the Fixed_Array_SArg_Traits_T typedef
+ 'out_arg_type' for fixed arrays to
+ be <array>_slice* instead of <array>_slice*&, and
+ changed the Out_Fixed_Array_SArgument_T::arg() method
+ to return a slice pointer instead of a slice pointer
+ reference. Since the array is of fixed size, the slice
+ pointer can be declared on the stack, and no heap
+ allocation is necessary, for an OUT arg of this type on
+ the skeleton side. Thanks to Chad Elliott
+ <elliott_c@ociweb.com> for pointing this out.
+
+Thu Jul 14 15:04:41 2005 J.T. Conklin <jtc@acorntoolworks.com>
+
+ * tao/Makefile.am:
+ * orbsvcs/orbsvcs/Makefile.am:
+
+ Regenerated.
+
+Thu Jul 14 21:42:43 UTC 2005 Jeff Parsons <j.parsons@vanderbilt.edu>
+
+ * docs/performance.html:
+
+ Updated section on ways to reduce compile-time footprint.
+
+Thu Jul 14 12:20:59 2005 J.T. Conklin <jtc@acorntoolworks.com>
+
+ * tao/Codeset.mpc:
+
+ Added PIDL_Files and Resource_Files definitions so that bogus
+ definitions aren't added to the project.
+
+Thu Jul 14 10:51:38 2005 J.T. Conklin <jtc@acorntoolworks.com>
+
+ * orbsvcs/performance-tests/RTEvent/RTCORBA_Baseline/RTCORBA_Baseline.mpc:
+ * orbsvcs/performance-tests/RTEvent/RTCORBA_Callback/RTCORBA_Callback.mpc:
+
+ Add *_IDL projects for compiling *.idl files. This eliminates
+ duplicate rules that would otherwise result when Makefile.am's
+ are aggregated in the automake build.
+
+Thu Jul 14 08:38:48 2005 Gary Maxey <gary.maxey@hp.com>
+
+ * TAO_IDL/be/be_visitor_valuebox/valuebox_ci.cpp
+ * tests/OBV/ValueBox/Test_impl.cpp
+ * tests/OBV/ValueBox/client.cpp
+ * tests/OBV/ValueBox/server.cpp:
+
+ Fixed platform-specific errors.
+
+Thu Jul 14 09:06:53 2005 Phil Mesnier <mesnier_p@ociweb.com>
+
+ * tao/Codeset/codeset_export.h:
+
+ Another round of fixes.
+
+Thu Jul 14 08:11:27 2005 Phil Mesnier <mesnier_p@ociweb.com>
+
+ * tao/Codeset/codeset_export.h:
+ * tao/Codeset/Codeset_Manager_i.cpp:
+ * tao/Codeset/UTF16_BOM_Factory.cpp:
+ * tao/Codeset/UTF8_Latin1_Factory.cpp:
+ * tao/Codeset/UTF8_Latin1_Translator.cpp:
+
+ Fixed more platform-specific errors.
+
+Thu Jul 14 08:59:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tao/ORB_Core.i:
+ Removed not needed ;
+
+Thu Jul 14 09:37:54 2005 Boris Kolpackov <boris@kolpackov.net>
+
+ * orbsvcs/examples/Notify/Federation/Agent/Agent.cpp:
+ * orbsvcs/examples/Notify/Federation/SpaceCraft/SpaceCraft.cpp:
+
+ Fixed a number of fuzz errors.
+
+Wed Jul 13 21:51:15 2005 Phil Mesnier <mesnier_p@ociweb.com>
+
+ * tao/ORB_Core.h:
+
+ I forgot to take out the unneeded CORBA::Environment arg from
+ load_codeset_manager. This was caught by a No Exceptions build.
+
+Wed Jul 13 16:46:09 2005 J.T. Conklin <jtc@acorntoolworks.com>
+
+ * orbsvcs/orbsvcs/ETCL.mpc:
+
+ Added Header_Files, Inline_Files, and Template_Files sections
+ so headers and inlines are installed for the automake build.
+
+Wed Jul 13 16:37:41 2005 Phil Mesnier <mesnier_p@ociweb.com>
+
+ * tao/Codeset.mpc
+ * tao/Codeset_Manager.cpp
+ * tao/Codeset_Manager.h
+ * tao/Codeset_Translator_Base.cpp
+ * tao/Codeset_Translator_Base.h
+ * tao/Codeset_Translator_Factory.h
+ * tao/GIOP_Message_Base.cpp
+ * tao/GIOP_Message_Lite.cpp
+ * tao/IIOP_Acceptor.cpp
+ * tao/ORB_Core.cpp
+ * tao/ORB_Core.h
+ * tao/ORB_Core.i
+ * tao/Profile_Transport_Resolver.cpp
+ * tao/Resource_Factory.cpp
+ * tao/Resource_Factory.h
+ * tao/Transport.cpp
+ * tao/Transport.h
+ * tao/Transport.inl
+ * tao/default_resource.cpp
+ * tao/default_resource.h
+ * tao/orbconf.h
+ * tao/params.cpp
+ * tao/params.h
+ * tao/params.i
+ * tao/tao.mpc
+ * tao/Codeset/Codeset_Manager_i.cpp
+ * tao/Codeset/Codeset_Manager_i.h
+ * tao/Codeset/Codeset_Translator_Factory.cpp
+ * tao/Codeset/Codeset_Translator_Factory.h
+ * tao/Codeset/Codeset_Translator_Factory_T.cpp
+ * tao/Codeset/Codeset_Translator_Factory_T.h
+ * tao/Codeset/UTF16_BOM_Factory.cpp
+ * tao/Codeset/UTF16_BOM_Factory.h
+ * tao/Codeset/UTF16_BOM_Translator.cpp
+ * tao/Codeset/UTF16_BOM_Translator.h
+ * tao/Codeset/UTF8_Latin1_Factory.cpp
+ * tao/Codeset/UTF8_Latin1_Factory.h
+ * tao/Codeset/UTF8_Latin1_Translator.cpp
+ * tao/Codeset/UTF8_Latin1_Translator.h
+ * tao/Codeset/codeset_export.h
+
+ Refactored the support for codeset negotiation. All logic is now
+ maintained in a separate library, TAO_Codeset. The class
+ TAO_Codeset_Manager is now an abstract base class, providing the
+ interface, when needed, to the traditional codeset assignment
+ and translator selection functions. Since the instance of the
+ codeset manager is now optional, all places that reference it
+ must test for a non-null pointer. The initialization of the
+ codeset manager is now deferred. The resource factory now
+ populates a collection of codeset descriptors based on the
+ supplied configuration options. The ORB Core loads an instance
+ of the codeset manager on demand if the negotiate_codesets
+ option is set. The tao/Codeset_Translator_Factory.h file remains
+ as a shell to support backwards compatibility at the code level,
+ but the base class for the translators is now in the Codeset
+ library.
+
+ * tests/CodeSets/libs/IBM1047_ISO8859/CodeSets_libs_IMB1047_ISO8859.mpc
+ * tests/CodeSets/libs/UCS4_UTF16/CodeSets_libs_UCS4_UTF16.mpc
+
+ Added a reference to the new MPC base project, codeset.
+
+ * tests/CodeSets/simple/CodeSets_simple.mpc
+ * tests/CodeSets/simple/wcs_test.conf
+
+ Fixed misc. typos and odd dependancies.
+
+ * docs/Options.html:
+ * NEWS:
+
+ Added description of Codeset changes.
+
+Wed Jul 13 13:26:45 2005 Gary Maxey <gary.maxey@hp.com>
+
+ * NEWS:
+
+ Added information about availability of the Boxed Value Type.
+
+Wed Jul 13 13:17:56 2005 Gary Maxey <gary.maxey@hp.com>
+
+ * tests/OBV/ValueBox/client.cpp:
+ * tests/OBV/ValueBox/run_test.pl:
+ * tests/OBV/ValueBox/server.cpp:
+ * tests/OBV/ValueBox/Test_impl.cpp:
+ * tests/OBV/ValueBox/Test_impl.h:
+ * tests/OBV/ValueBox/valuebox.idl:
+ * tests/OBV/ValueBox/valuebox.mpc:
+ * tests/OBV/ValueBox/vb_basic.idl:
+ * tests/OBV/ValueBox/vb_struct.idl:
+ * tests/OBV/ValueBox/vb_union.idl:
+
+ New test for valuebox feature
+
+Wed Jul 13 15:14:46 2005 Justin Michel <michel_j@ociweb.com>
+
+ * NEWS:
+
+ Added information about recent Notification Service changes.
+
+Wed Jul 13 18:54:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tao/ServerRequestInterceptor_Adapter_Factory.{h,cpp}:
+ * tao/ClientRequestInterceptor_Adapter_Factory.{h,cpp}:
+ Added virtual destructor to resolve gcc4 runtime errors, the cpp
+ file is new
+
+ * tao/tao.mpc:
+ * tao/Makefile.am:
+ Added new files
+
+ * tao/Thread_Lane_Resources_Manager.cpp:
+ Removed explicit templates
+
+Wed Jul 13 18:18:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tao/Pollable.pidl:
+ * tao/PollableC.{h,cpp}:
+ * tao/PollableS.h:
+ Moved these files to the Messaging library
+
+ * tao/Messaging/*C.{h,cpp}:
+ Regenerated
+
+ * tao/tao.mpc:
+ * tao/Makefile.am:
+ Updated because of file move above
+
+Wed Jul 13 12:53:34 2005 Chad Elliott <elliott_c@ociweb.com>
+
+ * orbsvcs/tests/InterfaceRepo/Application_Test/ifr_dii_client.cpp:
+
+ Added a missing ACE_CHECK_RETURN.
+
+Wed Jul 13 16:51:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tao/RTPortableServer/RT_Servant_Dispatcher.cpp:
+ Updated some debug statements to get the same layout as in other places
+
+Wed Jul 13 11:18:44 2005 Justin Michel <michel_j@ociweb.com>
+
+ * orbsvcs/tests/Notify/Ordering/Notify_Sequence_Push_Consumer.h:
+ * orbsvcs/tests/Notify/Ordering/Notify_Sequence_Push_Consumer.cpp:
+
+ Update the test to be more tolerant of differing thread behavior
+ on the various platforms.
+
+Wed Jul 13 10:24:39 2005 Chad Elliott <elliott_c@ociweb.com>
+
+ * orbsvcs/ImplRepo_Service/Locator_Repository.cpp:
+
+ Print an error if the registry option is used on a non-Windows OS.
+
+ * orbsvcs/examples/ImR/Advanced/run_test.pl:
+
+ When "using" Getopts::Long, take everything to be compatible with
+ Perl 5.6.1.
+
+ * orbsvcs/orbsvcs/CosNotification.mpc:
+
+ Simplify the persistence project by using a wildcard.
+
+ * tao/ImR_Client/ImR_Client.h:
+ * tao/ImR_Client/ImR_Client.cpp:
+
+ Added a constructor to initialize the server_object_ pointer.
+
+ * tao/PortableServer/Root_POA.cpp:
+
+ Do not put the passed in POAManager 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.
+
+Wed Jul 13 08:01:15 2005 J.T. Conklin <jtc@acorntoolworks.com>
+
+ * orbsvcs/performance-tests/LoadBalancing/LBPerf/RPS/LoadBalancing.mpc:
+
+ Fixed typo introduced in:
+ Tue Jul 12 17:12:46 2005 J.T. Conklin <jtc@acorntoolworks.com>
+
+Wed Jul 13 12:35:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tao/Encodable.{h,cpp}:
+ * tao/Utils/Encodable.{h,cpp}:
+ Moved Encodable from the TAO lib to the Utils lib. It is a utility
+ class that is not used in TAO and its tests. This way anyone using
+ it can keep using it.
+
+ * tao/tao.mpc:
+ * tao/Makefile.am:
+ Updated for change above
+
+Wed Jul 13 12:19:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tao/RTCORBA/RT_ORB_Loader.cpp:
+ Create the _var later on the stack
+
+ * tao/RTCORBA/RT_ORBInitializer.cpp:
+ Initialise pointer
+
+ * tao/RTCORBA/RTCORBAC.h:
+ No need to derive ProtocolProperties from TAO_Encodable
+
+ * tao/RTCORBA/diffs/RTCORBA.diff:
+ Updated
+
+Wed Jul 13 10:44:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tao/IIOP_Acceptor.cpp:
+ Updated some debug statements so that they have the same formatting
+ as the other statements
+
+Wed Jul 13 10:21:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * docs/performance.html:
+ Started with documenting the defines that have impact on runtime
+ footprint
+
+Tue Jul 12 17:43:55 2005 J.T. Conklin <jtc@acorntoolworks.com>
+
+ * tao/Makefile.am:
+
+ Regenerated.
+
+Tue Jul 12 17:12:46 2005 J.T. Conklin <jtc@acorntoolworks.com>
+
+ * orbsvcs/performance-tests/LoadBalancing/LBPerf/RPS/LoadBalancing.mpc:
+ * orbsvcs/tests/Bug_1395_Regression/Bug_1395_Regression.mpc:
+
+ Add *_IDL projects for compiling *.idl files. This eliminates
+ duplicate rules that would otherwise result when Makefile.am's
+ are aggregated in the automake build.
+
+Tue Jul 12 13:39:21 2005 J.T. Conklin <jtc@acorntoolworks.com>
+
+ * orbsvcs/orbsvcs/CosNaming.mpc:
+ * orbsvcs/orbsvcs/CosNotification.mpc:
+ * orbsvcs/orbsvcs/CosTrading.mpc:
+ * orbsvcs/orbsvcs/DsEventLogAdmin.mpc:
+ * orbsvcs/orbsvcs/DsLogAdmin.mpc:
+ * orbsvcs/orbsvcs/DsNotifyLogAdmin.mpc:
+
+ Make _IDL projects unconditional now that Chad has enhanced
+ MPC to support custom_only builds for VC++ projects.
+
+Tue Jul 12 18:07:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tao/PortableServer/Upcall_Wrapper.cpp:
+ Fixed compile errors with msvc6
+
+Tue Jul 12 18:04:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * orbsvcs/tests/FaultTolerance/GroupRef_Manipulation/Server_Request_Interceptor.cpp:
+ Added missing include
+
+Tue Jul 12 17:49:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * orbsvcs/orbsvcs/FtRtEvent/EventChannel/Request_Context_Repository.{h,cpp}:
+ Fixed compile errors
+
+Tue Jul 12 08:56:03 2005 Justin Michel <michel_j@ociweb.com>
+
+ * orbsvcs/tests/ImplRepo/run_test.pl:
+
+ Ensure that old exe files are deleted before new ones are copied in
+ the nt_service_ir test.
+ Make the nt_service_ir test fail more quickly when an error occurs.
+
+Tue Jul 12 08:33:05 2005 Chad Elliott <elliott_c@ociweb.com>
+
+ * tests/RTCORBA/Banded_Connections/bands.irix:
+ * tests/RTCORBA/Banded_Connections/run_test.pl:
+ * tests/RTCORBA/MT_Client_Protocol_Priority/run_test.pl:
+
+ Added support for IRIX.
+
+ * tests/RTCORBA/Collocation/continuous.conf:
+ * tests/RTCORBA/Collocation/continuous.conf.xml:
+ * tests/RTCORBA/Collocation/run_test.pl:
+ * tests/RTCORBA/Destroy_Thread_Pool/continuous.conf:
+ * tests/RTCORBA/Destroy_Thread_Pool/continuous.conf.xml:
+ * tests/RTCORBA/Destroy_Thread_Pool/run_test.pl:
+ * tests/RTCORBA/Persistent_IOR/continuous.conf:
+ * tests/RTCORBA/Persistent_IOR/continuous.conf.xml:
+ * tests/RTCORBA/Persistent_IOR/run_test.pl:
+ * tests/RTCORBA/Persistent_IOR/server.cpp:
+ * tests/RTCORBA/Priority_Inversion_With_Bands/continuous.conf:
+ * tests/RTCORBA/Priority_Inversion_With_Bands/continuous.conf.xml:
+ * tests/RTCORBA/Priority_Inversion_With_Bands/run_test.pl:
+ * tests/RTCORBA/Priority_Inversion_With_Bands/test_i.cpp:
+ * tests/RTCORBA/Server_Declared/continuous.conf:
+ * tests/RTCORBA/Server_Declared/continuous.conf.xml:
+ * tests/RTCORBA/Server_Declared/run_test.pl:
+ * tests/RTCORBA/Thread_Pool/continuous.conf:
+ * tests/RTCORBA/Thread_Pool/continuous.conf.xml:
+ * tests/RTCORBA/Thread_Pool/run_test.pl:
+
+ For HP-UX, the only priority mapping that makes sense is
+ continuous. For each of these tests, I added a configurator file
+ to set the priority mapping and only use it on HP-UX.
+
+ * tests/RTCORBA/common_args.cpp:
+
+ sscanf wasn't working properly (at least with aCC 3.60) so I
+ switched to strtoul.
+
+Tue Jul 12 13:29:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tests/RTCORBA/Persistent_IOR/client.cpp:
+ Added check for nil reference
+
+ * tao/Thread_Lane_Resources.cpp (cleanup_rw_transports):
+ If we are already finalized (transport_cache pointer is zero)
+ directly return.
+
+Tue Jul 12 13:05:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tests/RTCORBA/Persistent_IOR/test.idl:
+ Made the shutdown call a oneway
+
+Tue Jul 12 12:48:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tao/Thread_Lane_Resources.cpp:
+ Set pointers to zero after deleting them
+
+Tue Jul 12 12:41:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tao/PI/ClientRequestInfo.h:
+ Removed invalid export macro
+
+Tue Jul 12 11:51:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tao/RTCORBA/RT_ORB.cpp:
+ Initialise pointers with 0
+
+Tue Jul 12 11:08:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tests/Bug_1639_Regression/test.mpc:
+ Simplified this mpc file
+
+Tue Jul 12 10:05:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tests/Bug_2174_Regression/Bug_2174_Regression.mpc:
+ Don't build the client when minimum_corba is set
+
+ * tao/CONV_FRAME.pidl:
+ * tao/GIOP.pidl
+ Updated regeneration instructions
+
+ * tao/CONV_FRAMES_T.h:
+ * tao/GIOPS_T.h
+ Removed this file
+
+ * tao/ClientRequestInfo.{h,cpp}
+ * tao/ClientRequestInfo.pidl:
+ * tao/ClientRequestInfoA.cpp
+ * tao/ClientRequestInfoC.{h,cpp}:
+ * tao/ClientRequestInfoS.h:
+ * tao/PIForwardRequest.pidl
+ * tao/PIForwardRequestA.cpp
+ * tao/PIForwardRequestC.{h,cpp}:
+ * tao/PIForwardRequestS.h
+ * tao/RequestInfo.pidl
+ * tao/RequestInfoA.cpp:
+ * tao/RequestInfoC.{h,cpp}:
+ * tao/RequestInfoS.h:
+ These files are moved to the PI library
+
+ * tao/ClientRequestInterceptor_Adapter.h:
+ Don't pass TAO_ClientRequestInfo with each invocation,
+ an instance is allocated within the adapter implementation.
+ Also added a method to get the PortableInterceptor::ReplyStatus
+ from a TAO::Invocation_Base
+
+ * tao/Collocation_Resolver.cpp:
+ * tao/Protocol_Factory.cpp:
+ * tao/Protocols_Hooks.cpp:
+ * tao/Tagged_Components.cpp:
+ Removed explicit template instantiations
+
+ * tao/IIOP_Profile.h:
+ * tao/Profile.h:
+ Moved destructor to protected part to make sure an instance
+ is only removed by the _decr_refcnt
+
+ * tao/Invocation_Base.{h,cpp,inl}:
+ Reworked the invocation path to invoke the client request
+ interceptor when it is set and don't create a TAO_ClientRequestInfo
+ on the stack, this is done in the PI adapter. Store the invoke_status
+ and caught_exception as members in this class, this was done
+ previously in the TAO_ClientRequestInfo, but this is now not
+ used anymore in the TAO lib
+
+ * tao/MProfile.h:
+ Doxygen improvement
+
+ * tao/Makefile.am:
+ Updated because of moving of files
+
+ * tao/ORB_Core.h:
+ No need to forward declare TAO_ServerRequest
+
+ * tao/PortableInterceptor.pidl:
+ * tao/PortableInterceptorC.h:
+ Removed the files we moved to PI/PI_Server
+
+ * tao/ServerRequestInfo.pidl:
+ * tao/ServerRequestInfoA.cpp:
+ * tao/ServerRequestInfoC.{h,cpp}:
+ * tao/ServerRequestInfoS.h:
+ Moved to the PI_Server lib
+
+ * tao/ServerRequestInterceptor_Adapter.h:
+ Updated to not pass TAO_ServerRequestInfo with each call, pass
+ the difference exception info
+
+ * tao/Stub.{h,cpp}:
+ Removed service_profile_selection(), this was marked deprecated for
+ a long time.
+
+ * tao/Synch_Invocation.cpp:
+ Fixed incorrect emulated exception usage
+
+ * tao/TAO_Server_Request.{h,cpp,i}:
+ Added data members which where previous in TAO_ServerRequestInfo
+
+ * tao/Transport.{h,cpp,inl}:
+ Removed TAO_Transport_Refcount_Guard, not used
+
+ * tao/tao.mpc:
+ Updated
+
+ * tao/PI/ClientRequestInfo.{cpp,h}:
+ * tao/PI/ClientRequestInfo.pidl:
+ * tao/PI/ClientRequestInfoA.cpp"
+ * tao/PI/ClientRequestInfoC.{h,cpp}:
+ * tao/PI/ClientRequestInfoS.h:
+ These files moved here from the TAO core library
+
+ * tao/PI/ClientRequestInterceptor.pidl:
+ Updated includes because of moved files
+
+ * tao/PI/ClientRequestInterceptorA.cpp:
+ * tao/PI/ClientRequestInterceptorC.{h,cpp}:
+ * tao/PI/ClientRequestInterceptorS.h:
+ Regenerated
+
+ * tao/PI/ClientRequestInterceptor_Adapter_Impl.{h,cpp}:
+ Allocate a TAO_ClientRequestInfo on the stack for each
+ interception point and updated for base interface
+
+ * tao/PI/InterceptorA.cpp
+ * tao/PI/InterceptorC.{h,cpp}:
+ * tao/PI/InterceptorS.h:
+ * tao/PI/ORBInitInfoA.cpp:
+ * tao/PI/ORBInitInfoC.{h,cpp}:
+ * tao/PI/ORBInitInfoS.h:
+ * tao/PI/ORBInitializerA.cpp:
+ * tao/PI/ORBInitializerC.{h,cpp}:
+ * tao/PI/ORBInitializerS.h:
+ Regenerated
+
+ * tao/PI/PI.h:
+ Include new *C.h files
+
+ * tao/PI/PIForwardRequest.pidl
+ * tao/PI/PIForwardRequestA.cpp
+ * tao/PI/PIForwardRequestC.{h,cpp}:
+ * tao/PI/PIForwardRequestS.h:
+ * tao/PI/RequestInfo.pidl:
+ * tao/PI/RequestInfoA.cpp:
+ * tao/PI/RequestInfoC.{h,cpp}:
+ * tao/PI/RequestInfoS.h:
+ Moved from the TAO lib
+
+ * tao/PI_Server/PI_Server.h:
+ Added new *C.h files
+
+ * tao/PI_Server/ServerInterceptorAdapter.{h,cpp}:
+ Allocate a TAO_ServerRequestInfo for each interception point
+
+ * tao/PI_Server/ServerRequestInfo.{h,cpp,inl}:
+ * tao/PI_Server/ServerRequestInfo.pidl:
+ * tao/PI_Server/ServerRequestInfoA.cpp:
+ * tao/PI_Server/ServerRequestInfoC.{h,cpp}:
+ * tao/PI_Server/ServerRequestInfoS.h:
+ Moved from the PortableServer lib
+
+ * tao/PI_Server/ServerRequestInterceptor.pidl:
+ Updated includes
+
+ * tao/PI_Server/ServerRequestInterceptorC.h:
+ Regenerated
+
+ * tao/PortableServer/Basic_SArguments.cpp:
+ * tao/PortableServer/Special_Basic_SArguments.cpp:
+ * tao/PortableServer/UB_String_SArguments.cpp
+ Removed, not needed
+
+ * tao/PortableServer/ServerRequestInfo.{h,cpp,inl}:
+ Moved to the PI_Server lib
+
+ * tao/PortableServer/Local_Servant_Base.inl:
+ Removed commented out code
+
+ * tao/PortableServer/ORT_Adapter.cpp:
+ * tao/PortableServer/ORT_Adapter_Factory.cpp:
+ * tao/PortableServer/StrategyFactory.cpp:
+ Removed explicit templates
+
+ * tao/PortableServer/Object_Adapter.cpp:
+ * tao/PortableServer/Upcall_Wrapper.cpp:
+ Updated code because of changes ServerRequestInterceptor
+ adapter change
+
+ * tao/RTCORBA/RT_ORBInitializer.cpp:
+ Initialise pointer with 0
+
+ * tao/RTScheduling/RTScheduler.pidl:
+ Updated include
+
+ * tao/RTScheduling/RTSchedulerC.h:
+ Regenerated
+
+ * tests/Big_Twoways/Peer.cpp:
+ Initialise pointer with 0
+
+ * tests/Portable_Interceptors/ForwardRequest/Server_Request_Interceptor.h:
+ Added needed include
+
+Mon Jul 11 13:39:34 2005 Gary Maxey <gary.maxey@hp.com>
+
+ * TAO_IDL/be/be_visitor_valuebox/valuebox_cs.cpp:
+ * TAO_IDL/be/be_visitor_valuebox/valuebox_ci.cpp:
+
+ Updated to solve cross platform compilation problems.
+
+Mon Jul 11 21:08:17 2005 Boris Kolpackov <boris@kolpackov.net>
+
+ * orbsvcs/examples/Notify/Federation/Gate/Export.h:
+ * orbsvcs/examples/Notify/Federation/Gate/Gate.h:
+ * orbsvcs/examples/Notify/Federation/Gate/Gate.mpc:
+
+ Added export macro.
+
+Mon Jul 11 09:07:26 2005 Justin Michel <michel_j@ociweb.com>
+
+ * orbsvcs/orbsvcs/Notify/Admin.cpp:
+
+ Add missing include of Event_Manager.h
+
+Mon Jul 11 07:23:49 2005 Chad Elliott <elliott_c@ociweb.com>
+
+ * tests/Nested_Upcall_Crash/Nested_Upcall_Crash.mpc:
+
+ Set the stack size for windows based project types to 16Mb to
+ allow this test to complete on Windows.
+
+Mon Jul 11 11:12:42 2005 Boris Kolpackov <boris@kolpackov.net>
+
+ * orbsvcs/examples/Notify/Federation/Agent/Agent.cpp:
+ * orbsvcs/examples/Notify/Federation/SpaceCraft/SpaceCraft.cpp:
+
+ Add explicit return statements to main (which is renamed
+ to ace_main_i and, as a result, doesn't have proper main
+ semantics).
+
+Mon Jul 11 08:37:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tests/Portable_Interceptors/ForwardRequest/PI_ForwardRequest.mpc:
+ Removed not needed base projects
+
+Mon Jul 11 08:08:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tests/Bug_2183_Regression/Bug_2183_Regression.mpc:
+ Simplified this mpc file
+
+ * tests/Bug_2174_Regression/*:
+ New regression for bug 2174. _non_existent should return
+ true/false, not raise OBJECT_NOT_EXIST. Thanks to
+ Torsten Kuepper <torsten dot kuepper at nokia dot com>
+ for making this regression. The bugfix for this will follow
+ later this week.
+
+Fri Jul 8 12:59:38 2005 Chad Elliott <elliott_c@ociweb.com>
+
+ * tests/GIOP_Fragments/PMB_With_Fragments/dribble.pl:
+
+ Added a sleep(1) at the end of this script to allow the socket to
+ get flushed before the process exits. On windows, the socket data
+ is lost if the socket isn't flushed by the OS before the process
+ completes.
+
+Fri Jul 8 11:15:00 2005 Justin Michel <michel_j@ociweb.com>
+
+ * orbsvcs/tests/Notify/Blocking/Structured_Supplier.cpp:
+ * orbsvcs/tests/Notify/Discarding/Notify_Sequence_Push_Consumer.cpp:
+ * orbsvcs/tests/Notify/Discarding/Sequence_Supplier.cpp:
+ * orbsvcs/tests/Notify/Discarding/Structured_Supplier.cpp:
+ * orbsvcs/tests/Notify/MT_Dispatching/Structured_Supplier.cpp:
+ * orbsvcs/tests/Notify/Ordering/Sequence_Supplier.cpp:
+ * orbsvcs/tests/Notify/Ordering/Structured_Supplier.cpp:
+ * orbsvcs/tests/Notify/Sequence_Multi_ETCL_Filter/Sequence_Supplier.cpp:
+ * orbsvcs/tests/Notify/Sequence_Multi_Filter/Sequence_Supplier.cpp:
+ * orbsvcs/tests/Notify/Structured_Filter/Structured_Supplier.cpp:
+ * orbsvcs/tests/Notify/Structured_Multi_Filter/Structured_Supplier.cpp:
+ * orbsvcs/tests/Notify/lib/PushConsumer.cpp:
+ * orbsvcs/tests/Notify/lib/PushSupplier.cpp:
+ * orbsvcs/tests/Notify/lib/SequencePushConsumer.cpp:
+ * orbsvcs/tests/Notify/lib/SequencePushSupplier.cpp:
+ * orbsvcs/tests/Notify/lib/StructuredPushConsumer.cpp:
+ * orbsvcs/tests/Notify/lib/StructuredPushSupplier.cpp:
+ * orbsvcs/tests/Notify/performance-tests/Filter/Sequence_Supplier.cpp:
+ * orbsvcs/tests/Notify/performance-tests/Filter/Structured_Supplier.cpp:
+
+ Add NOT_USED where appropriate to exception macros.
+
+Fri Jul 8 16:03:46 2005 Boris Kolpackov <boris@kolpackov.net>
+
+ * orbsvcs/examples/Notify/Federation/Agent/Agent.cpp:
+ * orbsvcs/examples/Notify/Federation/Gate/Gate.cpp:
+ * orbsvcs/examples/Notify/Federation/Gate/Gate.h:
+ * orbsvcs/examples/Notify/Federation/SpaceCraft/SpaceCraft.cpp:
+
+ Made the code compile on platforms with emulated exceptions.
+
+Fri Jul 8 14:06:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tao/Transport_Cache_Manager.h:
+ Removed virtual from destructor, no need for this.
+
+Fri Jul 8 15:32:36 2005 Boris Kolpackov <boris@kolpackov.net>
+
+ * orbsvcs/examples/Notify/Federation/Agent/Agent.cpp:
+ * orbsvcs/examples/Notify/Federation/Gate/Gate.cpp:
+ * orbsvcs/examples/Notify/Federation/SpaceCraft/SpaceCraft.cpp:
+
+ Changed all references to TAO_Notify_Service:init to read
+ init_service because somebody decided for some reason to
+ rename this function. Also made the code compilable by VC6.
+
+Fri Jul 8 12:38:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tao/LocalObject.cpp:
+ Removed some remarks about possible corba spec mismatch. Checked
+ the latest corba spec and we throw the correct error
+
+Fri Jul 8 12:20:47 2005 Simon McQueen <sm@prismtech.com>
+
+ * tests/Bug_2183_Regression/server.conf:
+
+ Used the wrong comment character in this file.
+
+Thu Jul 7 16:29:47 2005 Justin Michel <michel_j@ociweb.com>
+
+ * orbsvcs/orbsvcs/Notify/Buffering_Strategy.cpp:
+ * orbsvcs/orbsvcs/Notify/ThreadPool_Task.cpp:
+
+ Cleanup the output when enqueueing fails.
+
+Thu Jul 7 15:39:54 2005 Justin Michel <michel_j@ociweb.com>
+
+ * orbsvcs/tests/Notify/performance-tests/RedGreen/RedGreen_Test.cpp:
+ * orbsvcs/tests/Notify/performance-tests/RedGreen/listener.conf:
+ * orbsvcs/tests/Notify/performance-tests/RedGreen/listener.conf.xml:
+ * orbsvcs/tests/Notify/performance-tests/RedGreen/lookup.conf:
+ * orbsvcs/tests/Notify/performance-tests/RedGreen/lookup.conf.xml:
+
+ Fix test failure due to premature orb->shutdown().
+ Update conf files to reflect changes in Notify options.
+
+Thu Jul 07 12:46:22 2005 Gary Maxey <gary.maxey@hp.com>
+
+ * TAO_IDL/fe/idl.ll
+ * TAO_IDL/fe/lex.yy.cpp
+ * TAO_IDL/fe/lex.yy.cpp.diff
+
+ Added to regular expression for IDL_STRING_LITERAL and
+ IDL_WSTRING_LITERAL to allow additional escape sequences
+ specified by OMG.
+
+Thu Jul 7 19:50:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * docs/performance.html:
+ Added some info about how to reduce compilation footprint
+
+Thu Jul 7 19:27:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tao/RTScheduling/Current.cpp:
+ Fixed conversion warning
+
+Thu Jul 7 11:33:09 2005 Ossama Othman <ossama@dre.vanderbilt.edu>
+
+ * tao/ORB_Table.inl (operator==):
+
+ Improved slightly by adding a TAO_ORB_Core pointer equality
+ check.
+
+Thu Jul 7 11:23:12 2005 Ossama Othman <ossama@dre.vanderbilt.edu>
+
+ * tao/ORB_Table.inl (ORB_Core_Ref_Counter):
+
+ Fixed seg faults caused by calling methods through a nil
+ TAO_ORB_Core pointer by verifying that the pointer is non-nil
+ before doing so. Thanks to Johnny for pointing out the
+ corresponding crash.
+
+Thu Jul 7 18:13:24 UTC 2005 Jeff Parsons <j.parsons@vanderbilt.edu>
+
+ * TAO_IDL/include/utl_err.h:
+ * TAO_IDL/util/utl_err.cpp:
+ * TAO_IDL/util/utl_global.cpp (string_to_scoped_name):
+
+ Minor fix to the logic of string_to_scoped_name(), and
+ removed the "malformed scoped name string" error since
+ the lookup now catches it if it's incorrect.
+
+Thu Jul 7 16:56:55 2005 Simon McQueen <sm@prismtech.com>
+
+ * tao/ORB_Core.cpp:
+ * tao/params.cpp:
+ * tao/params.h:
+ * tao/params.i:
+ * tao/IIOP_Connection_Handler.cpp:
+
+ Add configuration property '-ORBNoServerSideNameLookups' so
+ that server side client name lookups can still be prevented
+ when '-ORBDottedDecimalAddresses 1' is not used.
+
+ * docs/Options.html:
+
+ Document the above.
+
+Thu Jul 7 10:01:26 2005 Justin Michel <michel_j@ociweb.com>
+
+ * orbsvcs/orbsvcs/Notify/Builder.cpp:
+ * orbsvcs/orbsvcs/Notify/RT_Notify_Service.cpp:
+ * orbsvcs/tests/Notify/Basic/ConnectDisconnect.h:
+ * orbsvcs/tests/Notify/Basic/Events.h:
+ * orbsvcs/tests/Notify/Basic/Filter.h:
+ * orbsvcs/tests/Notify/Basic/MultiTypes.h:
+ * orbsvcs/tests/Notify/Basic/Sequence.h:
+ * orbsvcs/tests/Notify/Basic/Simple.h:
+ * orbsvcs/tests/Notify/Basic/Updates.h:
+ * orbsvcs/tests/Notify/MT_Dispatching/Structured_Consumer.cpp:
+ * orbsvcs/tests/Notify/Reconnecting/Consumer.h:
+ * orbsvcs/tests/Notify/Structured_Filter/Structured_Supplier.cpp:
+ * orbsvcs/tests/Notify/Structured_Multi_Filter/Structured_Consumer.cpp:
+ * orbsvcs/tests/Notify/Structured_Multi_Filter/Structured_Supplier.cpp:
+ * orbsvcs/tests/Notify/Test_Filter/RT_Test_Filter.h:
+ * orbsvcs/tests/Notify/Test_Filter/RT_Test_FilterFactory.h:
+ * orbsvcs/tests/Notify/lib/Notify_Test_Client.cpp:
+ * orbsvcs/tests/Notify/performance-tests/RedGreen/RedGreen_Test.h:
+ * orbsvcs/tests/Notify/performance-tests/Throughput/Throughput.h:
+ * tests/Bug_2183_Regression/Hello.h:
+
+ Fix problems with ACE exception macros and fuzz errors.
+
+Thu Jul 7 15:18:01 2005 Boris Kolpackov <boris@kolpackov.net>
+
+ * orbsvcs/examples/Notify/Federation/federation.mwc:
+ * orbsvcs/examples/Notify/Federation/Agent/Agent.cpp:
+ * orbsvcs/examples/Notify/Federation/Agent/Agent.mpc:
+ * orbsvcs/examples/Notify/Federation/Agent/README:
+ * orbsvcs/examples/Notify/Federation/Agent/agent.dia:
+ * orbsvcs/examples/Notify/Federation/Gate/Gate.cpp:
+ * orbsvcs/examples/Notify/Federation/Gate/Gate.h:
+ * orbsvcs/examples/Notify/Federation/Gate/Gate.mpc:
+ * orbsvcs/examples/Notify/Federation/SpaceCraft/README:
+ * orbsvcs/examples/Notify/Federation/SpaceCraft/SpaceCraft.cpp:
+ * orbsvcs/examples/Notify/Federation/SpaceCraft/SpaceCraft.mpc:
+
+ Added a set of examples and support code that show how to set
+ up a multicast-based federation of Notification Services.
+
+ * NEWS:
+
+ Announce new examples.
+
+Thu Jul 7 11:24:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tao/ORB_Core_TSS_Resources.cpp:
+ Removed not needed include
+
+Thu Jul 7 08:00:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tao/Basic_Arguments.cpp:
+ * tao/Special_Basic_Arguments.cpp:
+ * tao/UB_String_Arguments.cpp:
+ Removed these files
+
+ * tao/tao.mpc:
+ * tao/Makefile.am:
+ Updated for changes above
+
+ * tao/Object.cpp (_get_orb):
+ Updated to comply with coding guidelines. Thanks to Ossama to
+ point out a few minor items
+
+Wed Jul 6 23:10:52 2005 Ossama Othman <ossama@dre.vanderbilt.edu>
+
+ * tao/Object_Ref_Table.cpp (bind):
+
+ "Transfer" ownership of the object reference being inserted to the
+ object reference table by increasing the reference count.
+ Addresses seg faults in code that accesses object references
+ from the this table.
+
+Wed Jul 6 15:06:17 2005 Justin Michel <michel_j@ociweb.com>
+
+ * orbsvcs/orbsvcs/Notify/Buffering_Strategy.cpp:
+ * orbsvcs/tests/Notify/Blocking/common.cpp:
+ * orbsvcs/tests/Notify/Discarding/common.cpp:
+ * orbsvcs/tests/Notify/Ordering/common.cpp:
+ * orbsvcs/tests/Notify/Reconnecting/Consumer.cpp:
+ * orbsvcs/tests/Notify/Reconnecting/Supplier.cpp:
+ * orbsvcs/tests/Notify/Sequence_Multi_ETCL_Filter/common.cpp:
+ * orbsvcs/tests/Notify/Sequence_Multi_Filter/common.cpp:
+ * orbsvcs/tests/Notify/lib/Task_Stats.inl:
+ * orbsvcs/tests/Notify/performance-tests/Filter/common.cpp:
+
+ Some ACE_*_cast macros were inadvertently reintroduced when porting notification
+ service fixes from 1.4a.
+
+Wed Jul 6 12:15:49 2005 Ossama Othman <ossama@dre.vanderbilt.edu>
+
+ * tao/Object_Ref_Table.h (TAO_Object_Ref_Table):
+
+ Re-exported this class until code that accesses it directly is
+ updated to use the standard interface.
+
+ * tao/RTCORBA/RT_Protocols_Hooks.cpp:
+ * tao/RTScheduling/Current.cpp:
+ * tao/RTScheduling/RTScheduler_Manager.i:
+
+ Reverted changes below due to potential order of initialization
+ problems.
+
+Wed Jul 6 11:06:22 2005 Ossama Othman <ossama@dre.vanderbilt.edu>
+
+ * tao/RTCORBA/RT_Protocols_Hooks.cpp:
+ * tao/RTScheduling/Current.cpp:
+ * tao/RTScheduling/RTScheduler_Manager.i:
+
+ Register and retrieve initial references through the standard
+ ORB interface, not directly through the underlying table. The
+ table is no longer exported.
+
+Wed Jul 06 10:48:04 2005 Gary Maxey <gary.maxey@hp.com>
+
+ * TAO_IDL/ast/ast_expression.cpp:
+ * TAO_IDL/include/ast_expression.h:
+
+ Fix for broken mod (%) operator in constant expressions.
+
+Wed Jul 6 08:11:07 2005 J.T. Conklin <jtc@acorntoolworks.com>
+
+ * orbsvcs/orbsvcs/Log/EventLogFactory_i.cpp (create_with_id):
+ * orbsvcs/orbsvcs/Log/NotifyLogFactory_i.cpp (create_with_id):
+ * orbsvcs/orbsvcs/Log/RTEventLogFactory_i.cpp (create_with_id):
+
+ Fix cut-n-pasto introduced in:
+ Tue Jul 5 18:01:04 2005 J.T. Conklin <jtc@acorntoolworks.com>
+
+Wed Jul 6 15:44:16 2005 Simon McQueen <sm@prismtech.com>
+
+ * tao/IIOP_Connection_Handler.cpp (open):
+
+ Set server side sockets to be non-blocking even if the
+ client connection policy is blocking. This fixes bugzilla
+ #2183.
+
+ * tests/Bug_2183_Regression/Bug_2183_Regression.mpc:
+ * tests/Bug_2183_Regression/Hello.cpp:
+ * tests/Bug_2183_Regression/Hello.h:
+ * tests/Bug_2183_Regression/README:
+ * tests/Bug_2183_Regression/Test.idl:
+ * tests/Bug_2183_Regression/client.cpp:
+ * tests/Bug_2183_Regression/hang_client.pl:
+ * tests/Bug_2183_Regression/run_test.pl:
+ * tests/Bug_2183_Regression/server.conf:
+ * tests/Bug_2183_Regression/server.cpp:
+
+ Added regression test for the above.
+
+Wed Jul 6 09:47:47 2005 Justin Michel <michel_j@ociweb.com>
+
+ * orbsvcs/Logging_Service/Notify_Logging_Service/Notify_Logging_Service.cpp:
+ * orbsvcs/orbsvcs/Notify/CosNotify_Service.cpp:
+ * orbsvcs/orbsvcs/Notify/Event.inl:
+ * orbsvcs/orbsvcs/Notify/Notify_Constraint_Visitors.cpp:
+ * orbsvcs/orbsvcs/Notify/Reactive_Task.h:
+ * orbsvcs/orbsvcs/Notify/Reactive_Task.cpp:
+ * orbsvcs/tests/Notify/lib/Notify_Test_Client.h:
+
+ Fix misc problems with exception macros.
+ Fix problem with renamed init() method.
+ Fix problem with use of ACE_Thread_Mutex instead of TAO_SYNCH_MUTEX.
+
+Tue Jul 5 18:01:04 2005 J.T. Conklin <jtc@acorntoolworks.com>
+
+ * orbsvcs/orbsvcs/Log/BasicLogFactory_i.cpp (create_with_id):
+ * orbsvcs/orbsvcs/Log/EventLogFactory_i.cpp (create_with_id):
+ * orbsvcs/orbsvcs/Log/NotifyLogFactory_i.cpp (create_with_id):
+ * orbsvcs/orbsvcs/Log/RTEventLogFactory_i.cpp (create_with_id):
+
+ Throw DsLogAdmin::InvalidLogFullAction when passed an
+ unknown/unsupported log full action.
+
+Tue Jul 5 17:22:12 2005 J.T. Conklin <jtc@acorntoolworks.com>
+
+ * orbsvcs/orbsvcs/Log/EventLogFactory_i.cpp (create_with_id):
+
+ Uncomment ACE_CHECK_RETURN(...) after call to object_creation()
+ to align behavior between native and emulated exceptions and to
+ match cooresponding checks in NotifyLogFactory_i.cpp and
+ RTEventLogFactory_i.cpp.
+
+Tue Jul 5 17:06:09 2005 J.T. Conklin <jtc@acorntoolworks.com>
+
+ * orbsvcs/orbsvcs/Log/Log_i.cpp (set_log_full_action):
+ * orbsvcs/orbsvcs/Log/Log_i.h:
+
+ Throw DsLogAdmin::InvalidLogFullAction when passed an
+ unknown/unsupported log full action.
+
+Tue Jul 5 23:03:27 UTC 2005 Jeff Parsons <j.parsons@vanderbilt.edu>
+
+ * TAO_IDL/fe/idl.ll:
+ * TAO_IDL/fe/lex.yy.cpp:
+ * TAO_IDL/include/utl_err.h:
+ * TAO_IDL/util/utl_err.cpp:
+ * TAO_IDL/util/utl_global.cpp:
+
+ - Added a check to code that converts a string to a
+ ScopedName class in the IDL compiler. The check
+ detects certain kinds (not all) of malformed strings.
+
+ - Fixed a bug in the string handling code that processes
+ a #pragma ID directive. There was confusion if the
+ target node name was not scoped (contained no double
+ colon) but the ID string did.
+
+ Thanks to Gar Maxey <gary.maxey@hp.com> for sending in
+ the example IDL file that uncovered these problems.
+
+Tue Jul 5 14:12:07 2005 Justin Michel <michel_j@ociweb.com>
+
+ * orbsvcs/tests/ImplRepo/run_test.pl:
+
+ Cleanup generated files such as IORs and the copy of the server
+ executable.
+
+Tue Jul 05 11:49:13 2005 Gary Maxey <gary.maxey@hp.com>
+
+ * tao/Valuetype/StringValueC.inl:
+
+ Avoid error when compiling with HPUX compiler.
+
+Tue Jul 5 10:15:29 2005 Justin Michel <michel_j@ociweb.com>
+
+ * orbsvcs/tests/Notify/Blocking/Structured_Supplier.cpp:
+ * orbsvcs/tests/Notify/Discarding/Sequence_Supplier.cpp:
+ * orbsvcs/tests/Notify/Discarding/Structured_Supplier.cpp:
+ * orbsvcs/tests/Notify/MT_Dispatching/Structured_Supplier.cpp:
+ * orbsvcs/tests/Notify/Sequence_Multi_ETCL_Filter/Sequence_Supplier.cpp:
+ * orbsvcs/tests/Notify/Sequence_Multi_Filter/Sequence_Supplier.cpp:
+ * orbsvcs/tests/Notify/Structured_Filter/Structured_Supplier.cpp:
+ * orbsvcs/tests/Notify/Structured_Multi_Filter/Structured_Supplier.cpp:
+ * orbsvcs/tests/Notify/performance-tests/Filter/Sequence_Supplier.cpp:
+ * orbsvcs/tests/Notify/performance-tests/Filter/Structured_Supplier.cpp:
+
+ Ensure that OS_NS_unistd.h is included where we use ACE_OS::unlink().
+
+Tue Jul 5 07:48:44 2005 Justin Michel <michel_j@ociweb.com>
+
+ * examples/Kokyu_dsrt_schedulers/EDF_SchedulingC.cpp:
+ * orbsvcs/orbsvcs/Notify/Notify_Constraint_Visitors.h:
+
+ Fix case of include for tao/TypeCode.h
+
+Tue Jul 5 07:41:12 2005 Justin Michel <michel_j@ociweb.com>
+
+ * orbsvcs/tests/Notify/Basic/AdminProperties.cpp:
+ * orbsvcs/tests/Notify/Basic/ConnectDisconnect.cpp:
+ * orbsvcs/tests/Notify/Basic/Events.cpp:
+ * orbsvcs/tests/Notify/Basic/MultiTypes.cpp:
+ * orbsvcs/tests/Notify/Basic/Sequence.cpp:
+ * orbsvcs/tests/Notify/Basic/Simple.cpp:
+ * orbsvcs/tests/Notify/Blocking/Structured_Consumer.cpp:
+ * orbsvcs/tests/Notify/Discarding/Sequence_Consumer.cpp:
+ * orbsvcs/tests/Notify/Discarding/Structured_Consumer.cpp:
+ * orbsvcs/tests/Notify/Ordering/Sequence_Consumer.cpp:
+ * orbsvcs/tests/Notify/Ordering/Structured_Consumer.cpp:
+ * orbsvcs/tests/Notify/Sequence_Multi_ETCL_Filter/Sequence_Supplier.cpp:
+ * orbsvcs/tests/Notify/Sequence_Multi_Filter/Sequence_Supplier.cpp:
+ * orbsvcs/tests/Notify/Structured_Filter/go.idl:
+ * orbsvcs/tests/Notify/Structured_Multi_Filter/go.idl:
+ * orbsvcs/tests/Notify/lib/Notify_Test_Client.cpp:
+ * orbsvcs/tests/Notify/lib/Peer_T.cpp:
+ * orbsvcs/tests/Notify/performance-tests/Filter/Notify_Sequence_Push_Consumer.cpp:
+ * orbsvcs/tests/Notify/performance-tests/Filter/Notify_Structured_Push_Consumer.cpp:
+ * orbsvcs/tests/Notify/performance-tests/Filter/Sequence_Consumer.cpp:
+ * orbsvcs/tests/Notify/performance-tests/Filter/Sequence_Supplier.cpp:
+
+ Fix misc problems with use of ACE_ENV macros.
+ Add missing go.idl files
+
+Tue Jul 5 03:07:52 2005 Ossama Othman <ossama@dre.vanderbilt.edu>
+
+ * tao/CORBA_String.h:
+ * tao/CORBA_String.inl:
+
+ Added TAO-specific equality operators. Allows
+ CORBA::{W}String_var to be used as map key.
+
+ * tao/ORB.cpp (resolve_initial_references):
+
+ The initial reference map is now an ACE_Array_Map, which
+ implements an STL-like map interface. Updated map iteration
+ accordingly.
+
+ * tao/ORB_Core.cpp:
+ * tao/ORB_Core.h:
+ * tao/ORB_Core.i:
+ * tao/ORB_Table.cpp:
+ * tao/ORB_Table.h:
+ * tao/ORB_Table.inl:
+ * tao/Object_Ref_Table.cpp:
+ * tao/Object_Ref_Table.h:
+ * tao/Object_Ref_Table.inl:
+ * tao/params.cpp:
+ * tao/params.h:
+ * tao/params.i:
+
+ Replaced ACE_Hash_Map_Manager_Ex usage with light weight
+ ACE_Array_Map. Hash map benefits were not worth the larger
+ footprint.
+
+ Inlined a number very small functions. Reduces footprint.
+
+ * tao/Object_Ref_Table.h (TAO_Object_Ref_Table):
+
+ Do not export this class from the TAO shared library. It is
+ meant for internal use alone.
+
+ * tao/ORB_Core_Auto_Ptr.h (TAO_ORB_Core_Auto_Ptr):
+
+ Uncommented "explicit" constructor keyword. Support for it has
+ been required in ACE and TAO for a while now.
+
+ * tao/Makefile.am (nobase_include_HEADERS):
+
+ Added new Object_Ref_Table.inl inline soure file.
+
+Mon Jul 4 18:56:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * orbsvcs/orbsvcs/PortableGroup/MIOP.h:
+ Added closing } that was removed by accident earlier today
+
+Mon Jul 4 14:34:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tests/Collocation_Opportunities/Collocation_Opportunities.cpp:
+ Fixed compile error
+
+Mon Jul 4 14:12:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tao/ORB_Core.h:
+ * tao/params.h:
+ * tao/Server_Strategy_Factory.h:
+ Removed not needed forward declarations
+
+Mon Jul 4 13:52:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tao/Stub.h:
+ Removed not needed forward declarations
+
+Mon Jul 4 13:42:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tao/orb_types.pidl:
+ Don't use -GA with regeneration, we then get an A.cpp with contents
+ but the C.cpp file is empty, so just generate everything in C.cpp
+
+ * tao/orb_typesC.{h,cpp}:
+ * tao/orb_typesS.h:
+ Regenerated
+
+ * tao/orb_typesA.cpp:
+ Removed
+
+ * tao/Makefile.am:
+ * tao/tao.mpc:
+ Removed file above
+
+Mon Jul 4 13:37:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tao/Makefile.am:
+ Added missing Messaging_PolicyValueA.cpp
+
+ * tao/tao.mpc:
+ Added missing Messaging_PolicyValueA.cpp and
+ Messaging_PolicyValueC.cpp
+
+Mon Jul 4 13:12:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tao/Protocols_Hooks.h:
+ Removed several not needed forward declarations
+
+Mon Jul 4 13:07:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tao/Visibility.pidl:
+ Don't use -GA with regeneration, we then get an A.cpp with contents
+ but the C.cpp file is empty, so just generate everything in C.cpp
+
+ * tao/VisibilityC.{h,cpp}:
+ * tao/VisibilityS.h:
+ Regenerated
+
+ * tao/VisibilityA.cpp:
+ Removed
+
+ * tao/Makefile.am:
+ * tao/tao.mpc:
+ Removed file above
+
+Mon Jul 4 12:59:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tao/PredefinedType_Seq_Tmplinst.cpp:
+ Removed this file, explicit templates are not working with TAO
+ and will not work anymore in the future
+
+ * tao/Makefile.am:
+ * tao/tao.mpc:
+ Removed file above
+
+Mon Jul 4 12:05:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * orbsvcs/orbsvcs/FaultTolerance/FT_ClientService_Activate.h:
+ * orbsvcs/orbsvcs/FaultTolerance/FT_ServerService_Activate.h:
+ * orbsvcs/orbsvcs/PortableGroup/MIOP.h:
+ * orbsvcs/orbsvcs/PortableGroup/PortableGroup_Loader.h:
+ * tao/PICurrent_Loader.h:
+ * tao/BiDir_GIOP/BiDirGIOP.h:
+ * tao/CodecFactory/CodecFactory.h:
+ * tao/DynamicAny/DynamicAny.h:
+ * tao/DynamicInterface/Dynamic_Adapter_Impl.h:
+ * tao/IFR_Client/IFR_Client_Adapter_Impl.h:
+ * tao/IORInterceptor/IORInterceptor_Adapter_Factory_Impl.h:
+ * tao/IORManipulation/IORManip_Loader.h:
+ * tao/IORTable/IORTable.h:
+ * tao/ImR_Client/ImR_Client.h:
+ * tao/Messaging/Messaging.h:
+ * tao/ObjRefTemplate/ORT_Adapter_Factory_Impl.h:
+ * tao/PI/PI.h:
+ * tao/PI/PolicyFactory_Loader.h:
+ * tao/PI_Server/PI_Server.h:
+ * tao/PortableServer/PortableServer.h:
+ * tao/TypeCodeFactory/TypeCodeFactory_Adapter_Impl.h:
+ * tao/TypeCodeFactory/TypeCodeFactory_Loader.h:
+ * tao/Valuetype/Valuetype_Adapter_Impl.h:
+ Removed usage of ACE_HAS_BROKEN_STATIC_CONSTRUCTORS. This seems
+ to be used for older broken VxWorks versions but we don't need
+ this anymore. Zapped the usage of this and the workaround we
+ had in TAO. This fixes bugzilla bug 2177
+
+Mon Jul 4 11:01:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tao/ORBInitializer_Registry_Adapter.{h,cpp}:
+ Added virtual destructor in new cpp file, hopefully this fixes the
+ gcc 4 runtime errors
+
+ * tao/tao.mpc
+ * tao/Makefile.am:
+ Added new file
+
+Mon Jul 4 10:31:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tao/PI_Server/PI_Server.cpp:
+ * tao/PI_Server/ServerRequestInterceptor_Factory_Impl.{h,cpp}:
+ * tao/PI/PI.cpp:
+ * tao/PI/ClientRequestInterceptor_Factory_Impl.{h,cpp}:
+ * tao/PI/ClientRequestInterceptor_Adapter_Impl.{h,cpp}:
+ Added guards for when interceptors are disabled. The complete
+ PI/PI_Server lib shouldn't get build when interceptors are
+ disabled but that is not yet possible because the
+ ORBInitializers are used internally by some core libs.
+
+Mon Jul 4 09:23:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * examples/AMH/Sink_Server/AMH_Servant.h:
+ * examples/Content_Server/AMI_Iterator/Content_Iterator_i.h:
+ * examples/Content_Server/AMI_Iterator/Iterator_Handler.h:
+ * examples/Content_Server/AMI_Observer/Callback_Handler.h:
+ * examples/Content_Server/AMI_Observer/Callback_i.h:
+ * examples/Content_Server/AMI_Observer/Push_Iterator_Handler.h:
+ * examples/Content_Server/SMI_Iterator/Content_Iterator_i.h:
+ * examples/Load_Balancing/Identity_i.h:
+ * examples/Load_Balancing/Load_Balancer_i.h:
+ * examples/Load_Balancing_persistent/Identity_i.h:
+ * examples/Load_Balancing_persistent/Load_Balancer_i.h:
+ * examples/POA/Forwarding/test_i.h:
+ * examples/RTCORBA/Activity/Job_i.h:
+ * examples/RTScheduling/Job_i.h:
+ * examples/Simple/time-date/Time_Date_i.h:
+ * orbsvcs/FT_ReplicationManager/FT_FaultConsumer.h:
+ * orbsvcs/FT_ReplicationManager/FT_ReplicationManager.h:
+ * orbsvcs/ImplRepo_Service/Iterator.h:
+ * orbsvcs/examples/CosEC/Factory/CosEventChannelFactory_i.h:
+ * orbsvcs/examples/CosEC/RtEC_Based/lib/ConsumerAdmin_i.h:
+ * orbsvcs/examples/CosEC/RtEC_Based/lib/CosEvent_Utilities.h:
+ * orbsvcs/examples/CosEC/RtEC_Based/lib/EventChannel_i.h:
+ * orbsvcs/examples/CosEC/RtEC_Based/lib/ProxyPushConsumer_i.h:
+ * orbsvcs/examples/CosEC/RtEC_Based/lib/ProxyPushSupplier_i.h:
+ * orbsvcs/examples/CosEC/RtEC_Based/lib/SupplierAdmin_i.h:
+ * orbsvcs/examples/ImR/Advanced/Manager_i.h:
+ * orbsvcs/examples/ImR/Advanced/Messenger_i.h:
+ * orbsvcs/examples/ImR/Combined_Service/dynserver.h:
+ * orbsvcs/examples/LoadBalancing/RPS_Monitor.h:
+ * orbsvcs/examples/LoadBalancing/StockFactory.h:
+ * orbsvcs/examples/Log/Notify/Notify_Consumer.h:
+ * orbsvcs/examples/Log/Notify/Notify_Supplier.h:
+ * orbsvcs/examples/Notify/Filter/Filter.h:
+ * orbsvcs/examples/Notify/Lanes/Consumer.h:
+ * orbsvcs/examples/Notify/Lanes/Supplier.h:
+ * orbsvcs/examples/Notify/Subscribe/Subscribe.h:
+ * orbsvcs/examples/Notify/ThreadPool/Consumer.h:
+ * orbsvcs/examples/Notify/ThreadPool/Supplier.h:
+ * orbsvcs/examples/ORT/Gateway_i.h:
+ * orbsvcs/orbsvcs/AV/AVStreams_i.h:
+ * orbsvcs/orbsvcs/AV/Flows_T.h:
+ * orbsvcs/orbsvcs/Event/ECG_Address_Server_Base.h:
+ * orbsvcs/orbsvcs/Event/ECG_Complex_Address_Server.h:
+ * orbsvcs/orbsvcs/Event/ECG_Mcast_EH.h:
+ * orbsvcs/orbsvcs/Event/ECG_Simple_Address_Server.h:
+ * orbsvcs/orbsvcs/Event/ECG_UDP_Receiver.h:
+ * orbsvcs/orbsvcs/Event/ECG_UDP_Sender.h:
+ * orbsvcs/orbsvcs/Event/EC_Event_Channel_Base.h:
+ * orbsvcs/orbsvcs/LoadBalancing/LB_CPU_Load_Average_Monitor.h:
+ * orbsvcs/orbsvcs/LoadBalancing/LB_CPU_Utilization_Monitor.h:
+ * orbsvcs/orbsvcs/LoadBalancing/LB_LeastLoaded.h:
+ * orbsvcs/orbsvcs/LoadBalancing/LB_LoadAlert_Handler.h:
+ * orbsvcs/orbsvcs/LoadBalancing/LB_LoadAverage.h:
+ * orbsvcs/orbsvcs/LoadBalancing/LB_LoadManager.h:
+ * orbsvcs/orbsvcs/LoadBalancing/LB_LoadMinimum.h:
+ * orbsvcs/orbsvcs/LoadBalancing/LB_Random.h:
+ * orbsvcs/orbsvcs/LoadBalancing/LB_RoundRobin.h:
+ * orbsvcs/orbsvcs/Log/BasicLog_i.h:
+ * orbsvcs/orbsvcs/Log/EventLog_i.h:
+ * orbsvcs/orbsvcs/Log/Iterator_i.h:
+ * orbsvcs/orbsvcs/Log/NotifyLogConsumer.h:
+ * orbsvcs/orbsvcs/Log/NotifyLogNotification.h:
+ * orbsvcs/orbsvcs/Log/NotifyLog_i.h:
+ * orbsvcs/orbsvcs/Log/RTEventLog_i.h:
+ * orbsvcs/orbsvcs/Naming/Bindings_Iterator_T.h:
+ * orbsvcs/orbsvcs/Naming/Naming_Context_Interface.h:
+ * orbsvcs/orbsvcs/Notify/ETCL_Filter.h:
+ * orbsvcs/orbsvcs/Notify/ETCL_FilterFactory.h:
+ * orbsvcs/orbsvcs/Property/CosPropertyService_i.h:
+ * orbsvcs/orbsvcs/Trader/Offer_Iterators.h:
+ * orbsvcs/orbsvcs/Trader/Trader_T.h:
+ * orbsvcs/orbsvcs/Trader/Trader_Utils.h:
+ * orbsvcs/performance-tests/LoadBalancing/LBPerf/CPU/Roundtrip.h:
+ * orbsvcs/performance-tests/LoadBalancing/LBPerf/RPS/RPS_Monitor.h:
+ * orbsvcs/performance-tests/LoadBalancing/LBPerf/RPS/Roundtrip.h:
+ * orbsvcs/performance-tests/RTEvent/RTCORBA_Baseline/Roundtrip.h:
+ * orbsvcs/performance-tests/RTEvent/RTCORBA_Callback/Callback.h:
+ * orbsvcs/performance-tests/RTEvent/RTCORBA_Callback/Session.h:
+ * orbsvcs/performance-tests/RTEvent/RTCORBA_Callback/Session_Factory.h:
+ * orbsvcs/performance-tests/RTEvent/lib/Consumer.h:
+ * orbsvcs/performance-tests/RTEvent/lib/Control.h:
+ * orbsvcs/performance-tests/RTEvent/lib/Loopback.h:
+ * orbsvcs/performance-tests/RTEvent/lib/Loopback_Consumer.h:
+ * orbsvcs/performance-tests/RTEvent/lib/Loopback_Supplier.h:
+ * orbsvcs/performance-tests/RTEvent/lib/Peer_Base.h:
+ * orbsvcs/performance-tests/RTEvent/lib/Supplier.h:
+ * orbsvcs/tests/CosEvent/Basic/Random.h:
+ * orbsvcs/tests/Event/Basic/Random.h:
+ * orbsvcs/tests/Event/Mcast/Common/EC_Wrapper.h:
+ * orbsvcs/tests/HTIOP/Hello/Hello.h:
+ * orbsvcs/tests/LoadBalancing/GenericFactory/Application_Controlled/Basic.h:
+ * orbsvcs/tests/LoadBalancing/GenericFactory/Infrastructure_Controlled/Simple.h:
+ * orbsvcs/tests/LoadBalancing/GenericFactory/Manage_Object_Group/Basic.h:
+ * orbsvcs/tests/LoadBalancing/GenericFactory/Manage_Object_Group/Simple.h:
+ * orbsvcs/tests/Miop/McastHello/McastHello.h:
+ * orbsvcs/tests/Notify/Test_Filter/RT_Test_Filter.h:
+ * orbsvcs/tests/Notify/Test_Filter/RT_Test_FilterFactory.h:
+ * orbsvcs/tests/Notify/lib/Peer_T.h:
+ * orbsvcs/tests/Notify/performance-tests/RedGreen/RedGreen_Test.h:
+ * orbsvcs/tests/RTCosScheduling/Object1_i.h:
+ * orbsvcs/tests/Security/Callback/client_i.h:
+ * orbsvcs/tests/Security/Callback/server_i.h:
+ * orbsvcs/tests/Security/Secure_Invocation/Foo_i.h:
+ * performance-tests/Protocols/Protocols.mpc
+ * tests/AMI_Buffering/AMI_Buffering.h:
+ * tests/AMI_Buffering/AMI_Buffering_Admin.h:
+ * tests/AMI_Buffering/Reply_Handler.h:
+ * tests/Any/Recursive/Hello.h:
+ * tests/BiDirectional_NestedUpcall/test_i.h:
+ * tests/Big_Reply/Big_Reply_i.h:
+ * tests/Big_Request_Muxing/Payload_Receiver.h:
+ * tests/Big_Twoways/Peer.h:
+ * tests/Blocking_Sync_None/Blocking_Sync_None.h:
+ * tests/Bug_1476_Regression/Sender_i.h:
+ * tests/Bug_1482_Regression/Hello.h:
+ * tests/Bug_1495_Regression/test_i.h:
+ * tests/Bug_1551_Regression/Hello.h:
+ * tests/Bug_1551_Regression/Reply_Handler.h:
+ * tests/Cache_Growth_Test/Hello.h:
+ * tests/Client_Leaks/Process.h:
+ * tests/Client_Leaks/Process_Factory.h:
+ * tests/Client_Leaks/Startup_Callback.h:
+ * tests/Collocation_Tests/Hello.h:
+ * tests/Connect_Strategy_Test/Hello.h:
+ * tests/Connection_Purging/test_i.h:
+ * tests/Crash_On_Write/Oneway_Receiver.h:
+ * tests/Crashed_Callback/Crashed_Callback.h:
+ * tests/Crashed_Callback/Service.h:
+ * tests/Faults/ping_i.h:
+ * tests/Faults/test_i.h:
+ * tests/GIOP_Fragments/Java_Big_Request/Payload_Receiver.h:
+ * tests/GIOP_Fragments/PMB_With_Fragments/Payload_Receiver.h:
+ * tests/Hang_Shutdown/test_i.h:
+ * tests/Hello/Hello.h:
+ * tests/ICMG_Any_Bug/Hello.h:
+ * tests/ICMG_Any_Bug/HelloWorld.h:
+ * tests/IOR_Endpoint_Hostnames/bogus_i.h:
+ * tests/LongUpcalls/AMI_Manager.h:
+ * tests/LongUpcalls/Controller.h:
+ * tests/LongUpcalls/Manager.h:
+ * tests/LongUpcalls/Manager_Handler.h:
+ * tests/MT_BiDir/Receiver_i.h:
+ * tests/MT_BiDir/Sender_i.h:
+ * tests/MT_Timeout/Sleep_Service.h:
+ * tests/Nested_Upcall_Crash/Client_Peer.h:
+ * tests/Nested_Upcall_Crash/Server_Peer.h:
+ * tests/OBV/Supports/Supports_Test_impl.h:
+ * tests/ORB_shutdown/Foo_Bar.h:
+ * tests/Object_Loader/Test_i.h:
+ * tests/Oneway_Buffering/Oneway_Buffering.h:
+ * tests/Oneway_Buffering/Oneway_Buffering_Admin.h:
+ * tests/Oneways_Invoking_Twoways/Receiver_i.h:
+ * tests/Oneways_Invoking_Twoways/Sender_i.h:
+ * tests/POA/Deactivate_Object/Hello.h:
+ * tests/Portable_Interceptors/AMI/Echo.h:
+ * tests/Portable_Interceptors/AMI/Echo_Handler.h:
+ * tests/Portable_Interceptors/Collocated/Dynamic/test_i.h:
+ * tests/Portable_Interceptors/Collocated/Service_Context_Manipulation/test_i.h:
+ * tests/RTCORBA/Priority_Inversion_With_Bands/test_i.h:
+ * tests/RTCORBA/Thread_Pool/test_i.h:
+ * tests/Reliable_Oneways/Oneway_Receiver.h:
+ * tests/Reliable_Oneways/Shutdown_Helper.h:
+ * tests/Servant_To_Reference_Test/Test_i.h:
+ * tests/Server_Connection_Purging/Test_i.h:
+ * tests/Server_Leaks/Ping_Service.h:
+ * tests/Server_Port_Zero/Hello.h:
+ * tests/Stack_Recursion/Sender.h:
+ * TAO_IDL/be/be_visitor_interface/interface_ih.cpp:
+ * docs/tutorials/Quoter/Event_Service/Stock_i.h:
+ * docs/tutorials/Quoter/RT_Event_Service/Stock_i.h:
+ * docs/tutorials/Quoter/Simple/ImprovedServer/Stock_i.h:
+ * examples/POA/Adapter_Activator/server.cpp:
+ * examples/POA/Reference_Counted_Servant/server.cpp:
+ * orbsvcs/examples/CosEC/RtEC_Based/lib/ProxyPushConsumer_i.cpp:
+ * orbsvcs/examples/CosEC/RtEC_Based/lib/ProxyPushSupplier_i.cpp:
+ * orbsvcs/examples/ImR/Combined_Service/combined.cpp:
+ * orbsvcs/tests/BiDir_CORBALOC/TimeServer.cpp:
+ * orbsvcs/tests/Event/Mcast/Complex/consumer.cpp:
+ * orbsvcs/tests/Event/Mcast/Simple/consumer.cpp:
+ * orbsvcs/tests/Event/Mcast/Two_Way/application.cpp:
+ * orbsvcs/tests/ImplRepo/scale/server_i.cpp:
+ * orbsvcs/tests/Redundant_Naming/client.cpp:
+ * orbsvcs/tests/Security/ssliop_corbaloc/client.cpp:
+ * orbsvcs/tests/Simple_Naming/client.cpp:
+ * performance-tests/Latency/AMH_Single_Threaded/Roundtrip.h:
+ * performance-tests/Latency/AMI/Roundtrip.h:
+ * performance-tests/Latency/AMI/Roundtrip_Handler.h:
+ * performance-tests/Latency/Collocation/Roundtrip.h:
+ * performance-tests/Latency/DII/Roundtrip.h:
+ * performance-tests/Latency/DSI/Roundtrip.h:
+ * performance-tests/Latency/Deferred/Roundtrip.h:
+ * performance-tests/Latency/Single_Threaded/Roundtrip.h:
+ * performance-tests/Latency/Thread_Per_Connection/Roundtrip.h:
+ * performance-tests/Latency/Thread_Pool/Roundtrip.h:
+ * performance-tests/Memory/IORsize/Foo_i.h:
+ * performance-tests/Memory/IORsize/Memory_Growth.h:
+ * performance-tests/Memory/Single_Threaded/Memory_Growth.h:
+ * performance-tests/POA/Implicit_Activation/Factory.h:
+ * performance-tests/POA/Implicit_Activation/Simple.h:
+ * performance-tests/Protocols/Protocols.mpc
+ * performance-tests/Protocols/distributor.cpp:
+ * performance-tests/Protocols/receiver.cpp:
+ * performance-tests/RTCorba/Thread_Pool/server.cpp:
+ * performance-tests/Sequence_Latency/AMH_Single_Threaded/Roundtrip.h:
+ * performance-tests/Sequence_Latency/AMI/Roundtrip.h:
+ * performance-tests/Sequence_Latency/AMI/Roundtrip_Handler.h:
+ * performance-tests/Sequence_Latency/DII/Roundtrip.h:
+ * performance-tests/Sequence_Latency/DSI/Roundtrip.h:
+ * performance-tests/Sequence_Latency/Deferred/Roundtrip.h:
+ * performance-tests/Sequence_Latency/Single_Threaded/Roundtrip.h:
+ * performance-tests/Sequence_Latency/Thread_Per_Connection/Roundtrip.h:
+ * performance-tests/Sequence_Latency/Thread_Pool/Roundtrip.h:
+ * performance-tests/Throughput/Receiver.h:
+ * performance-tests/Throughput/Receiver_Factory.h:
+ * tao/ImR_Client/ServerObject_i.h:
+ * tests/AMH_Exceptions/server.cpp:
+ * tests/AMH_Oneway/server.cpp:
+ * tests/Bug_1568_Regression/server.cpp:
+ * tests/Bug_1670_Regression/server.cpp:
+ * tests/Collocation_Opportunities/Collocation_Opportunities.cpp:
+ * tests/Faults/test_i.h:
+ * tests/Objref_Sequence_Test/server.cpp:
+ * tests/POA/Etherealization/Etherealization.cpp:
+ * tests/POA/MT_Servant_Locator/MT_Servant_Locator.cpp:
+ * tests/POA/Nested_Non_Servant_Upcalls/Nested_Non_Servant_Upcalls.cpp:
+ * tests/POA/Non_Servant_Upcalls/Non_Servant_Upcalls.cpp:
+ * tests/POA/Persistent_ID/server.cpp:
+ * tests/RTCORBA/Collocation/Collocation.cpp:
+ * tests/RTCORBA/Linear_Priority/server.cpp:
+ * tests/RTCORBA/Persistent_IOR/server.cpp:
+ * tests/RTCORBA/Policy_Combinations/server.cpp:
+ * tests/RTCORBA/Profile_And_Endpoint_Selection/server.cpp:
+ * tests/UNKNOWN_Exception/server.cpp:
+ All servants are reference counted by default, no need anymore to
+ derive the servant from RefCountServantBase. Also removed the msvc
+ pragma push/pop when it was not needed anymore
+
+ * tao/Object.{h,cpp}:
+ Corrected implementation _get_orb()
+
+ * tao/SystemException.cpp:
+ Initailize pointers with 0
+
+Mon Jul 4 07:11:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tests/Big_Twoways/Coordinator.h:
+ * tests/Big_Twoways/Session.h:
+ * tests/Big_Twoways/Session_Control.h:
+ * tests/Big_Oneways/Coordinator.h:
+ * tests/Big_Oneways/Peer.h:
+ * tests/Big_Oneways/Session.h:
+ * tests/Big_Oneways/Session_Control.h:
+ No need to derive from RefCountServantBase, Servants are
+ reference counted now by defailt.
+
+ * tests/Big_Twoways/run_test.pl:
+ * tests/Big_Oneways/run_test.pl:
+ Use WaitKill for the server, if the server is still running, it
+ is an error
+
+ * tests/Big_Twoways/server.cpp:
+ * tests/Big_Oneways/server.cpp:
+ No need to do a _remove_ref, the _var handle this
+
+Sun Jul 3 15:09:06 2005 J.T. Conklin <jtc@acorntoolworks.com>
+
+ * orbsvcs/orbsvcs/Log/RTEventLogFactory_i.cpp:
+
+ Fix typo in ACE_HAS_TEMPLATE_INSTANTIATION_PRAGMA case.
+
+ * orbsvcs/orbsvcs/Log/BasicLogFactory_i.cpp:
+ * orbsvcs/orbsvcs/Log/EventLogFactory_i.cpp:
+ * orbsvcs/orbsvcs/Log/NotifyLogFactory_i.cpp:
+ * orbsvcs/orbsvcs/Log/RTEventLogFactory_i.cpp:
+
+ Change create() method parameter name from max_rec_size to
+ max_size, as it specifies the size of the whole log, not a
+ single log record.
+
+Sun Jul 3 15:00:29 2005 J.T. Conklin <jtc@acorntoolworks.com>
+
+ * tao/Makefile.am:
+ * orbsvcs/orbsvcs/Makefile.am:
+
+ Regenerated.
+
+ * tao/tao.mpc:
+
+ Removed Interceptor_List.h from Header_Files and
+ Interceptor_List.cpp from Template_Files sections.
+
+Fri Jul 01 15:14:06 2005 Gary Maxey <gary.maxey@hp.com>
+
+ * tao/Valuetype/StringValueC.inl:
+
+ Avoid error when compiling with MSVC6 compiler.
+
+Fri Jul 1 16:14:16 2005 Justin Michel <michel_j@ociweb.com>
+
+ * orbsvcs/tests/Notify/Test_Filter/RT_Test_Filter.cpp:
+ * orbsvcs/tests/Notify/lib/Options_Parser.cpp:
+
+ Fix some typos with the previous checkin.
+
+Fri Jul 1 14:43:27 2005 Justin Michel <michel_j@ociweb.com>
+
+ * orbsvcs/Notify_Service/Notify_Service.cpp:
+ * orbsvcs/Notify_Service/README:
+ * orbsvcs/Notify_Service/svc.conf:
+ * orbsvcs/Notify_Service/svc.conf.xml:
+ * orbsvcs/orbsvcs/CosNotification.mpc:
+ * orbsvcs/orbsvcs/CosNotifyComm.idl:
+ * orbsvcs/orbsvcs/Notify/Admin.h:
+ * orbsvcs/orbsvcs/Notify/Admin.inl:
+ * orbsvcs/orbsvcs/Notify/Admin.cpp:
+ * orbsvcs/orbsvcs/Notify/AdminProperties.h:
+ * orbsvcs/orbsvcs/Notify/AdminProperties.inl:
+ * orbsvcs/orbsvcs/Notify/AdminProperties.cpp:
+ * orbsvcs/orbsvcs/Notify/Any/AnyEvent.h:
+ * orbsvcs/orbsvcs/Notify/Any/AnyEvent.cpp:
+ * orbsvcs/orbsvcs/Notify/Any/CosEC_ProxyPushConsumer.h:
+ * orbsvcs/orbsvcs/Notify/Any/CosEC_ProxyPushConsumer.cpp:
+ * orbsvcs/orbsvcs/Notify/Any/CosEC_ProxyPushSupplier.h:
+ * orbsvcs/orbsvcs/Notify/Any/CosEC_ProxyPushSupplier.cpp:
+ * orbsvcs/orbsvcs/Notify/Any/ProxyPushConsumer.h:
+ * orbsvcs/orbsvcs/Notify/Any/ProxyPushConsumer.cpp:
+ * orbsvcs/orbsvcs/Notify/Any/ProxyPushSupplier.h:
+ * orbsvcs/orbsvcs/Notify/Any/ProxyPushSupplier.cpp:
+ * orbsvcs/orbsvcs/Notify/Any/PushConsumer.h:
+ * orbsvcs/orbsvcs/Notify/Any/PushConsumer.cpp:
+ * orbsvcs/orbsvcs/Notify/Any/PushSupplier.h:
+ * orbsvcs/orbsvcs/Notify/Any/PushSupplier.cpp:
+ * orbsvcs/orbsvcs/Notify/Buffering_Strategy.h:
+ * orbsvcs/orbsvcs/Notify/Buffering_Strategy.cpp:
+ * orbsvcs/orbsvcs/Notify/Builder.cpp:
+ * orbsvcs/orbsvcs/Notify/Consumer.h:
+ * orbsvcs/orbsvcs/Notify/Consumer.inl:
+ * orbsvcs/orbsvcs/Notify/Consumer.cpp:
+ * orbsvcs/orbsvcs/Notify/ConsumerAdmin.h:
+ * orbsvcs/orbsvcs/Notify/ConsumerAdmin.cpp:
+ * orbsvcs/orbsvcs/Notify/CosNotify_Service.h:
+ * orbsvcs/orbsvcs/Notify/CosNotify_Service.cpp:
+ * orbsvcs/orbsvcs/Notify/Default_Factory.cpp:
+ * orbsvcs/orbsvcs/Notify/Delivery_Request.h:
+ * orbsvcs/orbsvcs/Notify/Delivery_Request.cpp:
+ * orbsvcs/orbsvcs/Notify/ETCL_Filter.h:
+ * orbsvcs/orbsvcs/Notify/ETCL_Filter.cpp:
+ * orbsvcs/orbsvcs/Notify/ETCL_FilterFactory.h:
+ * orbsvcs/orbsvcs/Notify/Event.h:
+ * orbsvcs/orbsvcs/Notify/Event.inl:
+ * orbsvcs/orbsvcs/Notify/Event.cpp:
+ * orbsvcs/orbsvcs/Notify/EventChannel.h:
+ * orbsvcs/orbsvcs/Notify/EventChannel.cpp:
+ * orbsvcs/orbsvcs/Notify/EventChannelFactory.h:
+ * orbsvcs/orbsvcs/Notify/EventChannelFactory.cpp:
+ * orbsvcs/orbsvcs/Notify/EventTypeSeq.h:
+ * orbsvcs/orbsvcs/Notify/Event_Manager.h:
+ * orbsvcs/orbsvcs/Notify/Event_Manager.inl:
+ * orbsvcs/orbsvcs/Notify/Event_Manager.cpp:
+ * orbsvcs/orbsvcs/Notify/Event_Persistence_Factory.h:
+ * orbsvcs/orbsvcs/Notify/FilterAdmin.h:
+ * orbsvcs/orbsvcs/Notify/FilterAdmin.cpp:
+ * orbsvcs/orbsvcs/Notify/Method_Request.h:
+ * orbsvcs/orbsvcs/Notify/Method_Request.inl:
+ * orbsvcs/orbsvcs/Notify/Method_Request_Dispatch.h:
+ * orbsvcs/orbsvcs/Notify/Method_Request_Dispatch.cpp:
+ * orbsvcs/orbsvcs/Notify/Method_Request_Event.h:
+ * orbsvcs/orbsvcs/Notify/Method_Request_Event.cpp:
+ * orbsvcs/orbsvcs/Notify/Method_Request_Lookup.h:
+ * orbsvcs/orbsvcs/Notify/Method_Request_Lookup.cpp:
+ * orbsvcs/orbsvcs/Notify/Method_Request_Shutdown.h:
+ * orbsvcs/orbsvcs/Notify/Method_Request_Updates.h:
+ * orbsvcs/orbsvcs/Notify/Method_Request_Updates.cpp:
+ * orbsvcs/orbsvcs/Notify/Name_Value_Pair.cpp:
+ * orbsvcs/orbsvcs/Notify/Notify_Constraint_Interpreter.h:
+ * orbsvcs/orbsvcs/Notify/Notify_Constraint_Visitors.h:
+ * orbsvcs/orbsvcs/Notify/Notify_Constraint_Visitors.cpp:
+ * orbsvcs/orbsvcs/Notify/Notify_EventChannelFactory_i.cpp:
+ * orbsvcs/orbsvcs/Notify/Object.h:
+ * orbsvcs/orbsvcs/Notify/Object.inl:
+ * orbsvcs/orbsvcs/Notify/Object.cpp:
+ * orbsvcs/orbsvcs/Notify/Peer.h:
+ * orbsvcs/orbsvcs/Notify/Peer.cpp:
+ * orbsvcs/orbsvcs/Notify/Persistent_File_Allocator.h:
+ * orbsvcs/orbsvcs/Notify/Persistent_File_Allocator.cpp:
+ * orbsvcs/orbsvcs/Notify/Properties.cpp:
+ * orbsvcs/orbsvcs/Notify/Proxy.h:
+ * orbsvcs/orbsvcs/Notify/Proxy.cpp:
+ * orbsvcs/orbsvcs/Notify/ProxyConsumer.h:
+ * orbsvcs/orbsvcs/Notify/ProxyConsumer.inl:
+ * orbsvcs/orbsvcs/Notify/ProxyConsumer.cpp:
+ * orbsvcs/orbsvcs/Notify/ProxyConsumer_T.cpp:
+ * orbsvcs/orbsvcs/Notify/ProxySupplier.h:
+ * orbsvcs/orbsvcs/Notify/ProxySupplier.inl:
+ * orbsvcs/orbsvcs/Notify/ProxySupplier.cpp:
+ * orbsvcs/orbsvcs/Notify/ProxySupplier_T.cpp:
+ * orbsvcs/orbsvcs/Notify/Proxy_T.cpp:
+ * orbsvcs/orbsvcs/Notify/QoSProperties.h:
+ * orbsvcs/orbsvcs/Notify/QoSProperties.inl:
+ * orbsvcs/orbsvcs/Notify/QoSProperties.cpp:
+ * orbsvcs/orbsvcs/Notify/README:
+ * orbsvcs/orbsvcs/Notify/RT_Builder.cpp:
+ * orbsvcs/orbsvcs/Notify/RT_Notify_Service.h:
+ * orbsvcs/orbsvcs/Notify/RT_Notify_Service.cpp:
+ * orbsvcs/orbsvcs/Notify/Random_File.h:
+ * orbsvcs/orbsvcs/Notify/Random_File.cpp:
+ * orbsvcs/orbsvcs/Notify/Reactive_Task.h:
+ * orbsvcs/orbsvcs/Notify/Reactive_Task.cpp:
+ * orbsvcs/orbsvcs/Notify/Reconnection_Registry.h:
+ * orbsvcs/orbsvcs/Notify/Refcountable.h:
+ * orbsvcs/orbsvcs/Notify/Refcountable.cpp:
+ * orbsvcs/orbsvcs/Notify/Refcountable_Guard_T.h:
+ * orbsvcs/orbsvcs/Notify/Refcountable_Guard_T.inl:
+ * orbsvcs/orbsvcs/Notify/Routing_Slip.h:
+ * orbsvcs/orbsvcs/Notify/Routing_Slip.cpp:
+ * orbsvcs/orbsvcs/Notify/Routing_Slip_Persistence_Manager.cpp:
+ * orbsvcs/orbsvcs/Notify/Sequence/SequenceProxyPushConsumer.h:
+ * orbsvcs/orbsvcs/Notify/Sequence/SequenceProxyPushConsumer.cpp:
+ * orbsvcs/orbsvcs/Notify/Sequence/SequenceProxyPushSupplier.h:
+ * orbsvcs/orbsvcs/Notify/Sequence/SequenceProxyPushSupplier.cpp:
+ * orbsvcs/orbsvcs/Notify/Sequence/SequencePushConsumer.h:
+ * orbsvcs/orbsvcs/Notify/Sequence/SequencePushConsumer.cpp:
+ * orbsvcs/orbsvcs/Notify/Sequence/SequencePushSupplier.h:
+ * orbsvcs/orbsvcs/Notify/Sequence/SequencePushSupplier.cpp:
+ * orbsvcs/orbsvcs/Notify/Service.h:
+ * orbsvcs/orbsvcs/Notify/Standard_Event_Persistence.h:
+ * orbsvcs/orbsvcs/Notify/Standard_Event_Persistence.cpp:
+ * orbsvcs/orbsvcs/Notify/Structured/RT_StructuredProxyPushSupplier.h:
+ * orbsvcs/orbsvcs/Notify/Structured/RT_StructuredProxyPushSupplier.cpp:
+ * orbsvcs/orbsvcs/Notify/Structured/StructuredEvent.h:
+ * orbsvcs/orbsvcs/Notify/Structured/StructuredEvent.cpp:
+ * orbsvcs/orbsvcs/Notify/Structured/StructuredProxyPushConsumer.h:
+ * orbsvcs/orbsvcs/Notify/Structured/StructuredProxyPushConsumer.cpp:
+ * orbsvcs/orbsvcs/Notify/Structured/StructuredProxyPushSupplier.h:
+ * orbsvcs/orbsvcs/Notify/Structured/StructuredProxyPushSupplier.cpp:
+ * orbsvcs/orbsvcs/Notify/Structured/StructuredPushConsumer.h:
+ * orbsvcs/orbsvcs/Notify/Structured/StructuredPushConsumer.cpp:
+ * orbsvcs/orbsvcs/Notify/Structured/StructuredPushSupplier.h:
+ * orbsvcs/orbsvcs/Notify/Structured/StructuredPushSupplier.cpp:
+ * orbsvcs/orbsvcs/Notify/Subscription_Change_Worker.h:
+ * orbsvcs/orbsvcs/Notify/Supplier.h:
+ * orbsvcs/orbsvcs/Notify/SupplierAdmin.h:
+ * orbsvcs/orbsvcs/Notify/SupplierAdmin.cpp:
+ * orbsvcs/orbsvcs/Notify/ThreadPool_Task.h:
+ * orbsvcs/orbsvcs/Notify/ThreadPool_Task.inl:
+ * orbsvcs/orbsvcs/Notify/ThreadPool_Task.cpp:
+ * orbsvcs/orbsvcs/Notify/Timer.h:
+ * orbsvcs/orbsvcs/Notify/Timer_Queue.h:
+ * orbsvcs/orbsvcs/Notify/Timer_Reactor.h:
+ * orbsvcs/orbsvcs/Notify/Topology_Object.h:
+ * orbsvcs/orbsvcs/Notify/Topology_Object.cpp:
+ * orbsvcs/orbsvcs/Notify/Worker_Task.h:
+ * orbsvcs/orbsvcs/Notify/Buffering_Strategy.inl:
+ * orbsvcs/orbsvcs/Notify/Sequence/Batch_Buffering_Strategy.h:
+ * orbsvcs/orbsvcs/Notify/Sequence/Batch_Buffering_Strategy.cpp:
+
+ Ported over the refactoring of the Notify Service by Dave Giovannini
+ <giovannini_d at ociweb dot com>. These changes primarily fix memory leaks
+ and crashes.
+ Ported over my own changes that reimplement the OrderPolicy, BlockingPolicy, and
+ DiscardPolicy features.
+
+ * orbsvcs/tests/Notify/Basic/AdminProperties.h:
+ * orbsvcs/tests/Notify/Basic/AdminProperties.cpp:
+ * orbsvcs/tests/Notify/Basic/ConnectDisconnect.h:
+ * orbsvcs/tests/Notify/Basic/ConnectDisconnect.cpp:
+ * orbsvcs/tests/Notify/Basic/Events.h:
+ * orbsvcs/tests/Notify/Basic/Events.cpp:
+ * orbsvcs/tests/Notify/Basic/Filter.h:
+ * orbsvcs/tests/Notify/Basic/Filter.cpp:
+ * orbsvcs/tests/Notify/Basic/IdAssignment.cpp:
+ * orbsvcs/tests/Notify/Basic/LifeCycle.cpp:
+ * orbsvcs/tests/Notify/Basic/MultiTypes.h:
+ * orbsvcs/tests/Notify/Basic/MultiTypes.cpp:
+ * orbsvcs/tests/Notify/Basic/Sequence.h:
+ * orbsvcs/tests/Notify/Basic/Sequence.cpp:
+ * orbsvcs/tests/Notify/Basic/Simple.h:
+ * orbsvcs/tests/Notify/Basic/Simple.cpp:
+ * orbsvcs/tests/Notify/Basic/Updates.h:
+ * orbsvcs/tests/Notify/Basic/Updates.cpp:
+ * orbsvcs/tests/Notify/Basic/adminproperties.conf:
+ * orbsvcs/tests/Notify/Basic/notify.mt.conf:
+ * orbsvcs/tests/Notify/Basic/notify.reactive.conf:
+ * orbsvcs/tests/Notify/Basic/notify.rt.conf:
+ * orbsvcs/tests/Notify/Basic/run_test.pl:
+ * orbsvcs/tests/Notify/Blocking/Notify_Structured_Push_Consumer.h:
+ * orbsvcs/tests/Notify/Blocking/Notify_Structured_Push_Consumer.cpp:
+ * orbsvcs/tests/Notify/Blocking/Structured_Consumer.cpp:
+ * orbsvcs/tests/Notify/Blocking/Structured_Supplier.cpp:
+ * orbsvcs/tests/Notify/Blocking/common.cpp:
+ * orbsvcs/tests/Notify/Blocking/go.idl:
+ * orbsvcs/tests/Notify/Blocking/notify.conf:
+ * orbsvcs/tests/Notify/Blocking/notify.conf.xml:
+ * orbsvcs/tests/Notify/Blocking/run_test.pl:
+ * orbsvcs/tests/Notify/Destroy/main.cpp:
+ * orbsvcs/tests/Notify/Discarding/Notify_Sequence_Push_Consumer.h:
+ * orbsvcs/tests/Notify/Discarding/Notify_Sequence_Push_Consumer.cpp:
+ * orbsvcs/tests/Notify/Discarding/Notify_Structured_Push_Consumer.h:
+ * orbsvcs/tests/Notify/Discarding/Notify_Structured_Push_Consumer.cpp:
+ * orbsvcs/tests/Notify/Discarding/Sequence_Consumer.cpp:
+ * orbsvcs/tests/Notify/Discarding/Sequence_Supplier.cpp:
+ * orbsvcs/tests/Notify/Discarding/Structured_Consumer.cpp:
+ * orbsvcs/tests/Notify/Discarding/Structured_Supplier.cpp:
+ * orbsvcs/tests/Notify/Discarding/common.cpp:
+ * orbsvcs/tests/Notify/Discarding/go.idl:
+ * orbsvcs/tests/Notify/Discarding/notify.conf:
+ * orbsvcs/tests/Notify/Discarding/notify.conf.xml:
+ * orbsvcs/tests/Notify/Discarding/run_test.pl:
+ * orbsvcs/tests/Notify/Driver/main.cpp:
+ * orbsvcs/tests/Notify/Lanes/consumer.conf:
+ * orbsvcs/tests/Notify/Lanes/notify.conf:
+ * orbsvcs/tests/Notify/Lanes/run_test.pl:
+ * orbsvcs/tests/Notify/Lanes/run_test_consumer.pl:
+ * orbsvcs/tests/Notify/Lanes/run_test_notify.pl:
+ * orbsvcs/tests/Notify/Lanes/run_test_supplier.pl:
+ * orbsvcs/tests/Notify/Lanes/supplier.conf:
+ * orbsvcs/tests/Notify/MT_Dispatching/Notify_Structured_Push_Consumer.h:
+ * orbsvcs/tests/Notify/MT_Dispatching/Notify_Structured_Push_Consumer.cpp:
+ * orbsvcs/tests/Notify/MT_Dispatching/Structured_Consumer.cpp:
+ * orbsvcs/tests/Notify/MT_Dispatching/Structured_Supplier.cpp:
+ * orbsvcs/tests/Notify/MT_Dispatching/go.idl:
+ * orbsvcs/tests/Notify/MT_Dispatching/notify_mtdispatching.conf:
+ * orbsvcs/tests/Notify/MT_Dispatching/notify_mtdispatching.conf.xml:
+ * orbsvcs/tests/Notify/MT_Dispatching/notify_mtsource.conf:
+ * orbsvcs/tests/Notify/MT_Dispatching/notify_mtsource.conf.xml:
+ * orbsvcs/tests/Notify/MT_Dispatching/notify_nothreads.conf:
+ * orbsvcs/tests/Notify/MT_Dispatching/notify_nothreads.conf.xml:
+ * orbsvcs/tests/Notify/MT_Dispatching/run_test.pl:
+ * orbsvcs/tests/Notify/Ordering/Notify_Sequence_Push_Consumer.h:
+ * orbsvcs/tests/Notify/Ordering/Notify_Sequence_Push_Consumer.cpp:
+ * orbsvcs/tests/Notify/Ordering/Notify_Structured_Push_Consumer.h:
+ * orbsvcs/tests/Notify/Ordering/Notify_Structured_Push_Consumer.cpp:
+ * orbsvcs/tests/Notify/Ordering/Sequence_Consumer.cpp:
+ * orbsvcs/tests/Notify/Ordering/Sequence_Supplier.cpp:
+ * orbsvcs/tests/Notify/Ordering/Structured_Consumer.cpp:
+ * orbsvcs/tests/Notify/Ordering/Structured_Supplier.cpp:
+ * orbsvcs/tests/Notify/Ordering/common.cpp:
+ * orbsvcs/tests/Notify/Ordering/go.idl:
+ * orbsvcs/tests/Notify/Ordering/notify.conf:
+ * orbsvcs/tests/Notify/Ordering/notify.conf.xml:
+ * orbsvcs/tests/Notify/Ordering/run_test.pl:
+ * orbsvcs/tests/Notify/PluggableTopology/Test_Topology_Factory.h:
+ * orbsvcs/tests/Notify/PluggableTopology/main.cpp:
+ * orbsvcs/tests/Notify/PluggableTopology/plugtop_ns.conf:
+ * orbsvcs/tests/Notify/Reconnecting/Consumer.h:
+ * orbsvcs/tests/Notify/Reconnecting/Consumer.cpp:
+ * orbsvcs/tests/Notify/Reconnecting/README:
+ * orbsvcs/tests/Notify/Reconnecting/Supplier.cpp:
+ * orbsvcs/tests/Notify/Reconnecting/event.conf:
+ * orbsvcs/tests/Notify/Reconnecting/ns_mt.conf:
+ * orbsvcs/tests/Notify/Reconnecting/ns_mt_both.conf:
+ * orbsvcs/tests/Notify/Reconnecting/ns_st.conf:
+ * orbsvcs/tests/Notify/Reconnecting/ns_st_both.conf:
+ * orbsvcs/tests/Notify/Reconnecting/run_test.pl:
+ * orbsvcs/tests/Notify/Sequence_Multi_ETCL_Filter/Notify_Sequence_Push_Consumer.h:
+ * orbsvcs/tests/Notify/Sequence_Multi_ETCL_Filter/Notify_Sequence_Push_Consumer.cpp:
+ * orbsvcs/tests/Notify/Sequence_Multi_ETCL_Filter/Sequence_Consumer.cpp:
+ * orbsvcs/tests/Notify/Sequence_Multi_ETCL_Filter/Sequence_Supplier.cpp:
+ * orbsvcs/tests/Notify/Sequence_Multi_ETCL_Filter/common.cpp:
+ * orbsvcs/tests/Notify/Sequence_Multi_ETCL_Filter/go.idl:
+ * orbsvcs/tests/Notify/Sequence_Multi_ETCL_Filter/notify.conf:
+ * orbsvcs/tests/Notify/Sequence_Multi_ETCL_Filter/notify.conf.xml:
+ * orbsvcs/tests/Notify/Sequence_Multi_ETCL_Filter/run_test.pl:
+ * orbsvcs/tests/Notify/Sequence_Multi_Filter/Notify_Sequence_Push_Consumer.h:
+ * orbsvcs/tests/Notify/Sequence_Multi_Filter/Notify_Sequence_Push_Consumer.cpp:
+ * orbsvcs/tests/Notify/Sequence_Multi_Filter/Sequence_Consumer.cpp:
+ * orbsvcs/tests/Notify/Sequence_Multi_Filter/Sequence_Supplier.cpp:
+ * orbsvcs/tests/Notify/Sequence_Multi_Filter/common.cpp:
+ * orbsvcs/tests/Notify/Sequence_Multi_Filter/go.idl:
+ * orbsvcs/tests/Notify/Sequence_Multi_Filter/notify.conf:
+ * orbsvcs/tests/Notify/Sequence_Multi_Filter/notify.conf.xml:
+ * orbsvcs/tests/Notify/Sequence_Multi_Filter/run_test.pl:
+ * orbsvcs/tests/Notify/Structured_Filter/Notify_Push_Consumer.h:
+ * orbsvcs/tests/Notify/Structured_Filter/Notify_Push_Consumer.cpp:
+ * orbsvcs/tests/Notify/Structured_Filter/Struct_Filter.mpc:
+ * orbsvcs/tests/Notify/Structured_Filter/Structured_Consumer.cpp:
+ * orbsvcs/tests/Notify/Structured_Filter/Structured_Supplier.cpp:
+ * orbsvcs/tests/Notify/Structured_Filter/notify.conf:
+ * orbsvcs/tests/Notify/Structured_Filter/run_test.pl:
+ * orbsvcs/tests/Notify/Structured_Multi_Filter/Notify_Push_Consumer.h:
+ * orbsvcs/tests/Notify/Structured_Multi_Filter/Notify_Push_Consumer.cpp:
+ * orbsvcs/tests/Notify/Structured_Multi_Filter/Notify_Push_Supplier.h:
+ * orbsvcs/tests/Notify/Structured_Multi_Filter/Notify_Push_Supplier.cpp:
+ * orbsvcs/tests/Notify/Structured_Multi_Filter/Struct_Multi_Filter.mpc:
+ * orbsvcs/tests/Notify/Structured_Multi_Filter/Structured_Consumer.cpp:
+ * orbsvcs/tests/Notify/Structured_Multi_Filter/Structured_Supplier.cpp:
+ * orbsvcs/tests/Notify/Structured_Multi_Filter/notify.conf:
+ * orbsvcs/tests/Notify/Structured_Multi_Filter/run_test.pl:
+ * orbsvcs/tests/Notify/Test_Filter/RT_Test_Filter.h:
+ * orbsvcs/tests/Notify/Test_Filter/RT_Test_Filter.cpp:
+ * orbsvcs/tests/Notify/Test_Filter/RT_Test_FilterFactory.h:
+ * orbsvcs/tests/Notify/ThreadPool/consumer.conf:
+ * orbsvcs/tests/Notify/ThreadPool/notify.conf:
+ * orbsvcs/tests/Notify/ThreadPool/run_test.pl:
+ * orbsvcs/tests/Notify/ThreadPool/supplier.conf:
+ * orbsvcs/tests/Notify/XML_Persistence/main.cpp:
+ * orbsvcs/tests/Notify/XML_Persistence/run_test.pl:
+ * orbsvcs/tests/Notify/XML_Persistence/svc.conf:
+ * orbsvcs/tests/Notify/lib/Command.cpp:
+ * orbsvcs/tests/Notify/lib/Consumer_T.h:
+ * orbsvcs/tests/Notify/lib/Consumer_T.cpp:
+ * orbsvcs/tests/Notify/lib/Driver.h:
+ * orbsvcs/tests/Notify/lib/Driver.cpp:
+ * orbsvcs/tests/Notify/lib/EventChannel_Command.cpp:
+ * orbsvcs/tests/Notify/lib/Notify_Test_Client.h:
+ * orbsvcs/tests/Notify/lib/Notify_Test_Client.cpp:
+ * orbsvcs/tests/Notify/lib/Options_Parser.cpp:
+ * orbsvcs/tests/Notify/lib/Peer_T.h:
+ * orbsvcs/tests/Notify/lib/Peer_T.cpp:
+ * orbsvcs/tests/Notify/lib/Periodic_Supplier.cpp:
+ * orbsvcs/tests/Notify/lib/PushConsumer.cpp:
+ * orbsvcs/tests/Notify/lib/PushSupplier.cpp:
+ * orbsvcs/tests/Notify/lib/README:
+ * orbsvcs/tests/Notify/lib/SequencePushConsumer.cpp:
+ * orbsvcs/tests/Notify/lib/SequencePushSupplier.cpp:
+ * orbsvcs/tests/Notify/lib/StructuredPushConsumer.cpp:
+ * orbsvcs/tests/Notify/lib/StructuredPushSupplier.cpp:
+ * orbsvcs/tests/Notify/lib/Supplier_T.h:
+ * orbsvcs/tests/Notify/lib/Supplier_T.cpp:
+ * orbsvcs/tests/Notify/lib/Task_Callback.h:
+ * orbsvcs/tests/Notify/lib/Task_Stats.inl:
+ * orbsvcs/tests/Notify/lib/Task_Stats.cpp:
+ * orbsvcs/tests/Notify/performance-tests/Filter/Notify_Sequence_Push_Consumer.h:
+ * orbsvcs/tests/Notify/performance-tests/Filter/Notify_Sequence_Push_Consumer.cpp:
+ * orbsvcs/tests/Notify/performance-tests/Filter/Notify_Structured_Push_Consumer.h:
+ * orbsvcs/tests/Notify/performance-tests/Filter/Notify_Structured_Push_Consumer.cpp:
+ * orbsvcs/tests/Notify/performance-tests/Filter/Sequence_Consumer.cpp:
+ * orbsvcs/tests/Notify/performance-tests/Filter/Sequence_Supplier.cpp:
+ * orbsvcs/tests/Notify/performance-tests/Filter/Structured_Consumer.cpp:
+ * orbsvcs/tests/Notify/performance-tests/Filter/Structured_Supplier.cpp:
+ * orbsvcs/tests/Notify/performance-tests/Filter/common.cpp:
+ * orbsvcs/tests/Notify/performance-tests/Filter/go.idl:
+ * orbsvcs/tests/Notify/performance-tests/Filter/notify.conf:
+ * orbsvcs/tests/Notify/performance-tests/Filter/notify.conf.xml:
+ * orbsvcs/tests/Notify/performance-tests/Filter/run_test.pl:
+ * orbsvcs/tests/Notify/performance-tests/RedGreen/RedGreen_Test.h:
+ * orbsvcs/tests/Notify/performance-tests/RedGreen/listener.conf:
+ * orbsvcs/tests/Notify/performance-tests/RedGreen/listener.conf.xml:
+ * orbsvcs/tests/Notify/performance-tests/RedGreen/lookup.conf:
+ * orbsvcs/tests/Notify/performance-tests/RedGreen/main.cpp:
+ * orbsvcs/tests/Notify/performance-tests/RedGreen/reactive.conf:
+ * orbsvcs/tests/Notify/performance-tests/RedGreen/run_test.pl:
+ * orbsvcs/tests/Notify/performance-tests/RedGreen/svc.conf:
+ * orbsvcs/tests/Notify/performance-tests/Throughput/Throughput.h:
+ * orbsvcs/tests/Notify/performance-tests/Throughput/Throughput.cpp:
+ * orbsvcs/tests/Notify/performance-tests/scripts/1_Path_Period_0_Lanes/Load_0/supplier.conf:
+ * orbsvcs/tests/Notify/performance-tests/scripts/1_Path_Period_0_Lanes/Load_10/supplier.conf:
+ * orbsvcs/tests/Notify/performance-tests/scripts/1_Path_Period_0_Lanes/Load_15/supplier.conf:
+ * orbsvcs/tests/Notify/performance-tests/scripts/1_Path_Period_0_Lanes/Load_20/supplier.conf:
+ * orbsvcs/tests/Notify/performance-tests/scripts/1_Path_Period_0_Lanes/Load_25/supplier.conf:
+ * orbsvcs/tests/Notify/performance-tests/scripts/1_Path_Period_0_Lanes/Load_30/supplier.conf:
+ * orbsvcs/tests/Notify/performance-tests/scripts/1_Path_Period_0_Lanes/Load_35/supplier.conf:
+ * orbsvcs/tests/Notify/performance-tests/scripts/1_Path_Period_0_Lanes/Load_40/supplier.conf:
+ * orbsvcs/tests/Notify/performance-tests/scripts/1_Path_Period_0_Lanes/Load_45/supplier.conf:
+ * orbsvcs/tests/Notify/performance-tests/scripts/1_Path_Period_0_Lanes/Load_5/supplier.conf:
+ * orbsvcs/tests/Notify/performance-tests/scripts/1_Path_Period_0_Lanes/Load_50/supplier.conf:
+ * orbsvcs/tests/Notify/performance-tests/scripts/1_Path_Period_0_Lanes/README:
+ * orbsvcs/tests/Notify/performance-tests/scripts/1_Path_Period_0_Lanes/consumer.conf:
+ * orbsvcs/tests/Notify/performance-tests/scripts/1_Path_Period_0_Lanes/run_all.pl:
+ * orbsvcs/tests/Notify/performance-tests/scripts/1_Path_Period_0_Lanes/run_test.pl:
+ * orbsvcs/tests/Notify/performance-tests/scripts/3_Path_Period_10ms_Lanes/Load_0/supplier.conf:
+ * orbsvcs/tests/Notify/performance-tests/scripts/3_Path_Period_10ms_Lanes/Load_10/supplier.conf:
+ * orbsvcs/tests/Notify/performance-tests/scripts/3_Path_Period_10ms_Lanes/Load_15/supplier.conf:
+ * orbsvcs/tests/Notify/performance-tests/scripts/3_Path_Period_10ms_Lanes/Load_20/supplier.conf:
+ * orbsvcs/tests/Notify/performance-tests/scripts/3_Path_Period_10ms_Lanes/Load_25/supplier.conf:
+ * orbsvcs/tests/Notify/performance-tests/scripts/3_Path_Period_10ms_Lanes/Load_30/supplier.conf:
+ * orbsvcs/tests/Notify/performance-tests/scripts/3_Path_Period_10ms_Lanes/Load_35/supplier.conf:
+ * orbsvcs/tests/Notify/performance-tests/scripts/3_Path_Period_10ms_Lanes/Load_40/supplier.conf:
+ * orbsvcs/tests/Notify/performance-tests/scripts/3_Path_Period_10ms_Lanes/Load_45/supplier.conf:
+ * orbsvcs/tests/Notify/performance-tests/scripts/3_Path_Period_10ms_Lanes/Load_5/supplier.conf:
+ * orbsvcs/tests/Notify/performance-tests/scripts/3_Path_Period_10ms_Lanes/Load_50/supplier.conf:
+ * orbsvcs/tests/Notify/performance-tests/scripts/3_Path_Period_10ms_Lanes/README:
+ * orbsvcs/tests/Notify/performance-tests/scripts/3_Path_Period_10ms_Lanes/consumer.conf:
+ * orbsvcs/tests/Notify/performance-tests/scripts/3_Path_Period_10ms_Lanes/run_all.pl:
+ * orbsvcs/tests/Notify/performance-tests/scripts/3_Path_Period_10ms_Lanes/run_test.pl:
+ * orbsvcs/tests/Notify/performance-tests/scripts/Max_Throughput/2_Hops/consumer.conf:
+ * orbsvcs/tests/Notify/performance-tests/scripts/Max_Throughput/2_Hops/run_test.pl:
+ * orbsvcs/tests/Notify/performance-tests/scripts/Max_Throughput/2_Hops/supplier.conf:
+ * orbsvcs/tests/Notify/performance-tests/scripts/Max_Throughput/2_Hops_RTCORBA/consumer.conf:
+ * orbsvcs/tests/Notify/performance-tests/scripts/Max_Throughput/2_Hops_RTCORBA/run_test.pl:
+ * orbsvcs/tests/Notify/performance-tests/scripts/Max_Throughput/2_Hops_RTCORBA/supplier.conf:
+ * orbsvcs/tests/Notify/performance-tests/scripts/Max_Throughput/3_Hops/consumer.conf:
+ * orbsvcs/tests/Notify/performance-tests/scripts/Max_Throughput/3_Hops/relay.conf:
+ * orbsvcs/tests/Notify/performance-tests/scripts/Max_Throughput/3_Hops/run_test.pl:
+ * orbsvcs/tests/Notify/performance-tests/scripts/Max_Throughput/3_Hops/supplier.conf:
+ * orbsvcs/tests/Notify/performance-tests/scripts/Max_Throughput/3_Hops_RTCORBA/consumer.conf:
+ * orbsvcs/tests/Notify/performance-tests/scripts/Max_Throughput/3_Hops_RTCORBA/relay.conf:
+ * orbsvcs/tests/Notify/performance-tests/scripts/Max_Throughput/3_Hops_RTCORBA/run_test.pl:
+ * orbsvcs/tests/Notify/performance-tests/scripts/Max_Throughput/3_Hops_RTCORBA/supplier.conf:
+ * orbsvcs/tests/Notify/performance-tests/scripts/Max_Throughput/Colocated/colocated.conf:
+ * orbsvcs/tests/Notify/performance-tests/scripts/Max_Throughput/Colocated/run_test.pl:
+ * orbsvcs/tests/Notify/performance-tests/scripts/Max_Throughput/Colocated_RTCORBA/colocated.conf:
+ * orbsvcs/tests/Notify/performance-tests/scripts/Max_Throughput/Colocated_RTCORBA/run_test.pl:
+ * orbsvcs/tests/Notify/performance-tests/scripts/Max_Throughput/Notify/consumer.conf:
+ * orbsvcs/tests/Notify/performance-tests/scripts/Max_Throughput/Notify/run_test.pl:
+ * orbsvcs/tests/Notify/performance-tests/scripts/Max_Throughput/Notify/supplier.conf:
+ * orbsvcs/tests/Notify/performance-tests/scripts/Max_Throughput/Notify_RTCORBA/consumer.conf:
+ * orbsvcs/tests/Notify/performance-tests/scripts/Max_Throughput/Notify_RTCORBA/run_test.pl:
+ * orbsvcs/tests/Notify/performance-tests/scripts/Max_Throughput/Notify_RTCORBA/supplier.conf:
+ * orbsvcs/tests/Notify/performance-tests/scripts/Max_Throughput/README:
+ * orbsvcs/tests/Notify/performance-tests/scripts/Max_Throughput/run_all.pl:
+ * orbsvcs/tests/Notify/performance-tests/scripts/Paths_vs_Throughput/Paths_1/other_paths.conf:
+ * orbsvcs/tests/Notify/performance-tests/scripts/Paths_vs_Throughput/Paths_10/other_paths.conf:
+ * orbsvcs/tests/Notify/performance-tests/scripts/Paths_vs_Throughput/Paths_20/other_paths.conf:
+ * orbsvcs/tests/Notify/performance-tests/scripts/Paths_vs_Throughput/Paths_3/other_paths.conf:
+ * orbsvcs/tests/Notify/performance-tests/scripts/Paths_vs_Throughput/Paths_5/other_paths.conf:
+ * orbsvcs/tests/Notify/performance-tests/scripts/Paths_vs_Throughput/README:
+ * orbsvcs/tests/Notify/performance-tests/scripts/Paths_vs_Throughput/run_all.pl:
+ * orbsvcs/tests/Notify/performance-tests/scripts/Paths_vs_Throughput/run_high_path.pl:
+ * orbsvcs/tests/Notify/performance-tests/scripts/Paths_vs_Throughput/run_notify.pl:
+ * orbsvcs/tests/Notify/performance-tests/scripts/Paths_vs_Throughput/run_other_paths.pl:
+ * orbsvcs/tests/Notify/performance-tests/scripts/Paths_vs_Throughput/run_test.pl:
+ * orbsvcs/tests/Notify/performance-tests/scripts/run_all.pl:
+ * orbsvcs/tests/Notify/MT_Dispatching/notify_mtlistener.conf:
+ * orbsvcs/tests/Notify/MT_Dispatching/notify_mtlistener.conf.xml:
+ * orbsvcs/tests/Notify/Structured_Filter/control.idl:
+ * orbsvcs/tests/Notify/Structured_Multi_Filter/control.idl:
+
+ Dave G also refactored the tests somewhat to resolve various problems.
+ Many tests were rewritten to more fully test the broken QoS features.
+
+
+Fri Jul 1 17:46:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tests/Portable_Interceptors/AMI/PI_AMI.mpc:
+ By accident ami was removed as base project of server
+
+Fri Jul 1 17:04:50 UTC 2005 Jeff Parsons <j.parsons@vanderbilt.edu>
+
+ * TAO_IDL/be/be_visitor_sequence/sequence_cs.cpp:
+
+ When generating the base class name in the constructor of
+ a sequence, changed the call to be_sequence::gen_base_class_name
+ to pass the current scope (as is already done for the same call
+ in the stub header visitor) instead of the global scope. This
+ change fixes a problem with nested anonymous sequences, for
+ example, 'sequence<sequence<short> >, in the generated
+ constructor initialization list.
+
+Fri Jul 1 11:33:12 2005 Chad Elliott <elliott_c@ociweb.com>
+
+ * TAO_IDL/be/be_helper.cpp:
+ * TAO_IDL/be/be_visitor_arg_traits.cpp:
+ * TAO_IDL/be/be_visitor_traits.cpp:
+ * TAO_IDL/be_include/be_helper.h:
+
+ When generating template specializations, do not add the stream
+ type suffix. This allows users to combine the idl generated .cpp
+ files into one which with some compilers decreases build times.
+
+Fri Jul 1 15:16:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * orbsvcs/tests/AVStreams/Full_Profile/run_test.pl:
+ * orbsvcs/tests/AVStreams/Asynch_Three_Stage/run_test.pl:
+ * orbsvcs/tests/AVStreams/Component_Switching/run_test.pl:
+ * orbsvcs/tests/AVStreams/Multicast/run_test.pl:
+ * orbsvcs/tests/AVStreams/Pluggable/run_test.pl:
+ * orbsvcs/tests/AVStreams/Simple_Three_Stage/run_test.pl:
+ Cleanup generated test files at the start, there can be an old file
+ when things failed in the previous run
+
+Fri Jul 1 15:02:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * performance-tests/Callback/Callback.mpc:
+ * performance-tests/Latency/AMH_Single_Threaded/Single_Threaded.mpc:
+ * performance-tests/Latency/AMI/AMI.mpc:
+ * performance-tests/Latency/Collocation/Collocation.mpc:
+ * performance-tests/Latency/DII/DII.mpc:
+ * performance-tests/Latency/DSI/DSI.mpc:
+ * performance-tests/Latency/Deferred/Deferred.mpc:
+ * performance-tests/Latency/Single_Threaded/Single_Threaded.mpc:
+ * performance-tests/Latency/Thread_Per_Connection/Thread_Per_Connection.mpc:
+ * performance-tests/Latency/Thread_Pool/Thread_Pool.mpc:
+ * performance-tests/Memory/IORsize/Memory_IORsize.mpc:
+ * performance-tests/Memory/Single_Threaded/Memory_Growth.mpc:
+ * performance-tests/POA/Create_Reference/Create_Reference.mpc:
+ * performance-tests/POA/Implicit_Activation/Implicit_Activation.mpc:
+ Use better base projects to simplify things
+
+Fri Jul 1 14:51:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tests/Portable_Interceptors/ForwardRequest/PI_ForwardRequest.mpc:
+ Added pi_server to the client project also
+
+Fri Jul 1 14:40:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tao/Invocation_Base.cpp:
+ Fixed compilation error when interceptors are disabled
+
+Fri Jul 1 07:18:44 2005 J.T. Conklin <jtc@acorntoolworks.com>
+
+ * orbsvcs/IFR_Service/Makefile.am:
+ * orbsvcs/orbsvcs/Makefile.am:
+ * tao/Makefile.am:
+
+ Regenerated.
+
+ * orbsvcs/IFR_Service/IFR_Service.mpc:
+
+ Changed so-called "convenience libraries" projects to inherit
+ from conv_lib.mpb.
+
+Fri Jul 1 13:58:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tao/PI/ClientRequestInterceptor_Adapter_Impl.h:
+ Corrected export macro
+
+Fri Jul 1 13:16:45 UTC 2005 Jeff Parsons <j.parsons@vanderbilt.edu>
+
+ * TAO_IDL/be/be_produce.cpp:
+
+ Moved the conditional initialization of the *A.cpp file stream
+ from before the stub header visitor executes to after the
+ stub header visitor and before the stub source visitor. This
+ move allows the checks for recursive types that happen in
+ the stub header visitor to complete, giving correct results
+ when the presence of recursive types is checked in the
+ generation of includes for the *A.cpp file, if it is generated.
+ The *A.cpp includes must also be generated before the *C.cpp
+ file since the *A.cpp file, if generated, will steal some
+ includes that would go in the *C.cpp file if the -GA option
+ was not used.
+
+Fri Jul 1 12:54:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * orbsvcs/orbsvcs/SSLIOP/SSLIOP_Invocation_Interceptor.h:
+ Added include of PI_Server.h
+
+ * orbsvcs/orbsvcs/SSLIOP.mpc:
+ Added PI_Server as base project
+
+Fri Jul 1 11:30:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tao/ClientRequestInfo.{h,cpp,inl}:
+ Doxygen fix and moved check_validity to the cpp file and removed
+ the inline file
+
+ * tao/ClientRequestInterceptor.pidl:
+ * tao/ClientRequestInterceptorA.cpp:
+ * tao/ClientRequestInterceptorC.{h,cpp}:
+ * tao/ClientRequestInterceptorS.h:
+ Moved to the PI library
+
+ * tao/ClientRequestInterceptor_Adapter.{h,cpp,inl}:
+ Made this a base class, real functionality is in the PI lib.
+ Remove the .inl file
+
+ * tao/ClientRequestInterceptor_Adapter_Factory.h:
+ New factory base for creating a ClientRequestInterceptor_Adapter
+
+ * tao/Interceptor.pidl:
+ * tao/InterceptorA.cpp:
+ * tao/InterceptorC.{h,cpp}:
+ * tao/InterceptorS.h:
+ * tao/Interceptor_List.{cpp,h}:
+ Moved to the PI lib
+
+ * tao/Invocation_Base.{h,cpp,inl}:
+ Store the PI stack size in the invocation base and handle that
+ the ClientRequestInterceptor pointer can be 0.
+
+ * tao/IORInterceptor_Adapter.h:
+ Removed several not needed forward declarations
+
+ * tao/ORB_Core.{h,cpp,i}:
+ Added methods to get the Client/Server Request interceptor adapters.
+ Added the moment an interceptor is registered an adapter will be
+ created on demand. Later on we just retrieve the pointer
+
+ * tao/PortableInterceptor.pidl:
+ * tao/PortableInterceptorC.h:
+ Updated for the moved files
+
+ * tao/RTScheduler.mpc:
+ Needs PI_Server
+
+ * tao/ServerRequestInterceptor.pidl:
+ * tao/ServerRequestInterceptorA.cpp:
+ * tao/ServerRequestInterceptorC.{h,cpp}:
+ * tao/ServerRequestInterceptorS.h:
+ Moved to the PI_Server library
+
+ * tao/ServerRequestInterceptor_Adapter.{h,cpp}:
+ New adapter
+
+ * tao/ServerRequestInterceptor_Adapter_Factory.h:
+ New factory
+
+ * tao/tao.mpc:
+ Updated for all moved files.
+
+ * tao/IORInterceptor/IORInterceptor.pidl
+ * tao/IORInterceptor/IORInterceptorC.h
+ * tao/IORInterceptor/IORInterceptor_Adapter_Impl.{h,cpp}:
+ Updated for Interceptor_List changes
+
+ * tao/Messaging/Asynch_Reply_Dispatcher.cpp:
+ Improved debug statement
+
+ * tao/PI/ClientRequestInterceptor.pidl:
+ * tao/PI/ClientRequestInterceptorA.cpp:
+ * tao/PI/ClientRequestInterceptorC.{h,cpp}:
+ * tao/PI/ClientRequestInterceptorS.h:
+ Moved from TAO lib
+
+ * tao/PI/ClientRequestInterceptor_Adapter_Impl.{h,cpp,inl}:
+ Implemented ClientRequestInterceptor Adapter which calls the
+ interceptors
+ * tao/PI/ClientRequestInterceptor_Factory_Impl.{h,cpp}:
+ Implemented factory interface.
+
+ * tao/PI/Interceptor.pidl:
+ * tao/PI/InterceptorA.cpp:
+ * tao/PI/InterceptorC.{h,cpp}:
+ * tao/PI/InterceptorS.h:
+ Moved from TAO lib
+
+ * tao/PI/Interceptor_List_T.{h,cpp}:
+ Moved from TAO lib and updated interfaces to not expose any
+ internal knowledge
+
+ * tao/PI/PI.{h,cpp}:
+ Add some process directives
+
+ * tao/PI/diff/ORBInitializer.diff
+ New diff
+
+ * tao/PI_Server/PI_Server.{h,cpp}:
+ Add some process directives
+
+ * tao/PI_Server/PS_CurrentA.cpp
+ * tao/PI_Server/PS_CurrentC.{h,cpp}:
+ Regenerated
+
+ * tao/PI_Server/ServerInterceptorAdapter.{h,cpp}:
+ From portableserver library, adapter that invokes server
+ request interceptors
+
+ * tao/PI_Server/ServerRequestInterceptor.pidl
+ * tao/PI_Server/ServerRequestInterceptorA.cpp
+ * tao/PI_Server/ServerRequestInterceptorC.cpp
+ * tao/PI_Server/ServerRequestInterceptorC.h
+ * tao/PI_Server/ServerRequestInterceptorS.h
+ Moved from TAO lib
+
+ * tao/PI_Server/ServerRequestInterceptor_Factory_Impl.{h,cpp}:
+ New factory to create an instance of the adapter
+
+ * tao/PortableServer/Object_Adapter.cpp:
+ * tao/PortableServer/Upcall_Wrapper.cpp:
+ Be aware the Server Request Interceptor adapter is a pointer and
+ can be zero
+
+ * tao/PortableServer/ServerInterceptorAdapter.{h,cpp,inl}:
+ Removed, moved to the PI_Server lib
+
+ * tao/PortableServer/ServerRequestInfo.{h,inl}:
+ Export this classes, need it from the PI_Server lib
+
+ * tao/RTCORBA/RTCORBAA.cpp
+ * tao/RTCORBA/RTCORBAC.h
+ Regenerated
+
+ * tao/RTScheduling/RTScheduler.pidl
+ * tao/RTScheduling/RTSchedulerA.cpp
+ * tao/RTScheduling/RTSchedulerC.h
+ * tao/RTScheduling/Request_Interceptor.h
+ Updated for PI changes
+
+ * tests/Bug_1495_Regression/interceptors.cpp
+ * tests/Bug_1495_Regression/interceptors.h
+ * tests/Portable_Interceptors/Benchmark/interceptors.cpp
+ * tests/Portable_Interceptors/Benchmark/interceptors.h
+ * tests/Portable_Interceptors/Dynamic/interceptors.cpp
+ * tests/Portable_Interceptors/Dynamic/interceptors.h
+ * tests/Portable_Interceptors/Service_Context_Manipulation/interceptors.cpp
+ * tests/Portable_Interceptors/Service_Context_Manipulation/interceptors.h
+ * tests/Portable_Interceptors/Bug_1559/interceptors.cpp
+ * tests/Portable_Interceptors/Bug_1559/interceptors.h
+ Removed these files, replaced by seperate client/server files below
+
+ * tests/Bug_1495_Regression/client_interceptor.cpp
+ * tests/Bug_1495_Regression/client_interceptor.h
+ * tests/Bug_1495_Regression/server_interceptor.cpp
+ * tests/Bug_1495_Regression/server_interceptor.h
+ * tests/Portable_Interceptors/Benchmark/client_interceptors.cpp
+ * tests/Portable_Interceptors/Benchmark/client_interceptors.h
+ * tests/Portable_Interceptors/Benchmark/server_interceptors.cpp
+ * tests/Portable_Interceptors/Benchmark/server_interceptors.h
+ * tests/Portable_Interceptors/Bug_1559/client_interceptor.cpp
+ * tests/Portable_Interceptors/Bug_1559/client_interceptor.h
+ * tests/Portable_Interceptors/Bug_1559/server_interceptor.cpp
+ * tests/Portable_Interceptors/Bug_1559/server_interceptor.h
+ * tests/Portable_Interceptors/Dynamic/client_interceptor.cpp
+ * tests/Portable_Interceptors/Dynamic/client_interceptor.h
+ * tests/Portable_Interceptors/Dynamic/server_interceptor.cpp
+ * tests/Portable_Interceptors/Dynamic/server_interceptor.h
+ * tests/Portable_Interceptors/Service_Context_Manipulation/client_interceptor.cpp
+ * tests/Portable_Interceptors/Service_Context_Manipulation/client_interceptor.h
+ * tests/Portable_Interceptors/Service_Context_Manipulation/server_interceptor.cpp
+ * tests/Portable_Interceptors/Service_Context_Manipulation/server_interceptor.h
+ New files
+
+ * tests/Bug_1495_Regression/Bug_1495.mpc
+ * tests/Bug_1495_Regression/Server_ORBInitializer.cpp
+ * tests/Bug_1495_Regression/Server_ORBInitializer.h
+ * tests/Bug_1495_Regression/Threaded_Server.cpp
+ * tests/Portable_Interceptors/AMI/Client_Interceptor.h
+ * tests/Portable_Interceptors/AMI/PI_AMI.mpc
+ * tests/Portable_Interceptors/AMI/Server_Interceptor.h
+ * tests/Portable_Interceptors/Benchmark/Client_ORBInitializer.cpp
+ * tests/Portable_Interceptors/Benchmark/PI_Benchmark.mpc
+ * tests/Portable_Interceptors/Benchmark/Server_ORBInitializer.cpp
+ * tests/Portable_Interceptors/Benchmark/client.cpp
+ * tests/Portable_Interceptors/Benchmark/server.cpp
+ * tests/Portable_Interceptors/Bug_1559/Bug_1559.mpc
+ * tests/Portable_Interceptors/Bug_1559/Client_ORBInitializer.cpp
+ * tests/Portable_Interceptors/Bug_1559/Server_ORBInitializer.cpp
+ * tests/Portable_Interceptors/Bug_1559/Server_ORBInitializer.h
+ * tests/Portable_Interceptors/Bug_1559/client.cpp
+ * tests/Portable_Interceptors/Bug_1559/server.cpp
+ * tests/Portable_Interceptors/Bug_2088/Bug_2088.mpc
+ * tests/Portable_Interceptors/Collocated/Dynamic/PI_Dynamic.mpc
+ * tests/Portable_Interceptors/Collocated/Dynamic/interceptors.h
+ * tests/Portable_Interceptors/Collocated/Service_Context_Manipulation/PI_Svc_Context_Manip.mpc
+ * tests/Portable_Interceptors/Collocated/Service_Context_Manipulation/interceptors.h
+ * tests/Portable_Interceptors/Dynamic/Echo_Client_ORBInitializer.cpp
+ * tests/Portable_Interceptors/Dynamic/Echo_Server_ORBInitializer.cpp
+ * tests/Portable_Interceptors/Dynamic/PI_Dynamic.mpc
+ * tests/Portable_Interceptors/Dynamic/client.cpp
+ * tests/Portable_Interceptors/Dynamic/server.cpp
+ * tests/Portable_Interceptors/ForwardRequest/Client_Request_Interceptor.h
+ * tests/Portable_Interceptors/ForwardRequest/PI_ForwardRequest.mpc
+ * tests/Portable_Interceptors/ForwardRequest/Server_Request_Interceptor.h
+ * tests/Portable_Interceptors/ForwardRequest/test.idl
+ * tests/Portable_Interceptors/IORInterceptor/PI_IORInterceptor.mpc
+ * tests/Portable_Interceptors/ORB_Shutdown/PI_ORB_Shutdown.mpc
+ * tests/Portable_Interceptors/ORB_Shutdown/Server_Request_Interceptor.h
+ * tests/Portable_Interceptors/PICurrent/ClientRequestInterceptor.h
+ * tests/Portable_Interceptors/PICurrent/ClientRequestInterceptor2.h
+ * tests/Portable_Interceptors/PICurrent/PI_PICurrent.mpc
+ * tests/Portable_Interceptors/PICurrent/ServerRequestInterceptor.h
+ * tests/Portable_Interceptors/Request_Interceptor_Flow/Client_Request_Interceptor.h
+ * tests/Portable_Interceptors/Request_Interceptor_Flow/PI_Request_Interceptor_Flow.mpc
+ * tests/Portable_Interceptors/Request_Interceptor_Flow/Request_Interceptor.h
+ * tests/Portable_Interceptors/Request_Interceptor_Flow/Server_Request_Interceptor.h
+ * tests/Portable_Interceptors/Request_Interceptor_Flow/client.cpp
+ * tests/Portable_Interceptors/Service_Context_Manipulation/Client_ORBInitializer.cpp
+ * tests/Portable_Interceptors/Service_Context_Manipulation/PI_Svc_Context_Manip.mpc
+ * tests/Portable_Interceptors/Service_Context_Manipulation/Server_ORBInitializer.cpp
+ * tests/Portable_Interceptors/Service_Context_Manipulation/client.cpp
+ * tests/Portable_Interceptors/Service_Context_Manipulation/server.cpp
+ * tests/RTCORBA/Client_Propagated/interceptors.h
+ * orbsvcs/examples/FaultTolerance/RolyPoly/ReplicaController.h
+ * orbsvcs/examples/FaultTolerance/RolyPoly/RolyPoly.mpc
+ * orbsvcs/examples/LoadBalancing/LoadBalancing.mpc
+ * orbsvcs/examples/LoadBalancing/ServerRequestInterceptor.h
+ * orbsvcs/orbsvcs/CosLoadBalancing.mpc
+ * orbsvcs/orbsvcs/FTORB.mpc
+ * orbsvcs/orbsvcs/FaultTolerance.mpc
+ * orbsvcs/orbsvcs/FtRtEvent.mpc
+ * orbsvcs/orbsvcs/Security.mpc
+ * orbsvcs/orbsvcs/FaultTolerance/FT_ClientRequest_Interceptor.h
+ * orbsvcs/orbsvcs/FaultTolerance/FT_ServerRequest_Interceptor.h
+ * orbsvcs/orbsvcs/FtRtEvent/ClientORB/FTRT_ClientORB_Interceptor.h
+ * orbsvcs/orbsvcs/FtRtEvent/EventChannel/ForwardCtrlServerInterceptor.h
+ * orbsvcs/orbsvcs/FtRtEvent/EventChannel/FtEventServiceInterceptor.h
+ * orbsvcs/orbsvcs/FtRtEvent/EventChannel/Set_Update_Interceptor.h
+ * orbsvcs/orbsvcs/LoadBalancing/LB_ClientRequestInterceptor.h
+ * orbsvcs/orbsvcs/LoadBalancing/LB_ServerRequestInterceptor.h
+ * orbsvcs/performance-tests/LoadBalancing/LBPerf/RPS/LoadBalancing.mpc
+ * orbsvcs/performance-tests/LoadBalancing/LBPerf/RPS/ServerRequestInterceptor.h
+ * orbsvcs/tests/FaultTolerance/GroupRef_Manipulation/GroupRef_Manipulation.mpc
+ * orbsvcs/tests/FaultTolerance/GroupRef_Manipulation/test.idl
+ Update for PI change
+
+Fri Jul 1 000:27:47 UTC 2005 Jeff Parsons <j.parsons@vanderbilt.edu>
+
+ * TAO_IDL/ast/ast_exception.cpp:
+ * TAO_IDL/ast/ast_sequence.cpp:
+ * TAO_IDL/ast/ast_structure.cpp:
+ * TAO_IDL/ast/ast_union.cpp:
+ * TAO_IDL/be/be_codegen.cpp:
+ * TAO_IDL/be/be_valuetype.cpp:
+ * TAO_IDL/be/be_visitor_structure/structure_ch.cpp:
+ * TAO_IDL/be/be_visitor_union/union_ch.cpp:
+ * TAO_IDL/be/be_visitor_valuetype/valuetype_ch.cpp:
+
+ Moved evaluation of the in_recursion_ member of structs unions
+ and valuetypes to happen soon enough to make the generation of
+ the file include of Recursive_Type_TypeCode.h conditional on
+ whether a recursive type has been seen or not. Thanks to
+ Ossama Othman <ossama@dre.vanderbilt.edu> for suggesting
+ the conditional include.
+
+Thu Jun 30 18:53:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tests/Bug_1551_Regression/client.cpp:
+ When we get a timeout on the client threads output an error but
+ first nicely destroy the POA and ORB before shutting down
+
+Thu Jun 30 10:21:22 2005 J.T. Conklin <jtc@acorntoolworks.com>
+
+ * orbsvcs/orbsvcs/Log/Log_i.cpp (get_current_size, get_n_records,
+ flush):
+
+ Changed argument list to use ACE_ENV_SINGLE_ARG_DECL_NOT_USED
+ instead of ACE_ENV_SINGLE_ARG_DECL, since these methods do not
+ throw exceptions.
+
+Thu Jun 30 09:50:46 2005 Phil Mesnier <mesnier_p@ociweb.com>
+
+ * tao/IIOP_Profile.cpp:
+ * tao/IIOP_Profile.h:
+ * tao/Profile.cpp:
+ * tao/Profile.h:
+ * tao/PortableServer/Default_Acceptor_Filter.cpp:
+ This restores the behavior of IIOP_Profile::encode_endpoints so
+ that it always creates only TAO_TAG_ENDPOINT component.
+ Initially, the new TAG_ALTERNATE_IIOP_ADDRESS support was added
+ to this method, with an internal test if the endpoint priority
+ was TAO_INVALID_PRIORITY or not. If it was not, both kinds of
+ tagged components were created, if the priority was invalid,
+ only the new tagged component was created. But this causes
+ trouble for RT_CORBA with multiple nics. It also generates
+ redundant components.
+
+ A new method, encode_alternate_endpoints is added to support the
+ generation of combined endpoints in non-RT ORBs. This new method
+ is called from Default_Acceptor_Filter.cpp. The base TAO_Profile
+ supplies a null implementation of encode_alternate_endpoints so
+ that existing, non-IIOP profiles don't have to be altered.
+
+ * tao/params.cpp:
+ To address the issue raised by bugzilla #2173, I've set the
+ default for using shared profiles (non-RT) to 0. This avoids a
+ side-effect of making shared profiles with endpoints that do not
+ have a priority set in an RT environment.
+
+ * tests/AlternateIIOP/run_test.pl:
+ Add an explicit -ORBUseSharedProfile 1 to the server.
+
+Thu Jun 30 09:29:56 2005 Gary Maxey <gary.maxey@hp.com>
+
+ * tao/Valuetype/StringValueC.inl
+
+ Latest attempt at getting rid of warning from gcc compiler
+
+Thu Jun 30 14:00:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tao/RTScheduling/RTSchedulerC.cpp:
+ Regenerated with the latest version of the idl compiler
+
+Thu Jun 30 13:48:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * orbsvcs/orbsvcs/Log/BasicLogFactory_i.cpp:
+ Added missing .in()
+
+Thu Jun 30 13:42:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tao/IORInterceptor/IORInfoC.cpp:
+ * tao/IORInterceptor/IORInterceptorC.cpp:
+ * tao/RTCORBA/RTCORBAC.cpp:
+ Regenerated with the latest version of the idl compiler
+
+Thu Jun 30 12:32:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tests/Any/Recursive/client.cpp:
+ Added include of TypeCodeFactory_Loader.h so that the
+ TypeCodeFactory is loaded. Fixes crashing of the test on
+ windows
+
+Thu Jun 30 11:37:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * utils/catior/catior.cpp:
+ Fixed retrieval and printing of port number in
+ cat_tag_alternate_endpoints.
+
+Wed Jun 29 20:31:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * orbsvcs/orbsvcs/Naming/Naming_Client.h:
+ Added include of naming_client.h
+
+Wed Jun 29 20:27:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tao/IOR_Parser.h:
+ Emulated exception macro fix
+
+Wed Jun 29 12:02:36 2005 Ossama Othman <ossama@dre.vanderbilt.edu>
+
+ * tao/Invocation_Base.cpp:
+
+ Moved "PortableInterceptor.h" include directive out of
+ TAO_HAS_INTERCEPTORS preprocessor block. It should always be
+ visible. Fixes errors in builds with interceptors disabled.
+
+Wed Jun 29 18:09:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * utils/catior/catior.cpp:
+ Added an extra identation for priority and priority model so that it
+ is clear they belong to a certain priority and added
+ PRIORITY_BANDED_CONNECTION_POLICY_TYPE as one of the types we
+ recognize.
+
+Wed Jun 29 10:13:54 2005 J.T. Conklin <jtc@acorntoolworks.com>
+
+ * orbsvcs/orbsvcs/Log/BasicLogFactory_i.h:
+
+ Change type of orb_ member variable from _ptr to _var.
+
+Wed Jun 29 10:00:31 2005 Gary Maxey <gary.maxey@hp.com>
+
+ * TAO/tao/Valuetype/StringValueC.inl
+
+ Change to avoid compiler warnings from some compilers.
+
+Wed Jun 29 07:22:38 2005 J.T. Conklin <jtc@acorntoolworks.com>
+
+ * TAO_IDL/Makefile.am:
+ * orbsvcs/FT_ReplicationManager/Makefile.am:
+ * orbsvcs/ImplRepo_Service/Makefile.am:
+
+ Regenerated.
+
+ * TAO_IDL/tao_idl.mpc:
+ * orbsvcs/FT_ReplicationManager/FT_ReplicationManager.mpc:
+ * orbsvcs/ImplRepo_Service/ImplRepo_Service.mpc:
+
+ Changed so-called "convenience libraries" projects to inherit
+ from conv_lib.mpb.
+
+Tue Jun 28 22:21:32 2005 Ossama Othman <ossama@dre.vanderbilt.edu>
+
+ * tao/Invocation_Base.inl (reply_received):
+ * tao/Invocation_Base.cpp (reply_received):
+
+ Moved this method out-of-line. It calls a method on its
+ TAO_ClientRequestInfo field. Inlining this method exposes the
+ unexported TAO_ClientRequestInfo class to code outside of the
+ TAO shared library, which results in "unresolved_symbol"
+ link-time errors when attempting to call
+ Invocation_Base::reply_received() directly or indirectly
+ (e.g. via TAO::Reply_Guard::~Reply_Guard()). Fixes g++ 4.0
+ link-time errors.
+
+ * tao/Synch_Invocation.h (Reply_Guard):
+
+ Improved const-correctness by making an immutable pointer member
+ "const".
+
+Tue Jun 28 20:52:22 2005 J.T. Conklin <jtc@acorntoolworks.com>
+
+ * orbsvcs/Concurrency_Service/Makefile.am:
+ * orbsvcs/CosEvent_Service/Makefile.am:
+ * orbsvcs/Dump_Schedule/Makefile.am:
+ * orbsvcs/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/LifeCycle_Service/Makefile.am:
+ * orbsvcs/LoadBalancer/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:
+
+ Regenerated.
+
+Tue Jun 28 19:51:49 2005 J.T. Conklin <jtc@acorntoolworks.com>
+
+ * TAO_IDL/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/orbsvcs/Makefile.am:
+
+ Regenerated.
+
+ * orbsvcs/orbsvcs/CosNaming.mpc:
+ * orbsvcs/orbsvcs/CosNotification.mpc:
+ * orbsvcs/orbsvcs/CosTrading.mpc:
+ * orbsvcs/orbsvcs/DsEventLogAdmin.mpc:
+ * orbsvcs/orbsvcs/DsLogAdmin.mpc:
+ * orbsvcs/orbsvcs/DsNotifyLogAdmin.mpc:
+
+ Added a *_IDL project, currently only for automake builds, that
+ only compiles the *.idl files. This ensures that all generated
+ files will be included in the lists of sources, headers,
+ inlines, templates, etc. instead of only those used in the stub
+ libraries. Other build types continue to compile *.idl files as
+ part of the stub library projects. When this is prefected, most
+ build methods can use the automake build mechanism.
+
+ * orbsvcs/orbsvcs/CosProperty.mpc:
+
+ Added missing *.h, *.inl, and *S_T.* files to Header_Files,
+ Inline_Files, and Template_Files so that they're installed.
+
+ * orbsvcs/orbsvcs/SSLIOP.mpc:
+
+ Added explicit Header_Files and Inline_Files sections so all
+ files are installed.
+
+Tue Jun 28 16:11:50 2005 Gary Maxey <gary.maxey@hp.com>
+
+ * TAO_IDL/be/be_visitor_interface/any_op_ch.cpp
+ * TAO_IDL/be/be_visitor_interface/any_op_cs.cpp
+ * TAO_IDL/be/be_visitor_interface_fwd/any_op_ch.cpp
+ * TAO_IDL/be/be_visitor_valuebox/any_op_ch.cpp
+ * TAO_IDL/be/be_visitor_valuebox/any_op_cs.cpp
+ * TAO_IDL/be/be_visitor_valuetype/any_op_ch.cpp
+ * TAO_IDL/be/be_visitor_valuetype/any_op_cs.cpp
+ * TAO_IDL/be/be_visitor_valuetype_fwd/any_op_ch.cpp
+
+ Backing out namespace code generation change of Mon Jun 27
+ for now due to problems getting it to work across multiple
+ compilers.
+
+Tue Jun 28 13:31:01 2005 Gary Maxey <gary.maxey@hp.com>
+
+ * TAO/tao/Valuetype/StringValueC.cpp
+ Change to allow operation in non-exception environments
+
+Tue Jun 28 10:05:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tao/Dynamic_ParameterC.h:
+ Remove generated include of TypeCode.h. This seems to cause problems
+ in some builds.
+
+Tue Jun 28 07:22:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tao/Object.cpp (_get_orb):
+ Return the orb related to the TAO_Stub, the orb_core_ member
+ could sometimes be zero. Thanks to Bala for giving feedback
+ on this.
+
+Mon Jun 27 14:54:53 2005 J.T. Conklin <jtc@acorntoolworks.com>
+
+ * orbsvcs/orbsvcs/Makefile.am:
+ * tao/Makefile.am:
+
+ Regenerated.
+
+Mon Jun 27 13:54:27 2005 Gary Maxey <gary.maxey@hp.com>
+
+ * TAO_IDL/be/be_util.cpp
+ * TAO_IDL/be_include/be_util.h
+ * TAO_IDL/be/be_visitor_interface.cpp
+ * TAO_IDL/be/be_visitor_interface_fwd.cpp
+ * TAO_IDL/be/be_visitor_valuebox.cpp
+ * TAO_IDL/be/be_visitor_valuetype.cpp
+ * TAO_IDL/be/be_visitor_valuetype_fwd.cpp
+ * TAO_IDL/be/be_visitor_interface/any_op_ch.cpp
+ * TAO_IDL/be/be_visitor_interface/any_op_cs.cpp
+ * TAO_IDL/be/be_visitor_interface_fwd/any_op_ch.cpp
+ * TAO_IDL/be/be_visitor_valuebox/any_op_ch.cpp
+ * TAO_IDL/be/be_visitor_valuebox/any_op_cs.cpp
+ * TAO_IDL/be/be_visitor_valuetype/any_op_ch.cpp
+ * TAO_IDL/be/be_visitor_valuetype/any_op_cs.cpp
+ * TAO_IDL/be/be_visitor_valuetype_fwd/any_op_ch.cpp
+
+ When generating Any insertion and extraction operators put them
+ in a namespace that corresponds to their enclosing module (if
+ any). Addresses problem reported in Bugzilla report #2071.
+
+Mon Jun 27 13:08:01 2005 Gary Maxey <gary.maxey@hp.com>
+
+ * tao/Valuetype/ValueBase.cpp:
+ Added missing copy constructor implementation
+
+ * TAO/tao/Valuetype/StringValueC.inl
+ Change to avoid warnings by some compilers
+
+Mon Jun 27 12:19:01 2005 Douglas C. Schmidt <schmidt@cs.wustl.edu>
+
+ * orbsvcs/orbsvcs/FaultTolerance/FT_ClientRequest_Interceptor.cpp
+ (TAO): Changed the comment to "Using default value of 1.5
+ seconds". Thanks to Simon Massey and Bala for resolving this.
+
+Mon Jun 27 11:09:34 2005 Chad Elliott <elliott_c@ociweb.com>
+
+ * tests/Exposed_Policies/Policy_Verifier.h:
+ * tests/Exposed_Policies/Policy_Verifier.cpp:
+ * tests/Exposed_Policies/client.cpp:
+
+ Modified this test to not run if the initialization failed. This
+ avoids a core dump.
+
+ * tests/Exposed_Policies/run_test.pl:
+
+ Remove the ior files before running the server and cut the wait
+ times in half.
+
+Mon Jun 27 09:55:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * orbsvcs/orbsvcs/RTCosScheduling.mpc:
+ Added requires dummy_label. The RTCosScheduling library uses
+ a non compliant way to register its interceptors. This is
+ causing problems with the PI refactory so disable the building
+ of this lib until that has been fixed. See also bugzilla 2163.
+
+Mon Jun 27 09:40:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * TAO_IDL/be_include/be_visitor_operation/ami_cs.h:
+ * TAO_IDL/be/be_visitor_operation/ami_cs.cpp:
+ Removed gen_marshal_and_invoke method. It wasn't used and contained
+ a lot of generation of old code that we don't use anymore
+
+Mon Jun 27 09:05:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tao/Policy_Validator.h:
+ Fixed small typo in comment
+
+Mon Jun 27 08:57:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tao/Valuetype/ValueBase.cpp:
+ Fixed implicit conversion warning and use ACE_OS::strcmp instead of
+ strcmp directly
+
+Mon Jun 27 07:48:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * TAO/tao/*C.{h,cpp,inl}:
+ * TAO/tao/*A.cpp:
+ * TAO/tao/PortableServer/*C.{h,cpp,inl}:
+ * TAO/tao/PortableServer/*A.cpp:
+ * TAO/tao/Messaging/*C.{h,cpp,inl}:
+ * TAO/tao/Messaging*A.cpp:
+ Regenerated
+
+Sat Jun 25 06:39:03 2005 Gary Maxey <gary.maxey@hp.com>
+
+ * TAO/tao/Valuetype/StringValueC.inl
+ Change to avoid warnings by some compilers
+
+Sat Jun 25 06:49:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tao/PortableServer/AdapterActivatorC.cpp:
+ * tao/PortableServer/ForwardRequestC.cpp:
+ * tao/PortableServer/IdAssignmentPolicyC.cpp:
+ Regenerated to see what the footprint results are from the latest idl
+ compiler change
+
+Fri Jun 24 23:11:45 2005 J.T. Conklin <jtc@acorntoolworks.com>
+
+ * tao/Messaging/TAO_Messaging.pc.in:
+ * tao/RTPortableServer/TAO_RTPortableServer.pc.in:
+
+ Update with current list of dependencies based on values from
+ MPC base project files.
+
+ * tao/PI_Server.mpc:
+
+ Added Pkgconfig_Files definition.
+
+ * tao/PI_Server/TAO_PI_Server.pc.in:
+
+ New file, pkg-config *.pc template for TAO_PI_Server library.
+
+Fri Jun 24 22:50:07 2005 J.T. Conklin <jtc@acorntoolworks.com>
+
+ * TAO_IDL/Makefile.am:
+ * tao/Makefile.am:
+
+ Regenerated.
+
+Fri Jun 24 13:15:03 2005 Gary Maxey <gary.maxey@hp.com>
+
+ * TAO_IDL/be/be_codegen.cpp
+ Generated additional include files in stub header for Value Box
+
+ * TAO/tao/Valuetype/StringValue.pidl
+ * TAO/tao/Valuetype/StringValueC.cpp
+ * TAO/tao/Valuetype/StringValueC.h
+ * TAO/tao/Valuetype/StringValueC.inl
+ Standard OMG Value Box Definitions
+
+Fri Jun 24 19:42:03 UTC 2005 Jeff Parsons <j.parsons@vanderbilt.edu>
+
+ * TAO_IDL/be/be_visitor_interface/interface_cs.cpp:
+
+ For local interfaces, changed generated code for _narrow()
+ and _unchecked_narrow() methods. For local interfaces, all
+ that needs to be done is return a duplicate of a
+ dynamic_cast<>, for both methods. Thanks to Johnny Willemsen
+ <jwillemsen@remedy.nl> for pointing out the opportunity to
+ shrink generated code, and to Ossama Othman
+ <ossama@dre.vanderbilt.edu> for an informative discussion on
+ the possible benefits of inlining these methods.
+
+Fri Jun 24 13:51:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tao/ClientRequestInfo.{cpp,inl}:
+ Moved a few methods out of the inline file to the cpp file
+
+Fri Jun 24 12:30:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tao/TAO_Server_Request.h:
+ Corrected ifdef guards in this file to match the real filename
+
+ * tao/Dynamic_Adapter.h:
+ Removed forward declaration of TAO_GIOP_Twoway_Invocation
+
+ * tao/DynamicInterface/DII_Invocation.{h,cpp,inl}:
+ The inl file has some constructors that are ifdef'd with #if 0.
+ These used a base class that is not there, so zapped them and
+ because the inl file is now empty, removed that from the archive
+
+Fri Jun 24 06:56:11 2005 Chad Elliott <elliott_c@ociweb.com>
+
+ * orbsvcs/ImplRepo_Service/ImR_Locator_i.cpp:
+
+ Avoid ambiguity error from Visual C++ 6.0.
+
+Fri Jun 24 11:12:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tao/ClientRequestInfo.{h,cpp,inl}:
+ * tao/ClientRequestInfo_i.{h,cpp,inl}:
+ Moved the implementation from ClientRequestInfo_i to
+ ClientRequestInfo. The ClientRequestInfo was split into
+ two parts, this is causing problems with the PI refactoring
+ and after checking with Ossama we decided to merge these
+ two again. This maybe has a small performance impact
+ at the moment no interceptors are registered but that
+ will be resolved soon with the PI refactoring itself.
+
+ * tao/ClientRequestInterceptor_Adapter.{h,cpp}:
+ Updated to use TAO_ClientRequestInfo
+
+ * tao/Invocation_Base.{h,cpp}:
+ Updated to use TAO_ClientRequestInfo
+
+ * tao/ORB_Core_TSS_Resources.{h,cpp}:
+ No need anymore to store TAO_ClientRequestInfo in TSS.
+ This decouples the ClientRequestInfo from the ORB TSS which was the
+ main reason to do this.
+
+ * tao/tao.mpc:
+ Removed the ClientRequestInfo_i.{h,cpp,inl} files
+
+Fri Jun 24 10:39:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tests/Portable_Interceptors/AMI/client.cpp:
+ Added some more checks to see if things are gone fine.
+
+Fri Jun 24 09:29:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tao/ClientRequestInfo_i.{h,cpp}:
+ No need to have virtual methods, this is not a base and removed
+ the destructor using an Abstract base, it is not used
+
+Fri Jun 24 08:34:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * orbsvcs/orbsvcs/FaultTolerance/FT_Invocation_Endpoint_Selectors.h
+ * orbsvcs/orbsvcs/HTIOP/HTIOP_Connector.h
+ * tao/ClientRequestInfo.cpp
+ * tao/ClientRequestInfo.h
+ * tao/ClientRequestInfo_i.cpp
+ * tao/ClientRequestInfo_i.h
+ * tao/ClientRequestInfo_i.inl
+ * tao/Codeset_Manager.h
+ * tao/Protocols_Hooks.h
+ * tao/Stub.h
+ * tao/PortableServer/ServerRequestInfo.cpp
+ * tao/RTCORBA/RT_Endpoint_Utils.h
+ Removed TAO_GIOP_Invocation forward declaration and remarks
+ about this. This class doesn't exist anymore already for a long
+ time
+
+Fri Jun 24 07:04:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tao/Leader_Follower.h:
+ Added missing include for single threaded builds
+
+Thu Jun 23 11:02:11 2005 Chad Elliott <elliott_c@ociweb.com>
+
+ * orbsvcs/ImplRepo_Service/ImR_Locator_i.h:
+ * orbsvcs/ImplRepo_Service/ImR_Locator_i.cpp:
+
+ Use an IORTable::Locator_var instead of an INS_Locator to avoid a
+ deletion of a stack variable.
+
+Thu Jun 23 08:21:29 2005 J.T. Conklin <jtc@acorntoolworks.com>
+
+ * orbsvcs/orbsvcs/Log/Log_Compaction_Handler.cpp (handle_timeout):
+ * orbsvcs/orbsvcs/Log/Log_Flush_Handler.cpp (handle_timeout):
+
+ Catch and squelch any exceptions that might be thrown. Also
+ fixes emulated exception builds. Thanks to Simon Massey for
+ pointing out this issue.
+
+Thu Jun 23 14:14:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tao/operation_details.{h,cpp}:
+ The exception_list method should only be build when interceptors
+ are enabled
+
+Thu Jun 23 12:57:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tao/ORB_Core.{h,cpp}:
+ * tao/ORB_Core_TSS_Resources.{h,cpp}:
+ Moved ORB_Core_TSS_Resources back to its own file. Problem was
+ easier then on first sight, orbconf.h was not includes so the
+ TSS file was build without interceptor support
+
+Thu Jun 23 12:40:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tao/ORB_Core.{h,cpp}:
+ * tao/ORB_Core_TSS_Resources.{h,cpp}:
+ Moved ORB_Core_TSS_Resources to the ORB_Core file again. The
+ PI tests now break and I have not an idea why but moving it
+ back fixes it now. Will sort this out soon.
+
+Thu Jun 23 09:52:00 UTC 2005 Simon Massey <simon.massey@prismtech.com>
+
+ * TAO_IDL/be/be_visitor_valuebox/field_ci.cpp:
+ * TAO_IDL/be/be_visitor_valuebox/union_member_ci.cpp:
+
+ Replaced ACE_UNUSED_ARG() with native C++ unnamed parameters
+ in responce to Ossama's request that the macro is only used
+ in places where normal practices are not available.
+
+ * orbsvcs/IFR_Service/ifr_adding_visitor.cpp:
+
+ Removed unused arg.
+
+Wed Jun 22 18:49:03 UTC 2005 Jeff Parsons <j.parsons@vanderbilt.edu>
+
+ * tao/ORB_Core.h:
+
+ Added include of ORB_Core_TSS_Resources.h, so when the
+ ACE_TSS_TYPE tss_resources_ member is declared, there
+ will be knowledge of a default constructor.
+
+Wed Jun 22 11:34:12 2005 Gary Maxey <gary.maxey@hp.com>
+
+ * TAO_IDL/fe/y.tab.cpp
+ * TAO_IDL/fe/idl.yy
+
+ Added valuebox support
+
+Wed Jun 22 08:23:16 2005 J.T. Conklin <jtc@acorntoolworks.com>
+
+ * orbsvcs/orbsvcs/Log/Iterator_i.cpp (handle_timeout):
+
+ Catch and squelch any exceptions that might be thrown by
+ destroy(). Thanks to Don Sharp for pointing out this
+ issue.
+
+ * orbsvcs/orbsvcs/Log/Log_Compaction_Handler.h:
+ * orbsvcs/orbsvcs/Log/Log_Flush_Handler.h:
+
+ #include "ace/Time_Value.h", needed by no-inline builds. Thanks
+ to Simon Massey for pointing out this issue.
+
+ * orbsvcs/orbsvcs/Log/Log_i.cpp (set_records_attribute):
+
+ Changed method to process any excess records returned by the
+ query iterator.
+
+ * orbsvcs/orbsvcs/Log/EventLog_i.cpp:
+ * orbsvcs/orbsvcs/Log/EventLog_i.h:
+ * orbsvcs/orbsvcs/Log/NotifyLog_i.cpp:
+ * orbsvcs/orbsvcs/Log/NotifyLog_i.h:
+ * orbsvcs/orbsvcs/Log/RTEventLog_i.cpp:
+ * orbsvcs/orbsvcs/Log/RTEventLog_i.h:
+
+ Removed write_recordlist() method, as it just called
+ write_recordlist() on the base class.
+
+Wed Jun 22 14:21:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tao/ORB_Core.{h,cpp,i}:
+ * tao/ORB_Core_TSS_Resources.{h,cpp}:
+ Moved TAO_ORB_Core_TSS_Resources to its own file. Makes it much easier
+ to just see where things are used.
+
+ * tao/tao.mpc:
+ Added new files
+
+ * tao/Leader_Follower.{h,cpp,i}:
+ * tao/Leader_Follower_Flushing_Strategy.cpp:
+ * tao/LF_Connect_Strategy.cpp:
+ * tao/LF_Event.cpp LF_Strategy_Complete.cpp:
+ * tao/ORB.cpp:
+ * tao/PICurrent.cpp:
+ * tao/Thread_Lane_Resources.cpp:
+ * tao/Transport.cpp:
+ * tao/Wait_On_Leader_Follower.cpp:
+ * tao/Wait_On_LF_No_Upcall.cpp:
+ * tao/ClientRequestInterceptor_Adapter.cpp:
+ * tao/RTCORBA/Thread_Pool.cpp:
+ * tao/RTCORBA/RT_Thread_Lane_Resources_Manager.cpp:
+ * tao/RTPortableServer/RT_Collocation_Resolver.cpp:
+ * tao/RTPortableServer/RT_Servant_Dispatcher.cpp:
+ Added missing includes now we get less for free from ORB_Core
+
+Wed Jun 22 12:52:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tao/ClientRequestInfo_i.{h,cpp,inl}:
+ Removed reply_status and response_expected methods, they had a
+ comment that they need to go and they are not used in the TAO
+ libs so it is now time to zap them
+
+Wed Jun 22 12:15:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tests/Portable_Interceptors/Request_Interceptor_Flow/Request_Interceptor.cpp:
+ Added checks in the destroy that start and end interception
+ point calls must not be zero. If they are zero there is a bug
+ in TAO
+
+ * tests/Portable_Interceptors/Request_Interceptor_Flow/client.cpp:
+ * tests/Portable_Interceptors/PICurrent/client.cpp:
+ Explicitly destroy the ORB. When this is not done explicitly the
+ destroy operation of the registered interceptors is not called and
+ then our checks are not triggered in the destoy operation of the
+ registered interceptors
+
+Wed Jun 22 10:27:00 UTC 2005 Simon Massey <simon.massey@prismtech.com>
+
+ * TAO_IDL/be/be_visitor_valuebox/field_ci.cpp:
+ * TAO_IDL/be/be_visitor_valuebox/union_member_ci.cpp:
+
+ Added ACE_UNUSED_ARG() to the above files.
+
+Tue Jun 21 17:50:26 2005 Ossama Othman <ossama@dre.vanderbilt.edu>
+
+ * tao/Interceptor_List.cpp:
+
+ Include "tao/debug.h" to pull in TAO_debug_level global variable
+ declaration.
+
+Tue Jun 21 14:41:01 2005 J.T. Conklin <jtc@acorntoolworks.com>
+
+ * TAO_IDL/be/be_visitor_argument/marshal_ss.cpp:
+ * TAO_IDL/be/be_visitor_field/cdr_op_cs.cpp:
+
+ Add missing "int" return type to method definitions.
+
+ * orbsvcs/orbsvcs/Log/Log_i.cpp:
+ * orbsvcs/orbsvcs/Log/Log_i.h:
+
+ Added flush and compaction handlers to class. The flush handler
+ is scheduled when the QoS is set to QoSFlush. The compaction
+ handler is scheduled when the max record life is set.
+
+ Removed explicit calls to remove_old_records(), that is now done
+ via the compaction handler.
+
+ * orbvcs/orbsvcs/DsLogAdmin.mpc:
+
+ Added Log_Flush_Handler.cpp and Log_Compaction_Handler.cpp to
+ the DsLogAdmin_Serv project's list of Source Files.
+
+ * orbsvcs/orbsvcs/Log/Log_Flush_Handler.cpp:
+ * orbsvcs/orbsvcs/Log/Log_Flush_Handler.h:
+
+ New files. Added TAO_Log_Flush_Handler class that manages an
+ interval timer that calls flush() on the log when it fires. The
+ interval is currently set to 300 seconds. This should probably
+ be a parameter that is specified when the service is started.
+
+ * orbsvcs/orbsvcs/Log/Log_Compaction_Handler.cpp:
+ * orbsvcs/orbsvcs/Log/Log_Compaction_Handler.h:
+
+ New files. Added TAO_Log_Compaction_Handler class that manages
+ an interval timer that calls remove_old_records() on the log
+ when it fires. The interval is currently set to 60 seconds.
+ This should probably be a parameter that is specified when the
+ service is started.
+
+Tue Jun 21 14:27:12 2005 Gary Maxey <gary.maxey@hp.com>
+
+ * tao/Valuetype/ValueBase.h
+ * tao/Valuetype/ValueBase.cpp
+ Added support method for valuebox demarshalling.
+
+Tue Jun 21 13:38:23 2005 Gary Maxey <gary.maxey@hp.com>
+
+ * tao/Valuetype/Value_VarOut_T.cpp
+ Added missing add_ref in TAO_Value_Var_T assignment operator
+
+Tue Jun 21 13:35:00 2005 Gary Maxey <gary.maxey@hp.com>
+
+ * TAO_IDL/be_include/be_visitor_arg_traits.h
+ * TAO_IDL/be_include/be_visitor_argument/arglist.h
+ * TAO_IDL/be_include/be_visitor_argument/invoke_cs.h
+ * TAO_IDL/be_include/be_visitor_argument/marshal_ss.h
+ * TAO_IDL/be_include/be_visitor_argument/upcall_ss.h
+ * TAO_IDL/be_include/be_visitor_argument/vardecl_ss.h
+ * TAO_IDL/be_include/be_visitor_array/array.h
+ * TAO_IDL/be_include/be_visitor_array/cdr_op_cs.h
+ * TAO_IDL/be_include/be_visitor_exception/ctor.h
+ * TAO_IDL/be_include/be_visitor_exception/ctor_assign.h
+ * TAO_IDL/be_include/be_visitor_field/cdr_op_cs.h
+ * TAO_IDL/be_include/be_visitor_field/field_ch.h
+ * TAO_IDL/be_include/be_visitor_operation/rettype.h
+ * TAO_IDL/be_include/be_visitor_operation/rettype_return_cs.h
+ * TAO_IDL/be_include/be_visitor_sequence/buffer_type.h
+ * TAO_IDL/be_include/be_visitor_sequence/cdr_op_cs.h
+ * TAO_IDL/be_include/be_visitor_sequence/sequence_base.h
+ * TAO_IDL/be_include/be_visitor_tmplinst/arg_tmplinst.h
+ * TAO_IDL/be_include/be_visitor_tmplinst/tmplinst_cs.h
+ * TAO_IDL/be_include/be_visitor_tmplinst/tmplinst_ss.h
+ * TAO_IDL/be_include/be_visitor_typecode/alias_typecode.h
+ * TAO_IDL/be_include/be_visitor_typecode/typecode_decl.h
+ * TAO_IDL/be_include/be_visitor_typedef/typedef_ch.h
+ * TAO_IDL/be_include/be_visitor_union_branch/cdr_op_cs.h
+ * TAO_IDL/be_include/be_visitor_union_branch/private_ch.h
+ * TAO_IDL/be_include/be_visitor_union_branch/public_assign_cs.h
+ * TAO_IDL/be_include/be_visitor_union_branch/public_ch.h
+ * TAO_IDL/be_include/be_visitor_union_branch/public_ci.h
+ * TAO_IDL/be_include/be_visitor_union_branch/public_reset_cs.h
+ * TAO_IDL/be_include/be_visitor_valuetype/field_cdr_cs.h
+ * TAO_IDL/be_include/be_visitor_valuetype/field_ch.h
+ * TAO_IDL/be_include/be_visitor_valuetype/field_cs.h
+ * TAO_IDL/be/be_sequence.cpp
+ * TAO_IDL/be/be_visitor_arg_traits.cpp
+ * TAO_IDL/be/be_visitor_argument.cpp
+ * TAO_IDL/be/be_visitor_argument/arglist.cpp
+ * TAO_IDL/be/be_visitor_argument/invoke_cs.cpp
+ * TAO_IDL/be/be_visitor_argument/marshal_ss.cpp
+ * TAO_IDL/be/be_visitor_argument/upcall_ss.cpp
+ * TAO_IDL/be/be_visitor_argument/vardecl_ss.cpp
+ * TAO_IDL/be/be_visitor_array.cpp
+ * TAO_IDL/be/be_visitor_array/array.cpp
+ * TAO_IDL/be/be_visitor_array/cdr_op_cs.cpp
+ * TAO_IDL/be/be_visitor_exception.cpp
+ * TAO_IDL/be/be_visitor_exception/ctor_assign.cpp
+ * TAO_IDL/be/be_visitor_exception/exception_ctor.cpp
+ * TAO_IDL/be/be_visitor_field.cpp
+ * TAO_IDL/be/be_visitor_field/field_ch.cpp
+ * TAO_IDL/be/be_visitor_field/cdr_op_cs.cpp
+ * TAO_IDL/be/be_visitor_operation.cpp
+ * TAO_IDL/be/be_visitor_operation/rettype.cpp
+ * TAO_IDL/be/be_visitor_operation/rettype_return_cs.cpp
+ * TAO_IDL/be/be_visitor_sequence.cpp
+ * TAO_IDL/be/be_visitor_sequence/buffer_type.cpp
+ * TAO_IDL/be/be_visitor_sequence/cdr_op_cs.cpp
+ * TAO_IDL/be/be_visitor_sequence/sequence_base.cpp
+ * TAO_IDL/be/be_visitor_tmplinst.cpp
+ * TAO_IDL/be/be_visitor_tmplinst/arg_tmplinst.cpp
+ * TAO_IDL/be/be_visitor_tmplinst/tmplinst_cs.cpp
+ * TAO_IDL/be/be_visitor_tmplinst/tmplinst_ss.cpp
+ * TAO_IDL/be/be_visitor_typecode.cpp
+ * TAO_IDL/be/be_visitor_typecode/typecode_decl.cpp
+ * TAO_IDL/be/be_visitor_typecode/alias_typecode.cpp
+ * TAO_IDL/be/be_visitor_typedef.cpp
+ * TAO_IDL/be/be_visitor_typedef/typedef_ch.cpp
+ * TAO_IDL/be/be_visitor_union_branch.cpp
+ * TAO_IDL/be/be_visitor_union_branch/cdr_op_cs.cpp
+ * TAO_IDL/be/be_visitor_union_branch/private_ch.cpp
+ * TAO_IDL/be/be_visitor_union_branch/public_assign_cs.cpp
+ * TAO_IDL/be/be_visitor_union_branch/public_ch.cpp
+ * TAO_IDL/be/be_visitor_union_branch/public_ci.cpp
+ * TAO_IDL/be/be_visitor_union_branch/public_reset_cs.cpp
+ * TAO_IDL/be/be_visitor_valuetype.cpp
+ * TAO_IDL/be/be_visitor_valuetype/field_cdr_cs.cpp
+ * TAO_IDL/be/be_visitor_valuetype/field_ch.cpp
+ * TAO_IDL/be/be_visitor_valuetype/field_cs.cpp
+
+ Changes and additions to IDL compiler back-end for
+ valuebox support.
+
+Tue Jun 21 16:38:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * docs/releasenotes/rtc10_sched.html:
+ Removed remark about generated include of PortableServerS.h,
+ that is not valid anymore.
+
+Tue Jun 21 08:06:00 2005 Gary Maxey <gary.maxey@hp.com>
+
+ * TAO_IDL/be/be_visitor_valuebox/field_ch.cpp
+ * TAO_IDL/be/be_visitor_valuebox/field_ci.cpp
+ * TAO_IDL/be/be_visitor_valuebox/union_member_ci.cpp
+ * TAO_IDL/be/be_visitor_valuebox/valuebox.cpp
+ * TAO_IDL/be/be_visitor_valuebox/valuebox_ch.cpp
+ * TAO_IDL/be/be_visitor_valuebox/valuebox_ci.cpp
+ * TAO_IDL/be/be_visitor_valuebox/valuebox_cs.cpp
+ Minor changes to deal with warnings on some compilers.
+
+Tue Jun 21 12:30:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tests/RTScheduling/Current/Thread_Task.cpp:
+ Layout fixes
+
+Tue Jun 21 11:18:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tao/ORB_Core.h:
+ Added a todo for client_request_interceptors and
+ server_request_interceptors methods that these should be removed
+ when RTCosScheduling doesn't use them anymore
+
+Tue Jun 21 10:58:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tao/Interceptor_List.{h,cpp}:
+ Added destroy_interceptors method that goes through the list of
+ interceptors and calls destroy on each interceptor
+
+ * tao/IORInterceptor_Adapter.h:
+ Removed empty throw spec from destroy_interceptors and removed the
+ interceptor_list method which returns the list build up, this is
+ internal data which the outside doesn't need to have.
+
+ * tao/ORB_Core.{h,cpp} (destroy_interceptors):
+ Use the new destoy_interceptors of the Interceptor_List template
+
+ * tao/IORInterceptor/IORInterceptor_Adapter_Impl.{h,cpp}:
+ Use the new destoy_interceptors of the Interceptor_List template
+ and removed interceptor_list method
+
+Tue Jun 21 08:22:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tao/ORBInitializer_Registry_Adapter.h:
+ Added export macro.
+
+Mon Jun 20 23:17:42 2005 J.T. Conklin <jtc@acorntoolworks.com>
+
+ * orbsvcs/Logging_Service/Basic_Logging_Service/Basic_Logging_Service.cpp:
+ * orbsvcs/Logging_Service/Event_Logging_Service/Event_Logging_Service.cpp:
+ * orbsvcs/Logging_Service/Notify_Logging_Service/Notify_Logging_Service.cpp:
+ * orbsvcs/Logging_Service/RTEvent_Logging_Service/RTEvent_Logging_Service.cpp:
+
+ Fixed fuzz build errors related to missing ACE_ENV_ARG_PARAMETER
+ in call to resolve_initial_references().
+
+Mon Jun 20 21:49:02 2005 J.T. Conklin <jtc@acorntoolworks.com>
+
+ * orbsvcs/orbsvcs/Log/Iterator_i.cpp:
+ * orbsvcs/orbsvcs/Log/Iterator_i.h:
+
+ Added iterator inactivity timer that causes the iterator to self
+ destruct after 1 hour of inactivity. This should probably be a
+ parameter that is specified when the service is started.
+
+ * orbsvcs/orbsvcs/Log/Iterator_i.cpp:
+ * orbsvcs/orbsvcs/Log/Iterator_i.h:
+ * orbsvcs/orbsvcs/Log/Log_i.cpp:
+
+ Pass reactor to Iterator constructor.
+
+ * orbsvcs/Logging_Service/Basic_Logging_Service/Basic_Logging_Service.cpp:
+ * orbsvcs/Logging_Service/Event_Logging_Service/Event_Logging_Service.cpp:
+ * orbsvcs/Logging_Service/Notify_Logging_Service/Notify_Logging_Service.cpp:
+ * orbsvcs/Logging_Service/RTEvent_Logging_Service/RTEvent_Logging_Service.cpp:
+
+ Removed the debug messages that indicated the log service was
+ starting, and the name the ior was registered with the naming
+ service. TAO's other ORBservice implementations don't output
+ this sort of mundane information.
+
+Mon Jun 20 12:21:00 2005 Gary Maxey <gary.maxey@hp.com>
+
+ * TAO_IDL/be_include/be_generator.h
+ * TAO_IDL/be_include/be_valuebox.h
+ * TAO_IDL/be_include/be_visitor.h
+ * TAO_IDL/be_include/be_visitor_valuebox.h
+ * TAO_IDL/be_include/be_visitor_module/module.h
+ * TAO_IDL/be_include/be_visitor_root/root.h
+ * TAO_IDL/be_include/be_visitor_valuebox/any_op_ch.h
+ * TAO_IDL/be_include/be_visitor_valuebox/any_op_cs.h
+ * TAO_IDL/be_include/be_visitor_valuebox/cdr_op_ch.h
+ * TAO_IDL/be_include/be_visitor_valuebox/cdr_op_cs.h
+ * TAO_IDL/be_include/be_visitor_valuebox/field_ch.h
+ * TAO_IDL/be_include/be_visitor_valuebox/field_ci.h
+ * TAO_IDL/be_include/be_visitor_valuebox/union_member_ci.h
+ * TAO_IDL/be_include/be_visitor_valuebox/valuebox.h
+ * TAO_IDL/be_include/be_visitor_valuebox/valuebox_ch.h
+ * TAO_IDL/be_include/be_visitor_valuebox/valuebox_ci.h
+ * TAO_IDL/be_include/be_visitor_valuebox/valuebox_cs.h
+ * TAO_IDL/be/be_generator.cpp
+ * TAO_IDL/be/be_valuebox.cpp
+ * TAO_IDL/be/be_visitor.cpp
+ * TAO_IDL/be/be_visitor_root.cpp
+ * TAO_IDL/be/be_visitor_module.cpp
+ * TAO_IDL/be/be_visitor_valuebox.cpp
+ * TAO_IDL/be/be_visitor_module/module.cpp
+ * TAO_IDL/be/be_visitor_root/root.cpp
+ * TAO_IDL/be/be_visitor_valuebox/any_op_ch.cpp
+ * TAO_IDL/be/be_visitor_valuebox/any_op_cs.cpp
+ * TAO_IDL/be/be_visitor_valuebox/cdr_op_cs.cpp
+ * TAO_IDL/be/be_visitor_valuebox/cdr_op_ch.cpp
+ * TAO_IDL/be/be_visitor_valuebox/field_ch.cpp
+ * TAO_IDL/be/be_visitor_valuebox/field_ci.cpp
+ * TAO_IDL/be/be_visitor_valuebox/union_member_ci.cpp
+ * TAO_IDL/be/be_visitor_valuebox/valuebox.cpp
+ * TAO_IDL/be/be_visitor_valuebox/valuebox_ch.cpp
+ * TAO_IDL/be/be_visitor_valuebox/valuebox_ci.cpp
+ * TAO_IDL/be/be_visitor_valuebox/valuebox_cs.cpp
+ Changes and additions to IDL compiler back-end for
+ valuebox support.
+
+Mon Jun 20 09:18:00 2005 Gary Maxey <gary.maxey@hp.com>
+ * orbsvcs/IFR_Service/ifr_visitor.cpp
+ * orbsvcs/IFR_Service/ifr_visitor.h
+ * orbsvcs/IFR_Service/ifr_adding_visitor.cpp
+ * orbsvcs/IFR_Service/ifr_adding_visitor.h
+ Add visitors for valuebox support.
+
+Mon Jun 20 08:51:17 2005 J.T. Conklin <jtc@acorntoolworks.com>
+
+ * orbsvcs/Logging_Service/Basic_Logging_Service/Basic_Logging_Service.cpp:
+ * orbsvcs/Logging_Service/Event_Logging_Service/Event_Logging_Service.cpp:
+ * orbsvcs/Logging_Service/Notify_Logging_Service/Notify_Logging_Service.cpp:
+ * orbsvcs/Logging_Service/RTEvent_Logging_Service/RTEvent_Logging_Service.cpp:
+
+ Added missing semi-colon; bug was hidden by use of emulated
+ exception macros.
+
+Mon Jun 20 13:39:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * orbsvcs/orbsvcs/FtRtEvent.mpc:
+ Reverted change to add ami as base project and added -GC again to
+ one set of IDL files.
+
+ * orbsvcs/ImplRepo_Service/Forwarder.{h,cpp}:
+ * orbsvcs/examples/ORT/Gateway_i.h:
+ Corrected includes
+
+ * orbsvcs/ImplRepo_Service/ImplRepo_Service.mpc:
+ * orbsvcs/examples/ORT/ORT.mpc:
+ Added pi_server as base project
+
+Mon Jun 20 12:35:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tao/DynamicInterface/Dynamic_Implementation.cpp:
+ Fixed emulated exception errors related to the fact that
+ POA_Current_Impl doesn't use them anymore
+
+Mon Jun 20 11:18:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tao/PortableServer/RequestProcessingStrategyDefaultServant.cpp:
+ Fixed emulated exception errors related to the fact that
+ POA_Current_Impl doesn't use them anymore
+
+Mon Jun 20 10:46:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tao/PI_Server.mpc:
+ New MPC file to build the new PI_Server library
+
+ * examples/POA/DSI/Database_i.h:
+ * examples/POA/Default_Servant/File_i.cpp:
+ * orbsvcs/ImplRepo_Service/Forwarder.cpp:
+ * orbsvcs/orbsvcs/FtRtEvent/EventChannel/UpdateableHandler.cpp:
+ * orbsvcs/orbsvcs/FtRtEvent/Utils/FTEC_Gateway.cpp:
+ * orbsvcs/orbsvcs/IFRService/Repository_i.h:
+ * orbsvcs/tests/FtRtEvent/PushConsumer.cpp:
+ * orbsvcs/tests/FtRtEvent/PushSupplier.cpp:
+ * orbsvcs/tests/ImplRepo/scale/server_i.cpp:
+ * tests/Collocation_Opportunities/Collocation_Opportunities.cpp:
+ * tests/File_IO/File_i.cpp:
+ * tests/ORT/ServerRequestInterceptor.h:
+ * tests/POA/Current/Current.cpp:
+ * tests/POA/Persistent_ID/server.cpp:
+ * tests/POA/Policies/Policies.cpp:
+ Added include of tao/PI_Server/PI_Server.h because of the
+ pi_server refactoring. This is needed because these files
+ use functionality that is now in the pi_server lib
+
+ * tests/File_IO/File_IO.mpc:
+ * tests/ORT/ORT.mpc:
+ * tests/POA/Current/Current.mpc:
+ * tests/POA/Persistent_ID/Persistent_ID.mpc:
+ * tests/POA/Policies/Policies.mpc:
+ * tests/Portable_Interceptors/AMI/PI_AMI.mpc:
+ * tests/Collocation_Opportunities/Collocation_Opportunities.mpc:
+ * examples/POA/DSI/POA_DSI.mpc:
+ * examples/POA/Default_Servant/POA_Default_Servant.mpc:
+ * orbsvcs/ImplRepo_Service/ImplRepo_Service.mpc:
+ * orbsvcs/orbsvcs/FtRtEvent.mpc:
+ * orbsvcs/orbsvcs/IFRService.mpc:
+ * orbsvcs/tests/ImplRepo/scale/scaletest.mpc:
+ Added pi_server as base project
+
+ * tao/Messaging.mpc:
+ Added pi as base project, messaging needs pi stuff
+
+ * tao/PortableServer.mpc:
+ PortableServer is not dependent on pi anymore
+
+ * tao/TAO_Internal.cpp:
+ If the PI_Server_Loader is available, initialize it, this way
+ we get the needed services available
+
+ * tao/PortableServer/Object_Adapter_Factory.{cpp,h}:
+ No need to register the ORBInitializer, this is now in the pi_server
+ library
+
+ * tao/PortableServer/POA_Current_Impl.{h,cpp}:
+ Removed exception throw spec and environment macros. These are
+ coming from POA::Curent but are not used here and just make
+ things dependent on IDL generated code which it doesn't need
+ to be.
+
+ * tao/RTPortableServer/RT_Object_Adapter_Factory.{h,cpp}:
+ No need to register POA::Current, this is in the pi_server lib.
+ Also the adapter can be derived from TAO_Adapter_Factory
+
+ * tao/PortableServer/POA_Current.cpp
+ * tao/PortableServer/POA_Current.h
+ * tao/PortableServer/POA_Current.inl
+ * tao/PortableServer/PS_Current.pidl
+ * tao/PortableServer/PS_CurrentA.cpp
+ * tao/PortableServer/PS_CurrentC.cpp
+ * tao/PortableServer/PS_CurrentC.h
+ * tao/PortableServer/Policy_Creator_T.h
+ * tao/PortableServer/PortableServer_ORBInitializer.cpp
+ * tao/PortableServer/PortableServer_ORBInitializer.h
+ * tao/PortableServer/PortableServer_PolicyFactory.cpp
+ * tao/PortableServer/PortableServer_PolicyFactory.h
+ Removed these files, they are now in the pi_server library.
+ If you included one of these files or used the functionality
+ of the classes in one of these files, include
+ tao/PI_Server/PI_Server.h and link the new pi_server library.
+
+Sat Jun 18 18:53:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tao/CORBA_String.{h,inl}:
+ Added missing operator = (const WChar*) to WString_out. Thanks to
+ Jean-Marc Prud'Homme <jprudhomme at interstarinc dot com> for
+ reporting this and deliver the patch. This fixes bugzilla bug
+ 2159
+
+Sat Jun 18 15:04:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * orbsvcs/orbsvcs/Notify/EventChannel.cpp:
+ Fixed crashing of notication service in mt configuration
+
+Fri Jun 17 19:54:46 2005 J.T. Conklin <jtc@acorntoolworks.com>
+
+ * orbsvcs/orbsvcs/Log/LogRecordStore.h (LOG_DEFAULT_MAX_REC_LIST_LEN):
+ * orbsvcs/orbsvcs/Log/LogRecordStore_persist.h (LOG_DEFAULT_MAX_REC_LIST_LEN):
+
+ Changed the maximum number of records that can be returned by
+ query() without using an iterator from 30 to 100. This should
+ probably be a parameter that is specified when the service is
+ started, but until it is, 100 is a more reasonable default.
+
+ From documentation available on line, the Orbix log service
+ implementation defaults to 100 records, the VisiBroker
+ implementation defaults to 1000.
+
+ * orbsvcs/orbsvcs/Log/Log_i.cpp (query_i):
+
+ The ACE_LACKS_LONGLONG_T case cast the 64 bit log record fields
+ "id" and "time" to 32 bits, but the format directive still used
+ %Q. Changed to "%d".
+
+Fri Jun 17 19:02:11 2005 J.T. Conklin <jtc@acorntoolworks.com>
+
+ * orbsvcs/Logging_Service/RTEvent_Logging_Service/RTEvent_Logging_Service.cpp:
+
+ Moved code for the IOR file and pid file output. It had been
+ mistakenly added inside a commented out section of the code.
+
+ * orbsvcs/Logging_Service/Basic_Logging_Service/Basic_Logging_Service.cpp:
+ * orbsvcs/Logging_Service/Event_Logging_Service/Event_Logging_Service.cpp:
+ * orbsvcs/Logging_Service/Notify_Logging_Service/Notify_Logging_Service.cpp:
+ * orbsvcs/Logging_Service/RTEvent_Logging_Service/RTEvent_Logging_Service.cpp:
+
+ From documentation available on-line, VisiBroker's and Orbix's
+ log service implementations support using corbaloc IORs and
+ resolve_initial_references() to obtain the log factory object
+ reference. Changed TAO's implementation to support the same by
+ registering the factory IORs in the IORTable:
+
+ * "BasicLogService" for the Basic_Logging_Service
+ * "EventLogService" for the Event_Logging_Service
+ * "NotifyLogService" for the Notify_Logging_Service
+ * "RTEventLogService" for the RTEvent_Logging_Service
+
+ * orbsvcs/Logging_Service/Basic_Logging_Service/Basic_Logging_Service.mpc:
+ * orbsvcs/Logging_Service/Event_Logging_Service/Event_Logging_Service.mpc:
+ * orbsvcs/Logging_Service/Notify_Logging_Service/Notify_Logging_Service.mpc:
+ * orbsvcs/Logging_Service/RTEvent_Logging_Service/RTEvent_Logging_Service.mpc:
+
+ Changed to inherit from iortable.
+
+Fri Jun 17 23:45:00 UTC 2005 Gary Maxey <gary.maxey@hp.com>
+
+ * TAO_IDL/include/ast_decl.h
+ * TAO_IDL/include/ast_generator.h
+ * TAO_IDL/include/ast_module.h
+ * TAO_IDL/include/ast_valuebox.h
+ * TAO_IDL/include/ast_visitor.h
+ * TAO_IDL/include/idl_global.h
+ * TAO_IDL/include/utl_err.h
+ * TAO_IDL/include/utl_scope.h
+ * TAO_IDL/util/utl_err.cpp
+ * TAO_IDL/util/utl_scope.cpp
+ * TAO_IDL/ast/ast_generator.cpp
+ * TAO_IDL/ast/ast_module.cpp
+ * TAO_IDL/ast/ast_redef.cpp
+ * TAO_IDL/ast/ast_valuebox.cpp
+ Changes and additions to IDL compiler front-end for
+ valuebox support.
+
+Fri Jun 17 15:40:51 2005 J.T. Conklin <jtc@acorntoolworks.com>
+
+ * orbsvcs/orbsvcs/orbsvcs.rc:
+ * orbsvcs/orbsvcs/orbsvcs_export.h:
+
+ Remove stray bits left over from when orbsvcs was a single
+ library.
+
+Fri Jun 17 19:09:56 UTC 2005 Jeff Parsons <j.parsons@vanderbilt.edu>
+
+ * TAO_IDL/be/be_codegen.cpp:
+
+ Reverted the change of
+
+ Thu Jun 16 18:54:01 UTC 2005 Jeff Parsons <j.parsons@vanderbilt.edu>
+
+ It seems this problem is appearing in other places besides
+ generated code, and that making lots of modifications to
+ TAO code to work around what is essentially an HP compiler
+ bug is not the right approach. Thanks to Johnny Willemsen
+ <jwillemsen@remedy.nl> for advice on this matter.
+
+Fri Jun 17 17:58:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tao/ORB.cpp:
+ Fixed resolve_initial_references of the CodecFactory
+
+Fri Jun 17 12:31:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tao/PI_Server/*:
+ First commit of the PI_Server library. Will contain the parts
+ of the PortableServer that are dependent on PortableInterceptors.
+ These files will be used soon when the MPC files are updated
+
+Fri Jun 17 11:46:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tests/DLL_ORB/client.cpp:
+ Fixed process_directive call
+
+Fri Jun 17 09:56:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tao/ORB.cpp:
+ Corrected wrong compare in resolve_initial_references
+
+Fri Jun 17 09:50:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tests/Param_Test/Param_Test.mpc:
+ Added explicit after so that we don't compile the same idl file
+ at the same time multiple times
+
+Fri Jun 17 09:24:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tao/ORB.{h,cpp}:
+ Removed some unneeded emulated exeption macros
+
+Fri Jun 17 09:20:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tests/Nested_Upcall_Crash/Nested_Upcall_Crash.mpc:
+ Fixed typo in exename, wanted to commit this yesterday but couldn't
+ reach cvs
+
+Fri Jun 17 09:11:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tests/DLL_ORB/client.cpp:
+ * tests/DLL_ORB/server.cpp:
+ * orbsvcs/orbsvcs/PortableGroup/PortableGroup_ORBInitializer.cpp:
+ Use the new macro ACE_DYNAMIC_SERVICE_DIRECTIVE to load the
+ libraries
+
+Fri Jun 17 09:09:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tests/Bug_1551_Regression/test.mpc:
+ Simplified this mpc file
+
+Fri Jun 17 09:56:44 2005 Simon McQueen <sm@prismtech.com>
+
+ * tao/Valuetype/ValueBase.cpp:
+
+ Add support for stream encoded repository ID indirection as per
+ "15.3.4.3 Scope of the Indirections" in 02-06-33.
+ This fixes bug #2156.
+
+Fri Jun 17 08:55:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tao/ORBInitializer_Registry.cpp:
+ * tao/PI/ORBInitInfo.cpp:
+ * tao/PortableServer/LifespanStrategyPersistent.cpp:
+ * tao/RTCORBA/RT_ORBInitializer.cpp:
+ * tao/ORB_Core.cpp:
+ Use the new macro ACE_DYNAMIC_SERVICE_DIRECTIVE to load the
+ libraries
+
+ * tao/Messaging/Messaging.cpp:
+ Return the value of the process_directive call
+
+ * tao/Messaging/Messaging_ORBInitializer.{h,cpp}:
+ Don't keep a PolicyFactory as member, just create an instance for
+ each ORB. Keeping an instance can cause crashes when the unloading
+ of the DLL already has happened before the PolicyFactory registry
+ is destructed.
+
+ * tao/PortableServer/Servant_Upcall.h:
+ Added forward declaration of CORBA::Object. Need it soon because
+ of even more subsetting
+
+ * tao/ORB_Core.cpp:
+ * tao/ORB.{h,cpp}:
+ Changed the way we throw an InvalidName exception from
+ resolve_initial_references. Instead of throwing it from each
+ resolve_x_method, just let those methods return a nil object
+ and then throw the exception at the end of
+ resolve_initial_references when then the object reference is nil.
+ This reduces some needs for exception emulation macros but more
+ important it guarantees that we always throw the exception instad
+ of returning a nil reference. During testing I found that a rir
+ of POACurrent returned a nil reference when the PortableServer
+ library was not loaded instead of throwing an exception.
+
+Fri Jun 17 08:49:09 2005 Simon McQueen <sm@prismtech.com>
+
+ * tao/PortableServer/Collocated_Object_Proxy_Broker.cpp:
+
+ Use _retn () instead of out () for the return value from
+ _get_component ().
+ This fixes bug #2155.
+
+Thu Jun 16 14:23:08 MST 2005 Trevor Fields <fields_t@ociweb.com>
+
+ * TAO_IDL/be/be_visitor_array/serializer_op_cs.cpp:
+ * TAO_IDL/be/be_visitor_field/serializer_op_cs.cpp:
+ * TAO_IDL/be/be_visitor_sequence/serializer_op_cs.cpp:
+ * TAO_IDL/be/be_visitor_union_branch/serializer_op_cs.cpp:
+
+ Fix warning about unsigned long arg.
+
+Thu Jun 16 18:54:01 UTC 2005 Jeff Parsons <j.parsons@vanderbilt.edu>
+
+ * TAO_IDL/be/be_codegen.cpp:
+
+ Added conditional (for HPUX compiler only) code generation of
+ include of ace/SString.h in the stub source file, apparently
+ necessary when the HP compiler has optimize=1. Thanks to
+ Kris Dekeyser <Kris.Dekeyser@lms.be> for reporting the problem.
+
+Thu Jun 16 17:37:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tao/TAO_Internal.cpp:
+ Do the initialisation of the messaging loader earlier
+
+Thu Jun 16 16:47:42 2005 Simon McQueen <sm@prismtech.com>
+
+ * orbsvcs/IFR_Service/be_produce.cpp:
+
+ Check repository ptr is not null before use in BE_cleanup.
+ This fixes bug #2154.
+
+Thu Jun 16 07:45:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tao/PI/ORBInitializer_Registry_Impl.{h,cpp}:
+ Implemented fini call, at the moment the ORBInitializer Registry
+ is removed by service config we release all registered
+ ORBInitializers
+
+ * tests/Nested_Upcall_Crash/Nested_Upcall_Crash.mpc:
+ Simplified this MPC file
+
+Thu Jun 16 06:06:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tests/Param_Test/Param_Test.mpc:
+ Set exename for anyop
+
+Wed Jun 15 13:46:48 MST 2005 Trevor Fields <fields_t@ociweb.com>
+
+ * TAO_IDL/be/be_visitor_array/serializer_op_ch.cpp:
+ * TAO_IDL/be/be_visitor_array/serializer_op_cs.cpp:
+ * TAO_IDL/be/be_visitor_enum/serializer_op_ch.cpp:
+ * TAO_IDL/be/be_visitor_enum/serializer_op_cs.cpp:
+ * TAO_IDL/be/be_visitor_field/serializer_op_ch.cpp:
+ * TAO_IDL/be/be_visitor_field/serializer_op_cs.cpp:
+ * TAO_IDL/be/be_visitor_module/serializer_op.cpp:
+ * TAO_IDL/be/be_visitor_root/serializer_op.cpp:
+ * TAO_IDL/be/be_visitor_sequence/serializer_op_ch.cpp:
+ * TAO_IDL/be/be_visitor_sequence/serializer_op_cs.cpp:
+ * TAO_IDL/be/be_visitor_structure/serializer_op_ch.cpp:
+ * TAO_IDL/be/be_visitor_structure/serializer_op_cs.cpp:
+ * TAO_IDL/be/be_visitor_typedef/serializer_op_ch.cpp:
+ * TAO_IDL/be/be_visitor_typedef/serializer_op_cs.cpp:
+ * TAO_IDL/be/be_visitor_union/serializer_op_ch.cpp:
+ * TAO_IDL/be/be_visitor_union/serializer_op_cs.cpp:
+ * TAO_IDL/be/be_visitor_union_branch/serializer_op_ch.cpp:
+ * TAO_IDL/be/be_visitor_union_branch/serializer_op_cs.cpp:
+ * TAO_IDL/be_include/be_visitor_array/serializer_op_ch.h:
+ * TAO_IDL/be_include/be_visitor_array/serializer_op_cs.h:
+ * TAO_IDL/be_include/be_visitor_enum/serializer_op_ch.h:
+ * TAO_IDL/be_include/be_visitor_enum/serializer_op_cs.h:
+ * TAO_IDL/be_include/be_visitor_field/serializer_op_ch.h:
+ * TAO_IDL/be_include/be_visitor_field/serializer_op_cs.h:
+ * TAO_IDL/be_include/be_visitor_module/serializer_op.h:
+ * TAO_IDL/be_include/be_visitor_root/serializer_op.h:
+ * TAO_IDL/be_include/be_visitor_sequence/serializer_op_ch.h:
+ * TAO_IDL/be_include/be_visitor_sequence/serializer_op_cs.h:
+ * TAO_IDL/be_include/be_visitor_structure/serializer_op_ch.h:
+ * TAO_IDL/be_include/be_visitor_structure/serializer_op_cs.h:
+ * TAO_IDL/be_include/be_visitor_typedef/serializer_op_ch.h:
+ * TAO_IDL/be_include/be_visitor_typedef/serializer_op_cs.h:
+ * TAO_IDL/be_include/be_visitor_union/serializer_op_ch.h:
+ * TAO_IDL/be_include/be_visitor_union/serializer_op_cs.h:
+ * TAO_IDL/be_include/be_visitor_union_branch/serializer_op_ch.h:
+ * TAO_IDL/be_include/be_visitor_union_branch/serializer_op_cs.h:
+
+ Addin additional files for providing serialization for sending
+ in DDS.
+
+Wed Jun 15 12:36:04 MST 2005 Trevor Fields <fields_t@ociweb.com>
+
+ * TAO_IDL/be/be_codegen.cpp:
+ * TAO_IDL/be/be_decl.cpp:
+ * TAO_IDL/be/be_global.cpp:
+ * TAO_IDL/be/be_visitor_array.cpp:
+ * TAO_IDL/be/be_visitor_enum.cpp:
+ * TAO_IDL/be/be_visitor_field.cpp:
+ * TAO_IDL/be/be_visitor_module.cpp:
+ * TAO_IDL/be/be_visitor_root.cpp:
+ * TAO_IDL/be/be_visitor_sequence.cpp:
+ * TAO_IDL/be/be_visitor_structure.cpp:
+ * TAO_IDL/be/be_visitor_typedef.cpp:
+ * TAO_IDL/be/be_visitor_union.cpp:
+ * TAO_IDL/be/be_visitor_union_branch.cpp:
+ * TAO_IDL/be/be_visitor_module/module.cpp:
+ * TAO_IDL/be/be_visitor_root/root.cpp:
+ * TAO_IDL/be/be_visitor_structure/structure.cpp:
+ * TAO_IDL/be/be_visitor_typedef/typedef.cpp:
+ * TAO_IDL/be/be_visitor_union/union.cpp:
+ * TAO_IDL/be_include/be_codegen.h:
+ * TAO_IDL/be_include/be_decl.h:
+ * TAO_IDL/be_include/be_global.h:
+ * TAO_IDL/be_include/be_visitor_array.h:
+ * TAO_IDL/be_include/be_visitor_enum.h:
+ * TAO_IDL/be_include/be_visitor_field.h:
+ * TAO_IDL/be_include/be_visitor_module.h:
+ * TAO_IDL/be_include/be_visitor_root.h:
+ * TAO_IDL/be_include/be_visitor_sequence.h:
+ * TAO_IDL/be_include/be_visitor_structure.h:
+ * TAO_IDL/be_include/be_visitor_typedef.h:
+ * TAO_IDL/be_include/be_visitor_union.h:
+ * TAO_IDL/be_include/be_visitor_union_branch.h:
+ * TAO_IDL/fe/idl.ll:
+ * TAO_IDL/fe/lex.yy.cpp:
+ * TAO_IDL/include/idl_global.h:
+ * TAO_IDL/util/utl_global.cpp:
+
+ Adding idl support for the new DDS DCPS implementation over TAO.
+
+Wed Jun 15 17:55:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tao/Collocation_Proxy_Broker.h:
+ Added include to get size_t. This should fix the LynxOS build
+
+Wed Jun 15 10:46:12 2005 J.T. Conklin <jtc@acorntoolworks.com>
+
+ * tao/PortableServer/TAO_PortableServer.pc.in:
+
+ Added TAO_PI to list of required libraries.
+
+ * tao/PI.mpc:
+
+ Added Pkgconfig_Files definition.
+
+ * tao/PI/TAO_PI.pc.in:
+
+ New file, pkg-config *.pc template for TAO_PI library.
+
+Wed Jun 15 13:17:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tao/PortableServer/Object_Adapter.cpp:
+ * tao/PortableServer/POA_Current_Impl.cpp:
+ * tao/PortableServer/Root_POA.cpp:
+ Removed several not needed includes
+
+Wed Jun 15 11:57:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tests/Param_Test/Param_Test.mpc:
+ Simplified this MPC file, server anyop are not using messaging
+
+ * tao/RTScheduling/RTScheduler_Loader.h:
+ Removed not needed forward declaration
+
+ * tao/Messaging/Messaging_ORBInitializer.h:
+ Removed not needed forward declaration
+
+ * tao/Messaging/Messaging_Loader.{h,cpp}:
+ * tao/Messaging/Messaging.cpp:
+ We have an initialisation problem in the Messaging library, it
+ registers it ORBInitializer in a static object but the
+ ORBInitializer_Registry then doesn't need to be loaded yet.
+ Added a Messaging_Loader, this loader is just add to the
+ service config registry in the static object, from TAO_Internal
+ we then intialize the Message_Loader when it is available,
+ which then will register the ORBInitializer. Maybe this problem
+ exists with more libs, the regression tests will show it.
+
+ * tao/TAO_Internal.cpp:
+ Initialise the Messaging Loader when available
+
+ * tao/PI/ORBInitializer_Registry_Impl.h:
+ Removed old documentation
+
+ * tao/RTCORBA/RT_ORBInitializer.cpp:
+ Initialise pointer with 0
+
+Wed Jun 15 10:52:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tao/RTScheduling/Distributable_Thread.cpp:
+ * tao/RTScheduling/Request_Interceptor.h:
+ * tao/RTScheduling/RTScheduler_Initializer.cpp:
+ * tao/RTScheduling/RTScheduler_Loader.cpp:
+ Fixed some potential memory leaks when things go wrong and some
+ minor formatting changes
+
+Wed Jun 15 09:33:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tao/ORBInitializer_Registry.cpp:
+ Don't try to load the ORBInitializer registry in a static
+ build
+
+Wed Jun 15 08:03:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * orbsvcs/orbsvcs/Log/Iterator_i.cpp:
+ Fixed conversion warning
+
+Tue Jun 14 21:35:35 2005 Ossama Othman <ossama@dre.vanderbilt.edu>
+
+ * tao/PolicyFactory_Registry_Adapter.cpp:
+
+ Removed stray semi-colon.
+
+Tue Jun 14 20:57:00 2005 Ossama Othman <ossama@dre.vanderbilt.edu>
+
+ From Lothar Werzinger <lothar@xcerla.com>
+ * orbsvcs/orbsvcs/Naming/Naming_Server.cpp (init_new_naming):
+
+ Register with the ORB's resolve_initial_references() mechanism.
+ Primarily useful for dynamically loaded Name Services.
+ [Bug 2150]
+
+Tue Jun 14 14:48:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tao/TAO_Server_Request.h:
+ Just include Object.h to get CORBA::Object instead of a forward
+ declaration, we get else problems in an inline build.
+
+Tue Jun 14 14:44:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tao/Strategies/SCIOP_Profile.cpp:
+ Include tao/StringSeqC.h to get StringSeq. It seems the refactoring
+ of some PI reveales a lot of includes which are previously
+ gotten for free.
+
+Tue Jun 14 14:38:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tao/PortableServer/Upcall_Wrapper.cpp:
+ Added include of tao/Argument.h, this is not pulled in when
+ interceptors are disabled
+
+Tue Jun 14 14:34:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tao/TAO_Server_Request.h:
+ Added forward declaration of CORBA::Object. This is not pulled in
+ when interceptors are disabled
+
+Tue Jun 14 14:30:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tests/RTCORBA/check_supported_priorities.cpp
+ * tests/RTCORBA/common_args.cpp
+ * tests/RTCORBA/Activate_Object_Multiple_ORBs/test.cpp
+ * tests/RTCORBA/Banded_Connections/client.cpp
+ * tests/RTCORBA/Banded_Connections/server.cpp
+ * tests/RTCORBA/Client_Propagated/Client_ORBInitializer.h
+ * tests/RTCORBA/Client_Propagated/RTCORBA_Client_Propagated.mpc
+ * tests/RTCORBA/Client_Propagated/client.cpp
+ * tests/RTCORBA/Client_Propagated/server.cpp
+ * tests/RTCORBA/Collocation/Collocation.cpp
+ * tests/RTCORBA/Linear_Priority/client.cpp
+ * tests/RTCORBA/Linear_Priority/server.cpp
+ * tests/RTCORBA/MT_Client_Protocol_Priority/client.cpp
+ * tests/RTCORBA/MT_Client_Protocol_Priority/server.cpp
+ * tests/RTCORBA/Policy_Combinations/client.cpp
+ * tests/RTCORBA/Policy_Combinations/server.cpp
+ * tests/RTCORBA/Priority_Inversion_With_Bands/client.cpp
+ * tests/RTCORBA/Priority_Inversion_With_Bands/server.cpp
+ * tests/RTCORBA/Profile_And_Endpoint_Selection/client.cpp
+ * tests/RTCORBA/Profile_And_Endpoint_Selection/server.cpp
+ * tests/RTCORBA/Server_Declared/server.cpp
+ * tests/RTCORBA/Thread_Pool/client.cpp
+ * tests/RTCORBA/Thread_Pool/server.cpp
+ Return 2 instead of -1 when the check_support_priorities fail.
+ The test scripts expect then a return value of 2
+
+Tue Jun 14 14:15:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * TAO-INSTALL.html:
+ Updated Borland build instructions
+
+Tue Jun 14 13:30:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tao/PI/ORBInitializer_Registry_Impl.cpp:
+ Corrected include
+
+Tue Jun 14 13:08:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * orbsvcs/examples/FaultTolerance/RolyPoly/ORB_Initializer.{h,cpp}:
+ Updated includes
+
+Tue Jun 14 12:04:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * orbsvcs/examples/ORT/Server_IORInterceptor_ORBInitializer.h:
+ Updated include, missed in a previous checkin
+
+Tue Jun 14 12:01:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tao/PI/ORBInitializer_Registry.{h,cpp}:
+ Renamed to ORBInitializer_Registry_Impl.{h,cpp} This prevents
+ confusion if we have the file in the tao or tao/PI directory
+
+ * tao/PI/PI.cpp:
+ Updated include
+
+Tue Jun 14 11:50:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * examples/Kokyu_dsrt_schedulers/FP_Scheduler.h:
+ * examples/Kokyu_dsrt_schedulers/MIF_Scheduler.h:
+ * examples/Kokyu_dsrt_schedulers/MUF_Scheduler.h:
+ Added missing include of CodecFactory.h
+
+Tue Jun 14 11:39:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tao/ORB_Core.cpp:
+ Fixed problem with emulated exceptions
+
+Tue Jun 14 10:52:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tao/IOPS_T.h:
+ Removed, not included by IOPS.h anymore
+
+ * tao/tao.mpc:
+ Removed tao/tao.mpc
+
+Tue Jun 14 10:30:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * orbsvcs/orbsvcs/SSLIOP/SSLIOP_ORBInitializer.h:
+ * orbsvcs/orbsvcs/SSLIOP/SSLIOP_Factory.cpp:
+ * orbsvcs/orbsvcs/SSLIOP/SSLIOP_ORBInitializer.cpp:
+ Added missing includes
+
+Tue Jun 14 10:23:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * orbsvcs/orbsvcs/RTCosScheduling/RTCosScheduling_ClientScheduler_i.h:
+ * orbsvcs/orbsvcs/RTCosScheduling/RTCosScheduling_ServerScheduler_i.h:
+ Added missing includes
+
+Tue Jun 14 10:05:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * orbsvcs/orbsvcs/AV/SCTP_SEQ.h:
+ Added missing include
+
+Tue Jun 14 09:58:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tests/Bug_1693_Test/client.cpp:
+ * tests/RTCORBA/Thread_Pool/client.cpp:
+ * tests/Codec/client.cpp:
+ Fixed compile errors
+
+ * tao/ORB.cpp:
+ * tao/ORB_Core.{h,cpp}:
+ Changed the way we use the ORBInitializer registry. When it is
+ requested from the ORB_Core, get it from the service config
+ registry but in a static build don't try to load it on demand
+
+Tue Jun 14 08:41:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tao/PI/*:
+ New PI library. Contains ORBInitializer registry, ORBInitInfo and
+ PolicyFactory. This will be extended in the future with more classes
+ but this is the first step. If you use any of these classes in
+ your app, add the include of tao/PI/PI.h to your application code.
+ This will make sure the service config registry is filled with
+ the loadable modules.
+
+ * tao/BiDir_GIOP.mpc:
+ The BiDir library uses a PolicyFactory so it must link with the PI
+ library
+
+ * tao/Interceptor_List.{h,cpp}:
+ Changed the list to return a value indicating whether it was possible
+ to add the interceptor or not. The caller in the PI or IORInterceptor
+ library will then throw the correct exception. This way the list
+ template can stay in the TAO lib because the exception DuplicateName
+ is now in the PI library
+
+ * tao/IORInterceptor.mpc:
+ Added PI as base project
+
+ * tao/IORInterceptor_Adapter.{h,cpp}:
+ Removed throw clause from add_interceptor method. The clause was
+ not correct also, it could throw a DuplicateName exception also.
+ This way we are not dependent on the PI library. Also the adapter
+ doesn't need to be derived from ACE_Service_Object, this class
+ is not loaded, the factory that creates it is.
+
+ * tao/IORInterceptor_Adapter_Factory.{h,cpp}:
+ Removed destructor, it is not needed
+
+ * tao/ORB.cpp:
+ Updated to use the new ORBInitializer Factory adapter and Policy
+ Factory adapter
+
+ * tao/ORB_Core.{h,cpp,i}:
+ Updated for new adapters and interceptor list changes. Also added
+ a get_orbinitializer_registry which returns the current pointer
+ without trying to load the PI library. This is used by the ORB
+ to call alls orbinitializers. When the library is not loaded yet,
+ no user code caused this so we don't have to do this also
+
+ * tao/ORBInitializer.pidl:
+ * tao/ORBInitializerA.cpp:
+ * tao/ORBInitializerC.{h,cpp,inl}:
+ * tao/ORBInitializerS.h:
+ * tao/ORBInitInfo.pidl:
+ * tao/ORBInitInfoA.cpp:
+ * tao/ORBInitInfoC.{h,cpp,inl}:
+ * tao/ORBInitInfoS.h:
+ * tao/ORBInitInfo.{h,cpp,inl}:
+ * tao/PolicyFactory.pidl:
+ * tao/PolicyFactory_Registry.{h,cpp}:
+ * tao/PolicyFactoryA.cpp:
+ * tao/PolicyFactoryC.{h,cpp,inl}:
+ Moved to the PI library
+
+ * tao/IOP_Codec.pidl:
+ * tao/IOP_CodecA.cpp:
+ * tao/IOP_CodecC.{h,cpp,inl}:
+ Moved to the CodecFactory library
+
+ * tao/IOP.pidl:
+ Removed include of IOP_Codec.pidl
+
+ * tao/ORBInitializer_Registry.{h,cpp}:
+ Removed all code except register_orb_initializer, which now tries
+ to load the ORBInitializer Registry on demand. The code is moved to
+ the PI library
+
+ * tao/PI.mpc:
+ New file
+
+ * tao/PolicyFactory_Registry_Adapter.{h,cpp}:
+ New adapter for PolicyFactory_Registry
+
+ * tao/PolicyFactory_Registry_Factory.h:
+ New factory for creating a PolicyFactory for each ORB
+
+ * tao/PortableInterceptor.pidl:
+ Removed files that moved to the PI library
+
+ * tao/PortableInterceptorA.cpp:
+ Removed, empty
+
+ * tao/PortableInterceptorC.{cpp,h}:
+ Regenerated
+
+ * tao/PortableServer.mpc:
+ * tao/RTCORBA.mpc:
+ * tao/Utils.mpc
+ Based on the new PI. These all use something of the PI library.
+ Because of this only a client gets benefits from this, but the
+ server will be handled in the next iteration
+
+ * tao/tao.mpc:
+ Updated for all changes
+
+ * tao/BiDir_GIOP/BiDirGIOP.cpp:
+ Added include of ORBInitializer_Registry.h
+
+ * tao/BiDir_GIOP/BiDir_ORBInitializer.{h,cpp}:
+ * tao/BiDir_GIOP/BiDir_PolicyFactory.h:
+ Include tao/PI/PI.h
+
+ * tao/CodecFactory/CodecFactory.h:
+ Include IOP_CodecC.h
+
+ * tao/CodecFactory/IOP_CodecC.{h,cpp}:
+ * tao/CodecFactory/IOP_CodecA.cpp:
+ * tao/CodecFactory/IOP_CodecS.h:
+ Files moved from the tao lib
+
+ * tao/CodecFactory/IOP_Codec_include.pidl:
+ * tao/CodecFactory/IOP_Codec_includeC.h:
+ * tao/CodecFactory/IOP_Codec_includeS.h:
+ New files for apps that include IOP_Codec.pidl in the past, they
+ should now use this pidl file
+
+ * tao/CodecFactory/CDR_Encaps_Codec.h:
+ * tao/CodecFactory/CodecFactory.h:
+ * tao/CodecFactory/CodecFactory_imp.h:
+ Updated for moving of IOP_Codec.pidl
+
+ * tao/IORInterceptor/IORInterceptor_Adapter_Impl.{h,cpp}:
+ Updated for interceptor list change
+
+ * tao/Messaging/Messaging_ORBInitializer.h:
+ * tao/Messaging/Messaging_PolicyFactory.h:
+ * tao/PortableServer/PortableServer_ORBInitializer.{h,cpp}:
+ * tao/PortableServer/PortableServer_PolicyFactory.h:
+ * tao/RTCORBA/RT_ORBInitializer.cpp:
+ * tao/RTCORBA/RT_PolicyFactory.h
+ * tao/RTScheduling/RTScheduling_Initializer.{h,cpp}:
+ * tao/Utils/RIR_Narrow.h:
+ Changed includes to include tao/PI/PI.h
+
+ * tao/docs/libraries.html:
+ Added PI
+
+ * orbsvcs/examples/FaultTolerance/RolyPoly/RolyPoly.mpc
+ * orbsvcs/examples/LoadBalancing/ORBInitializer.h
+ * orbsvcs/orbsvcs/FaultTolerance/FT_ClientORBInitializer.cpp
+ * orbsvcs/orbsvcs/FaultTolerance/FT_ClientORBInitializer.h
+ * orbsvcs/orbsvcs/FaultTolerance/FT_ClientPolicyFactory.cpp
+ * orbsvcs/orbsvcs/FaultTolerance/FT_ClientPolicyFactory.h
+ * orbsvcs/orbsvcs/FaultTolerance/FT_ClientPolicy_i.cpp
+ * orbsvcs/orbsvcs/FaultTolerance/FT_ClientService_Activate.cpp
+ * orbsvcs/orbsvcs/FaultTolerance/FT_ServerORBInitializer.cpp
+ * orbsvcs/orbsvcs/FaultTolerance/FT_ServerORBInitializer.h
+ * orbsvcs/orbsvcs/FaultTolerance/FT_ServerPolicyFactory.cpp
+ * orbsvcs/orbsvcs/FaultTolerance/FT_ServerPolicyFactory.h
+ * orbsvcs/orbsvcs/FaultTolerance/FT_ServerService_Activate.cpp
+ * orbsvcs/orbsvcs/FtRtEvent/ClientORB/FTRT_ClientORB_Initializer.h
+ * orbsvcs/orbsvcs/FtRtEvent/EventChannel/FTEC_ORBInitializer.cpp
+ * orbsvcs/orbsvcs/FtRtEvent/EventChannel/FTEC_ORBInitializer.h
+ * orbsvcs/orbsvcs/FtRtEvent/EventChannel/Request_Context_Repository.cpp
+ * orbsvcs/orbsvcs/FtRtEvent/EventChannel/Request_Context_Repository.h
+ * orbsvcs/orbsvcs/LoadBalancing/LB_ClientORBInitializer.h
+ * orbsvcs/orbsvcs/LoadBalancing/LB_ORBInitializer.h
+ * orbsvcs/orbsvcs/PortableGroup/PortableGroup_ORBInitializer.cpp
+ * orbsvcs/orbsvcs/PortableGroup/PortableGroup_ORBInitializer.h
+ * orbsvcs/orbsvcs/Security/SL3_PolicyFactory.h
+ * orbsvcs/orbsvcs/Security/Security_ORBInitializer.cpp
+ * orbsvcs/orbsvcs/Security/Security_ORBInitializer.h
+ * orbsvcs/orbsvcs/Security/Security_PolicyFactory.cpp
+ * orbsvcs/orbsvcs/Security/Security_PolicyFactory.h
+ * orbsvcs/performance-tests/LoadBalancing/LBPerf/CPU/ORBInitializer.cpp
+ * orbsvcs/performance-tests/LoadBalancing/LBPerf/CPU/ORBInitializer.h
+ * orbsvcs/performance-tests/LoadBalancing/LBPerf/RPS/ORBInitializer.h
+ * orbsvcs/performance-tests/LoadBalancing/LBPerf/RPS/server.cpp
+ * orbsvcs/tests/FaultTolerance/GroupRef_Manipulation/Server_ORBInitializer.h
+ * orbsvcs/tests/RTCosScheduling/RTCosScheduling.mpc
+ * tests/Bug_1495_Regression/Bug_1495.mpc
+ * tests/Bug_1495_Regression/Client_ORBInitializer.h
+ * tests/Bug_1495_Regression/Server_ORBInitializer.h
+ * tests/ORT/ORT.mpc
+ * tests/ORT/ServerORBInitializer.h
+ * tests/Portable_Interceptors/AMI/Client_ORBInitializer.h
+ * tests/Portable_Interceptors/AMI/Server_ORBInitializer.h
+ * tests/Portable_Interceptors/Benchmark/Client_ORBInitializer.h
+ * tests/Portable_Interceptors/Benchmark/Server_ORBInitializer.h
+ * tests/Portable_Interceptors/Bug_1559/Client_ORBInitializer.h
+ * tests/Portable_Interceptors/Bug_1559/Server_ORBInitializer.h
+ * tests/Portable_Interceptors/Bug_2088/Client_ORBInitializer.h
+ * tests/Portable_Interceptors/Collocated/Dynamic/Collocated_Test.cpp
+ * tests/Portable_Interceptors/Collocated/Dynamic/Echo_Collocated_ORBInitializer.cpp
+ * tests/Portable_Interceptors/Collocated/Dynamic/Echo_Collocated_ORBInitializer.h
+ * tests/Portable_Interceptors/Collocated/Dynamic/PI_Dynamic.mpc
+ * tests/Portable_Interceptors/Collocated/Service_Context_Manipulation/Collocated_ORBInitializer.h
+ * tests/Portable_Interceptors/Collocated/Service_Context_Manipulation/PI_Svc_Context_Manip.mpc
+ * tests/Portable_Interceptors/Dynamic/Echo_Client_ORBInitializer.h
+ * tests/Portable_Interceptors/Dynamic/Echo_Server_ORBInitializer.h
+ * tests/Portable_Interceptors/ForwardRequest/Client_ORBInitializer.h
+ * tests/Portable_Interceptors/ForwardRequest/Server_ORBInitializer.h
+ * tests/Portable_Interceptors/IORInterceptor/FOO_ClientRequestInterceptor.h
+ * tests/Portable_Interceptors/IORInterceptor/FOO_Client_ORBInitializer.h
+ * tests/Portable_Interceptors/IORInterceptor/FOO_IORInterceptor.h
+ * tests/Portable_Interceptors/IORInterceptor/FOO_IORInterceptor_ORBInitializer.h
+ * tests/Portable_Interceptors/ORB_Shutdown/Server_ORBInitializer.h
+ * tests/Portable_Interceptors/PICurrent/ClientORBInitializer.h
+ * tests/Portable_Interceptors/PICurrent/ServerORBInitializer.cpp
+ * tests/Portable_Interceptors/PICurrent/ServerORBInitializer.h
+ * tests/Portable_Interceptors/PICurrent/client.cpp
+ * tests/Portable_Interceptors/PolicyFactory/PolicyFactory.h
+ * tests/Portable_Interceptors/PolicyFactory/Server_ORBInitializer.h
+ * tests/Portable_Interceptors/Request_Interceptor_Flow/Client_ORBInitializer.h
+ * tests/Portable_Interceptors/Request_Interceptor_Flow/Server_ORBInitializer.h
+ * tests/Portable_Interceptors/Service_Context_Manipulation/Client_ORBInitializer.h
+ * tests/Portable_Interceptors/Service_Context_Manipulation/Server_ORBInitializer.h
+ Updated for the new PI library
+
+ * tests/RTCORBA/check_supported_priorities.cpp
+ * tests/RTCORBA/common_args.cpp
+ * tests/RTCORBA/Activate_Object_Multiple_ORBs/test.cpp
+ * tests/RTCORBA/Banded_Connections/client.cpp
+ * tests/RTCORBA/Banded_Connections/server.cpp
+ * tests/RTCORBA/Client_Propagated/Client_ORBInitializer.h
+ * tests/RTCORBA/Client_Propagated/RTCORBA_Client_Propagated.mpc
+ * tests/RTCORBA/Client_Propagated/client.cpp
+ * tests/RTCORBA/Client_Propagated/server.cpp
+ * tests/RTCORBA/Collocation/Collocation.cpp
+ * tests/RTCORBA/Linear_Priority/client.cpp
+ * tests/RTCORBA/Linear_Priority/server.cpp
+ * tests/RTCORBA/MT_Client_Protocol_Priority/client.cpp
+ * tests/RTCORBA/MT_Client_Protocol_Priority/server.cpp
+ * tests/RTCORBA/Policy_Combinations/client.cpp
+ * tests/RTCORBA/Policy_Combinations/server.cpp
+ * tests/RTCORBA/Priority_Inversion_With_Bands/client.cpp
+ * tests/RTCORBA/Priority_Inversion_With_Bands/server.cpp
+ * tests/RTCORBA/Profile_And_Endpoint_Selection/client.cpp
+ * tests/RTCORBA/Profile_And_Endpoint_Selection/server.cpp
+ * tests/RTCORBA/Server_Declared/server.cpp
+ * tests/RTCORBA/Thread_Pool/client.cpp
+ * tests/RTCORBA/Thread_Pool/server.cpp
+ Instead of doing an ACE_OS::exit() when the needed priorities
+ are not available, return from the main with a -1. Will reduce
+ the number of memory leaks reported by valgrind a lot.
+
+Tue Jun 14 07:38:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * orbsvcs/orbsvcs/FtRtEvent/EventChannel/SCTP_Fault_Detector.cpp:
+ Added missing include
+
+Mon Jun 13 17:27:57 2005 J.T. Conklin <jtc@acorntoolworks.com>
+
+ * orbsvcs/orbsvcs/Log/Iterator_i.cpp (get):
+
+ Change to return a zero-length sequence before destroying
+ iterator as required by the spec.
+
+Mon Jun 13 17:18:44 2005 J.T. Conklin <jtc@acorntoolworks.com>
+
+ * orbsvcs/orbsvcs/Log/Iterator_i.h:
+
+ Change type of constraint member variable to CORBA::String_var
+ so we don't dereference a dangling char * in get().
+
+Mon Jun 13 12:10:06 2005 J.T. Conklin <jtc@acorntoolworks.com>
+
+ * orbsvcs/orbsvcs/Log/Iterator_i.cpp:
+ * orbsvcs/orbsvcs/Log/Iterator_i.h:
+ * orbsvcs/orbsvcs/Log/Log_i.cpp:
+
+ Changed to interpret "position" as the index in the complete
+ sequence of records that match the constraint instead of the
+ index in the sequence of all records.
+
+ Changed TAO_Iterator_i constructor to take new "current" and
+ "end" iterator parameters. This allows us to avoid scanning
+ and skipping records returned as part of the initial query().
+
+ Simplify iterating over record store by using ACE_Hash_Map's
+ STL-like API.
+
+Mon Jun 13 18:51:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * orbsvcs/orbsvcs/FtRtEvent/ClientORB/FTRT_ClientORB_Interceptor.h:
+ Converted comments to doxygen style
+
+Mon Jun 13 18:40:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * orbsvcs/orbsvcs/PortableGroup/PortableGroup_Loader.cpp:
+ Include ORBInitializer_Registry.h, needed for the upcoming PI library
+
+Mon Jun 13 05:07:32 2005 Ossama Othman <ossama@dre.vanderbilt.edu>
+
+ * orbsvcs/orbsvcs/AV/AVStreams_i.cpp:
+ * orbsvcs/orbsvcs/AV/AVStreams_i.h:
+
+ Made public destructors protected since the objects in question
+ are reference counted, i.e. memory management should be
+ performed through the reference counting mechanism, not operator
+ delete();
+
+ * orbsvcs/orbsvcs/AV/FlowSpec_Entry.cpp:
+ * orbsvcs/orbsvcs/AV/FlowSpec_Entry.h (TAO_FlowSpec_Entry):
+ * orbsvcs/orbsvcs/AV/FlowSpec_Entry.i:
+
+ Fixed a memory leak.
+
+Mon Jun 13 09:32:38 2005 Phil Mesnier <mesnier_p@ociweb.com>
+
+ * tao/IIOP_Profile.cpp:
+ * tao/Tagged_Component.cpp:
+ * tao/Tagged_Component.h:
+
+ Reverted the change to TAO_Tagged_Component::get_component.
+
+Mon Jun 13 12:25:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tests/RTCORBA/Client_Propagated/client.cpp:
+ Added include of ORBInitializer_Registry.h
+
+Mon Jun 13 11:14:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tests/Portable_Interceptors/Benchmark/PI_Benchmark.mpc:
+ * tests/Portable_Interceptors/Bug_1559/Bug_1559.mpc:
+ * tests/Portable_Interceptors/Bug_2088/Bug_2088.mpc:
+ * tests/Portable_Interceptors/Dynamic/PI_Dynamic.mpc:
+ * tests/Portable_Interceptors/ForwardRequest/PI_ForwardRequest.mpc:
+ * tests/Portable_Interceptors/ORB_Shutdown/PI_ORB_Shutdown.mpc:
+ * tests/Portable_Interceptors/PICurrent/PI_PICurrent.mpc:
+ * tests/Portable_Interceptors/PolicyFactory/PI_PolicyFactory.mpc:
+ * tests/Portable_Interceptors/Request_Interceptor_Flow/PI_Request_Interceptor_Flow.mpc:
+ * tests/Portable_Interceptors/Service_Context_Manipulation/PI_Svc_Context_Manip.mpc:
+ Use interceptors as base project instead of the requires
+ interceptors
+
+Mon Jun 13 08:39:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tao/Strategies/SCIOP_Endpoint.cpp:
+ Fixed compile error
+
+Mon Jun 13 08:25:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tao/Messaging/Asynch_Invocation_Adapter.{h,cpp}:
+ Fixed ambiguity warnings with Borland.
+
+Sun Jun 12 23:09:36 2005 J.T. Conklin <jtc@acorntoolworks.com>
+
+ * orbsvcs/orbsvcs/Log/Log_Constraint_Visitors.cpp (TAO_Log_Constraint_Visitor):
+
+ Add property list bindings for each item in the log record's
+ attribute list.
+
+Sun Jun 12 23:38:02 2005 Balachandran Natarajan <bala@dre.vanderbilt.edu>
+
+ * tao/GIOP_Message_Base.h (process_request, process_locate_request):
+
+ Made the above calls virtual since it makes it easier to do
+ implementation inheritance, and override behaviours.
+
+Sun Jun 12 14:24:05 2005 J.T. Conklin <jtc@acorntoolworks.com>
+
+ * orbsvcs/orbsvcs/Log/Log_i.cpp (query_i, match_i, remove_old_records):
+
+ Simplify iterating over record store by using ACE_Hash_Map's
+ STL-like API.
+
+ * orbsvcs/orbsvcs/Log/Log_i.cpp (query_i):
+
+ Changed from LOG_HASH_MAP_ITER to LOG_RECORD_STORE_ITER.
+
+ * orbsvcs/orbsvcs/Log/LogRecordStore.h (TAO_LogRecordStore):
+
+ Added LOG_RECORD_STORE_ENTRY typedef.
+
+ * orbsvcs/orbsvcs/Log/Iterator_i.cpp: (TAO_Iterator_i):
+ * orbsvcs/orbsvcs/Log/Iterator_i.h (TAO_Iterator_i):
+ * orbsvcs/orbsvcs/Log/Log_i.cpp (query_i):
+
+ Removed max_store_size argument from constructor.
+ Removed (unused) max_store_size member variable.
+
+ * orbsvcs/orbsvcs/Log/Log_Constraint_Visitors.cpp:
+
+ Changed constructor to directly assign log record's .info field
+ to property list value binding instead of stashing it in an the
+ Any. This allows the value to be queried via ETCL constraints.
+
+ * orbsvcs/orbsvcs/Log/Log_i.cpp (remove_old_records):
+
+ Changed conditional in constraint as it was casing new, not old,
+ records to be deleted.
+
+ * orbsvcs/orbsvcs/Log/Log_i.cpp (validate_capacity_alarm_thresholds):
+ * orbsvcs/orbsvcs/Log/Log_i.h (validate_capacity_alarm_thresholds):
+
+ Move validate_capacity_alarm_thresholds method from public to
+ protected visibility.
+
+ * tao/Makefile.am:
+
+ Updated to remove Queued_Message.inl.
+
+Sun Jun 12 13:39:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tao/Collocation_Proxy_Broker.h:
+ Added forward declaration of environment
+
+Sun Jun 12 13:27:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * orbsvcs/orbsvcs/Security/Security_ORBInitializer.{h,cpp}:
+ * tao/RTCORBA/RT_ORBInitializer.{h,cpp}:
+ Updated the way the policyfactory is registered in a way that things
+ are not dependent on the destruction order and we only have one
+ instance of the factory in runtime
+
+Sun Jun 12 12:37:12 UTC 2005 Martin Corino <mcorino@remedy.nl>
+
+ * rules.tao.GNU:
+ Fixed problem with TAO version detection when default Make
+ shell is CMD.EXE.
+
+Sat Jun 11 23:45:07 UTC 2005 Jeff Parsons <j.parsons@vanderbilt.edu>
+
+ * TAO_IDL/be/be_visitor_operation.cpp:
+ * TAO_IDL/be/be_visitor_sequence.cpp:
+ * TAO_IDL/be_include/be_visitor_operation.h:
+ * TAO_IDL/be_include/be_visitor_sequence.h:
+
+ Removed includes of unused files.
+
+ * TAO_IDL/be/be_visitor_argument/invoke_cs.cpp:
+ * TAO_IDL/be/be_visitor_argument/marshal_ss.cpp:
+
+ Fixed incorrect visitor names in error messages.
+
+ * TAO_IDL/be/be_visitor_argument/post_invoke_cs.cpp:
+ * TAO_IDL/be/be_visitor_argument/post_marshal_ss.cpp:
+ * TAO_IDL/be/be_visitor_argument/pre_invoke_cs.cpp:
+ * TAO_IDL/be/be_visitor_operation/rettype_assign_ss.cpp:
+ * TAO_IDL/be/be_visitor_operation/rettype_is.cpp:
+ * TAO_IDL/be/be_visitor_operation/rettype_marshal_ss.cpp:
+ * TAO_IDL/be/be_visitor_operation/rettype_post_invoke_cs.cpp:
+ * TAO_IDL/be/be_visitor_operation/rettype_post_upcall_ss.cpp:
+ * TAO_IDL/be/be_visitor_operation/rettype_pre_invoke_cs.cpp:
+ * TAO_IDL/be/be_visitor_operation/rettype_vardecl_cs.cpp:
+ * TAO_IDL/be/be_visitor_operation/rettype_vardecl_ss.cpp:
+ * TAO_IDL/be/be_visitor_sequence/elemtype.cpp:
+ * TAO_IDL/be_include/be_visitor_argument/post_invoke_cs.h:
+ * TAO_IDL/be_include/be_visitor_argument/post_marshal_ss.h:
+ * TAO_IDL/be_include/be_visitor_argument/pre_invoke_cs.h:
+ * TAO_IDL/be_include/be_visitor_operation/rettype_assign_ss.h:
+ * TAO_IDL/be_include/be_visitor_operation/rettype_is.h:
+ * TAO_IDL/be_include/be_visitor_operation/rettype_marshal_ss.h:
+ * TAO_IDL/be_include/be_visitor_operation/rettype_post_invoke_cs.h:
+ * TAO_IDL/be_include/be_visitor_operation/rettype_post_upcall_ss.h:
+ * TAO_IDL/be_include/be_visitor_operation/rettype_pre_invoke_cs.h:
+ * TAO_IDL/be_include/be_visitor_operation/rettype_vardecl_cs.h:
+ * TAO_IDL/be_include/be_visitor_operation/rettype_vardecl_ss.h:
+ * TAO_IDL/be_include/be_visitor_sequence/elemtype.h:
+
+ Removed from the repository visitors that are no longer used.
+ Thanks to Gary Maxey <gary.maxey@hp.com> for pointing out
+ most of them.
+
+Sat Jun 11 14:43:18 2005 J.T. Conklin <jtc@acorntoolworks.com>
+
+ * orbsvcs/orbsvcs/Log/EventLogConsumer.cpp (push):
+ * orbsvcs/orbsvcs/Log/NotifyLogConsumer.cpp (push):
+
+ Add ACE_TRY_CATCH after call to write_recordlist() for emulated
+ exception builds.
+
+Sat Jun 11 13:18:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tao/PolicyFactory_Registry.cpp:
+ Fixed memory leak at the moment the registering of a policy
+ factory fails
+
+Sat Jun 11 12:46:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tests/RTCORBA/Linear_Priority/run_test.pl:
+ When the server can't be started end this test directly
+
+ * tao/RTCORBA/RT_ORBInitializer.{h,cpp}:
+ Changed the way we register the PolicyFactory. Don't store it as
+ member in the ORBInitializer, this gives problems now we start
+ loading the PI stuff on demand. The order of destruction seems to
+ be changed causing crashes in the RTCorba tests. This fixes these
+ crashes
+
+Sat Jun 11 11:52:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tao/Queued_Message.{h,inl,cpp}:
+ Removed the .inl file, it is empty
+
+Fri Jun 10 14:58:23 2005 J.T. Conklin <jtc@acorntoolworks.com>
+
+ * orbsvcs/orbsvcs/Makefile.am:
+ * tao/Makefile.am:
+
+ Regenerated.
+
+Fri Jun 10 13:07:04 2005 Ossama Othman <ossama@dre.vanderbilt.edu>
+
+ * tao/Collocation_Proxy_Broker.cpp:
+ * tao/Collocation_Proxy_Broker.h:
+ * tao/Connection_Handler.cpp:
+ * tao/Connection_Handler.inl:
+ * tao/GIOP_Message_Generator_Parser.cpp:
+ * tao/GIOP_Message_Generator_Parser.h:
+ * tao/Invocation_Adapter.cpp:
+ * tao/Invocation_Adapter.inl:
+ * tao/New_Leader_Generator.cpp:
+ * tao/New_Leader_Generator.h:
+ * tao/Object.cpp:
+ * tao/Object.i:
+ * tao/Policy_Manager.cpp:
+ * tao/Policy_Manager.i:
+ * tao/Queued_Message.cpp:
+ * tao/Queued_Message.inl:
+ * tao/SystemException.cpp:
+ * tao/SystemException.h:
+ * tao/UTF16_BOM_Translator.cpp:
+ * tao/UTF16_BOM_Translator.h:
+ * tao/Messaging/MessagingS.cpp:
+ * tao/Messaging/MessagingS.h:
+ * tao/PortableServer/PolicyS.cpp:
+ * tao/PortableServer/PolicyS.h:
+ * tao/PortableServer/Upcall_Command.cpp:
+ * tao/PortableServer/Upcall_Command.h:
+
+ Moved inlined virtual methods out of line. Inlinging them
+ causes RTTI issues when using g++ 4.0's hidden symbol
+ visibility.
+
+ * tao/Messaging/Asynch_Invocation_Adapter.cpp:
+ * tao/Messaging/Asynch_Invocation_Adapter.h (invoke):
+ * tao/Messaging/Asynch_Invocation_Adapter.inl:
+
+ Removed unnecessary virtual function override. All it was
+ forward the call to the base class implementation.
+
+ Removed empty inline source file.
+
+ * tao/Makefile.am:
+ * tao/tao.mpc:
+
+ Updated source file lists.
+
+Fri Jun 10 13:00:49 2005 Ossama Othman <ossama@dre.vanderbilt.edu>
+
+ * tao/PICurrent_Loader.h:
+
+ Include "tao/orbconf.h" to pull in default TAO_HAS_INTERCEPTORS
+ preprocessor symbol definition. Fixes link-time errors related
+ to missing static constructor definition.
+
+ * tao/PICurrent_Loader.cpp:
+
+ Reorganized include directives so that interceptor related
+ headers are not included when compile-time interceptor support
+ is not enabled.
+
+Fri Jun 10 12:51:44 2005 Ossama Othman <ossama@dre.vanderbilt.edu>
+
+ * TAO_IDL/be/be_visitor_interface/direct_proxy_impl_sh.cpp:
+ * TAO_IDL/be/be_visitor_interface/direct_proxy_impl_ss.cpp:
+ * TAO_IDL/be/be_visitor_valuetype/valuetype_ch.cpp:
+ * TAO_IDL/be/be_visitor_valuetype/valuetype_cs.cpp:
+
+ Generate out of line virtual methods. Inlined ones prevent RTTI
+ from working when enabling hidden symbols with g++ 4.0's
+ visibility support.
+
+ * tao/GIOP_Message_Generator_Parser_Impl.inl (check_revision):
+
+ Made "max_allowable_version" variable a static constant instead
+ of a non-const variable. Reduces run-time overhead since this
+ value may be computed at compile-time.
+
+Fri Jun 10 18:36:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tao/ORB.cpp:
+ * tao/ORB_Core.{h,i}:
+ * tao/PICurrent_Loader.{h,cpp}:
+ Fixed compile errors when interceptors are disabled
+
+Fri Jun 10 17:21:28 2005 Simon McQueen <sm@prismtech.com>
+
+ * orbsvcs/tests/Bug_2137_Regression/run_test.pl:
+
+ Fix wrong 'use lib'.
+
+Fri Jun 10 09:59:17 2005 Chad Elliott <elliott_c@ociweb.com>
+
+ * tao/default_client.cpp:
+
+ Ensure that all TAO related options are consistently case
+ insensitive.
+
+Fri Jun 10 13:16:27 UTC 2005 Jeff Parsons <j.parsons@vanderbilt.edu>
+
+ * TAO_IDL/fe/fe_extern (FE_generate_UUID):
+
+ Added arguments (which were passed by default value before) to
+ the generateUUID() call on the ACE UUID_GENERATOR singleton.
+ These arguments trigger the inclusion of the thread id in the
+ formation of the uuid, along with the process id and timestamp
+ that were already being used. In some experiments we have done
+ with the Visual Studio 2005 beta (which can take advantage of
+ multiple processors to do parallel builds), the process id
+ and timestamp alone were apparently not enough to ensure a
+ unique id when creating one for use in the temporary file name,
+ and multiple threads corresponding to multiple builds in the
+ same directory were trying to open temporary files with the
+ same name.
+
+Fri Jun 10 08:21:47 2005 Chad Elliott <elliott_c@ociweb.com>
+
+ * examples/RTScheduling/MIF_Scheduler/MIF_Scheduler.cpp:
+ * examples/RTScheduling/Thread_Task.cpp:
+
+ Addressed data initialization and memcpy issues which mainly
+ showed up in a 64-bit Solaris build.
+
+ * performance-tests/Cubit/TAO/MT_Cubit/Globals.cpp:
+
+ Use ACE_SCOPE_THREAD on AIX and MacOS X instead of
+ ACE_SCOPE_PROCESS since it's not supported.
+
+Fri Jun 10 07:51:36 2005 Phil Mesnier <mesnier_p@ociweb.com>
+
+ * docs/Options.html:
+ * tao/IIOP_Acceptor.cpp:
+ * tao/IIOP_Profile.cpp:
+ * tao/IIOP_Profile.h:
+ * tao/ORB_Core.cpp:
+ * tao/Tagged_Components.cpp:
+ * tao/Tagged_Components.h:
+ * tao/params.cpp:
+ * tao/params.h:
+ * tao/params.i:
+ * tao/PortableServer/Default_Acceptor_Filter.cpp:
+ * tests/AlternateIIOP:
+ * utils/catior/catior.cpp:
+
+ Added support for TAG_ALTERNATE_IIOP_ADDRESS to combine many
+ endpoints into a single profile when not using RTCORBA. This may
+ be overridden by using the ORB_init argument
+ -ORBUseSharedProfiles 0. It is enabled by default. Unlike the
+ TAO-specific TAO_TAG_ENDPOINTS, the TAG_ALTERNATE_IIOP_ADDRESS
+ component contains a single host:port pair, but many such
+ components may be added to a profile to carry as many endpoints
+ as required.
+
+Fri Jun 10 10:40:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tao/CodecFactory/*:
+ New CodecFactory library. When users want to use the CodecFactory
+ they have to include tao/CodecFactory/CodecFactory.h
+
+ * tao/Bind_Dispatcher_Guard.h:
+ Doxygen improvement
+
+ * tao/IOP_IOR.pidl:
+ Updated numbers for reliable multicast as mentioned in omg document
+ 03-01-11
+
+ * tao/CDR_Encaps_Codec.{h,cpp}:
+ * tao/CodecFactory.{h,cpp}:
+ These files are moved to the CodecFactory library
+
+ * tao/CodecFactory.mpc:
+ New MPC file for the CodecFactory library
+
+ * tao/ClientRequestInfo_i.h:
+ * tao/ClientRequestInterceptor_Adapter.{h,cpp}:
+ * tao/Collocated_Invocation.cpp:
+ * tao/Invocation_Base.cpp:
+ * tao/PICurrent_Copy_Callback.cpp:
+ * tao/Synch_Invocation.cpp:
+ * tao/TAO_Server_Request.h:
+ * tao/TSS_Resources.h:
+ * tao/Messaging/Asynch_Invocation.cpp:
+ * tao/PortableServer/ServerRequestInfo.h:
+ Changed includes and added some more forward declarations because
+ of reduced header dependencies
+
+ * tao/Tagged_Components.h:
+ Removed commented out code
+
+ * tao/tao.mpc:
+ Updated for all these changes
+
+ * tao/ClientRequestInfo_i.i:
+ Added needed include
+
+ * tao/CodecFactory_ORBInitializer.{h,cpp}:
+ Removed, we don't use an ORBInitializer anymore for the CodecFactory
+
+ * tao/ORB.cpp:
+ * tao/ORB_Core.{h,cpp,i}:
+ Changed the way we retrieve the CodecFactory and PICurrent. Instead
+ of an ORBInitializer we try to load them using svc.conf
+
+ * tao/ORBInitInfo.cpp:
+ Use svc.conf to get the CodecFactory instead of allocating a new
+ instance here
+
+ * tao/Parser_Registry.cpp:
+ Removed empty explicit template instantiation block
+
+ * tao/PICurrent.{h,cpp,inl}:
+ * tao/PICurrent_Impl.{h,cpp,inl}:
+ Moved TAO::PICurrent_Impl to its own file
+
+ * tao/PICurrent.pidl:
+ * tao/PICurrentA.cpp:
+ * tao/PICurrentC.{h,cpp}:
+ * tao/PICurrentS.h:
+ Moved PICurrent to its own file
+
+ * tao/PICurrent_Loader.{h,cpp}:
+ Use svc.conf to get PICurrent
+
+ * tao/PICurrent_ORBInitializer.{h,cpp}:
+ Removed these files
+
+ * tao/Policy_Manager.{h,cpp,i}:
+ * tao/Policy_Current.{h,cpp,inl}:
+ * tao/Policy_Current_Impl.{h,cpp,inl}:
+ Moved Policy_Current and Policy_Current_Impl to their own files
+
+ * tao/PortableInterceptor.pidl:
+ * tao/PortableInterceptorA.cpp:
+ * tao/PortableInterceptorC.{h,cpp}:
+ * tao/PortableInterceptorS.h:
+ Moved PICurrent out of this file and regenerated
+
+ * tao/Services_Activate.cpp:
+ Removed explicit templates
+
+ * tao/ServicesS_T.h:
+ Removed
+
+ * tao/orbconf.h:
+ Added deablfine for RootPOAManager name, will be used later
+
+ * tao/objectid.h:
+ Added define for POAManagerFactory
+
+ * tao/LocalObject.{h,cpp}:
+ Override _get_orb to throw a no implement with minor code 8
+
+ * tao/Object.{h,cpp}:
+ Added _get_orb()
+
+ * docs/libraries.html:
+ Added codecfactory
+
+ * tests/Bug_1693_Test/Bug_1693_Test.mpc:
+ * tests/Bug_1693_Test/client.cpp:
+ * tests/Codec/client.cpp:
+ * tests/Codec/Codec.mpc:
+ * tests/Portable_Interceptors/IORInterceptor/FOO_Client_ORBInitializer.cpp:
+ * tests/Portable_Interceptors/IORInterceptor/FOO_IORInterceptor_ORBInitializer.cpp:
+ * tests/Portable_Interceptors/IORInterceptor/PI_IORInterceptor.mpc:
+ * examples/Kokyu_dsrt_schedulers/EDF_Scheduler.cpp:
+ * examples/Kokyu_dsrt_schedulers/FP_Scheduler.cpp:
+ * examples/Kokyu_dsrt_schedulers/Kokyu_DSRT_Schedulers.mpc:
+ * examples/Kokyu_dsrt_schedulers/MIF_Scheduler.cpp:
+ * examples/Kokyu_dsrt_schedulers/MUF_Scheduler.cpp:
+ * orbsvcs/PSS/PSDL_Code_Gen.cpp:
+ * orbsvcs/orbsvcs/RTCosScheduling.mpc:
+ * orbsvcs/orbsvcs/RTCosScheduling/RTCosScheduling_ClientScheduler_i.cpp:
+ * orbsvcs/orbsvcs/RTCosScheduling/RTCosScheduling_ServerScheduler_i.cpp:
+ Updated because of new CodecFactory library
+
+Fri Jun 10 10:15:17 2005 Simon McQueen <sm@prismtech.com>
+
+ * tests/Bug_2144_Regression/Bug_2144_Regression.mpc:
+
+ Add valuetype to dependencies to (hopefully) fix Linux error.
+
+ * tao/Profile.cpp:
+
+ Fix warning on Linux.
+
+Thu Jun 10 08:40:00 UTC 2005 Simon Massey <sma@prismtech.com>
+
+ * tao/orbsvcs/tests/Bug_2137_Regression/client.cpp:
+ Corrected const char * problem.
+
+Thu Jun 9 18:49:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tao/Tagged_Components.h:
+ Removed commented out code
+
+Thu Jun 9 18:44:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tao/ServicesS_T.h:
+ Removed this file, was not included at all
+
+Thu Jun 9 18:41:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * orbsvcs/orbsvcs/FaultTolerance/ChangeLog:
+ Removed this file, we have a main changelog
+
+ * orbsvcs/orbsvcs/FaultTolerance/FT_ClientPolicy_i.cpp:
+ * orbsvcs/orbsvcs/FaultTolerance/FT_ClientRequest_Interceptor.cpp:
+ * orbsvcs/orbsvcs/FaultTolerance/FT_Invocation_Endpoint_Selectors.cpp:
+ * orbsvcs/orbsvcs/FaultTolerance/FT_Policy_i.cpp:
+ * orbsvcs/orbsvcs/FaultTolerance/FT_ServerRequest_Interceptor.cpp:
+ Minor formatting issues. Fixes bugzilla bug 2139. Thanks to
+ <jmegq at radiance dot com>
+
+Thu Jun 9 18:30:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tests/POA/Reference_Counting/*
+ New reference counting test, regression for bug 2142.
+ Thanks to Frank Pilhofer <fp@mc.com>
+
+Thu Jun 9 15:33:52 2005 Simon McQueen <sm@prismtech.com>
+
+ * TAO_IDL/be/be_visitor_union_branch/public_ci.cpp:
+
+ Change valuetype acessor declaration to return a pointer
+ rather than a _ptr.
+
+ This fixes bugzilla #2144.
+
+ * tests/Bug_2144_Regression/Bug_2144_Regression.mpc:
+ * tests/Bug_2144_Regression/README:
+ * tests/Bug_2144_Regression/test.cpp:
+ * tests/Bug_2144_Regression/test.idl:
+
+ Regression test for the above.
+
+Thu Jun 9 07:24:15 2005 J.T. Conklin <jtc@acorntoolworks.com>
+
+ * orbsvcs/orbsvcs/Log/EventLogConsumer.cpp (push):
+ * orbsvcs/orbsvcs/Log/NotifyLogConsumer.cpp (push):
+
+ Catch log service exceptions and rethrow the corresponding
+ system exception.
+
+Thu Jun 9 07:11:33 2005 J.T. Conklin <jtc@acorntoolworks.com>
+
+ * orbsvcs/orbsvcs/Log/Log_i.cpp (write_records, write_recordlist):
+ * orbsvcs/orbsvcs/Log/Log_i.h:
+
+ Add DsLogAdmin::LogOffDuty to exception specification.
+
+Thu Jun 9 07:05:36 2005 J.T. Conklin <jtc@acorntoolworks.com>
+
+ * orbsvcs/orbsvcs/Makefile.am:
+
+ Regenerate.
+
+ * orbsvcs/orbsvcs/Security.mpc:
+
+ Add security_export.h to Header File section.
+
+Thu Jun 9 12:54:41 2005 Simon McQueen <sm@prismtech.com>
+
+ * orbsvcs/orbsvcs/FaultTolerance/FT_Service_Callbacks.cpp:
+ * orbsvcs/orbsvcs/FaultTolerance/FT_Service_Callbacks.h:
+ * tao/ORB_Core.h:
+ * tao/ORB_Core.i:
+ * tao/Profile.cpp:
+ * tao/Profile.h:
+ * tao/Service_Callbacks.cpp:
+ * tao/Service_Callbacks.h:
+
+ Changed the signature of the service callbacks is_equivalent
+ hook so that a service can completely override the default
+ profile comparison mechanism as required by the FT spec.
+
+ This fixes bugzilla # 2137.
+
+ * orbsvcs/tests/Bug_2137_Regression/Bug_2137_Regression.mpc:
+ * orbsvcs/tests/Bug_2137_Regression/client.cpp:
+ * orbsvcs/tests/Bug_2137_Regression/ep1.ior:
+ * orbsvcs/tests/Bug_2137_Regression/ep1_d1_g1_v1.ior:
+ * orbsvcs/tests/Bug_2137_Regression/ep1_d1_g1_v2.ior:
+ * orbsvcs/tests/Bug_2137_Regression/ep1_d1_g2_v1.ior:
+ * orbsvcs/tests/Bug_2137_Regression/ep1_d2_g1_v1.ior:
+ * orbsvcs/tests/Bug_2137_Regression/ep2.ior:
+ * orbsvcs/tests/Bug_2137_Regression/ep2_d1_g1_v1.ior:
+ * orbsvcs/tests/Bug_2137_Regression/ep2_d1_g1_v2.ior:
+ * orbsvcs/tests/Bug_2137_Regression/ep2_d1_g2_v1.ior:
+ * orbsvcs/tests/Bug_2137_Regression/ep2_d2_g1_v1.ior:
+ * orbsvcs/tests/Bug_2137_Regression/README:
+ * orbsvcs/tests/Bug_2137_Regression/run_test.pl:
+
+ Committed regression test for the above.
+
+Thu Jun 9 09:31:28 2005 Simon McQueen <sm@prismtech.com>
+
+ * NEWS:
+
+ Updated with late release note submissions.
+
+Wed Jun 08 08:46:48 2005 Simon McQueen <sm@prismtech.com>
+
+ * TAO version 1.4.6 released.
+
+Wed Jun 8 11:21:50 2005 Simon McQueen <sm@prismtech.com>
+
+ * NEWS:
+
+ Updated with release note entries.
+
+Mon Jun 6 18:05:52 2005 unknown <michel_j@ociweb.com>
+
+ * orbsvcs/ImplRepo_Service/Locator_Repository.cpp:
+
+ Escape more strings written to the xml file. This should fix bug 2129.
+
+Mon Jun 6 16:48:21 2005 <cleeland_c@ociweb.com>
+
+ * tao/IIOP_Acceptor.cpp (create_new_profile): Reverse the order of
+ comparisons so that port numbers get compared first. This
+ should make comparisons marginally faster when hostnames are
+ ridiculously long if the ports don't match.
+
+ * tao/IIOP_Acceptor.cpp (create_shared_profile): Make port numbers
+ a part of the comparison so that RTCORBA connections work
+ properly.
+
+Mon Jun 6 02:10:32 2005 Ossama Othman <ossama@dre.vanderbilt.edu>
+
+ * tao/TypeCode.cpp (equivalent):
+
+ Pass the unaliased TypeCode to the subclass equivalent_i()
+ template method instead of the potentially aliased one. Fixes
+ equivalence failures between an aliased TypeCode and unaliased
+ TypeCode. Thanks to Jiang Wei <jiangwei_1976 at yahoo dot com
+ dot cn> for reporting the problem and providing a simple test
+ case. [Bug 2140]
+
+Fri Jun 3 10:21:50 2005 Ossama Othman <ossama@dre.vanderbilt.edu>
+
+ * tests/Any/Recursive/client.cpp:
+
+ Fixed unused argument warnings in emulated exception builds.
+
+ Fixed syntax errors in minimum CORBA builds.
+
+Fri Jun 3 09:17:13 2005 Chris Cleeland <cleeland_c@ociweb.com>
+
+ * tests/IOR_Endpoint_Hostnames/list_interfaces.cpp (main):
+
+ Since this code was copied from
+ TAO_IIOP_Acceptor::probe_interfaces(), update this code to look
+ like the code there. This was also in response to seemingly
+ nonsense complaints on one platform in the line containing
+ ACE_static_cast(), so hopefully the change to static_cast<>
+ remedies that as well.
+
+Fri Jun 3 14:49:14 2005 Simon McQueen <sm@prismtech.com>
+
+ * orbsvcs/tests/FaultTolerance/GroupRef_Manipulation/Server_Request_Interceptor.cpp:
+
+ This test was trying to use the old (and superior :-) ) form
+ of the FT service context and was subsequently failing to
+ extract the group version correctly. Fixed.
+
+Thu Jun 2 14:04:23 2005 Justin Michel <michel_j@ociweb.com>
+
+ * orbsvcs/ImplRepo_Service/ImR_Locator_i.cpp:
+
+ Fix exception macros.
+
+Thu Jun 2 11:06:05 2005 Justin Michel <michel_j@ociweb.com>
+
+ * orbsvcs/examples/ImR/Advanced/TestServer.cpp:
+
+ Add an explicit constructor to work around BCB6 compiler
+ warnings about implicit char* to string conversion.
+
+Thu Jun 2 09:10:38 2005 Chris Cleeland <cleeland_c@ociweb.com>
+
+ * tests/IOR_Endpoint_Hostnames/generate_ior.cpp (main): Added
+ explicit OrbId to ORB_init() call to fix errors on emulated
+ exception builds.
+
+Thu Jun 2 07:04:11 2005 J.T. Conklin <jtc@acorntoolworks.com>
+
+ * orbsvcs/orbsvcs/Makefile.am:
+
+ Regenerate.
+
+ * orbsvcs/orbsvcs/Svc_Utils.mpc:
+
+ Add svc_utils_export.h to Header File section.
+
+Thu Jun 2 09:19:50 2005 Simon McQueen <sm@prismtech.com>
+
+ * orbsvcs/ImplRepo_Service/ImR_Activator_i.cpp:
+
+ Exception macro fix. Thanks to jmegq@radiance.com for the
+ report and fix. This fixes bug #2135.
+
+Wed Jun 1 14:05:31 2005 Justin Michel <michel_j@ociweb.com>
+
+ * orbsvcs/tests/ImplRepo/run_test.pl:
+
+ Fix the persistent_ir test for unix platforms.
+
+Wed Jun 1 09:26:14 2005 Justin Michel <michel_j@ociweb.com>
+
+ * orbsvcs/ImplRepo_Service/ImR_Activator_i.cpp:
+
+ More fixes for exception macros.
+
+Wed Jun 1 08:19:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tao/PortableServer/Root_POA.cpp:
+ Increment refcount on the servant in the id_to_servant method.
+
+ * tests/POA/Identity/Identity.cpp:
+ Use ServantBase_var to store the servant pointer
+
+Wed Jun 1 02:50:28 2005 Balachandran Natarajan <bala@dre.vanderbilt.edu>
+
+ * tests/Muxing/Receiver.h:
+
+ Removed inheritance from PortableServer::RefcountServantBase
+ since reference is on by default. Please see "Thu May 26
+ 10:17:12 UTC 2005 Johnny Willemsen
+ <jwillemsen@remedy.nl>". Many tests need to be changed
+ similarly.
+
+ * tests/Muxing/svc.conf:
+
+ Added -ORBConnectionCacheMax option to the test.
+
+Tue May 31 22:43:10 2005 <cleeland_c@ociweb.com>
+
+ * tests/IOR_Endpoint_Hostnames/list_interfaces.cpp (main):
+ * tests/IOR_Endpoint_Hostnames/generate_ior.cpp (main):
+
+ Fixed warnings related to unused args or variables.
+
+Tue May 31 19:28:48 UTC 2005 Jeff Parsons <j.parsons@vanderbilt.edu>
+
+ * TAO_IDL/be/be_codegen.cpp:
+ * TAO_IDL/be/be_visitor_exception/exception_ch.cpp:
+ * TAO_IDL/be/be_visitor_exception/exception_cs.cpp:
+ * TAO_IDL/include/utl_err.h:
+ * TAO_IDL/util/utl_err.cpp:
+
+ Since the typecode of a user-defined IDL exception is required
+ by any IDL operation that raises it, changed the logic of the
+ -St option to be ignored for user exceptions. An informative
+ message is also output for each user exception encountered if
+ the -St option is used. Formerly, the simultaneous appearance
+ of -St and user exceptions would be made apparent only by a
+ C++ compile failure.
+
+ * docs/compiler.html:
+
+ Updated IDL compiler documentation to reflect the above change.
+
+Tue May 31 10:08:27 2005 Justin Michel <michel_j@ociweb.com>
+
+ * tao/IIOP_Endpoint.cpp:
+
+ Add ACE_UNUSED_ARG for variable only used in assert.
+
+Tue May 31 09:19:10 2005 Chris Cleeland <cleeland@ociweb.com>
+
+ * orbsvcs/orbsvcs/PortableGroup/UIPMC_Acceptor.cpp (dotted_decimal_address):
+
+ Removed '#if 0' bracketing around this method. I don't know why
+ this method was removed in the first place, but the originator
+ of that change is unavailable for consultation for the next
+ week, so I will err on the side of making things compile.
+
+ * tests/IOR_Endpoint_Hostnames/IOR_Endpoint_Hostnames.mpc:
+ * tests/IOR_Endpoint_Hostnames/bogus_i.h:
+
+ Fixed fuzz build errors related to RCS Id strings and MSC
+ version checks, etc.
+
+Tue May 31 09:05:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tao/ORBInitializer_Registry.cpp:
+ Reverted my change of Mon May 30 13:14:12 UTC 2005. With my change
+ we are 3.0.3 corba compliant but this is not usable for our users.
+ The draft 3.1 seems to describe the wanted behaviour better. I keep
+ the regression test in the archive, the bugzilla entry is reopened.
+ We will look at bug 2088 again
+
+Mon May 30 22:19:54 2005 Balachandran Natarajan <bala@dre.vanderbilt.edu>
+
+ * tao/Transport.h (post_connect_hook):
+ * tao/Transport.cpp:
+
+ Added post_connect_hook () method which is invoked just after
+ connection establishment (or after a connection is fetched from
+ cache). The return value signifies whether the invoker should
+ proceed with post connection establishment
+ activities or not. There are a wide range of use cases, for
+ example protocols like SSLIOP need this to verify whether
+ connections already established have valid
+ certificates. Validation of certificates/credentials can be done
+ inside this method. Implementations of this method can even
+ tear down the connection, and return a false to the
+ invoker. There are no pre_connect_hooks () since the transport
+ doesn't exist before a connection establishment. :-). A default
+ noop implementation has been provided.
+
+ * tao/Transport_Connector.cpp:
+
+ Invoke post_connect_hook () after grabbing a connection from
+ cache.
+
+Mon May 30 22:11:35 2005 Chris Cleeland <cleeland@ociweb.com>
+
+ * tests/IOR_Endpoint_Hostnames/bogus_i.cpp:
+ * tests/IOR_Endpoint_Hostnames/generate_ior.cpp:
+
+ Fix ACE_RCSID macro usage that prevented compilation.
+
+Mon May 30 18:27:22 UTC 2005 Jeff Parsons <j.parsons@vanderbilt.edu>
+
+ * TAO_IDL/include/ast_module.h:
+ * TAO_IDL/include/utl_scope.h:
+ * TAO_IDL/util/utl_scope.cpp:
+
+ Fixed discrepancies in the signature of look_in_previous()
+ between the no-op UTL_Scope version and the AST_Module
+ version. These discrepancies were causing warnings with
+ the Borland compiler.
+
+Mon May 30 10:23:27 2005 J.T. Conklin <jtc@acorntoolworks.com>
+
+ * orbsvcs/orbsvcs/Log/Log_i.cpp (get_log_qos, set_log_qos):
+
+ Fixed compilation on systems where new() does not throw an
+ exception on failure (i.e. ACE_NEW_THROWS_EXCEPTIONS is not
+ set).
+
+Mon May 30 13:14:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tests/Portable_Interceptors/Bug_2088/*:
+ Added a regression for bugzilla bug 2088. When an ORBInitializer
+ throws an exception, this should be ignored and the next
+ ORBInitializer should be called. Previously an exception was
+ propagated back to the caller of ORB::init(). See also 21.7.3.1
+ of the corba spec.
+
+ * tao/ORBInitializer_Registry.cpp:
+ Fixed bug 2088, catch exceptions locally.
+
+Mon May 30 12:25:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tao/Cleanup_Func_Registry.h:
+ Removed not needed friend classes
+
+Sat May 28 08:59:32 2005 Emre Turkay <turkaye@dre.vanderbilt.edu>
+
+ * tests/Sequence_Unit_Tests/Sequence_Unit_Tests.mpc:
+
+ Now there is an mpb file in ACE_MPC for the boost related
+ settings. Changed the mpc base project accordingly.
+
+Fri May 27 20:14:56 2005 J.T. Conklin <jtc@acorntoolworks.com>
+
+ * orbsvcs/orbsvcs/Log/Log_i.cpp (check_grammar):
+
+ Changed to accept TCL, ETCL, and EXTENDED_TCL like the
+ Notification Service.
+
+Fri May 27 15:19:57 2005 J.T. Conklin <jtc@acorntoolworks.com>
+
+ * orbsvcs/orbsvcs/Log/Log_i.cpp:
+ * orbsvcs/orbsvcs/Log/Log_i.h:
+
+ Changed class to store a single QoS property instead of list, as
+ the currently specified properties are mutually exclusive. This
+ greatly simplifies the get_log_qos and set_log_qos methods.
+
+ Changed set_log_qos to return all of the unknown/unsupported QoS
+ properties when throwing the UnsupportedQoS exception.
+
+Fri May 27 17:01:24 2005 Chris Cleeland <cleeland_c@ociweb.com>
+
+ * orbsvcs/orbsvcs/SSLIOP/SSLIOP_Connection_Handler.cpp:
+ * tao/IIOP_Connection_Handler.cpp:
+
+ Corrected a problem whereby, when listen points received in a
+ bidirectional context get processed, the key for the entry made
+ in the transport cache was created using the receiver's notion
+ of whether dotted decimal addresses (-ORBDottedDecimalAddresses)
+ should be used, rather than how the listen points were sent by
+ the sender. In doing so, when, for example, a CORBA server was
+ using -ORBDottedDecimalAddresses and the client was not, the
+ client's listen point got cached using its IP address rather
+ than its hostname. However, all the IORs distributed by the
+ client would use the hostname, and, thus, the server would not
+ be able to find a match for the client's endpoint in its cache,
+ and subsequently try to create a new one.
+
+ The change now creates an entry in the cache using, for the
+ hostname portion of the key, the host name however the client
+ sent the hostname. This should insure that a receiver of a
+ bidirectional context will have the ability to find a match in
+ the transport cache.
+
+ This change supercedes the following changelog entry:
+
+ Thu Sep 13 11:05:13 2001 Balachandran Natarajan <bala@cs.wustl.edu>
+
+ * orbsvcs/orbsvcs/SSLIOP/SSLIOP_Connection_Handler.cpp:
+ * tao/IIOP_Connection_Handler.cpp (process_listen_point_list):
+
+ When creating an IIOP Endpoint, passed in the value of the
+ ORBDottedDecimal address value from the ORB_Core. This is a real
+ stupid mistake :(. Added a debug statement. Thanks to Werner
+ Buchert <w.buchert@medat.de> for reporting this problem.
+
+ * tao/IIOP_Connection_Handler.cpp:
+ * orbsvcs/orbsvcs/PortableGroup/UIPMC_Acceptor.cpp:
+ * tao/IIOP_Acceptor.h:
+ * tao/IIOP_Acceptor.cpp:
+ * tao/IIOP_Transport.cpp:
+
+ Modified the IIOP Acceptor so that the behavior for the host
+ identifier (hostname or IP address) that appears in IIOP
+ profiles is consistent with the following:
+
+ 1. value from "hostname_in_ior", if specified;
+ 2. setting of -ORBDottedDecimalAddresses option
+ 3. value for <hostname> used in -ORBEndpoint iiop://<hostname>
+ 4. whatever TAO magically comes up with
+
+ The significant change here is that previous to this change,
+ numbers 1 and 2 were reversed, i.e., -ORBDottedDecimalAddresses
+ took precedence over hostname_in_ior.
+
+ * tests/IOR_Endpoint_Hostnames/IOR_Endpoint_Hostnames.mpc:
+ * tests/IOR_Endpoint_Hostnames/bogus.idl:
+ * tests/IOR_Endpoint_Hostnames/bogus_i.cpp:
+ * tests/IOR_Endpoint_Hostnames/bogus_i.h:
+ * tests/IOR_Endpoint_Hostnames/generate_ior.cpp:
+ * tests/IOR_Endpoint_Hostnames/list_interfaces.cpp:
+ * tests/IOR_Endpoint_Hostnames/run_test.pl:
+
+ Added a new functionality/regression test for the change listed
+ above. The run_test.pl prints out a matrix for permutations and
+ expected results, and indicates whether each permutation
+ succeeds or fails. It also depends upon a new option to catior,
+ found in the next entry.
+
+ * orbsvcs/tests/Security/BiDirectional/server.conf:
+
+ Removed some hardcoded paths to OCI personal home directories.
+
+ * utils/catior/catior.cpp:
+
+ Added a "-x" option that works like "-f" except that it reads
+ the IOR from standard input (stdin or cin) rather than from a
+ file. This makes catior much more like the unix "cat" command,
+ and enables it to be used in a pipeline.
+
+Fri May 27 15:54:44 2005 Justin Michel <michel_j@ociweb.com>
+
+ * docs/Options.html:
+ * tao/IIOP_Connector.cpp:
+ * tao/IIOP_Endpoint.h:
+ * tao/IIOP_Endpoint.cpp:
+ * tao/IIOP_Profile.cpp:
+ * tao/params.cpp:
+
+ Reimplemented the -ORBPreferredInterfaces option to support
+ wildcards.
+
+Fri May 27 15:30:21 2005 Justin Michel <michel_j@ociweb.com>
+
+ * orbsvcs/ImplRepo_Service/Activator_NT_Service.h:
+ * orbsvcs/ImplRepo_Service/Locator_NT_Service.h:
+ * tao/TypeCode_Base_Attributes.h:
+ * tao/TypeCode_Case.h:
+ * tao/TypeCode_Case_T.h:
+ * tao/TypeCode_Struct_Field.h:
+ * tao/TypeCode_Value_Field.h:
+ * utils/wxNamingViewer/pch.h:
+
+ These files #included config.h which isn't safe, because it
+ won't necessarilly pick up the correct symbols. For example, I
+ caught this by trying to build ACE on Windows with
+ __ACE_INLINE__ = 0. The files that #included config.h directly
+ saw that it was defined as 0, but changing them to #include
+ config-all.h instead, correctly saw that the symbol was
+ undefined.
+
+Fri May 27 13:12:10 2005 Ossama Othman <ossama@dre.vanderbilt.edu>
+
+ * tests/Any/Recursive/Test.idl:
+
+ Added new user exception to be used when reporting Any
+ demarshaling errors.
+
+ * tests/Any/Recursive/client.cpp:
+
+ Fixed unused argument warnings.
+
+ Use the new user exception when report Any demarshaling
+ failures, instead of CORBA::INV_OBJREF.
+
+Fri May 27 08:50:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tests/POA/Default_Servant/Default_Servant.cpp:
+ Slightly modified this test to test reference_to_servant with
+ reference counting
+
+ * tests/POA/Deactivate_Object/server.cpp:
+ Added a call to reference_to_servant. This as a regression for
+ a bug where we didn't increment the reference count on the
+ servant before returning it.
+
+ * tao/PortableServer/Root_POA.cpp (reference_to_servant_i):
+ Increment the reference count on the servant before returning it.
+ Thanks to Konstantinos Lykiardopoulos <klyk at intracom dot gr>
+ and Lothar Werzinger <lothar at xcerla dot com> for reporting
+ this problem.
+
+ * tao/PortableServer/RequestProcessingStrategyDefaultServant.cpp:
+ In system_id_to_servant() don't increment the refcount on the
+ servant, this is done by the POA.
+
+Fri May 27 08:36:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tao/PortableServer/Servant_Base.cpp:
+ Fixed typo in comment
+
+Fri May 27 08:25:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * orbsvcs/orbsvcs/Log/EventLogFactory_i.cpp:
+ * orbsvcs/orbsvcs/Log/NotifyLogFactory_i.cpp:
+ * orbsvcs/orbsvcs/Log/RTEventLogFactory_i.cpp:
+ Fixed conversion warnings
+
+Fri May 27 00:36:32 2005 Ossama Othman <ossama@dre.vanderbilt.edu>
+
+ * tests/Any/Recursive/Hello.cpp:
+ * tests/Any/Recursive/Hello.h:
+ * tests/Any/Recursive/README:
+ * tests/Any/Recursive/RecursiveHello.mpc:
+ * tests/Any/Recursive/Test.idl:
+ * tests/Any/Recursive/client.cpp:
+ * tests/Any/Recursive/run_test.pl:
+ * tests/Any/Recursive/server.cpp:
+
+ New test that verifies properly functioning recursive type Any
+ insertion and extraction support. It also indirectly verifies
+ that recursive TypeCode support is working.
+
+Thu May 26 16:09:50 2005 Justin Michel <michel_j@ociweb.com>
+
+ * orbsvcs/ImplRepo_Service/ImR_Activator_i.cpp:
+
+ Functions with two or more try blocks must use ACE_TRY_EX.
+
+ * orbsvcs/examples/ImR/Advanced/TestClient.cpp:
+
+ Use getline() instead of operator>> to read in lines of
+ text from a file into a std::string. Use string::c_str() with
+ operator<< instead of relying on existence of ostream extraction
+ operators for strings. A more useful solution might be to
+ provide insertion/extraction operators for platforms that are
+ missing them.
+
+Thu May 26 16:02:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * orbsvcs/orbsvcs/RTCosScheduling/RTCosScheduling_ClientScheduler_i.cpp:
+ * orbsvcs/orbsvcs/RTCosScheduling/RTCosScheduling_ServerScheduler_i.cpp:
+ Updated for interceptor_list changes
+
+Thu May 26 14:33:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tao/Interceptor_List.cpp:
+ Fixed gnu warning
+
+Thu May 26 10:42:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ Made the Interceptor_List a template which is now used instead of a
+ base class with derived specific list classes. This is now in the TAO
+ namespace instead of using a TAO_ prefix.
+
+ * tao/Interceptor_List.{h,cpp}:
+ The Interceptor_List is now a template
+
+ * tao/ClientRequestInterceptor_List.{h,cpp,inl}:
+ * tao/ServerRequestInterceptor_List.{h,cpp,inl}:
+ * tao/IORInterceptor/IORInterceptor_List.{h,cpp,inl}:
+ Removed these files, we have now template instantiations instead
+ of specific classes
+
+ * tao/ORB_Core.{h,cpp,i}:
+ Update for changes above.
+
+ * tao/IORInterceptor_Adapter.h:
+ Updated for interceptor list change
+
+ * tao/IORInterceptor/IORInterceptor_Adapter_Impl.h:
+ Updated for interceptor_list change and also implemented
+ adapter_state_changed in this class because we don't have
+ a specific IORInterceptor list anymore where this was
+ implemented.
+
+ * tao/ClientRequestInterceptor_Adapter.{h,cpp,inl}:
+ Updated because of ClientInterceptorList change
+
+ * PortableServer/ServerInterceptorAdapter.h:
+ Updated because of ServerRequestInterceptor List change
+
+ * tao/tao.mpc:
+ * tao/Makefile.am:
+ Updated for changes above
+
+Thu May 26 10:17:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ According to the latest C++ mapping, reference counting is mandatory;
+ the RefCountServantBase class is now a legacy artifact. Thanks to
+ Frank Pilhofer <fpilhofe at mc dot com> for reporting this.
+ This fixes bugzilla [1952].
+
+ * tao/Abstract_Servant_Base.{h,cpp}:
+ Made the add_ref/remove_ref methods pure virtual and added
+ _refcount_value
+
+ * tao/PortableServer/Servant_Base.{h,cpp}:
+ Added reference counting to TAO_ServantBase and removed
+ TAO_RefCountServantBase
+
+ * tao/PortableServer/PS_ForwardC.h:
+ Make RefCountServantBase a noop struct
+
+ * tao/PortableServer/diffs/PS_Forward.diff:
+ Updated
+
+Thu May 26 09:23:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tao/Profile.h:
+ Removed commented out code
+
+ * tao/QtResource_Factory.h:
+ Doxygen improvement
+
+Thu May 26 08:53:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tests/Portable_Interceptors/Collocated/Dynamic/interceptors.cpp:
+ Retrieve the object_id in the receive_request. According to
+ Konstantinos Lykiardopoulos <klyk at intracom dot gr> this failed
+ with the 1.4.5 release of TAO but it works now again. Added this
+ as regression so that we don't have a problem in the future again
+
+Thu May 26 07:49:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tao/ImR_Client/ImplRepo.pidl:
+ * tao/ImR_Client/ServerObject.pidl:
+ Updated regeneration instructions
+
+Thu May 26 07:30:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tao/PortableServer/LifespanStrategyPersistent.cpp:
+ Also add a process directive that uses the xml svc.conf way of
+ specifying this. This fixes bugzilla 2127. Thanks to Lothar
+ Werzinger <lothar at xcerla dot com> for reporting this.
+
+Wed May 25 23:42:43 2005 J.T. Conklin <jtc@acorntoolworks.com>
+
+ * orbsvcs/Logging_Service/Basic_Logging_Service/Basic_Logging_Service.cpp:
+ * orbsvcs/Logging_Service/Event_Logging_Service/Event_Logging_Service.cpp:
+ * orbsvcs/Logging_Service/Notify_Logging_Service/Notify_Logging_Service.cpp:
+
+ Changed to pass the ORB pointer to the factories' activate()
+ method.
+
+ * orbsvcs/Logging_Service/RTEvent_Logging_Service/RTEvent_Logging_Service.cpp:
+ Changed to pass the ORB pointer to the factory's init() method.
+
+ * orbsvcs/orbsvcs/Log/BasicLogFactory_i.cpp
+ * orbsvcs/orbsvcs/Log/BasicLogFactory_i.h
+ * orbsvcs/orbsvcs/Log/EventLogFactory_i.cpp
+ * orbsvcs/orbsvcs/Log/EventLogFactory_i.h
+ * orbsvcs/orbsvcs/Log/NotifyLogFactory_i.cpp
+ * orbsvcs/orbsvcs/Log/NotifyLogFactory_i.h
+
+ Changed to stash away ORB pointer in the activate() method, and
+ to pass it to the Log servant constructors.
+
+ * orbsvcs/orbsvcs/Log/RTEventLogFactory_i.cpp
+ * orbsvcs/orbsvcs/Log/RTEventLogFactory_i.h
+
+ Changed to stash away ORB pointer in the init() method, and to
+ pass it to the RTEventLog servant constructor.
+
+ * orbsvcs/orbsvcs/Log/Log_i.cpp
+ * orbsvcs/orbsvcs/Log/Log_i.h
+ * orbsvcs/orbsvcs/Log/BasicLog_i.cpp
+ * orbsvcs/orbsvcs/Log/BasicLog_i.h
+ * orbsvcs/orbsvcs/Log/EventLog_i.cpp
+ * orbsvcs/orbsvcs/Log/EventLog_i.h
+ * orbsvcs/orbsvcs/Log/NotifyLog_i.cpp
+ * orbsvcs/orbsvcs/Log/NotifyLog_i.h
+ * orbsvcs/orbsvcs/Log/RTEventLog_i.cpp
+ * orbsvcs/orbsvcs/Log/RTEventLog_i.h
+
+ Changed constructor to take an ORB pointer instead of a Reactor
+ pointer. The latter had defaulted to use the Reactor Singleton
+ instance, but using the servant ORB's reactor ensures the event
+ loop will be active. Curiously, the old reactor pointer wasn't
+ being used. That will change soon, as we'll be adding timer
+ handlers for database flush and compaction.
+
+Wed May 25 20:21:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * orbsvcs/examples/CosEC/RtEC_Based/tests/Basic/CosEC_RtEC_Based_tests_Basic.mpc:
+ Use rtevent_serv as base project
+
+Wed May 25 20:17:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * orbsvcs/Logging_Service/RTEvent_Logging_Service/RTEvent_Logging_Service.mpc:
+ Changed order of the projects.
+
+Wed May 25 12:24:36 2005 Ossama Othman <ossama@dre.vanderbilt.edu>
+
+ * tao/DynamicInterface/Unknown_User_Exception.h (_type):
+ * tao/DynamicInterface/Unknown_User_Exception.h (_type):
+
+ Renamed this method to "_tao_type" since it is meant to be an
+ override for the CORBA::Exception::_tao_type() base class
+ method. Addresses CORBA::UnknownUserException Any insertion
+ problems.
+
+Tue May 24 21:13:46 2005 Ossama Othman <ossama@dre.vanderbilt.edu>
+
+ * tao/Invocation_Adapter.cpp (invoke_collocated_i):
+
+ Updated ACE_ASSERT condition to reflect new thru POA case.
+ Thanks to Lothar Werzinger for reporting the assertion.
+
+Tue May 24 19:57:43 2005 J.T. Conklin <jtc@acorntoolworks.com>
+
+ * orbsvcs/Event_Service/Makefile.am:
+ * orbsvcs/Logging_Service/RTEvent_Logging_Service/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/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/Basic/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/FtRtEvent/Makefile.am:
+
+ Regenerate for removal of RTOLDEvent and split of RTEvent
+ libraries.
+
+ * orbsvcs/Time_Service/Makefile.am:
+ * orbsvcs/orbsvcs/Makefile.am:
+
+ Regenerate for change below.
+
+ * orbsvcs/orbsvcs/CosTime.mpc:
+
+ Inherit from svc_utils.
+
+ * orbsvcs/orbsvcs/Time/TAO_Time_Service_Server.cpp:
+
+ Use new ORBSVCS_Time::Time_Value_to_TimeT() method from the
+ Svc_Utils library to convert timestamp to a TimeBase::TimeT.
+
+ * orbsvcs/orbsvcs/Log/NotifyLogConsumer.cpp:
+ * orbsvcs/orbsvcs/Log/NotifyLogConsumer.h:
+
+ The specification requires that a structured or typed event
+ should be stored as an Any as specified by the Notification
+ Service, so connect to the channel as an Any consumer.
+
+Tue May 24 14:29:14 2005 J.T. Conklin <jtc@acorntoolworks.com>
+
+ * orbsvcs/orbsvcs/Makefile.am:
+
+ Regenerated.
+
+Tue May 24 14:15:36 2005 J.T. Conklin <jtc@acorntoolworks.com>
+
+ * orbsvcs/orbsvcs/RTEvent.mpc:
+ * orbsvcs/orbsvcs/RTEvent_Serv.mpc:
+ * orbsvcs/orbsvcs/RTEvent_Skel.mpc:
+
+ Removed RTEvent MPC group. This causes problems when project
+ Makefile.am's are aggregated.
+
+Tue May 24 11:59:37 2005 J.T. Conklin <jtc@acorntoolworks.com>
+
+ * orbsvcs/orbsvcs/Time_Utilities.cpp:
+ * orbsvcs/orbsvcs/Time_Utilities.h:
+ * orbsvcs/orbsvcs/Time_Utilities.i:
+
+ Updated comments to Doxygen format.
+
+ Added new methods for converting absolute timestamps between
+ ACE_Time_Value and TimeBase::TimeT.
+
+Tue May 24 10:32:31 2005 J.T. Conklin <jtc@acorntoolworks.com>
+
+ * orbsvcs/orbsvcs/Makefile.am:
+
+ Regenerated.
+
+Tue May 24 10:58:53 2005 Justin Michel <michel_j@ociweb.com>
+
+ * orbsvcs/ImplRepo_Service/Locator_Repository.cpp:
+
+ Add missing include.
+
+Tue May 24 09:47:52 2005 Justin Michel <michel_j@ociweb.com>
+
+ * orbsvcs/examples/ImR/Advanced/TestServer.cpp:
+
+ Disable fuzz check, because it can't detect the try/catch
+ in the calling function.
+
+Tue May 24 09:14:57 2005 Justin Michel <michel_j@ociweb.com>
+
+ * orbsvcs/examples/ImR/Advanced/TestServer.h:
+ * orbsvcs/examples/ImR/Advanced/TestServer.cpp:
+
+ This example was simply copied from 1.4a, and I forgot to make
+ the adjustments required by the POA refactoring.
+
+ * tao/ImR_Client/ImplRepoC.h:
+
+ The ImplRepo.pidl had #include ServerObject.pidl, but didn't include
+ ServerObjectC.h. For now, I manually added the include, but this isn't
+ a final solution.
+
+Mon May 23 14:50:27 2005 Justin Michel <michel_j@ociweb.com>
+
+ * orbsvcs/examples/ImR/Advanced/Advanced.mpc:
+
+ Changed from requires += exceptions to inheriting from exceptions. Hopefully
+ this will eliminate fuzz errors.
+
+Mon May 23 18:47:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * docs/tutorials/Quoter/RT_Event_Service/Quoter_RT_Event_Service.mpc:
+ Updated for RTEvent library split
+
+Mon May 23 18:44:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * examples/Simulator/Event_Supplier/Event_Supplier.mpc:
+ Updated for RTEvent library split
+
+Mon May 23 13:24:41 2005 Justin Michel <michel_j@ociweb.com>
+
+ * tao/ImR_Client/ImplRepo.pidl:
+ * tao/ImR_Client/ImplRepoA.cpp:
+ * tao/ImR_Client/ImplRepoC.h:
+ * tao/ImR_Client/ImplRepoC.inl:
+ * tao/ImR_Client/ImplRepoC.cpp:
+ * tao/ImR_Client/ImplRepoS.h:
+ * tao/ImR_Client/ImplRepoS.cpp:
+
+ Re-added the -GA option and updated the command in the pidl to save
+ footprint for static builds.
+
+Mon May 23 18:08:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * orbsvcs/orbsvcs/Event/ECG_Mcast_Gateway.{h,cpp}:
+ Fixed service config macros
+
+Mon May 23 12:38:31 2005 Justin Michel <michel_j@ociweb.com>
+
+ * orbsvcs/ImplRepo_Service/Activator_Options.cpp:
+ * orbsvcs/ImplRepo_Service/ImR_Activator.cpp:
+ * orbsvcs/ImplRepo_Service/ImR_Activator.idl:
+ * orbsvcs/ImplRepo_Service/ImR_Activator_i.h:
+ * orbsvcs/ImplRepo_Service/ImR_Activator_i.cpp:
+ * orbsvcs/ImplRepo_Service/ImR_Locator.cpp:
+ * orbsvcs/ImplRepo_Service/ImR_Locator_i.h:
+ * orbsvcs/ImplRepo_Service/ImR_Locator_i.cpp:
+ * orbsvcs/ImplRepo_Service/Locator_Options.h:
+ * orbsvcs/ImplRepo_Service/Locator_Options.cpp:
+ * orbsvcs/ImplRepo_Service/Locator_Repository.h:
+ * orbsvcs/ImplRepo_Service/Locator_Repository.cpp:
+ * orbsvcs/ImplRepo_Service/README.txt:
+ * orbsvcs/ImplRepo_Service/tao_imr_i.h:
+ * orbsvcs/ImplRepo_Service/tao_imr_i.cpp:
+ * tao/ImR_Client/ImR_Client.cpp:
+ * tao/ImR_Client/ImplRepo.pidl:
+ * tao/ImR_Client/ImplRepoC.h:
+ * tao/ImR_Client/ImplRepoC.inl:
+ * tao/ImR_Client/ImplRepoC.cpp:
+ * tao/ImR_Client/ImplRepoS.h:
+ * tao/ImR_Client/ImplRepoS.cpp:
+
+ Several bug fixes and enhancments to the ImR.
+ Cleaned up the perl to use strict and compile without warnings.
+ Displayed a message that the poa was being registered with the
+ ImR even when -orbuseimr 0 was specified.
+ Stop printing the exception details for unexpected exceptions
+ that happen during a call to server->shutdown(). At least on
+ windows, we often get COMM_FAILURE or TRANSIENT, because the
+ socket is not shutdown gracefully by the server.
+ Don't print the exception when a TRANSIENT is received while
+ pinging the server. This is not an error. Not sure why we were
+ getting 'No usable profile in IOR' messages though, when we
+ expect a 'POA in holding state'.
+ Merge in changes to support ImplRepo_Service -e, which
+ will clear the repository on startup. This makes it easier to write
+ persistence tests, and might be useful in general.
+ Updated to automatically set the ImplRepoServiceIOR and
+ TAO_USE_IMR environment variables, obviating the need to pass
+ -orbuseimr or -orbinitref ImplRepoService=... when using an
+ Activator to start a server.
+ Add -orbuseimr 0 to the cmd line args, so that the TAO_USE_IMR=1
+ environment variable can be used safely.
+ Fix incorrect exception specifications in activator.
+ Fix command line help descriptions.
+ Combine add/update operations in the imr and imr util.
+ Support clean shutdown using ctrl-c as well as the
+ imr util shutdown-repo command.
+ Add detection of server process death, and an option to
+ notify the ImR when this happens, to the activator.
+ Fix some problems with exception macros and unused vars.
+ Fix bug with case-insensitive activator name and binary persistence.
+
+
+ * orbsvcs/examples/ImR/Advanced/Advanced.mpc:
+ * orbsvcs/examples/ImR/Advanced/Manager.idl:
+ * orbsvcs/examples/ImR/Advanced/Manager_i.h:
+ * orbsvcs/examples/ImR/Advanced/Manager_i.cpp:
+ * orbsvcs/examples/ImR/Advanced/Messenger.idl:
+ * orbsvcs/examples/ImR/Advanced/Messenger_i.h:
+ * orbsvcs/examples/ImR/Advanced/Messenger_i.cpp:
+ * orbsvcs/examples/ImR/Advanced/README:
+ * orbsvcs/examples/ImR/Advanced/TestClient.h:
+ * orbsvcs/examples/ImR/Advanced/TestClient.cpp:
+ * orbsvcs/examples/ImR/Advanced/TestServer.h:
+ * orbsvcs/examples/ImR/Advanced/TestServer.cpp:
+ * orbsvcs/examples/ImR/Advanced/client_main.cpp:
+ * orbsvcs/examples/ImR/Advanced/drivers/all:
+ * orbsvcs/examples/ImR/Advanced/drivers/defaults:
+ * orbsvcs/examples/ImR/Advanced/drivers/environment:
+ * orbsvcs/examples/ImR/Advanced/drivers/invocation:
+ * orbsvcs/examples/ImR/Advanced/drivers/persistence:
+ * orbsvcs/examples/ImR/Advanced/drivers/retry:
+ * orbsvcs/examples/ImR/Advanced/drivers/use_environment:
+ * orbsvcs/examples/ImR/Advanced/drivers/use_invocation:
+ * orbsvcs/examples/ImR/Advanced/drivers/use_persistence:
+ * orbsvcs/examples/ImR/Advanced/manager_main.cpp:
+ * orbsvcs/examples/ImR/Advanced/run_test.pl:
+ * orbsvcs/examples/ImR/Advanced/server_main.cpp:
+
+ Dave Giovannini's new test which provides greater
+ coverage of ImR features. Some tests are still failing, so
+ this is not ready to be enabled for nightly builds.
+
+ * orbsvcs/orbsvcs/IOR_Multicast.cpp:
+
+ Fixed bug in unregistration, and updated log messages
+ to show the name of the class and method being logged.
+
+ * orbsvcs/orbsvcs/Notify/XML_Saver.h:
+ * orbsvcs/orbsvcs/Notify/XML_Saver.cpp:
+
+ Updated to use the new ACEXML_escape_string() function.
+
+ * orbsvcs/orbsvcs/Shutdown_Utilities.h:
+ * orbsvcs/orbsvcs/Shutdown_Utilities.cpp:
+
+ Updated to work on Windows.
+
+ * orbsvcs/tests/ImplRepo/airplane_server_i.h:
+ * orbsvcs/tests/ImplRepo/airplane_server_i.cpp:
+ * orbsvcs/tests/ImplRepo/locked/run_test.pl:
+ * orbsvcs/tests/ImplRepo/nestea_server_i.h:
+ * orbsvcs/tests/ImplRepo/nestea_server_i.cpp:
+ * orbsvcs/tests/ImplRepo/run_test.pl:
+ * orbsvcs/tests/ImplRepo/scale/server_i.cpp:
+
+ Basic code cleanup to match latest 1.4a.
+ Some tests were not shutting down correctly, and were
+ activating the poa manager too soon.
+ Nestea test prints the contents of ImplRepoServiceIOR and TAO_USE_IMR.
+ Stop passing -orbuseimr 1 and imr_init_ref in the command lines
+ registered with the ImR.
+
+
+ * orbsvcs/tests/Notify/Reconnecting/run_test.pl:
+
+ Use -ORBObjRefStyle URL so that the XML file has consistent
+ contents, and can be compared for equality. This should let this
+ test pass on more (all?) platforms.
+
+ * tao/ORB_Core.cpp:
+
+ Add missing support for -ORBObjRefStyle IOR.
+
+ * tao/ImR_Client/ImplRepoA.cpp:
+
+ Removed this file, because the idl command line wasn't set to generate it.
+
+
+Mon May 23 06:12:01 2005 J.T. Conklin <jtc@acorntoolworks.com>
+
+ * orbsvcs/orbsvcs/Log/Log_i.cpp (TAO_Log_i::remove_old_records):
+
+ Fixed typo introduced in last change.
+
+Mon May 23 12:27:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tests/Bug_2119_Regression/test.mpc:
+ Simplified this mpc file
+
+Mon May 23 11:08:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * orbsvcs/orbsvcs/Event/ECG_Adapters.h:
+ * orbsvcs/orbsvcs/Event/ECG_Address_Server_Base.h:
+ * orbsvcs/orbsvcs/Event/ECG_CDR_Message_Receiver.h:
+ * orbsvcs/orbsvcs/Event/ECG_CDR_Message_Sender.h:
+ * orbsvcs/orbsvcs/Event/ECG_Complex_Address_Server.h:
+ * orbsvcs/orbsvcs/Event/ECG_ConsumerEC_Control.h:
+ * orbsvcs/orbsvcs/Event/ECG_Mcast_EH.h:
+ * orbsvcs/orbsvcs/Event/ECG_Mcast_Gateway.h:
+ * orbsvcs/orbsvcs/Event/ECG_Reactive_ConsumerEC_Control.h:
+ * orbsvcs/orbsvcs/Event/ECG_Reconnect_ConsumerEC_Control.h:
+ * orbsvcs/orbsvcs/Event/ECG_Simple_Address_Server.h:
+ * orbsvcs/orbsvcs/Event/ECG_Simple_Mcast_EH.h:
+ * orbsvcs/orbsvcs/Event/ECG_UDP_EH.h:
+ * orbsvcs/orbsvcs/Event/ECG_UDP_Out_Endpoint.h:
+ * orbsvcs/orbsvcs/Event/ECG_UDP_Protocol.h:
+ * orbsvcs/orbsvcs/Event/ECG_UDP_Receiver.h:
+ * orbsvcs/orbsvcs/Event/ECG_UDP_Sender.h:
+ * orbsvcs/orbsvcs/Event/EC_And_Filter.h:
+ * orbsvcs/orbsvcs/Event/EC_Basic_Factory.h:
+ * orbsvcs/orbsvcs/Event/EC_Basic_Filter_Builder.h:
+ * orbsvcs/orbsvcs/Event/EC_Bitmask_Filter.h:
+ * orbsvcs/orbsvcs/Event/EC_Channel_Destroyer.h:
+ * orbsvcs/orbsvcs/Event/EC_Conjunction_Filter.h:
+ * orbsvcs/orbsvcs/Event/EC_ConsumerAdmin.h:
+ * orbsvcs/orbsvcs/Event/EC_ConsumerControl.h:
+ * orbsvcs/orbsvcs/Event/EC_Default_Factory.cpp
+ * orbsvcs/orbsvcs/Event/EC_Default_Factory.h:
+ * orbsvcs/orbsvcs/Event/EC_Default_ProxyConsumer.h:
+ * orbsvcs/orbsvcs/Event/EC_Default_ProxySupplier.h:
+ * orbsvcs/orbsvcs/Event/EC_Disjunction_Filter.h:
+ * orbsvcs/orbsvcs/Event/EC_Dispatching.h:
+ * orbsvcs/orbsvcs/Event/EC_Dispatching_Task.h:
+ * orbsvcs/orbsvcs/Event/EC_Event_Channel.h:
+ * orbsvcs/orbsvcs/Event/EC_Event_Channel_Base.h:
+ * orbsvcs/orbsvcs/Event/EC_Factory.h:
+ * orbsvcs/orbsvcs/Event/EC_Filter.h:
+ * orbsvcs/orbsvcs/Event/EC_Filter_Builder.h:
+ * orbsvcs/orbsvcs/Event/EC_Gateway.h:
+ * orbsvcs/orbsvcs/Event/EC_Gateway_IIOP.h:
+ * orbsvcs/orbsvcs/Event/EC_Gateway_IIOP_Factory.cpp
+ * orbsvcs/orbsvcs/Event/EC_Gateway_IIOP_Factory.h:
+ * orbsvcs/orbsvcs/Event/EC_Group_Scheduling.h:
+ * orbsvcs/orbsvcs/Event/EC_Lifetime_Utils.h:
+ * orbsvcs/orbsvcs/Event/EC_MT_Dispatching.h:
+ * orbsvcs/orbsvcs/Event/EC_Masked_Type_Filter.h:
+ * orbsvcs/orbsvcs/Event/EC_Negation_Filter.h:
+ * orbsvcs/orbsvcs/Event/EC_Null_Factory.h:
+ * orbsvcs/orbsvcs/Event/EC_Null_Scheduling.h:
+ * orbsvcs/orbsvcs/Event/EC_ObserverStrategy.h:
+ * orbsvcs/orbsvcs/Event/EC_Per_Supplier_Filter.h:
+ * orbsvcs/orbsvcs/Event/EC_Prefix_Filter_Builder.h:
+ * orbsvcs/orbsvcs/Event/EC_ProxyConsumer.h:
+ * orbsvcs/orbsvcs/Event/EC_ProxySupplier.h:
+ * orbsvcs/orbsvcs/Event/EC_Proxy_Disconnector.h:
+ * orbsvcs/orbsvcs/Event/EC_QOS_Info.h:
+ * orbsvcs/orbsvcs/Event/EC_Reactive_ConsumerControl.h:
+ * orbsvcs/orbsvcs/Event/EC_Reactive_Dispatching.h:
+ * orbsvcs/orbsvcs/Event/EC_Reactive_SupplierControl.h:
+ * orbsvcs/orbsvcs/Event/EC_Reactive_Timeout_Generator.h:
+ * orbsvcs/orbsvcs/Event/EC_Scheduling_Strategy.h:
+ * orbsvcs/orbsvcs/Event/EC_SupplierAdmin.h:
+ * orbsvcs/orbsvcs/Event/EC_SupplierControl.h:
+ * orbsvcs/orbsvcs/Event/EC_Supplier_Filter.h:
+ * orbsvcs/orbsvcs/Event/EC_Supplier_Filter_Builder.h:
+ * orbsvcs/orbsvcs/Event/EC_Timeout_Filter.h:
+ * orbsvcs/orbsvcs/Event/EC_Timeout_Generator.h:
+ * orbsvcs/orbsvcs/Event/EC_Trivial_Supplier_Filter.h:
+ * orbsvcs/orbsvcs/Event/EC_Type_Filter.h:
+ * orbsvcs/orbsvcs/Event/EC_UDP_Admin.h:
+ * orbsvcs/orbsvcs/Event/event_export.h:
+ Include the RTEvent_Serv file and updated export macro
+
+ * orbsvcs/orbsvcs/RTEvent_Serv.mpc:
+ * orbsvcs/orbsvcs/RTEvent_Serv.rc:
+ * orbsvcs/orbsvcs/RTEvent_Skel.mpc:
+ * orbsvcs/orbsvcs/RTEvent_Skel.rc:
+ * orbsvcs/orbsvcs/Event/event_serv_export.h:
+ * orbsvcs/orbsvcs/Event/event_skel_export.h:
+ New files for the new RTEvent Serv and Skel libraries
+
+ * orbsvcs/Event_Service/Event_Service.mpc:
+ * orbsvcs/Logging_Service/RTEvent_Logging_Service/RTEvent_Logging_Service.cpp
+ * orbsvcs/Logging_Service/RTEvent_Logging_Service/RTEvent_Logging_Service.mpc:
+ * orbsvcs/examples/CosEC/RtEC_Based/bin/CosEC_RtEC_Based_bin.mpc:
+ * orbsvcs/examples/CosEC/RtEC_Based/lib/CosEC_RtEC_Based_lib.mpc:
+ * orbsvcs/examples/Log/RTEvent/Log_RTEvent.mpc:
+ * orbsvcs/examples/RtEC/IIOPGateway/RtEC_IIOPGateway.mpc:
+ * orbsvcs/examples/RtEC/Kokyu/RtECKokyu.mpc:
+ * orbsvcs/examples/RtEC/MCast/RtEC_MCast.mpc:
+ * orbsvcs/examples/RtEC/Schedule/RtEC_Schedule.mpc:
+ * orbsvcs/examples/RtEC/Simple/RtEC_Simple.mpc:
+ * orbsvcs/orbsvcs/FtRtEvent.mpc:
+ * orbsvcs/orbsvcs/RTCORBAEvent.mpc:
+ * orbsvcs/orbsvcs/RTEvent.mpc:
+ * orbsvcs/orbsvcs/RTEventLogAdmin.mpc:
+ * orbsvcs/orbsvcs/RTKokyuEvent.mpc:
+ * orbsvcs/orbsvcs/RTSchedEvent.mpc:
+ * orbsvcs/performance-tests/RTEvent/lib/RTEC_Perf.mpc:
+ * orbsvcs/tests/EC_MT_Mcast/EC_MT_Mcast.mpc:
+ * orbsvcs/tests/EC_Mcast/EC_Mcast.mpc:
+ * orbsvcs/tests/EC_Multiple/EC_Multiple.mpc:
+ * orbsvcs/tests/EC_Throughput/EC_Throughput.mpc:
+ * orbsvcs/tests/Event/Basic/rteventtestexe.mpb
+ * orbsvcs/tests/Event/Mcast/Common/ECMcastTests_lib.mpc:
+ * orbsvcs/tests/Event/Mcast/Complex/Complex.mpc:
+ * orbsvcs/tests/Event/Mcast/Simple/Simple.mpc:
+ * orbsvcs/tests/Event/Mcast/Two_Way/Two_Way.mpc:
+ * orbsvcs/tests/Event/Performance/Event_Performance.mpc:
+ * orbsvcs/tests/Event/lib/Event_lib.mpc:
+ Updated because of splitted RTEvent library
+
+Mon May 23 09:14:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * orbsvcs/tests/EC_Custom_Marshal/run_test.pl:
+ No need to specify the type of the event service anymore
+
+Mon May 23 05:44:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * orbsvcs/orbsvcs/Event/BCU.cpp BCU.h:
+ * orbsvcs/orbsvcs/Event/Debug_Macros.h:
+ * orbsvcs/orbsvcs/Event/Dispatching_Modules.{h,cpp,i}:
+ * orbsvcs/orbsvcs/Event/Event_Channel.{h,cpp,i}:
+ * orbsvcs/orbsvcs/Event/Event_Manip.{h,cpp,i}:
+ * orbsvcs/orbsvcs/Event/Fast_Reactor.h
+ * orbsvcs/orbsvcs/Event/GPlot_File.{h,cpp,i}:
+ * orbsvcs/orbsvcs/Event/Local_ESTypes.{h,cpp}:
+ * orbsvcs/orbsvcs/Event/Memory_Pools.{h,cpp,i}:
+ * orbsvcs/orbsvcs/Event/Module_Factory.{h,cpp}:
+ * orbsvcs/orbsvcs/Event/old_event_export.h:
+ * orbsvcs/orbsvcs/Event/ReactorTask.{h,cpp}:
+ * orbsvcs/orbsvcs/Event/RT_Task.{cpp,h,i}:
+ * orbsvcs/orbsvcs/Event/Timer_Module.{h,cpp,i}:
+ Removed the old RTEvent implementation. This is already deprecated
+ for years. This fixes bugzilla bug 2047
+
+ * orbsvcs/orbsvcs/Event_Service_Constants.h:
+ Removed the constants that are for the old ec
+
+Mon May 23 05:35:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * orbsvcs/Event_Service/Event_Service.{h,cpp}:
+ Removed module_factory_, it was for the old ec
+
+Mon May 23 05:31:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * examples/Simulator/Event_Supplier/DualEC_Sup.cpp:
+ Fixed casing of include
+
+Sun May 22 22:10:00 2005 J.T. Conklin <jtc@acorntoolworks.com>
+
+ * orbsvcs/tests/Log/Basic_Log_Test/Basic_Log_Test.cpp (display_records)
+ (delete_records):
+
+ Changed query language parameter from "TCL" to "EXTENDED_TCL".
+
+ * orbsvcs/orbsvcs/Log/Log_i.cpp (QUERY_LANG_SUPPORTED_BY_LOG):
+
+ Changed from "TCL" to "EXTENDED_TCL".
+
+ * orbsvcs/orbsvcs/Log/Log_i.cpp (TAO_Log_i::delete_records_by_id)
+ (TAO_Log_i::delete_records, TAO_Log_i::remove_old_records):
+
+ Don't bother checking whether current_size is less than max_size
+ if not log_full. Avoids potentially costly calls into log store
+ (if/when we support strategized stores).
+
+Sun May 22 18:02:07 2005 J.T. Conklin <jtc@acorntoolworks.com>
+
+ * orbsvcs/orbsvcs/Log/Log_i.cpp (TAO_Log_i::delete_records)
+ (TAO_Log_i::remove_old_records):
+
+ Like delete_records_by_id(), reset "log_full" if "current_size"
+ is less than "max_size".
+
+Sun May 22 17:01:56 2005 J.T. Conklin <jtc@acorntoolworks.com>
+
+ * orbsvcs/orbsvcs/Log/Log_i.cpp (TAO_Log_i::scheduled):
+
+ Removed duplicate fetch of current time.
+
+ * orbsvcs/orbsvcs/Log/Log_i.cpp (TAO_Log_i::remove_old_records):
+
+ Corrected calculation of purge time. Arithmetic was being done on
+ time values without normalizing units first.
+
+Sun May 22 16:37:39 2005 J.T. Conklin <jtc@acorntoolworks.com>
+
+ * tao/Makefile.am:
+
+ Regenerated.
+
+Sun May 22 20:16:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * orbsvcs/Logging_Service/RTEvent_Logging_Service/RTEvent_Logging_Service.{cpp,h}:
+ * orbsvcs/Event_Service/Event_Service.{h,cpp}:
+ * orbsvcs/tests/EC_Throughput/ECT_Throughput.{h,cpp}:
+ * examples/Simulator/Event_Supplier/DualEC_Sup.{h,cpp}:
+ * orbsvcs/tests/Event/lib/Driver.{h,cpp}:
+ * orbsvcs/examples/RtEC/Kokyu/Service.cpp:
+ * orbsvcs/examples/RtEC/Schedule/Service.cpp:
+ Removed support for the old rt event service, this will be removed
+ soon.
+
+ * orbsvcs/Logging_Service/RTEvent_Logging_Service/RTEvent_Logging_Service.mpc:
+ Removed not needed includes
+
+ * orbsvcs/Event_Service/Event_Service.mpc:
+ * orbsvcs/tests/EC_Throughput/EC_Throughput.mpc:
+ * orbsvcs/examples/RtEC/Schedule/RtEC_Schedule.mpc:
+ * examples/Simulator/Event_Supplier/Event_Supplier.mpc:
+ * orbsvcs/orbsvcs/RTEventLogAdmin.mpc:
+ Removed rtoldevent as base project
+
+ * orbsvcs/tests/EC_Throughput/run_test.pl:
+ Updated because we just only have one RTEvent implementation
+
+ * orbsvcs/tests/Sched_Conf/Sched_Conf_Anomalies.cpp:
+ * orbsvcs/tests/Sched_Conf/Sched_Conf.cpp:
+ * orbsvcs/Dump_Schedule/Dump_Schedule.cpp:
+ Removed workaround for very old Sun compiler
+
+ * orbsvcs/examples/RtEC/Schedule/Consumer.cpp:
+ * orbsvcs/examples/RtEC/Schedule/Supplier.cpp:
+ Removed empty explicit instantiation block
+
+ * orbsvcs/examples/RtEC/Schedule/Service.cpp:
+ * orbsvcs/orbsvcs/Log/RTEventLogFactory_i.cpp:
+ Removed not needed includes of old rtevent files
+
+Sun May 22 10:33:34 2005 Ossama Othman <ossama@dre.vanderbilt.edu>
+
+ * tao/PortableServer/Root_POA.cpp (create_POA_i):
+
+ Increment the reference count immediately after binding the
+ child POA to children map. Addresses a seg fault introduced by
+ the leak fix described in ChangeLog entry "Sun May 22 00:00:31
+ 2005 Ossama Othman <ossama@dre.vanderbilt.edu>".
+
+ * tao/PortableServer/Root_POA.h (create_POA_i):
+
+ No need to return a pointer to TAO_Root_POA. Return a
+ PortableServer::POA_ptr instead. Allows implementation to be
+ slightly simplified.
+
+Sun May 22 14:49:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * orbsvcs/tests/EC_Multiple/EC_Multiple.mpc:
+ * orbsvcs/tests/EC_Multiple/EC_Multiple.cpp:
+ Converted this test to use the new RTEC instead of the old one
+ which will be removed soon. Also removed a workaround for the Sun 4.2
+ compiler which we don't support already for a long time
+
+Sun May 22 14:01:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tao/PICurrent.h:
+ Fixed warning
+
+Sun May 22 11:28:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tao/ClientRequestInfo_i.h:
+ * tao/ClientRequestInterceptor_Adapter.h:
+ * tao/ClientRequestInterceptor_List.cpp:
+ * tao/ClientRequestInterceptor_List.h:
+ * tao/ClientRequestInterceptor_List.inl:
+ * tao/Interceptor_List.cpp:
+ * tao/Interceptor_List.h:
+ * tao/Interceptor_List.inl:
+ * tao/ORB_Core.h:
+ * tao/PICurrent.h:
+ * tao/PICurrent_Copy_Callback.h:
+ * tao/PICurrent_ORBInitializer.h:
+ * tao/ServerRequestInterceptor_List.cpp:
+ * tao/ServerRequestInterceptor_List.h:
+ * tao/ServerRequestInterceptor_List.inl:
+ * tao/tao.mpc:
+ * tao/PortableServer/ServerInterceptorAdapter.h:
+ Moved ClientRequestInterceptor_List and
+ ServerRequestInterceptor_List to their own files and updated
+ includes.
+
+Sun May 22 11:54:16 2005 Olli Savia <ops@iki.fi>
+
+ * tao/Collocated_Invocation.cpp:
+
+ Fixed a typo in comment.
+
+Sun May 22 00:00:31 2005 Ossama Othman <ossama@dre.vanderbilt.edu>
+
+
+ * tao/Any.h (to_object, to_abstract_base, to_value):
+
+ Made these constructors explicit, in keeping with the CORBA spec
+ since it requires that the other "to_" helper structs have
+ explicit single argument constructors if supported by the C++
+ compiler.
+
+ * tao/PortableServer/Root_POA.cpp (create_POA_i):
+
+ Do not duplicate POA returned from the other create_POA_i()
+ override called in this method since we are returning it
+ directly to the caller and do not need to retain ownership.
+ Fixes a number of memory leaks.
+
+ * tests/ORT/ObjectReferenceFactory.h:
+
+ CORBA::DefaultValueRefCountBase mix-in class should be the last
+ in the inheritance chain. Addresses potential memory leaks.
+
+ * tests/Param_Test/options.cpp:
+ * tests/Param_Test/options.h:
+
+ Store the test IOR in a CORBA::String_var and drop the explicit
+ calls to CORBA::string_free(). Simplifies memory management and
+ fixes a memory leak.
+
+Sat May 21 18:38:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tao/Profile.cpp:
+ Fixed unused argument warning when messaging is disabled.
+
+Sat May 21 18:34:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tests/Bug_2124_Regression/Bug_2124_Regression.mpc:
+ Use taoserver as base project to fix unresolved link errors
+
+Fri May 20 20:47:00 2005 Huang-Ming Huang <hh1@cse.wustl.edu>
+
+ * tao/MProfile.cpp:
+ * tao/Profile.h:
+ * tao/Profile.cpp
+ * tao/Stub.cpp:
+
+ Removed the association of TAO_Profile to TAO_Stub. This allows an
+ instance of TAO_Profile to be shared between different TAO_MProfile
+ objects.
+
+Fri May 20 16:51:35 2005 J.T. Conklin <jtc@acorntoolworks.com>
+
+ * orbsvcs/orbsvcs/Log/LogRecordStore.cpp (TAO_LogRecoreStore::log):
+ * orbsvcs/orbsvcs/Log/LogRecordStore_persist.cpp:
+
+ Use "%d" instead of "%Q" log format directive for ACE_UINT64_TO_U32
+ parameter.
+
+ * orbsvcs/orbsvcs/Log/LogRecordStore.cpp (TAO_LogRecordStore::update):
+ * orbsvcs/orbsvcs/Log/LogRecordStore_persist.cpp:
+
+ Subtract size of existing record and Add size of new record to
+ current size.
+
+Fri May 20 16:44:54 2005 J.T. Conklin <jtc@acorntoolworks.com>
+
+ * tao/Makefile.am:
+
+ Regenerated.
+
+Fri May 20 17:10:00 2005 Huang-Ming Huang <hh1@cse.wustl.edu>
+
+ * tao/IIOP_Endpoint:
+
+ Fixed problem in TAO_IIOP_Endpoint::is_preferred_network()
+ which should check for empty string rather than null pointer.
+
+Fri May 20 17:00:00 2005 Huang-Ming Huang <hh1@cse.wustl.edu>
+
+ * tao/PortableServer/ServantRetentionStrategyRetain.cpp:
+
+ Fixed problem in ServantRetentionStrategyRetain::find_servant()
+ where servant_upcall.user_id is assigned to a local variable which
+ causes memory access violation when ServerReqeustInfo::object_id()
+ is accessed inside interceptors.
+
+Fri May 20 18:30:23 UTC 2005 Jeff Parsons <j.parsons@vanderbilt.edu>
+
+ * TAO_IDL/be/be_visitor_operation/operation.cpp:
+ * TAO_IDL/be/be_visitor_tmplinst/tmplinst_cs.cpp:
+ * TAO_IDL/be/be_visitor_tmplinst/tmplinst_ss.cpp:
+
+ Added global '::' qualifier to several instances of code
+ generation of a scoped name used as a template argument,
+ to avoid ambiguity if there are two modules with the same
+ name at different levels of nesting. This fix closes
+ [BUGID:2125].
+
+ * tests/IDL_Test/array.idl:
+ * tests/IDL_Test/nested_scope.idl:
+ * tests/IDL_Test/typedef.idl:
+
+ Added various IDL snips provided by Simon McQueen
+ <sm@prismtech.com> in various (now closed) Bugzilla entries.
+
+Fri May 20 12:13:13 2005 Iliyan Jeliazkov <jeliazkov_i@ociweb.com>
+
+ * orbsvcs/Naming_Service/NT_Naming_Service.h:
+ * orbsvcs/Naming_Service/NT_Naming_Service.cpp:
+
+ Fixed build problems with Visual C++ 6 on Windows
+
+Fri May 20 15:22:42 UTC 2005 Jeff Parsons <j.parsons@vanderbilt.edu>
+
+ * TAO_IDL/be/be_visitor_valuetype/valuetype_sh.cpp:
+ * TAO_IDL/be/be_visitor_valuetype/valuetype_ss.cpp:
+
+ Changed the copy constructor for generated skeleton-side
+ valuetype classes private and unimplemented. Skeleton
+ code is generated for valuetypes only if they support a
+ concrete interface. However, these valuetypes also inherit
+ from the stub-side valuetype class, which has a private
+ unimplemented copy constructor. This fact makes it
+ problematic to generate a valid copy constructor for the
+ skeleton-side class, since C++ (and many compilers) require each
+ base class copy constructor to be called in the
+ initialization list.
+
+Fri May 20 15:40:17 2005 Simon McQueen <sm@prismtech.com>
+
+ * tao/ORB_Core.i:
+
+ Further to Fri May 20 11:27:02 2005 Simon McQueen:
+ I forgot to commit the accessor implementation. Not
+ my finest hour.
+
+Fri May 20 14:19:08 2005 Simon McQueen <sm@prismtech.com>
+
+ * TAO_IDL/ast/ast_array.cpp:
+
+ Arrays need to take on the "constructed ?" status of the
+ type they are an array of as they do with the size type.
+
+ This fixes bug #2126.
+
+ * tests/Bug_2126_Regression/Bug_2126_Regression.mpc:
+ * tests/Bug_2126_Regression/README:
+ * tests/Bug_2126_Regression/test.cpp:
+ * tests/Bug_2126_Regression/Test.idl:
+
+ A regression test for the above fix.
+
+Fri May 20 12:38:34 2005 Simon McQueen <sm@prismtech.com>
+
+ * TAO_IDL/be/be_visitor_arg_traits.cpp:
+
+ Check for alias before bailing out of ::visit_string.
+
+ This fixes bug #2124.
+
+ * tests/Bug_2124_Regression/Bug_2124_Regression.mpc:
+ * tests/Bug_2124_Regression/README:
+ * tests/Bug_2124_Regression/test.cpp:
+ * tests/Bug_2124_Regression/Test.idl:
+
+ A regression test for the above fix.
+
+Fri May 20 10:51:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tao/Current.pidl:
+ Updated header to doxygen style and removed remark about patching
+ generated files, this is not needed anymore
+
+Fri May 20 11:27:02 2005 Simon McQueen <sm@prismtech.com>
+
+ * tao/ORB_Core.cpp:
+ * tao/ORB_Core.h:
+
+ Add orb init option -ORBIMREndpointsInIMR to allow control over
+ whether the ImR enpoint is encoded into persistent policy object
+ refs whhen the POA has been registered with the ImR. Default is true.
+
+ * tao/PortableServer/Root_POA.cpp:
+
+ Check whether the above property is set before encoding ImR location
+ in preference to the local listener address into object references.
+
+ * docs/Options.html:
+
+ Document the above new option.
+
+ This fixes bug #2123.
+
+Fri May 20 08:55:03 2005 Simon McQueen <sm@prismtech.com>
+
+ * TAO_IDL/be/be_visitor_arg_traits.cpp:
+
+ Generate a guard macro definition based upon the bound length
+ and local name of bound strings to prevent duplicate definitions
+ when a string of the same length is defined with the same name
+ in two different scopes.
+
+ This fixes bug #2122.
+
+ * tests/Bug_2122_Regression/Bug_2122_Regression.mpc:
+ * tests/Bug_2122_Regression/README:
+ * tests/Bug_2122_Regression/test.cpp:
+ * tests/Bug_2122_Regression/Test.idl:
+
+ A regression test for the above.
+
+Thu May 19 11:52:39 2005 Ossama Othman <ossama@dre.vanderbilt.edu>
+
+ * orbsvcs/examples/CosEC/TypedSimple/Country_i.cpp:
+
+ Fixed emulated exception usage.
+
+Thu May 19 15:03:45 UTC 2005 Jeff Parsons <j.parsons@vanderbilt.edu>
+
+ * TAO_IDL/ast/ast_module.cpp:
+ * TAO_IDL/include/ast_module.h:
+
+ Modified look_in_previous() by adding a boolean parameter to
+ optionally ignore forward declared types when iterating
+ over the declarations in previous openings of a module. This
+ new parameter is false by default, so that ordinary lookups
+ will behave as always. In AST_Module::referenced() however,
+ the argument is passed as true explicitly, to avoid
+ redefinition errors for forward delcared types that appear
+ in an opening of a module previous to the one in which they
+ are fully defined, and also referenced before the full
+ definition appears. Thanks to Aaron <crackajaxx@gmail.com>
+ for reporting the problem and sending example IDL files>.
+
+ * tests/IDL_Test/full.idl:
+
+ Cosmetic changes.
+
+Thu May 19 09:42:22 2005 Chad Elliott <elliott_c@ociweb.com>
+
+ * orbsvcs/tests/Trading/Trading.mpc:
+
+ I accidentally removed the utils base project from 3 of the
+ projects in this mpc file.
+
+Thu May 19 08:55:36 2005 Iliyan Jeliazkov <jeliazkov_i@ociweb.com>
+
+ * orbsvcs/tests/Security/BiDirectional/server.cpp:
+
+ Added an include file for ACE_OS::fopen() to fix VC6 build
+ errors.
+
+ * orbsvcs/tests/Security/BiDirectional/test_i.cpp:
+
+ Changed reference to a non-existent test_i.i file to fix
+ problems with builds that do not have inline.
+
+Thu May 19 00:55:20 2005 Ossama Othman <ossama@dre.vanderbilt.edu>
+
+ * tao/Valuetype/ValueFactory_Map.cpp (instance):
+ * tao/Valuetype/ValueFactory_Map.h (instance):
+
+ Avoid multiple singleton instances by hiding singleton
+ template instance behind this new static method. See
+ TSS_Resources.* changes below for additional details.
+
+Thu May 19 00:29:35 2005 Ossama Othman <ossama@dre.vanderbilt.edu>
+
+ * tao/TSS_Resources.cpp (instance):
+ * tao/TSS_Resources.h (instance):
+
+ Hide TAO_TSS_Singleton behind new TAO_TSS_Resources::instance()
+ method. Addresses multiple TAO_TSS_Singleton instances on
+ platforms/compilers that support symbol hiding, but for which we
+ do not yet have an appropriate *_SINGLETON_DECLARATION() macro,
+ such as g++ 4.0. Fixes problems where an incorrect singleton
+ instance is returned to the caller.
+
+ Removed unnecessary zero pointer check before operator delete()
+ call. Calling operator delete() on a zero pointer is perfectly
+ valid.
+
+Wed May 18 16:23:01 2005 Ossama Othman <ossama@dre.vanderbilt.edu>
+
+ * TAO_IDL/be/be_visitor_valuetype/valuetype_ci.cpp:
+ * TAO_IDL/be/be_visitor_valuetype/valuetype_cs.cpp:
+
+ Moved generated virtual methods out of line. Inlining them
+ causes RTTI problems when the stubs are compiled with g++ 4.0's
+ "-fvisibility-inlines-hidden" command line option, and the
+ classes in the stubs are exported from a DSO/DLL.
+
+ * tao/Messaging/MessagingC.cpp:
+ * tao/Messaging/MessagingC.inl:
+ * tao/ObjRefTemplate/Default_ORTC.cpp:
+ * tao/ObjRefTemplate/Default_ORTC.inl:
+ * tao/ObjRefTemplate/ObjectReferenceTemplateC.cpp:
+ * tao/ObjRefTemplate/ObjectReferenceTemplateC.inl:
+ * tao/Valuetype/AbstractBase.cpp:
+ * tao/Valuetype/AbstractBase.inl:
+ * tao/Valuetype/Sequence_T.cpp:
+ * tao/Valuetype/Sequence_T.inl:
+
+ Moved virtual methods out of line. See above for the motivation
+ behind these changes.
+
+ * tao/ObjRefTemplate/ORT_Adapter_Factory_Impl.h:
+
+ Moved preprocessor "#else" to the first column for portability
+ reasons.
+
+ * tao/PortableServer/ORT_Adapter_Factory.cpp:
+ * tao/PortableServer/ORT_Adapter_Factory.h (ORT_Adapter_Factory):
+
+ Added a virtual destructor. Even though this class only defines
+ an interface, an out-of-line virtual destructor is necessary to
+ avoid dynamic_cast<> failures when using g++ 4.0's
+ -fvisibility-inlines-hidden command line option. Apparently the
+ compiler generated destructor is inlined.
+
+Wed May 18 14:56:37 2005 J.T. Conklin <jtc@acorntoolworks.com>
+
+ * orbsvcs/orbsvcs/Makefile.am:
+ * tao/Makefile.am:
+
+ Regenerated.
+
+Wed May 18 15:03:15 2005 Iliyan Jeliazkov <jeliazkov_i@ociweb.com>
+
+ * orbsvcs/tests/Security/BiDirectional/Secure_BiDir.mpc:
+
+ Renamed the BiDirectional.mpc to avoid build problems on Windows
+ platforms, caused by duplicate (case-insensitive) project names.
+ It conflicts with tests/BiDirectional/BiDirectional.mpc
+
+ * orbsvcs/tests/Security/BiDirectional/BiDirectional.mpc:
+
+ Removed this file.
+
+Wed May 18 14:38:15 2005 Iliyan Jeliazkov <jeliazkov_i@ociweb.com>
+
+ * orbsvcs/Naming_Service/NT_Naming_Service.h:
+
+ Fixing a build problem with Borland on Windows.
+
+Wed May 18 13:05:48 2005 Iliyan Jeliazkov <jeliazkov_i@ociweb.com>
+
+ * tao/Transport_Cache_Manager.cpp:
+
+ Reverted changes that added printing of the stringified
+ endpoint address, because it is not possible to pre-determine
+ the lenght of the character representation for all protocols'
+ endpoints. Thanks Johny and Ossama.
+
+Wed May 18 17:13:53 2005 Simon McQueen <sm@prismtech.com>
+
+ * TAO_IDL/be/be_visitor_valuetype/field_ch.cpp:
+ * TAO_IDL/be_include/be_visitor_valuetype/field_ch.h:
+
+ Make valuetype anonymous private sequence member definitions
+ public rather than private.
+
+ This fixes Bugzilla #2119.
+
+ * tests/Bug_2119_Regression/README:
+ * tests/Bug_2119_Regression/test.idl:
+ * tests/Bug_2119_Regression/test.mpc:
+
+ Regression test for the above.
+
+ * tao/Synch_Invocation.cpp:
+
+ Add COMM_FAILURE to the list of SystemExceptions that can be
+ retried in a fault tolerant configuration.
+
+ This fixes Bugzilla #2118.
+
+Wed May 18 10:29:33 2005 Iliyan Jeliazkov <jeliazkov_i@ociweb.com>
+
+ * tao/Transport_Cache_Manager.cpp:
+ Fixed Borland build problems and some stylistic improvements
+ to logging.
+
+Wed May 18 15:28:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tao/PIForwardRequest.pidl:
+ Fixed fuzz error
+
+Wed May 18 13:11:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tao/ORB.h:
+ Doxygen improvement
+
+Wed May 18 12:30:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tao/corba.h:
+ Removed duplicate includes
+
+Wed May 18 12:00:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tao/PortableInterceptor.pidl:
+ Moved several interfaces to their own file
+
+ * tao/ClientRequestInterceptor.pidl:
+ * tao/Interceptor.pidl:
+ * tao/PIForwardRequest.pidl:
+ * tao/ServerRequestInterceptor.pidl:
+ New files, contains parts of the original PortableInterceptor.pidl
+
+ * tao/ClientRequestInterceptorA.cpp:
+ * tao/ClientRequestInterceptorC.cpp:
+ * tao/ClientRequestInterceptorC.h:
+ * tao/ClientRequestInterceptorS.h:
+ * tao/InterceptorA.cpp:
+ * tao/InterceptorC.cpp:
+ * tao/InterceptorC.h:
+ * tao/InterceptorS.h:
+ * tao/PIForwardRequestA.cpp:
+ * tao/PIForwardRequestC.cpp:
+ * tao/PIForwardRequestC.h:
+ * tao/PIForwardRequestS.h:
+ * tao/PortableInterceptorA.cpp:
+ * tao/PortableInterceptorC.cpp:
+ * tao/PortableInterceptorC.h:
+ * tao/PortableInterceptorS.h:
+ * tao/ServerRequestInterceptorA.cpp:
+ * tao/ServerRequestInterceptorC.cpp:
+ * tao/ServerRequestInterceptorC.h:
+ * tao/ServerRequestInterceptorS.h:
+ Mew generated files
+
+ * tao/tao.mpc:
+ Added new files
+
+ * tao/diffs/PortableInterceptor.diff:
+ Removed, not needed anymore
+
+ * tao/diffs/ServerRequestInterceptor.diff:
+ New diff file
+
+Wed May 18 06:56:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * orbsvcs/tests/Security/BiDirectional/BiDirectional.mpc:
+ Give this project an unique name so that MPC doesn't complain about
+ duplicate names
+
+ * orbsvcs/tests/Security/BiDirectional/test.idl:
+ Converted documentation to doxygen style
+
+Tue May 17 15:55:35 2005 Iliyan Jeliazkov <jeliazkov_i@ociweb.com>
+
+ * orbsvcs/Naming_Service/NT_Naming_Service.{h,cpp}:
+
+ For Windows platforms, changed how the handle_control() stops
+ the ORB. Instead of having to explicitly stop the reactor loop
+ it only needs to call ORB::shutdown(). This also avoids a
+ potential race condition that may occur as the ORB gets
+ destroy()-ed between the two calls. Added an AutoFinalizer
+ class, whose destructor notifies the Windows SCM by calling
+ ACE_NT_Service::report_status() when an instance goes out of
+ scope. This is helpful in the presence of unexpected
+ exceptions. This patch was forward-ported from 1.3a_p9, based
+ upon RT4982.
+
+ * orbsvcs/orbsvcs/Naming/Storable_Naming_Context.cpp:
+
+ Added ACE_TEXT_ALWAYS_CHAR ()
+
+Tue May 17 15:14:55 2005 Iliyan Jeliazkov <jeliazkov_i@ociweb.com>
+
+ This change allows bi-directional policy to work with SSLIOP
+ endpoints. When a server accepts a client-initiated
+ connection or a listen point list, there is no data available
+ about the IIOP endpoints, underlying the SSLIOP endpoints.
+ There is also no data for most of the attributes of the secure
+ connection. Therefore the "server" must synthesize those,
+ however this can not be done correctly. The problem becomes
+ evident when bi-directional policy is in effect for both
+ peers: a "server" during callback, needs to use the same
+ connection the "client" has initiated, but the secure endpoint
+ obtained from an IOR can not yield the same hash value as the
+ synthesized endpoint (from an LPL), used to cache the
+ connection. Also, such endpoints can not be equivalent, in
+ terms of the is_equivalent () method. The IOR from the client
+ contains the real (non-synthetic) port number for the IIOP
+ endpoint underlying the SSL endpoint. This causes the server
+ to decide that it deals with a different endpoint and try to
+ open a new connection. When the ORBs are using bi-directional
+ policies and are behind a firewall, this will fail
+
+ * orbsvcs/orbsvcs/SSLIOP/SSLIOP_Connection_Handler.cpp:
+
+ Creates an instance of the new SSLIOP_Synthetic_Endpoint,
+ which it then uses to re-cache the transport.
+ TAO_SSLIOP_Connection_Handler::add_transport_to_cache()
+ ultimately uses the is_equivalent () method to compare
+ endpoints. That method must not compare the underlying IIOP
+ port numbers, because in some cases SSLIOP endpoints are
+ instantiated with limited amount of information available. For
+ example, when accepting a connections in server role, the
+ underlying IIOP endpoint's port is unknown an is merely
+ assigned to be the same as the secure port, effectively
+ precludes the ability of the server to find a connection
+ cached with these parameters later.
+
+ * orbsvcs/orbsvcs/SSLIOP/SSLIOP_Endpoint.{h,cpp):
+
+ Introduced a new SSLIOP_Synthetic_Endpoint, which relaxes the
+ equivalence comparison with another SSLIOP_Endpoint to limit
+ it to only hostname, SSL port and QoP.
+ Changed the hash() implementation in SSLIOP_Endpoint to
+ eliminate any influence the embedded IIOP endpoint has on the
+ hash value. This allows the SSLIOP_Synthetic_Endpoint to hash
+ just like an SSLIOP_Endpoint and makes possible that synthetic
+ endpoints to be used to find previously cached transports.
+
+ * orbsvcs/tests/Security/BiDirectional/BiDirectional.mpc:
+ * orbsvcs/tests/Security/BiDirectional/README:
+ * orbsvcs/tests/Security/BiDirectional/client.conf:
+ * orbsvcs/tests/Security/BiDirectional/client.cpp:
+ * orbsvcs/tests/Security/BiDirectional/run_test.pl:
+ * orbsvcs/tests/Security/BiDirectional/server.conf:
+ * orbsvcs/tests/Security/BiDirectional/server.cpp:
+ * orbsvcs/tests/Security/BiDirectional/test.idl:
+ * orbsvcs/tests/Security/BiDirectional/test_i.h:
+ * orbsvcs/tests/Security/BiDirectional/test_i.i:
+ * orbsvcs/tests/Security/BiDirectional/test_i.cpp:
+
+ A test that demonstrates the problem. Uses TAO-specific
+ interfaces to the ORB core to obtain the number of currently
+ open connections before and after an invocation. This is done
+ both in the servant and in the client.
+
+ * orbsvcs/tests/Security/BiDirectional/ssl/ca.pem:
+ * orbsvcs/tests/Security/BiDirectional/ssl/client-cert.pem:
+ * orbsvcs/tests/Security/BiDirectional/ssl/client-key.pem:
+ * orbsvcs/tests/Security/BiDirectional/ssl/make-client-keys:
+ * orbsvcs/tests/Security/BiDirectional/ssl/server-cert.pem:
+ * orbsvcs/tests/Security/BiDirectional/ssl/server-key.pem:
+
+ Client and server certificates and keys. Also, a script to
+ regenerate them all.
+
+
+ * tao/Transport_Cache_Manager.cpp:
+
+ Added more informative logging.
+
+Tue May 17 09:18:15 2005 Chad Elliott <elliott_c@ociweb.com>
+
+ * utils/NamingViewer/NamingViewer.mpc:
+
+ Removed unnecessary Resource_Files section.
+
+ * utils/utils.mwc:
+
+ Added the NamingViewer directory.
+
+Tue May 17 05:54:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * examples/RTScheduling/Fixed_Priority_Scheduler/FP_Scheduler.cpp:
+ Use ACE_SIZE_T_FORMAT_SPECIFIER to print out an size_t variable
+ with ACE_OS::sprintf
+
+Tue May 17 05:50:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * orbsvcs/tests/Event/Basic/Atomic_Reconnect.h:
+ * orbsvcs/tests/Event/Basic/Control.h:
+ Removed not needed include of Channel_Clients.h. This file has
+ been removed and the include was not needed.
+
+Mon May 16 19:22:39 2005 J.T. Conklin <jtc@acorntoolworks.com>
+
+ * orbsvcs/orbsvcs/FtRtEvent/EventChannel/FTEC_Group_Manager.cpp:
+
+ #include "orbsvcs/PortableGroup/PG_Operators.h" and remove the
+ "bool operator==(const FTRT::Location&, const FTRT::Location&)"
+ implementation. FTRT::Location is typedef for CosNaming::Name,
+ and the operator== implementation for that in the PortableGroup
+ library conflict on MacOSX.
+
+Mon May 16 12:15:11 2005 Ossama Othman <ossama@dre.vanderbilt.edu>
+
+ * TAO_IDL/include/ast_component.h
+ (AST_Component::port_descriptor):
+
+ Added an inlined constructor to this structure to make sure all
+ fields are initialized prior to use. Fixes a g++ 4.0 "variable
+ is used initialized" warning.
+
+Mon May 16 14:08:35 2005 Jeff Parsons <j.parsons@vanderbilt.edu>
+
+ * TAO_IDL/fe/idl.ll (idl_store_pragma):
+ * TAO_IDL/fe/lex.yy.cpp (idl_store_pragma):
+
+ Added code to eat extra whitespace in a #pragma directive,
+ need when using preprocessors that don't do it automatically.
+ Thanks to Johnny Willemsen <jwillemsen@remedy.nl> for
+ discovering this quirk about the preprocessor used with the
+ Intel C++ compiler. This fixes bugzilla bug [2110]
+
+Mon May 16 18:15:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tao/CDR.h:
+ * tao/Codeset_Manager.h:
+ * tao/Codeset_Translator_Factory_T.h:
+ * tao/Reply_Dispatcher.h:
+ * tao/Sequence.h:
+ * tao/Transport_Acceptor.h:
+ * tao/SmartProxies/Smart_Proxies.h:
+ Doxygen improvements
+
+Mon May 16 10:09:45 2005 Jeff Parsons <j.parsons@vanderbilt.edu>
+
+ * TAO_IDL/be/be_visitor_arg_traits.cpp (visit_operation):
+
+ Added check for imported node, skipping code generation if the
+ node is imported. For all other node types in this visitor, arg
+ traits specializations must be generated, since an IDL type
+ declared in an included file could be used as a parameter in
+ an operation in the main file. But when visiting an operation
+ itself, the only thing that triggers an arg traits specialization
+ is an anonymous bounded string parameter (deprecated but still
+ legal). Since this type of declaration is not visible outside
+ the operation's scope, it should not trigger code generation
+ if the node is imported. Thanks to Johnny Willemsen
+ <jwillemsen@remedy.nl> for pointing out that this code generation
+ for an imported operation causes a C++ compilation failure, due
+ to the lack of a proper #include of tao/BD_String_Arg_Traits.h.
+
+Mon May 16 15:06:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tao/DynamicInterface/Context.h:
+ * tao/DynamicInterface/DII_Arguments.h:
+ * tao/DynamicInterface/DII_Invocation.h:
+ * tao/DynamicInterface/DII_Invocation_Adapter.h:
+ * tao/DynamicInterface/DII_Reply_Dispatcher.h:
+ * tao/DynamicInterface/Dynamic_Adapter_Impl.h:
+ * tao/DynamicInterface/Dynamic_Implementation.h:
+ * tao/DynamicInterface/ExceptionList.h:
+ * tao/DynamicInterface/Server_Request.h:
+ Doxygen improvements
+
+Mon May 16 14:51:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * orbsvcs/orbsvcs/Channel_Clients.{h,cpp}:
+ Removed, not needed anymore
+
+ * orbsvcs/orbsvcs/Channel_Clients_T.h:
+ * orbsvcs/orbsvcs/Scheduler_Utilities.h:
+ Doxygen fixes
+
+ * orbsvcs/orbsvcs/Makefile.am:
+ Removed Channel_Clients files
+
+ * orbsvcs/orbsvcs/Scheduler_Utilities.cpp:
+ Removed not needed include of OS.h
+
+ * orbsvcs/orbsvcs/CosEvent/CEC_ProxyPushSupplier.h:
+ * orbsvcs/orbsvcs/PortableGroup/PG_Property_Set.h:
+ Doxygen improvement
+
+ * orbsvcs/orbsvcs/Event/EC_Gateway_IIOP.h:
+ * orbsvcs/tests/Event/lib/Counting_Supplier.h:
+ Include Channel_Clients_T.h instead of Channel_Clients.h
+
+Mon May 16 14:38:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * orbsvcs/orbsvcs/RTEvent.mpc:
+ Added Channel_Clients_T.cpp, it belongs to this project
+
+ * orbsvcs/orbsvcs/AV.mpc:
+ Removed Channel_Clients_T files, they don't belong to the AV service
+
+Mon May 16 14:29:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * examples/RTScheduling/Job_i.cpp:
+ * examples/RTScheduling/Thread_Task.cpp:
+ * examples/RTScheduling/MIF_Scheduler/MIF_Task.cpp:
+ Use ACE_SIZE_T_FORMAT_SPECIFIER to print out an size_t variable
+ with ACE_OS::sprintf
+
+ * orbsvcs/orbsvcs/CosNaming.mpc:
+ * orbsvcs/orbsvcs/CosNaming_Serv.mpc:
+ * orbsvcs/orbsvcs/CosNaming_Skel.mpc:
+ Moved the Serv and Skel projects to their own file. This makes it
+ possible to create a workspace with just one of the projects
+
+Mon May 16 09:18:26 2005 Chad Elliott <elliott_c@ociweb.com>
+
+ * orbsvcs/examples/CosEC/RtEC_Based/lib/CosEC_RtEC_Based_lib.mpc:
+ * orbsvcs/performance-tests/RTEvent/lib/RTEC_Perf.mpc:
+ * orbsvcs/tests/Event/Mcast/Common/ECMcastTests_lib.mpc:
+ * orbsvcs/tests/Event/lib/Event_lib.mpc:
+ * orbsvcs/tests/Trading/Trading.mpc:
+
+ Removed redundant base projects.
+
+ * orbsvcs/examples/ImR/Combined_Service/test.cpp:
+
+ Modified the assertTrue macro so that it would build on LynxOS.
+
+ * orbsvcs/tests/EC_MT_Mcast/run_test.pl:
+
+ Generate a unique multicast address and port to avoid collisions
+ on the same network.
+
+ * orbsvcs/tests/LoadBalancing/GenericFactory/Application_Controlled/run_test.pl:
+ * orbsvcs/tests/LoadBalancing/GenericFactory/Application_Controlled/windows.conf:
+ * orbsvcs/tests/LoadBalancing/GenericFactory/Application_Controlled/windows.conf.xml:
+ * orbsvcs/tests/LoadBalancing/GenericFactory/Infrastructure_Controlled/run_test.pl:
+ * orbsvcs/tests/LoadBalancing/GenericFactory/Infrastructure_Controlled/windows.conf:
+ * orbsvcs/tests/LoadBalancing/GenericFactory/Infrastructure_Controlled/windows.conf.xml:
+ * orbsvcs/tests/LoadBalancing/GenericFactory/Manage_Object_Group/run_test.pl:
+ * orbsvcs/tests/LoadBalancing/GenericFactory/Manage_Object_Group/windows.conf:
+ * orbsvcs/tests/LoadBalancing/GenericFactory/Manage_Object_Group/windows.conf.xml:
+
+ On Windows, we use a configurator file to switch from the default
+ reactor (TP) to Select MT. The LoadManager, on Windows only,
+ requires a reactor that supports registering signal handlers and
+ the TP Reactor no longer supports that sort of thing.
+
+ * orbsvcs/tests/Notify/MT_Dispatching/run_test.pl:
+
+ Committing a change from Dale Wilson <wilson_d@ociweb.com>.
+
+ Change shut down timeout from hard coded 1 to symbolic 10
+ to eliminate intermittent timeouts on various platforms.
+
+ * orbsvcs/tests/Notify/Structured_Multi_Filter/run_test.pl:
+
+ Committing a change from Trevor Fields <fields_t@ociweb.com>.
+
+ Added delay between iterations of the test to allow
+ complete shutdown of Naming service. The problem showed
+ up on dual processor machines.
+
+ * orbsvcs/tests/Notify/XML_Persistence/main.cpp:
+
+ Added an include of the CosNotification library initializer header
+ to work around static construction issues on SunOS and MacOS X.
+
+ * orbsvcs/tests/Redundant_Naming/run_test.pl:
+ * orbsvcs/tests/Simple_Naming/run_test.pl:
+
+ Allow the user to determine the location of the persistence file
+ by the TMPDIR, TEMP and TMP environment variables. This will work
+ around NFS locking issues.
+
+ * orbsvcs/tests/Simple_Naming/process-m-output.pl:
+
+ Committing a change from Yan Dai <dai_y@ociweb.com>.
+
+ Modified the test scripts to accept the empty line, the
+ "CommandLine" line and the "WARNING" lines from
+ orbsvcs/orbsvcs/Shutdown_Utilities.cpp.
+
+Mon May 16 08:25:53 2005 Chad Elliott <elliott_c@ociweb.com>
+
+ * orbsvcs/Dump_Schedule/Dump_Schedule.cpp:
+
+ Set the default name to "ScheduleService".
+
+ * orbsvcs/orbsvcs/Sched/Config_Scheduler.cpp:
+
+ Allocate an RtecScheduler::Dependency_Set into the out parameter
+ if it doesn't contain one yet.
+
+ * orbsvcs/orbsvcs/Scheduler_Factory.cpp:
+
+ Switched the types for the generated code to match up with actual
+ types for the POD_Dependency_Info and POD_Config_Info structures.
+
+Mon May 16 08:21:34 2005 Chad Elliott <elliott_c@ociweb.com>
+
+ * tao/ORB_Core.cpp:
+
+ Warn the user if the parameter to -ORBCollocation is not
+ recognized.
+
+ * orbsvcs/orbsvcs/FtRtEvent/EventChannel/ConnectionHandler_T.h:
+ * orbsvcs/orbsvcs/FtRtEvent/EventChannel/Fault_Detector_T.cpp:
+ * orbsvcs/orbsvcs/FtRtEvent/EventChannel/SCTP_Fault_Detector.h:
+ * tao/Strategies/SCIOP_Connector.cpp:
+ * tao/Strategies/SCIOP_Endpoint.h:
+ * tao/Strategies/SCIOP_Endpoint.cpp:
+
+ Corrected many build issues dealing with SCTP.
+
+Sat May 14 06:09:23 2005 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * TAO version 1.4.5 released.
+
+Local Variables:
+add-log-time-format: current-time-string
+End:
diff --git a/TAO/TAO_ACE.mwc b/TAO/TAO_ACE.mwc
new file mode 100644
index 00000000000..38830f933d9
--- /dev/null
+++ b/TAO/TAO_ACE.mwc
@@ -0,0 +1,21 @@
+// -*- MPC -*-
+// $Id$
+
+workspace {
+ ../ace
+ ../apps/gperf/src
+ ../ACEXML/common
+ ../ACEXML/parser/parser
+ ../ACEXML/apps/svcconf
+ ../Kokyu/Kokyu.mpc
+ ../protocols
+ tao
+ TAO_IDL
+ utils
+ orbsvcs
+ exclude {
+ orbsvcs/tests
+ orbsvcs/performance-tests
+ orbsvcs/examples
+ }
+}
diff --git a/TAO/examples/Borland/ChatClient.mpc b/TAO/examples/Borland/ChatClient.mpc
new file mode 100644
index 00000000000..cb44c0bd968
--- /dev/null
+++ b/TAO/examples/Borland/ChatClient.mpc
@@ -0,0 +1,17 @@
+// -*- MPC -*-
+// $Id$
+
+project(*Client) : taoserver, utils, iortable, vcl {
+ exename = chatclient
+ IDL_Files {
+ Broadcaster.idl
+ Receiver.idl
+ }
+ Source_Files {
+ ReceiverImpl.cpp
+ ChatClient.cpp
+ ORBThread.cpp
+ ChatClientWnd.cpp
+ }
+}
+
diff --git a/TAO/examples/CSD_Strategy/ThreadPool/CSD_Test_ThreadPool.mpc b/TAO/examples/CSD_Strategy/ThreadPool/CSD_Test_ThreadPool.mpc
new file mode 100644
index 00000000000..ee5b527e7c6
--- /dev/null
+++ b/TAO/examples/CSD_Strategy/ThreadPool/CSD_Test_ThreadPool.mpc
@@ -0,0 +1,25 @@
+// -*- MPC -*-
+// $Id$
+
+project(*Server) : csd_threadpool, taoserver, pi {
+ exename = server_main
+
+ Source_Files {
+ Foo_i.cpp
+ ServerApp.cpp
+ server_main.cpp
+ OrbShutdownTask.cpp
+ }
+}
+
+project(*Client): taoexe, anytypecode {
+ exename = client_main
+ after += *Server
+
+ Source_Files {
+ FooC.cpp
+ ClientApp.cpp
+ client_main.cpp
+ }
+}
+
diff --git a/TAO/examples/CSD_Strategy/ThreadPool/Foo_i.h b/TAO/examples/CSD_Strategy/ThreadPool/Foo_i.h
new file mode 100644
index 00000000000..c1da2d5811b
--- /dev/null
+++ b/TAO/examples/CSD_Strategy/ThreadPool/Foo_i.h
@@ -0,0 +1,48 @@
+// $Id$
+#ifndef FOO_I_H
+#define FOO_I_H
+
+#include "FooS.h"
+#include "ace/CORBA_macros.h"
+#include "tao/Environment.h"
+
+
+class Foo_i : public virtual POA_Foo
+{
+ public:
+
+ Foo_i(unsigned num_clients);
+ virtual ~Foo_i();
+
+ virtual void op1(ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC((CORBA::SystemException));
+
+ virtual void op2(CORBA::Long value ACE_ENV_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC((CORBA::SystemException));
+
+ virtual CORBA::Long op3(ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC((CORBA::SystemException));
+
+ virtual void op4(CORBA::Long value ACE_ENV_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC((CORBA::SystemException));
+
+ virtual void op5(ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC((CORBA::SystemException, FooException));
+
+ virtual void done(ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC((CORBA::SystemException));
+
+
+ private:
+
+ CORBA::Long value_;
+ unsigned num_clients_;
+
+ unsigned count_op1_;
+ unsigned count_op2_;
+ unsigned count_op3_;
+ unsigned count_op4_;
+ unsigned count_op5_;
+};
+
+#endif
diff --git a/TAO/examples/CSD_Strategy/ThreadPool/ServerApp.cpp b/TAO/examples/CSD_Strategy/ThreadPool/ServerApp.cpp
new file mode 100644
index 00000000000..8a107eff964
--- /dev/null
+++ b/TAO/examples/CSD_Strategy/ThreadPool/ServerApp.cpp
@@ -0,0 +1,240 @@
+// $Id$
+#include "ServerApp.h"
+#include "Foo_i.h"
+#include "OrbShutdownTask.h"
+#include "ace/Get_Opt.h"
+#include "tao/CSD_ThreadPool/CSD_TP_Strategy.h"
+#include "tao/Intrusive_Ref_Count_Handle_T.h"
+// To force static load the service.
+#include "tao/PI/PI.h"
+#include "tao/CSD_ThreadPool/CSD_ThreadPool.h"
+
+
+ServerApp::ServerApp()
+: num_clients_ (1)
+{
+}
+
+
+ServerApp::~ServerApp()
+{
+}
+
+
+int
+ServerApp::run(int argc, char* argv[] ACE_ENV_ARG_DECL)
+{
+ CORBA::ORB_var orb = CORBA::ORB_init(argc, argv, "" ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+
+ // Parse the command-line args for this application.
+ // * Raises -1 if problems are encountered.
+ // * Returns 1 if the usage statement was explicitly requested.
+ // * Returns 0 otherwise.
+ int result = this->parse_args(argc, argv);
+ if (result != 0)
+ {
+ return result;
+ }
+
+ TheOrbShutdownTask::instance()->orb (orb.in ());
+
+ CORBA::Object_var obj
+ = orb->resolve_initial_references("RootPOA" ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+
+ if (CORBA::is_nil(obj.in()))
+ {
+ ACE_ERROR((LM_ERROR,
+ "(%P|%t) Failed to resolve initial ref for 'RootPOA'.\n"));
+ ACE_THROW_RETURN (TestException(), -1);
+ }
+
+ PortableServer::POA_var root_poa
+ = PortableServer::POA::_narrow(obj.in() ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+
+ if (CORBA::is_nil(root_poa.in()))
+ {
+ ACE_ERROR((LM_ERROR,
+ "(%P|%t) Failed to narrow obj ref to POA interface.\n"));
+ ACE_THROW_RETURN (TestException(), -1);
+ }
+
+ PortableServer::POAManager_var poa_manager
+ = root_poa->the_POAManager( ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+
+ // Create the child POA.
+ CORBA::PolicyList policies(0);
+ policies.length(0);
+
+ PortableServer::POA_var child_poa
+ = root_poa->create_POA("ChildPoa",
+ poa_manager.in(),
+ policies
+ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+
+ if (CORBA::is_nil(child_poa.in()))
+ {
+ ACE_ERROR((LM_ERROR, "(%P|%t) ERROR [ServerApp::run()]: "
+ "Failed to create the child POA.\n"));
+ ACE_THROW_RETURN (TestException(), -1);
+ }
+
+ // Create the thread pool servant dispatching strategy object, and
+ // hold it in a (local) smart pointer variable.
+ TAO_Intrusive_Ref_Count_Handle<TAO::CSD::TP_Strategy> csd_tp_strategy =
+ new TAO::CSD::TP_Strategy();
+
+ // Tell the strategy to apply itself to the child poa.
+ if (csd_tp_strategy->apply_to(child_poa.in() ACE_ENV_ARG_PARAMETER) == false)
+ {
+ ACE_ERROR((LM_ERROR, "(%P|%t) ERROR [ServerApp::run()]: "
+ "Failed to apply custom dispatching strategy to child poa.\n"));
+ ACE_THROW_RETURN (TestException(), -1);
+ }
+ ACE_CHECK_RETURN (-1);
+
+ // Create the servant object.
+ Foo_i* servant = new Foo_i(this->num_clients_);
+
+ // local smart pointer variable to deal with releasing the reference
+ // to the servant object when the smart pointer object falls out of scope.
+ PortableServer::ServantBase_var owner_transfer(servant);
+
+ // Activate the servant using the Child POA.
+ PortableServer::ObjectId_var oid
+ = child_poa->activate_object(servant
+ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+
+ // Obtain the object reference.
+ obj = child_poa->servant_to_reference(servant ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+
+ if (CORBA::is_nil(obj.in()))
+ {
+ ACE_ERROR((LM_ERROR,
+ "(%P|%t) Failed to activate servant (Foo_i).\n"));
+ ACE_THROW_RETURN (TestException(), -1);
+ }
+
+ // Stringify the object reference
+ CORBA::String_var ior
+ = orb->object_to_string(obj.in() ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+
+ // Write the stringified object reference to the ior file.
+ FILE* ior_file = ACE_OS::fopen(this->ior_filename_.c_str(), "w");
+
+ if (ior_file == 0)
+ {
+ ACE_ERROR((LM_ERROR,
+ "(%P|%t) Cannot open output file for writing IOR: %s",
+ this->ior_filename_.c_str()));
+ ACE_THROW_RETURN (TestException(), -1);
+ }
+
+ ACE_OS::fprintf(ior_file, "%s", ior.in ());
+ ACE_OS::fclose(ior_file);
+
+ // Activate the POA Manager
+ poa_manager->activate(ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+
+ ACE_DEBUG((LM_DEBUG,
+ "(%P|%t) ServerApp is ready. Running the ORB event loop.\n"));
+
+ // Run the ORB event loop.
+ orb->run(ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+
+ ACE_DEBUG((LM_DEBUG,
+ "(%P|%t) ServerApp ORB has stopped running. "
+ "Stop the CSD strategy.\n"));
+
+ ACE_DEBUG((LM_DEBUG,
+ "(%P|%t) ServerApp is waiting for OrbShutdownTask.\n"));
+ TheOrbShutdownTask::instance()->wait ();
+
+ ACE_DEBUG((LM_DEBUG,
+ "(%P|%t) ServerApp is destroying the Root POA.\n"));
+
+ // Sleep for 2 second to let the done() two-way call complete
+ // before cleanup.
+ ACE_OS::sleep (2);
+
+ // Tear-down the root poa and orb.
+ root_poa->destroy(1, 1 ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+
+ ACE_DEBUG((LM_DEBUG,
+ "(%P|%t) ServerApp is destroying the ORB.\n"));
+
+ orb->destroy( ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+
+ ACE_DEBUG((LM_DEBUG,
+ "(%P|%t) ServerApp has completed running successfully.\n"));
+
+ return 0;
+}
+
+
+int
+ServerApp::parse_args(int argc, char* argv[])
+{
+ this->exe_name_ = argv[0];
+
+ ACE_Get_Opt get_opts(argc, argv, "o:n:");
+
+ int c;
+
+ while ((c = get_opts()) != -1)
+ {
+ switch (c)
+ {
+ case 'o':
+ this->ior_filename_ = get_opts.opt_arg();
+ break;
+
+ case 'n':
+ {
+ int tmp = ACE_OS::atoi(get_opts.opt_arg());
+ if (tmp < 1)
+ {
+ this->usage_statement();
+ return -1;
+ }
+
+ this->num_clients_ = tmp;
+ }
+ break;
+
+ case '?':
+ this->usage_statement();
+ return 1;
+
+ default:
+ this->usage_statement();
+ return -1;
+ }
+ }
+
+ return 0;
+}
+
+
+void
+ServerApp::usage_statement()
+{
+ ACE_ERROR((LM_ERROR,
+ "Usage: %s [options]\n\n"
+ "OPTIONS:\n\n"
+ "\t[-o <ior_filename>]\n"
+ "\t[-n <num_clients>]\n"
+ "\t[-?]\n\n",
+ this->exe_name_.c_str()));
+}
diff --git a/TAO/examples/CSD_Strategy/ThreadPool/run_test.pl b/TAO/examples/CSD_Strategy/ThreadPool/run_test.pl
new file mode 100755
index 00000000000..7e34ffa58ba
--- /dev/null
+++ b/TAO/examples/CSD_Strategy/ThreadPool/run_test.pl
@@ -0,0 +1,61 @@
+eval '(exit $?0)' && eval 'exec perl -S $0 ${1+"$@"}'
+ & eval 'exec perl -S $0 $argv:q'
+ if 0;
+
+# $Id$
+# -*- perl -*-
+
+use lib '../../../../bin';
+use PerlACE::Run_Test;
+
+$iorfile = PerlACE::LocalFile ("server.ior");
+unlink $iorfile;
+$status = 0;
+
+$num_clients=40;
+
+if (PerlACE::is_vxworks_test()) {
+ $SV = new PerlACE::ProcessVX ("server_main", "-o $iorfile -n $num_clients");
+}
+else {
+ $SV = new PerlACE::Process ("server_main", "-o $iorfile -n $num_clients");
+}
+
+
+$SV->Spawn ();
+
+if (PerlACE::waitforfile_timed ($iorfile,
+ $PerlACE::wait_interval_for_process_creation) == -1) {
+ print STDERR "ERROR: cannot find file <$iorfile>\n";
+ $SV->Kill (); $SV->TimedWait (1);
+ exit 1;
+}
+
+for ($i = 0; $i < $num_clients; $i++) {
+
+ @CLS[$i] = new PerlACE::Process ("client_main", " -i file://$iorfile");
+
+ @CLS[$i]->Spawn ();
+}
+
+for ($i = 0; $i < $num_clients; $i++) {
+
+ $client = @CLS[$i]->WaitKill (60);
+
+ if ($client != 0) {
+ print STDERR "ERROR: client $i returned $client\n";
+ $status = 1;
+ }
+}
+
+
+$server = $SV->WaitKill (60);
+
+if ($server != 0) {
+ print STDERR "ERROR: server returned $server\n";
+ $status = 1;
+}
+
+unlink $iorfile;
+
+exit $status;
diff --git a/TAO/examples/CSD_Strategy/ThreadPool2/CSD_Test_ThreadPool2.mpc b/TAO/examples/CSD_Strategy/ThreadPool2/CSD_Test_ThreadPool2.mpc
new file mode 100644
index 00000000000..d21cced480b
--- /dev/null
+++ b/TAO/examples/CSD_Strategy/ThreadPool2/CSD_Test_ThreadPool2.mpc
@@ -0,0 +1,26 @@
+// -*- MPC -*-
+// $Id$
+
+project(*Server): csd_threadpool, taoserver, pi {
+ exename = server_main
+
+ Source_Files {
+ Foo_i.cpp
+ FooServantList.cpp
+ ServerApp.cpp
+ server_main.cpp
+ OrbShutdownTask.cpp
+ }
+}
+
+project(*Client): taoexe, anytypecode {
+ exename = client_main
+ after += *Server
+
+ Source_Files {
+ FooC.cpp
+ ClientApp.cpp
+ client_main.cpp
+ }
+}
+
diff --git a/TAO/examples/CSD_Strategy/ThreadPool2/Foo_i.h b/TAO/examples/CSD_Strategy/ThreadPool2/Foo_i.h
new file mode 100644
index 00000000000..d68b2bc84c1
--- /dev/null
+++ b/TAO/examples/CSD_Strategy/ThreadPool2/Foo_i.h
@@ -0,0 +1,52 @@
+// $Id$
+#ifndef FOO_I_H
+#define FOO_I_H
+
+#include "FooS.h"
+#include "ace/SString.h"
+#include "ace/CORBA_macros.h"
+#include "tao/Environment.h"
+
+class FooServantList;
+
+class Foo_i : public virtual POA_Foo
+{
+ public:
+
+ Foo_i(const char* servant_name, FooServantList* mgr);
+ virtual ~Foo_i();
+
+ virtual void op1(ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC((CORBA::SystemException));
+
+ virtual void op2(CORBA::Long value ACE_ENV_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC((CORBA::SystemException));
+
+ virtual CORBA::Long op3(ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC((CORBA::SystemException));
+
+ virtual void op4(CORBA::Long value ACE_ENV_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC((CORBA::SystemException));
+
+ virtual void op5(ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC((CORBA::SystemException, FooException));
+
+ virtual void done(ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC((CORBA::SystemException));
+
+
+ private:
+
+ CORBA::Long value_;
+
+ unsigned count_op1_;
+ unsigned count_op2_;
+ unsigned count_op3_;
+ unsigned count_op4_;
+ unsigned count_op5_;
+
+ ACE_CString servant_name_;
+ FooServantList* mgr_;
+};
+
+#endif
diff --git a/TAO/examples/CSD_Strategy/ThreadPool2/ServerApp.cpp b/TAO/examples/CSD_Strategy/ThreadPool2/ServerApp.cpp
new file mode 100644
index 00000000000..30670fa4ee3
--- /dev/null
+++ b/TAO/examples/CSD_Strategy/ThreadPool2/ServerApp.cpp
@@ -0,0 +1,232 @@
+// $Id$
+#include "ServerApp.h"
+#include "FooServantList.h"
+#include "FooC.h"
+#include "OrbShutdownTask.h"
+#include "ace/Get_Opt.h"
+#include "tao/CSD_ThreadPool/CSD_TP_Strategy.h"
+#include "tao/Intrusive_Ref_Count_Handle_T.h"
+// To force static load the service.
+#include "tao/PI/PI.h"
+#include "tao/CSD_ThreadPool/CSD_ThreadPool.h"
+
+
+ServerApp::ServerApp()
+ : ior_filename_("foo"),
+ num_servants_(1),
+ num_clients_(1)
+{
+}
+
+
+ServerApp::~ServerApp()
+{
+}
+
+
+int
+ServerApp::run(int argc, char* argv[] ACE_ENV_ARG_DECL)
+{
+ CORBA::ORB_var orb = CORBA::ORB_init(argc, argv, "" ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+
+ // Parse the command-line args for this application.
+ // * Raises -1 if problems are encountered.
+ // * Returns 1 if the usage statement was explicitly requested.
+ // * Returns 0 otherwise.
+ int result = this->parse_args(argc, argv);
+ if (result != 0)
+ {
+ return result;
+ }
+
+ TheOrbShutdownTask::instance()->orb (orb.in ());
+
+ CORBA::Object_var obj
+ = orb->resolve_initial_references("RootPOA" ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+
+ if (CORBA::is_nil(obj.in()))
+ {
+ ACE_ERROR((LM_ERROR,
+ "(%P|%t) Failed to resolve initial ref for 'RootPOA'.\n"));
+ ACE_THROW_RETURN (TestException(), -1);
+ }
+
+ PortableServer::POA_var root_poa
+ = PortableServer::POA::_narrow(obj.in() ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+
+ if (CORBA::is_nil(root_poa.in()))
+ {
+ ACE_ERROR((LM_ERROR,
+ "(%P|%t) Failed to narrow obj ref to POA interface.\n"));
+ ACE_THROW_RETURN (TestException(), -1);
+ }
+
+ PortableServer::POAManager_var poa_manager
+ = root_poa->the_POAManager(ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+
+ // Create the child POA.
+ CORBA::PolicyList policies(1);
+ policies.length(1);
+
+ policies[0] = root_poa->create_id_assignment_policy(PortableServer::USER_ID
+ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+
+ PortableServer::POA_var child_poa
+ = root_poa->create_POA("ChildPoa",
+ poa_manager.in(),
+ policies
+ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+
+ if (CORBA::is_nil(child_poa.in()))
+ {
+ ACE_ERROR((LM_ERROR, "(%P|%t) ERROR [ServerApp::run()]: "
+ "Failed to create the child POA.\n"));
+ ACE_THROW_RETURN (TestException(), -1);
+ }
+
+ policies[0]->destroy (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+
+ // Create the thread pool servant dispatching strategy object, and
+ // hold it in a (local) smart pointer variable.
+ TAO_Intrusive_Ref_Count_Handle<TAO::CSD::TP_Strategy> csd_tp_strategy =
+ new TAO::CSD::TP_Strategy();
+
+ csd_tp_strategy->set_num_threads(this->num_servants_);
+
+ // Tell the strategy to apply itself to the child poa.
+ if (csd_tp_strategy->apply_to(child_poa.in() ACE_ENV_ARG_PARAMETER) == false)
+ {
+ ACE_ERROR((LM_ERROR, "(%P|%t) ERROR [ServerApp::run()]: "
+ "Failed to apply custom dispatching strategy to child poa.\n"));
+ ACE_THROW_RETURN (TestException(), -1);
+ }
+ ACE_CHECK_RETURN (-1);
+
+ FooServantList servants(this->ior_filename_.c_str(),
+ this->num_servants_,
+ this->num_clients_,
+ orb.in());
+
+ servants.create_and_activate(child_poa.in() ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+
+ // Activate the POA Manager
+ poa_manager->activate(ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+
+ ACE_DEBUG((LM_DEBUG,
+ "(%P|%t) ServerApp is ready. Running the ORB event loop.\n"));
+
+ // Run the ORB event loop.
+ orb->run(ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+
+ ACE_DEBUG((LM_DEBUG,
+ "(%P|%t) ServerApp ORB has stopped running. "
+ "Stop the CSD strategy.\n"));
+
+ // Sleep for 2 second to let the done() two-way call complete
+ // before cleanup.
+ ACE_OS::sleep (2);
+
+ ACE_DEBUG((LM_DEBUG,
+ "(%P|%t) ServerApp is waiting for OrbShutdownTask.\n"));
+ TheOrbShutdownTask::instance()->wait ();
+
+ ACE_DEBUG((LM_DEBUG,
+ "(%P|%t) ServerApp is destroying the Root POA.\n"));
+
+ // Tear-down the root poa and orb.
+ root_poa->destroy(1, 1 ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+
+ ACE_DEBUG((LM_DEBUG,
+ "(%P|%t) ServerApp is destroying the ORB.\n"));
+
+ orb->destroy(ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+
+ ACE_DEBUG((LM_DEBUG,
+ "(%P|%t) ServerApp has completed running successfully.\n"));
+
+ return 0;
+}
+
+
+int
+ServerApp::parse_args(int argc, char* argv[])
+{
+ this->exe_name_ = argv[0];
+
+ ACE_Get_Opt get_opts(argc, argv, "p:s:c:");
+
+ int c;
+ int tmp;
+
+ while ((c = get_opts()) != -1)
+ {
+ switch (c)
+ {
+ case 'p':
+ this->ior_filename_ = get_opts.opt_arg();
+ break;
+
+ case 's':
+ tmp = ACE_OS::atoi(get_opts.opt_arg());
+ if (tmp < 1)
+ {
+ this->usage_statement();
+ return -1;
+ }
+
+ this->num_servants_ = tmp;
+ break;
+
+ case 'c':
+ tmp = ACE_OS::atoi(get_opts.opt_arg());
+ if (tmp < 1)
+ {
+ this->usage_statement();
+ return -1;
+ }
+
+ this->num_clients_ = tmp;
+ break;
+
+ case '?':
+ this->usage_statement();
+ return 1;
+
+ default:
+ this->usage_statement();
+ return -1;
+ }
+ }
+
+ return 0;
+}
+
+
+void
+ServerApp::usage_statement()
+{
+ ACE_ERROR((LM_ERROR,
+ "Usage: %s [options]\n\n"
+ "OPTIONS:\n\n"
+ "\t[-p <ior_filename_prefix>]\n"
+ "\t[-s <num_servants>]\n"
+ "\t[-c <num_clients>]\n"
+ "\t[-?]\n",
+ "Default ior_filename_prefix is 'foo'.\n"
+ "Default num_servants is 1.\n"
+ "Default num_clients is 1.\n\n",
+ this->exe_name_.c_str()));
+}
+
diff --git a/TAO/examples/CSD_Strategy/ThreadPool2/run_test.pl b/TAO/examples/CSD_Strategy/ThreadPool2/run_test.pl
new file mode 100755
index 00000000000..0ca2caca046
--- /dev/null
+++ b/TAO/examples/CSD_Strategy/ThreadPool2/run_test.pl
@@ -0,0 +1,82 @@
+eval '(exit $?0)' && eval 'exec perl -S $0 ${1+"$@"}'
+ & eval 'exec perl -S $0 $argv:q'
+ if 0;
+
+# $Id$
+# -*- perl -*-
+
+use lib '../../../../bin';
+use PerlACE::Run_Test;
+
+$status = 0;
+
+$iorfname_prefix = "server";
+$num_servants=10;
+$num_clients_per_servant=4;
+$num_clients=$num_servants * $num_clients_per_servant;
+
+#Delete old ior files.
+for (my $i = 0; $i < $num_servants; $i++) {
+ $servant_id = sprintf("%02d", ($i + 1));
+ $iorfile[$i] = PerlACE::LocalFile($iorfname_prefix . "_$servant_id.ior");
+
+ unlink $iorfile[$i];
+}
+
+if (PerlACE::is_vxworks_test()) {
+ $SV = new PerlACE::ProcessVX ("server_main", "-p $iorfname_prefix -s $num_servants -c $num_clients");
+}
+else {
+ $SV = new PerlACE::Process ("server_main", "-p $iorfname_prefix -s $num_servants -c $num_clients");
+}
+
+$SV->Spawn ();
+
+# Wait for the servant ior files created by server.
+for (my $i = 0; $i < $num_servants; $i++) {
+ $servant_id = sprintf("%02d", ($i + 1));
+ $iorfile[$i] = PerlACE::LocalFile($iorfname_prefix . "_$servant_id.ior");
+
+ if (PerlACE::waitforfile_timed ($iorfile[$i],
+ $PerlACE::wait_interval_for_process_creation) == -1) {
+ print STDERR "ERROR: cannot find file <$iorfile[$i]>\n";
+ $SV->Kill (); $SV->TimedWait (1);
+ exit 1;
+ }
+}
+
+$count = 0;
+
+for (my $i = 0; $i < $num_servants; $i++) {
+ for ($j = 0; $j < $num_clients_per_servant; $j++) {
+ $CLS[$count] = new PerlACE::Process ("client_main", " -i file://$iorfile[$i]");
+ $CLS[$count]->Spawn ();
+ $count ++;
+ }
+}
+
+for (my $i = 0; $i < $num_clients; $i++) {
+ $client = $CLS[$i]->WaitKill (60);
+
+ if ($client != 0) {
+ print STDERR "ERROR: client $i returned $client\n";
+ $status = 1;
+ }
+}
+
+$server = $SV->WaitKill (60);
+
+if ($server != 0) {
+ print STDERR "ERROR: server returned $server\n";
+ $status = 1;
+}
+
+#Delete ior files generated by this run.
+for (my $i = 0; $i < $num_servants; $i++) {
+ $servant_id = sprintf("%02d", ($i + 1));
+ $iorfile[$i] = PerlACE::LocalFile($iorfname_prefix . "_$servant_id.ior");
+
+ unlink $iorfile[$i];
+}
+
+exit $status;
diff --git a/TAO/examples/CSD_Strategy/ThreadPool3/CSD_Test_ThreadPool3.mpc b/TAO/examples/CSD_Strategy/ThreadPool3/CSD_Test_ThreadPool3.mpc
new file mode 100644
index 00000000000..bf1561ed050
--- /dev/null
+++ b/TAO/examples/CSD_Strategy/ThreadPool3/CSD_Test_ThreadPool3.mpc
@@ -0,0 +1,26 @@
+// -*- MPC -*-
+// $Id$
+
+project(*Server): csd_threadpool, taoserver, pi {
+ exename = server_main
+
+ Source_Files {
+ Foo_i.cpp
+ OrbTask.cpp
+ ServerApp.cpp
+ server_main.cpp
+ OrbShutdownTask.cpp
+ }
+}
+
+project(*Client): taoexe, anytypecode {
+ exename = client_main
+ after += *Server
+
+ Source_Files {
+ FooC.cpp
+ ClientApp.cpp
+ client_main.cpp
+ }
+}
+
diff --git a/TAO/examples/CSD_Strategy/ThreadPool3/Foo_i.h b/TAO/examples/CSD_Strategy/ThreadPool3/Foo_i.h
new file mode 100644
index 00000000000..3e000a7954a
--- /dev/null
+++ b/TAO/examples/CSD_Strategy/ThreadPool3/Foo_i.h
@@ -0,0 +1,39 @@
+// $Id$
+#ifndef FOO_I_H
+#define FOO_I_H
+
+#include "FooS.h"
+
+
+class Foo_i : public virtual POA_Foo
+{
+ public:
+
+ Foo_i(unsigned num_clients);
+ virtual ~Foo_i();
+
+ virtual void op1(ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC((CORBA::SystemException));
+
+ virtual void op2(CORBA::Long value ACE_ENV_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC((CORBA::SystemException));
+
+ virtual CORBA::Long op3(ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC((CORBA::SystemException));
+
+ virtual void op4(CORBA::Long value ACE_ENV_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC((CORBA::SystemException));
+
+ virtual void op5(ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC((CORBA::SystemException, FooException));
+
+ virtual void done(ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC((CORBA::SystemException));
+
+ private:
+
+ CORBA::Long value_;
+ unsigned num_clients_;
+};
+
+#endif
diff --git a/TAO/examples/CSD_Strategy/ThreadPool3/ServerApp.cpp b/TAO/examples/CSD_Strategy/ThreadPool3/ServerApp.cpp
new file mode 100644
index 00000000000..0c7aecbc33d
--- /dev/null
+++ b/TAO/examples/CSD_Strategy/ThreadPool3/ServerApp.cpp
@@ -0,0 +1,272 @@
+// $Id$
+#include "ServerApp.h"
+#include "Foo_i.h"
+#include "OrbTask.h"
+#include "OrbShutdownTask.h"
+#include "ace/Get_Opt.h"
+#include "tao/CSD_ThreadPool/CSD_TP_Strategy.h"
+#include "tao/Intrusive_Ref_Count_Handle_T.h"
+// To force static load the service.
+#include "tao/PI/PI.h"
+#include "tao/CSD_ThreadPool/CSD_ThreadPool.h"
+
+
+ServerApp::ServerApp()
+ : ior_filename_("ServerApp.default.ior"),
+ num_clients_(1),
+ num_orb_threads_(1)
+{
+}
+
+
+ServerApp::~ServerApp()
+{
+}
+
+
+int
+ServerApp::run(int argc, char* argv[] ACE_ENV_ARG_DECL)
+{
+ CORBA::ORB_var orb = CORBA::ORB_init(argc, argv, "" ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+
+ // Parse the command-line args for this application.
+ // * Raises -1 if problems are encountered.
+ // * Returns 1 if the usage statement was explicitly requested.
+ // * Returns 0 otherwise.
+ int result = this->parse_args(argc, argv);
+ if (result != 0)
+ {
+ return result;
+ }
+
+ TheOrbShutdownTask::instance()->orb (orb.in ());
+
+ CORBA::Object_var obj
+ = orb->resolve_initial_references("RootPOA" ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+
+ if (CORBA::is_nil(obj.in()))
+ {
+ ACE_ERROR((LM_ERROR,
+ "(%P|%t) Failed to resolve initial ref for 'RootPOA'.\n"));
+ ACE_THROW_RETURN (TestException(), -1);
+ }
+
+ PortableServer::POA_var root_poa
+ = PortableServer::POA::_narrow(obj.in() ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+
+ if (CORBA::is_nil(root_poa.in()))
+ {
+ ACE_ERROR((LM_ERROR,
+ "(%P|%t) Failed to narrow obj ref to POA interface.\n"));
+ ACE_THROW_RETURN (TestException(), -1);
+ }
+
+ PortableServer::POAManager_var poa_manager
+ = root_poa->the_POAManager(ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+
+ // Create the child POA.
+ CORBA::PolicyList policies(0);
+ policies.length(0);
+
+ PortableServer::POA_var child_poa
+ = root_poa->create_POA("ChildPoa",
+ poa_manager.in(),
+ policies
+ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+
+ if (CORBA::is_nil(child_poa.in()))
+ {
+ ACE_ERROR((LM_ERROR, "(%P|%t) ERROR [ServerApp::run()]: "
+ "Failed to create the child POA.\n"));
+ ACE_THROW_RETURN (TestException(), -1);
+ }
+
+ // Create the thread pool servant dispatching strategy object, and
+ // hold it in a (local) smart pointer variable.
+ TAO_Intrusive_Ref_Count_Handle<TAO::CSD::TP_Strategy> csd_tp_strategy =
+ new TAO::CSD::TP_Strategy();
+
+ // Tell the strategy to apply itself to the child poa.
+ if (csd_tp_strategy->apply_to(child_poa.in() ACE_ENV_ARG_PARAMETER) == false)
+ {
+ ACE_ERROR((LM_ERROR, "(%P|%t) ERROR [ServerApp::run()]: "
+ "Failed to apply custom dispatching strategy to child poa.\n"));
+ ACE_THROW_RETURN (TestException(), -1);
+ }
+ ACE_CHECK_RETURN (-1);
+
+ // Create the servant object.
+ Foo_i* servant = new Foo_i(this->num_clients_);
+
+ // local smart pointer variable to deal with releasing the reference
+ // to the servant object when the smart pointer object falls out of scope.
+ PortableServer::ServantBase_var owner_transfer(servant);
+
+ // Activate the servant using the Child POA.
+ PortableServer::ObjectId_var oid
+ = child_poa->activate_object(servant ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+
+ // Obtain the object reference.
+ obj = child_poa->servant_to_reference(servant ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+
+ if (CORBA::is_nil(obj.in()))
+ {
+ ACE_ERROR((LM_ERROR,
+ "(%P|%t) Failed to activate servant (Foo_i).\n"));
+ ACE_THROW_RETURN (TestException(), -1);
+ }
+
+ // Stringify the object reference
+ CORBA::String_var ior
+ = orb->object_to_string(obj.in() ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+
+ // Write the stringified object reference to the ior file.
+ FILE* ior_file = ACE_OS::fopen(this->ior_filename_.c_str(), "w");
+
+ if (ior_file == 0)
+ {
+ ACE_ERROR((LM_ERROR,
+ "(%P|%t) Cannot open output file for writing IOR: %s",
+ this->ior_filename_.c_str()));
+ ACE_THROW_RETURN (TestException(), -1);
+ }
+
+ ACE_OS::fprintf(ior_file, "%s", ior.in ());
+ ACE_OS::fclose(ior_file);
+
+ // Activate the POA Manager
+ poa_manager->activate(ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+
+ ACE_DEBUG((LM_DEBUG,
+ "(%P|%t) ServerApp is ready.\n"));
+
+ // If the num_orb_threads_ is exactly one, then just use the current
+ // (mainline) thread to run the ORB event loop.
+ if (this->num_orb_threads_ == 1)
+ {
+ // Since the num_orb_threads_ is exactly one, we just use the current
+ // (mainline) thread to run the ORB event loop.
+ orb->run(ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+ }
+ else
+ {
+ // The num_orb_threads_ is greater than 1, so we will use an OrbTask
+ // (active object) to run the ORB event loop in (num_orb_threads_ - 1)
+ // threads. We use the current (mainline) thread as the other thread
+ // running the ORB event loop.
+ OrbTask orb_task(orb.in(), this->num_orb_threads_ - 1);
+
+ // Activate the OrbTask worker threads
+ if (orb_task.open() != 0)
+ {
+ ACE_ERROR((LM_ERROR,
+ "(%P|%t) Failed to open the OrbTask.\n"));
+ ACE_THROW_RETURN (TestException(), -1);
+ }
+
+ // This will use the current (mainline) thread to run the ORB event loop.
+ orb->run(ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+
+ // Now that the current thread has unblocked from running the orb,
+ // make sure to wait for all of the worker threads to complete.
+ orb_task.wait();
+ }
+
+ ACE_DEBUG((LM_DEBUG,
+ "(%P|%t) ServerApp is waiting for OrbShutdownTask.\n"));
+ TheOrbShutdownTask::instance()->wait ();
+
+ // Sleep for 2 second to let the done() two-way call complete
+ // before cleanup.
+ ACE_OS::sleep (2);
+
+ // Tear-down the root poa and orb.
+ root_poa->destroy(1, 1 ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+ orb->destroy(ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+
+ return 0;
+}
+
+
+int
+ServerApp::parse_args(int argc, char* argv[])
+{
+ this->exe_name_ = argv[0];
+
+ ACE_Get_Opt get_opts(argc, argv, "o:n:t:");
+
+ int c;
+ int tmp;
+
+ while ((c = get_opts()) != -1)
+ {
+ switch (c)
+ {
+ case 'o':
+ this->ior_filename_ = get_opts.opt_arg();
+ break;
+
+ case 'n':
+ tmp = ACE_OS::atoi(get_opts.opt_arg());
+ if (tmp < 1)
+ {
+ this->usage_statement();
+ return -1;
+ }
+
+ this->num_clients_ = tmp;
+ break;
+
+ case 't':
+ tmp = ACE_OS::atoi(get_opts.opt_arg());
+ if (tmp < 1)
+ {
+ this->usage_statement();
+ return -1;
+ }
+
+ this->num_orb_threads_ = tmp;
+ break;
+ case '?':
+ this->usage_statement();
+ return 1;
+
+ default:
+ this->usage_statement();
+ return -1;
+ }
+ }
+
+ return 0;
+}
+
+
+void
+ServerApp::usage_statement()
+{
+ ACE_ERROR((LM_ERROR,
+ "Usage: %s [options]\n\n"
+ "OPTIONS:\n\n"
+ "\t[-o <ior_filename>]\n"
+ "\t[-n <num_clients>]\n"
+ "\t[-t <num_orb_threads>]\n"
+ "\t[-?]\n",
+ "Default ior_filename_prefix is 'foo'.\n"
+ "Default num_servants is 1.\n"
+ "Default num_clients is 1.\n\n",
+ this->exe_name_.c_str()));
+}
+
diff --git a/TAO/examples/CSD_Strategy/ThreadPool3/run_test.pl b/TAO/examples/CSD_Strategy/ThreadPool3/run_test.pl
new file mode 100755
index 00000000000..658bdcc5326
--- /dev/null
+++ b/TAO/examples/CSD_Strategy/ThreadPool3/run_test.pl
@@ -0,0 +1,61 @@
+eval '(exit $?0)' && eval 'exec perl -S $0 ${1+"$@"}'
+ & eval 'exec perl -S $0 $argv:q'
+ if 0;
+
+# $Id$
+# -*- perl -*-
+
+use lib '../../../../bin';
+use PerlACE::Run_Test;
+
+$iorfile = PerlACE::LocalFile ("server.ior");
+unlink $iorfile;
+$status = 0;
+
+$num_clients=40;
+$num_orb_threads=4;
+
+if (PerlACE::is_vxworks_test()) {
+ $SV = new PerlACE::ProcessVX ("server_main", "-o $iorfile -n $num_clients -t $num_orb_threads");
+}
+else {
+ $SV = new PerlACE::Process ("server_main", "-o $iorfile -n $num_clients -t $num_orb_threads");
+}
+
+$SV->Spawn ();
+
+if (PerlACE::waitforfile_timed ($iorfile,
+ $PerlACE::wait_interval_for_process_creation) == -1) {
+ print STDERR "ERROR: cannot find file <$iorfile>\n";
+ $SV->Kill (); $SV->TimedWait (1);
+ exit 1;
+}
+
+for ($i = 0; $i < $num_clients; $i++) {
+
+ @CLS[$i] = new PerlACE::Process ("client_main", " -i file://$iorfile");
+
+ @CLS[$i]->Spawn ();
+}
+
+for ($i = 0; $i < $num_clients; $i++) {
+
+ $client = @CLS[$i]->WaitKill (60);
+
+ if ($client != 0) {
+ print STDERR "ERROR: client $i returned $client\n";
+ $status = 1;
+ }
+}
+
+
+$server = $SV->WaitKill (60);
+
+if ($server != 0) {
+ print STDERR "ERROR: server returned $server\n";
+ $status = 1;
+}
+
+unlink $iorfile;
+
+exit $status;
diff --git a/TAO/examples/CSD_Strategy/ThreadPool4/CSD_Test_ThreadPool4.mpc b/TAO/examples/CSD_Strategy/ThreadPool4/CSD_Test_ThreadPool4.mpc
new file mode 100644
index 00000000000..f0c15486469
--- /dev/null
+++ b/TAO/examples/CSD_Strategy/ThreadPool4/CSD_Test_ThreadPool4.mpc
@@ -0,0 +1,15 @@
+// -*- MPC -*-
+// $Id$
+
+project(*Server): csd_threadpool, messaging, taoserver, pi {
+ exename = server_main
+
+ Source_Files {
+ Foo_i.cpp
+ Callback_i.cpp
+ ServerApp.cpp
+ server_main.cpp
+ ClientTask.cpp
+ OrbShutdownTask.cpp
+ }
+}
diff --git a/TAO/examples/CSD_Strategy/ThreadPool4/Callback_i.h b/TAO/examples/CSD_Strategy/ThreadPool4/Callback_i.h
new file mode 100644
index 00000000000..dae67d71eb0
--- /dev/null
+++ b/TAO/examples/CSD_Strategy/ThreadPool4/Callback_i.h
@@ -0,0 +1,26 @@
+// $Id$
+#ifndef CALLBACK_I_H
+#define CALLBACK_I_H
+
+#include "CallbackS.h"
+
+
+class Callback_i : public virtual POA_Callback
+{
+ public:
+
+ Callback_i();
+
+ virtual ~Callback_i();
+
+ virtual void test_method (
+ ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS
+ )
+ ACE_THROW_SPEC ((
+ CORBA::SystemException
+ ));
+
+};
+
+
+#endif
diff --git a/TAO/examples/CSD_Strategy/ThreadPool4/Foo.idl b/TAO/examples/CSD_Strategy/ThreadPool4/Foo.idl
new file mode 100644
index 00000000000..ac276067408
--- /dev/null
+++ b/TAO/examples/CSD_Strategy/ThreadPool4/Foo.idl
@@ -0,0 +1,73 @@
+// $Id$
+#ifndef FOO_IDL
+#define FOO_IDL
+
+#include "Callback.idl"
+
+exception FooException {};
+exception TestException {};
+
+typedef sequence<char, 32> Bounded_Var_Size;
+typedef sequence<char> Unbounded_Var_Size;
+typedef long Fixed_Array[20];
+typedef string Var_Array [3];
+
+struct TimeOfDay {
+ short hour; // 0 - 23
+ short minute; // 0 - 59
+ short second; // 0 - 59
+};
+interface Foo
+{
+ /// void return-type, no arguments
+ void op1();
+
+ /// void return-type, 1 "in" argument
+ void op2(in long value);
+
+ /// long return-type, no arguments
+ long op3();
+
+ /// one-way version of op2
+ oneway void op4(in long value);
+
+ /// Operation that always raises an exception.
+ void op5() raises (FooException);
+
+ /// Operation with the inout parameter.
+ boolean op6(in string user_name,
+ inout string message);
+
+ oneway void test_unbounded_string_arg(in string message);
+
+ oneway void test_bounded_string_arg(in string<20> message);
+
+ oneway void test_fixed_array_arg(in Fixed_Array message);
+
+ oneway void test_var_array_arg(in Var_Array messages);
+
+ oneway void test_bounded_var_size_arg(in Bounded_Var_Size message);
+
+ oneway void test_unbounded_var_size_arg(in Unbounded_Var_Size message);
+
+ oneway void test_fixed_size_arg (in TimeOfDay t);
+
+ oneway void test_special_basic_arg(in boolean value);
+
+ oneway void test_objref_arg (in Callback cb);
+
+ void test_fixed_size_arg_two_way (in TimeOfDay t);
+
+ /// Operation with the object reference parameter.
+ void callback_object (in Callback cb);
+
+ /// Operation that invoke remote operation on
+ // callback object.
+ void test_callback () raises (FooException);
+
+ /// Client calls this last. It will shutdown the server.
+ void done();
+};
+
+
+#endif
diff --git a/TAO/examples/CSD_Strategy/ThreadPool4/Foo_i.cpp b/TAO/examples/CSD_Strategy/ThreadPool4/Foo_i.cpp
new file mode 100644
index 00000000000..ad128eb15d6
--- /dev/null
+++ b/TAO/examples/CSD_Strategy/ThreadPool4/Foo_i.cpp
@@ -0,0 +1,302 @@
+// $Id$
+#include "Foo_i.h"
+#include "OrbShutdownTask.h"
+#include "ace/OS.h"
+
+Foo_i::Foo_i(const char* servant_name)
+: value_(0),
+ count_op1_(0),
+ count_op2_(0),
+ count_op3_(0),
+ count_op4_(0),
+ count_op5_(0),
+ servant_name_(servant_name)
+{
+}
+
+
+Foo_i::~Foo_i()
+{
+}
+
+
+void
+Foo_i::op1(ACE_ENV_SINGLE_ARG_DECL_NOT_USED)
+ ACE_THROW_SPEC((CORBA::SystemException))
+{
+ ++this->count_op1_;
+ // Sleep for 10 milliseconds (10,000 microseconds)
+ //ACE_OS::sleep(ACE_Time_Value(0,10000));
+}
+
+
+void
+Foo_i::op2(CORBA::Long value ACE_ENV_ARG_DECL_NOT_USED)
+ ACE_THROW_SPEC((CORBA::SystemException))
+{
+ ++this->count_op2_;
+ this->value_ = value;
+}
+
+
+CORBA::Long
+Foo_i::op3(ACE_ENV_SINGLE_ARG_DECL_NOT_USED)
+ ACE_THROW_SPEC((CORBA::SystemException))
+{
+ ++this->count_op3_;
+ return this->value_;
+}
+
+
+void
+Foo_i::op4(CORBA::Long value ACE_ENV_ARG_DECL_NOT_USED)
+ ACE_THROW_SPEC((CORBA::SystemException))
+{
+ ++this->count_op4_;
+ this->value_ = value;
+
+ if (this->count_op4_ % 1 == 0)
+ {
+ ACE_DEBUG((LM_DEBUG,
+ "(%P|%t) op4() has been called %d times now. value == %d\n",
+ this->count_op4_, this->value_));
+ }
+
+ // Sleep for 10 milliseconds (10,000 microseconds)
+ //ACE_OS::sleep(ACE_Time_Value(0,10000));
+}
+
+
+void
+Foo_i::op5(ACE_ENV_SINGLE_ARG_DECL)
+ ACE_THROW_SPEC((CORBA::SystemException, FooException))
+{
+ ACE_DEBUG((LM_DEBUG, "(%P|%t) Foo_i::op5() - ENTER\n"));
+ ACE_DEBUG((LM_DEBUG, "(%P|%t) Foo_i::op5() - Increment counter.\n"));
+ unsigned newcount = ++this->count_op5_;
+ ACE_DEBUG((LM_DEBUG, "(%P|%t) Foo_i::op5() - Counter is now %d.\n", newcount));
+ ACE_DEBUG((LM_DEBUG, "(%P|%t) Foo_i::op5() - EXIT - Raise a FooException.\n"));
+ ACE_THROW_SPEC (FooException());
+}
+
+
+CORBA::Boolean
+Foo_i::op6 (
+ const char * user_name,
+ char *& message
+ ACE_ENV_ARG_DECL_NOT_USED
+)
+ACE_THROW_SPEC ((
+ CORBA::SystemException
+))
+{
+ ACE_CString str(message);
+ str += user_name;
+ CORBA::string_free (message);
+ message = CORBA::string_dup (str.c_str ());
+ return 1;
+}
+
+
+void
+Foo_i::test_unbounded_string_arg (
+ const char * message
+ ACE_ENV_ARG_DECL_NOT_USED
+)
+ACE_THROW_SPEC ((
+CORBA::SystemException
+))
+{
+ ACE_DEBUG((LM_DEBUG, ACE_TEXT("(%P|%t)Foo_i::test_unbounded_string_arg ")
+ ACE_TEXT("got unbounded string %s\n"),
+ message));
+}
+
+
+void
+Foo_i::test_bounded_string_arg (
+ const char * message
+ ACE_ENV_ARG_DECL_NOT_USED
+)
+ACE_THROW_SPEC ((
+CORBA::SystemException
+))
+{
+ ACE_DEBUG((LM_DEBUG, ACE_TEXT("(%P|%t)Foo_i::test_bounded_string_arg ")
+ ACE_TEXT("got bounded string %s\n"),
+ message));
+}
+
+
+void
+Foo_i::test_fixed_array_arg (
+ const ::Fixed_Array message
+ ACE_ENV_ARG_DECL_NOT_USED
+)
+ACE_THROW_SPEC ((
+ CORBA::SystemException
+))
+{
+ for (CORBA::ULong i = 0; i < 20; i++)
+ {
+ ACE_DEBUG((LM_DEBUG, ACE_TEXT("(%P|%t)Foo_i::test_fixed_array_arg ")
+ ACE_TEXT("got fixed_array[i] = %d\n"),
+ i, message[i]));
+ }
+}
+
+
+void
+Foo_i::test_bounded_var_size_arg (
+ const ::Bounded_Var_Size & message
+ ACE_ENV_ARG_DECL_NOT_USED
+)
+ACE_THROW_SPEC ((
+ CORBA::SystemException
+))
+{
+ ACE_DEBUG((LM_DEBUG, ACE_TEXT("(%P|%t)Foo_i::test_bounded_var_size_arg ")
+ ACE_TEXT("got var array chars %s\n"),
+ message.get_buffer ()));
+}
+
+
+void
+Foo_i::test_unbounded_var_size_arg (
+ const ::Unbounded_Var_Size & message
+ ACE_ENV_ARG_DECL_NOT_USED
+)
+ACE_THROW_SPEC ((
+ CORBA::SystemException
+))
+{
+ ACE_DEBUG((LM_DEBUG, ACE_TEXT("(%P|%t)Foo_i::test_unbounded_var_size_arg ")
+ ACE_TEXT("got var array chars %s\n"),
+ message.get_buffer ()));
+}
+
+
+void
+Foo_i::test_fixed_size_arg (
+ const ::TimeOfDay & t
+ ACE_ENV_ARG_DECL_NOT_USED
+)
+ACE_THROW_SPEC ((
+ CORBA::SystemException
+))
+{
+ ACE_DEBUG((LM_DEBUG, ACE_TEXT("(%P|%t)Foo_i::test_fixed_size_arg ")
+ ACE_TEXT("got timeofday %d:%d:%d\n"),
+ t.hour, t.minute, t.second));
+}
+
+void
+Foo_i::test_fixed_size_arg_two_way (
+ const ::TimeOfDay & t
+ ACE_ENV_ARG_DECL_NOT_USED
+)
+ACE_THROW_SPEC ((
+ CORBA::SystemException
+))
+{
+ ACE_DEBUG((LM_DEBUG, ACE_TEXT("(%P|%t)Foo_i::test_fixed_size_arg_two_way ")
+ ACE_TEXT("got timeofday %d:%d:%d\n"),
+ t.hour, t.minute, t.second));
+}
+
+void
+Foo_i::test_var_array_arg (
+ const ::Var_Array messages
+ ACE_ENV_ARG_DECL_NOT_USED
+)
+ACE_THROW_SPEC ((
+ CORBA::SystemException
+))
+{
+ ACE_DEBUG((LM_DEBUG, ACE_TEXT("(%P|%t)Foo_i::test_var_array_arg ")
+ ACE_TEXT(" %s \n"), messages[0].in ()));
+ ACE_DEBUG((LM_DEBUG, ACE_TEXT("(%P|%t)Foo_i::test_var_array_arg ")
+ ACE_TEXT(" %s \n"), messages[1].in ()));
+ ACE_DEBUG((LM_DEBUG, ACE_TEXT("(%P|%t)Foo_i::test_var_array_arg ")
+ ACE_TEXT(" %s \n"), messages[2].in ()));
+}
+
+
+void
+Foo_i::test_special_basic_arg (
+ ::CORBA::Boolean value
+ ACE_ENV_ARG_DECL_NOT_USED
+)
+ACE_THROW_SPEC ((
+ CORBA::SystemException
+))
+{
+ ACE_DEBUG((LM_DEBUG, ACE_TEXT("(%P|%t)Foo_i::test_special_basic_arg ")
+ ACE_TEXT(" got special basic arg: %d \n"), value));
+}
+
+
+void
+Foo_i::test_objref_arg (
+ ::Callback_ptr cb
+ ACE_ENV_ARG_DECL_NOT_USED
+)
+ACE_THROW_SPEC ((
+ CORBA::SystemException
+))
+{
+ this->callback_ = Callback::_duplicate (cb);
+ ACE_DEBUG((LM_DEBUG, ACE_TEXT("(%P|%t)Foo_i::test_objref_arg ")
+ ACE_TEXT(" got callback object. \n")));
+}
+
+
+void
+Foo_i::callback_object (
+ ::Callback_ptr cb
+ ACE_ENV_ARG_DECL_NOT_USED
+)
+ACE_THROW_SPEC ((
+ CORBA::SystemException
+))
+{
+ this->callback_ = Callback::_duplicate (cb);
+}
+
+void
+Foo_i::test_callback (
+ ACE_ENV_SINGLE_ARG_DECL
+)
+ACE_THROW_SPEC ((
+ CORBA::SystemException, FooException
+))
+{
+ if (CORBA::is_nil (this->callback_.in ()))
+ {
+ ACE_THROW (FooException ());
+ }
+ else
+ {
+ this->callback_->test_method (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK;
+ }
+}
+
+
+void
+Foo_i::done(ACE_ENV_SINGLE_ARG_DECL)
+ ACE_THROW_SPEC((CORBA::SystemException))
+{
+ static ACE_Atomic_Op <ACE_SYNCH_MUTEX, unsigned> num_clients = 2;
+
+ num_clients --;
+
+ if (num_clients == 0)
+ {
+ if (TheOrbShutdownTask::instance()->open(0) != 0)
+ {
+ ACE_ERROR((LM_ERROR, "(%P|%t)Foo_i::done: "
+ "failed to create orb shutdown thread.\n"));
+ }
+ }
+}
diff --git a/TAO/examples/CSD_Strategy/ThreadPool4/Foo_i.h b/TAO/examples/CSD_Strategy/ThreadPool4/Foo_i.h
new file mode 100644
index 00000000000..e5b465d24c6
--- /dev/null
+++ b/TAO/examples/CSD_Strategy/ThreadPool4/Foo_i.h
@@ -0,0 +1,157 @@
+// $Id$
+#ifndef FOO_I_H
+#define FOO_I_H
+
+#include "FooS.h"
+#include "CallbackC.h"
+#include "ace/SString.h"
+#include "ace/CORBA_macros.h"
+#include "tao/Environment.h"
+
+class FooServantList;
+
+class Foo_i : public virtual POA_Foo
+{
+ public:
+
+ Foo_i(const char* servant_name);
+ virtual ~Foo_i();
+
+ virtual void op1(ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC((CORBA::SystemException));
+
+ virtual void op2(CORBA::Long value ACE_ENV_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC((CORBA::SystemException));
+
+ virtual CORBA::Long op3(ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC((CORBA::SystemException));
+
+ virtual void op4(CORBA::Long value ACE_ENV_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC((CORBA::SystemException));
+
+ virtual void op5(ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC((CORBA::SystemException, FooException));
+
+ virtual CORBA::Boolean op6 (
+ const char * user_name,
+ char *& message
+ ACE_ENV_ARG_DECL_WITH_DEFAULTS
+ )
+ ACE_THROW_SPEC ((
+ CORBA::SystemException
+ ));
+
+ virtual void test_unbounded_string_arg (
+ const char * message
+ ACE_ENV_ARG_DECL_WITH_DEFAULTS
+ )
+ ACE_THROW_SPEC ((
+ CORBA::SystemException
+ ));
+
+ virtual void test_bounded_string_arg (
+ const char * message
+ ACE_ENV_ARG_DECL_WITH_DEFAULTS
+ )
+ ACE_THROW_SPEC ((
+ CORBA::SystemException
+ ));
+
+ virtual void test_fixed_array_arg (
+ const ::Fixed_Array message
+ ACE_ENV_ARG_DECL_WITH_DEFAULTS
+ )
+ ACE_THROW_SPEC ((
+ CORBA::SystemException
+ ));
+
+ virtual void test_var_array_arg (
+ const ::Var_Array messages
+ ACE_ENV_ARG_DECL_WITH_DEFAULTS
+ )
+ ACE_THROW_SPEC ((
+ CORBA::SystemException
+ ));
+
+ virtual void test_bounded_var_size_arg (
+ const ::Bounded_Var_Size & message
+ ACE_ENV_ARG_DECL_WITH_DEFAULTS
+ )
+ ACE_THROW_SPEC ((
+ CORBA::SystemException
+ ));
+
+ virtual void test_unbounded_var_size_arg (
+ const ::Unbounded_Var_Size & message
+ ACE_ENV_ARG_DECL_WITH_DEFAULTS
+ )
+ ACE_THROW_SPEC ((
+ CORBA::SystemException
+ ));
+
+ virtual void test_fixed_size_arg (
+ const ::TimeOfDay & t
+ ACE_ENV_ARG_DECL_WITH_DEFAULTS
+ )
+ ACE_THROW_SPEC ((
+ CORBA::SystemException
+ ));
+
+ virtual void test_fixed_size_arg_two_way (
+ const ::TimeOfDay & t
+ ACE_ENV_ARG_DECL_WITH_DEFAULTS
+ )
+ ACE_THROW_SPEC ((
+ CORBA::SystemException
+ ));
+
+ virtual void test_special_basic_arg (
+ ::CORBA::Boolean value
+ ACE_ENV_ARG_DECL_WITH_DEFAULTS
+ )
+ ACE_THROW_SPEC ((
+ CORBA::SystemException
+ ));
+
+ virtual void test_objref_arg (
+ ::Callback_ptr cb
+ ACE_ENV_ARG_DECL_WITH_DEFAULTS
+ )
+ ACE_THROW_SPEC ((
+ CORBA::SystemException
+ ));
+
+ virtual void callback_object (
+ ::Callback_ptr cb
+ ACE_ENV_ARG_DECL_WITH_DEFAULTS
+ )
+ ACE_THROW_SPEC ((
+ CORBA::SystemException
+ ));
+
+ virtual void test_callback (
+ ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS
+ )
+ ACE_THROW_SPEC ((
+ CORBA::SystemException, FooException
+ ));
+
+ virtual void done(ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC((CORBA::SystemException));
+
+
+ private:
+
+ CORBA::Long value_;
+
+ unsigned count_op1_;
+ unsigned count_op2_;
+ unsigned count_op3_;
+ unsigned count_op4_;
+ unsigned count_op5_;
+
+ ACE_CString servant_name_;
+ Callback_var callback_;
+};
+
+#endif
diff --git a/TAO/examples/CSD_Strategy/ThreadPool4/ServerApp.cpp b/TAO/examples/CSD_Strategy/ThreadPool4/ServerApp.cpp
new file mode 100644
index 00000000000..f5e5a1006d8
--- /dev/null
+++ b/TAO/examples/CSD_Strategy/ThreadPool4/ServerApp.cpp
@@ -0,0 +1,360 @@
+// $Id$
+#include "ServerApp.h"
+#include "Foo_i.h"
+#include "Callback_i.h"
+#include "ClientTask.h"
+#include "OrbShutdownTask.h"
+#include "ace/Get_Opt.h"
+#include "tao/CSD_ThreadPool/CSD_TP_Strategy.h"
+#include "tao/Intrusive_Ref_Count_Handle_T.h"
+#include "tao/Messaging/Messaging.h"
+#include "tao/AnyTypeCode/Any.h"
+// To force static load the service.
+#include "tao/PI/PI.h"
+#include "tao/CSD_ThreadPool/CSD_ThreadPool.h"
+
+
+ServerApp::ServerApp()
+: synch_with_server_ (0)
+{
+}
+
+
+ServerApp::~ServerApp()
+{
+}
+
+
+int
+ServerApp::run(int argc, char* argv[] ACE_ENV_ARG_DECL)
+{
+ this->orb_ = CORBA::ORB_init(argc, argv, "" ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+
+ // Parse the command-line args for this application.
+ // * Raises -1 if problems are encountered.
+ // * Returns 1 if the usage statement was explicitly requested.
+ // * Returns 0 otherwise.
+ int result = this->parse_args(argc, argv);
+ if (result != 0)
+ {
+ return result;
+ }
+
+ TheOrbShutdownTask::instance()->orb (this->orb_.in ());
+
+ if (synch_with_server_)
+ {
+ CORBA::Object_var manager_object =
+ orb_->resolve_initial_references("ORBPolicyManager"
+ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+
+ CORBA::PolicyManager_var policy_manager
+ = CORBA::PolicyManager::_narrow(manager_object.in()
+ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+
+ if (CORBA::is_nil (policy_manager.in ()))
+ {
+ ACE_ERROR ((LM_ERROR,
+ " (%P|%t) Panic: nil PolicyManager\n"));
+ ACE_THROW_RETURN (TestException(), -1);
+ }
+
+ CORBA::Any policy_value;
+ policy_value <<= Messaging::SYNC_WITH_SERVER;
+ CORBA::PolicyList policies(1);
+ policies.length(1);
+
+ policies[0] =
+ orb_->create_policy (Messaging::SYNC_SCOPE_POLICY_TYPE,
+ policy_value
+ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+
+ policy_manager->set_policy_overrides (policies,
+ CORBA::ADD_OVERRIDE
+ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+
+ policies[0]->destroy (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+ }
+
+ CORBA::Object_var obj
+ = orb_->resolve_initial_references("RootPOA" ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+
+ if (CORBA::is_nil(obj.in()))
+ {
+ ACE_ERROR((LM_ERROR,
+ "(%P|%t) Failed to resolve initial ref for 'RootPOA'.\n"));
+ ACE_THROW_RETURN (TestException(), -1);
+ }
+
+ PortableServer::POA_var root_poa
+ = PortableServer::POA::_narrow(obj.in() ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+
+ if (CORBA::is_nil(root_poa.in()))
+ {
+ ACE_ERROR((LM_ERROR,
+ "(%P|%t) Failed to narrow obj ref to POA interface.\n"));
+ ACE_THROW_RETURN (TestException(), -1);
+ }
+
+ PortableServer::POAManager_var poa_manager
+ = root_poa->the_POAManager(ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+
+ // Create the child POA.
+ CORBA::PolicyList policies(1);
+ policies.length(1);
+
+ policies[0] = root_poa->create_id_assignment_policy(PortableServer::USER_ID
+ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+
+ PortableServer::POA_var child_poa_1 = root_poa->create_POA("ChildPoa_1",
+ poa_manager.in(),
+ policies
+ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+
+ if (CORBA::is_nil(child_poa_1.in()))
+ {
+ ACE_ERROR((LM_ERROR, "(%P|%t) ERROR [ServerApp::run()]: "
+ "Failed to create the ChildPoa_1.\n"));
+ ACE_THROW_RETURN (TestException(), -1);
+ }
+
+ PortableServer::POA_var child_poa_2 = root_poa->create_POA("ChildPoa_2",
+ poa_manager.in(),
+ policies
+ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+
+ if (CORBA::is_nil(child_poa_2.in()))
+ {
+ ACE_ERROR((LM_ERROR, "(%P|%t) ERROR [ServerApp::run()]: "
+ "Failed to create the ChildPoa_2.\n"));
+ ACE_THROW_RETURN (TestException(), -1);
+ }
+
+ policies[0]->destroy (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+
+ // Create the thread pool servant dispatching strategy object, and
+ // hold it in a (local) smart pointer variable.
+ TAO_Intrusive_Ref_Count_Handle<TAO::CSD::TP_Strategy> csd_tp_strategy =
+ new TAO::CSD::TP_Strategy();
+
+ // We need create multiple working threads otherwise it would deadlock
+ // with the callback test.
+ csd_tp_strategy->set_num_threads(2);
+
+ // Tell the strategy to apply itself to the child poa.
+ if (csd_tp_strategy->apply_to(child_poa_1.in() ACE_ENV_ARG_PARAMETER) == false)
+ {
+ ACE_ERROR((LM_ERROR, "(%P|%t) ERROR [ServerApp::run()]: "
+ "Failed to apply custom dispatching strategy to child poa 1.\n"));
+ ACE_THROW_RETURN (TestException(), -1);
+ }
+ ACE_CHECK_RETURN (-1);
+
+ Foo_var foo1 = this->create_foo(child_poa_1.in(),
+ "foo_applied_strategy"
+ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+
+ Foo_var foo2 = this->create_foo(child_poa_2.in(),
+ "foo_not_applied_strategy"
+ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+
+ Callback_var callback1
+ = this->create_callback(child_poa_1.in(),
+ "callback_applied_strategy"
+ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+
+ Callback_var callback2
+ = this->create_callback(child_poa_2.in(),
+ "callback_not_applied_strategy"
+ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+
+ // Activate the POA Manager
+ poa_manager->activate(ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+
+ ACE_DEBUG((LM_DEBUG,
+ "(%P|%t) ServerApp is ready. Running the ORB event loop.\n"));
+
+ // Wait for the custom stretegy launch the dispatching threads.
+ ACE_OS::sleep (2);
+
+ ClientTask client1 (foo1.in (), callback1.in ());
+ if (client1.open() != 0)
+ {
+ ACE_ERROR((LM_ERROR,
+ "(%P|%t) Failed to open the collocated client1.\n"));
+ ACE_THROW_RETURN (TestException(), -1);
+ }
+
+ ClientTask client2 (foo2.in (), callback2.in ());
+ if (client2.open() != 0)
+ {
+ ACE_ERROR((LM_ERROR,
+ "(%P|%t) Failed to open the collocated client2.\n"));
+ ACE_THROW_RETURN (TestException(), -1);
+ }
+
+ // Run the ORB event loop.
+ orb_->run(ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+
+ ACE_DEBUG((LM_DEBUG,
+ "(%P|%t) ServerApp ORB has stopped running.\n"));
+
+ ACE_DEBUG((LM_DEBUG,
+ "(%P|%t) Wait for the OrbShutdownTask.\n"));
+
+ TheOrbShutdownTask::instance()->wait ();
+
+ ACE_DEBUG((LM_DEBUG,
+ "(%P|%t) Wait for the collocated client task.\n"));
+
+ client1.wait ();
+ client2.wait ();
+
+ ACE_DEBUG((LM_DEBUG,
+ "(%P|%t) Stop the CSD strategy.\n"));
+
+ ACE_DEBUG((LM_DEBUG,
+ "(%P|%t) ServerApp is destroying the Root POA.\n"));
+
+ // Tear-down the root poa and orb_.
+ root_poa->destroy(1, 1 ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+
+ ACE_DEBUG((LM_DEBUG,
+ "(%P|%t) ServerApp is destroying the ORB.\n"));
+
+ orb_->destroy(ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+
+ ACE_DEBUG((LM_DEBUG,
+ "(%P|%t) ServerApp has completed running successfully.\n"));
+
+ return 0;
+}
+
+
+int
+ServerApp::parse_args(int argc, char* argv[])
+{
+ this->exe_name_ = argv[0];
+
+ ACE_Get_Opt get_opts(argc, argv, "s");
+
+ int c;
+
+ while ((c = get_opts()) != -1)
+ {
+ switch (c)
+ {
+ case 's':
+ this->synch_with_server_ = 1;
+ break;
+
+ case '?':
+ this->usage_statement();
+ return 1;
+
+ default:
+ this->usage_statement();
+ return -1;
+ }
+ }
+
+ return 0;
+}
+
+
+Foo_ptr
+ServerApp::create_foo (
+ PortableServer::POA_ptr poa,
+ const char* servant_name
+ ACE_ENV_ARG_DECL)
+{
+ PortableServer::ServantBase_var servant
+ = new Foo_i(servant_name);
+
+ PortableServer::ObjectId_var id =
+ PortableServer::string_to_ObjectId(servant_name);
+
+ poa->activate_object_with_id(id.in(), servant.in() ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK_RETURN (Foo::_nil ());
+
+ CORBA::Object_var obj = poa->id_to_reference(id.in() ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK_RETURN (Foo::_nil ());
+
+ if (CORBA::is_nil(obj.in()))
+ {
+ ACE_ERROR((LM_ERROR,
+ "(%P|%t) Failed to activate servant (%s).\n",
+ servant_name));
+ ACE_THROW_RETURN (TestException(), Foo::_nil ());
+ }
+
+ Foo_var foo = Foo::_narrow (obj.in () ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK_RETURN (Foo::_nil ());
+
+ return foo._retn ();
+}
+
+Callback_ptr
+ServerApp::create_callback(
+ PortableServer::POA_ptr poa,
+ const char* servant_name
+ ACE_ENV_ARG_DECL)
+{
+ PortableServer::ServantBase_var servant
+ = new Callback_i();
+
+ PortableServer::ObjectId_var id =
+ PortableServer::string_to_ObjectId("callback");
+
+ poa->activate_object_with_id(id.in(), servant.in() ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK_RETURN (Callback::_nil ());
+
+ CORBA::Object_var obj = poa->id_to_reference(id.in() ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK_RETURN (Callback::_nil ());
+
+ if (CORBA::is_nil(obj.in()))
+ {
+ ACE_ERROR((LM_ERROR,
+ "(%P|%t) Failed to activate servant (%s).\n",
+ servant_name));
+ ACE_THROW_RETURN (TestException(), Callback::_nil ());
+ }
+
+ Callback_var callback = Callback::_narrow (obj.in () ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK_RETURN (Callback::_nil ());
+
+ return callback._retn ();
+}
+
+void
+ServerApp::usage_statement()
+{
+ ACE_ERROR((LM_ERROR,
+ "Usage: %s [options]\n\n"
+ "OPTIONS:\n\n"
+ "\t[-s <synch_with_server>]\n"
+ "\t[-?]\n\n",
+ this->exe_name_.c_str()));
+}
+
diff --git a/TAO/examples/CSD_Strategy/ThreadPool4/run_test.pl b/TAO/examples/CSD_Strategy/ThreadPool4/run_test.pl
new file mode 100755
index 00000000000..f3b960e5088
--- /dev/null
+++ b/TAO/examples/CSD_Strategy/ThreadPool4/run_test.pl
@@ -0,0 +1,45 @@
+eval '(exit $?0)' && eval 'exec perl -S $0 ${1+"$@"}'
+ & eval 'exec perl -S $0 $argv:q'
+ if 0;
+
+# $Id$
+# -*- perl -*-
+
+use lib '../../../../bin';
+use PerlACE::Run_Test;
+
+$status = 0;
+
+$synch_with_server_option = "";
+
+if ($ARGV[0] eq 'synch_with_server') {
+ $synch_with_server_option = "-s";
+}
+elsif ($ARGV[0] eq '') {
+ #synch with transport
+}
+else {
+ print STDERR "ERROR: invalid parameter $ARGV[0] \n";
+ exit 1;
+}
+
+if (PerlACE::is_vxworks_test()) {
+ $SV = new PerlACE::ProcessVX ("server_main", "$synch_with_server_option");
+}
+else {
+ $SV = new PerlACE::Process ("server_main", "$synch_with_server_option");
+}
+
+
+$SV->Spawn ();
+
+
+$server = $SV->WaitKill (60);
+
+if ($server != 0) {
+ print STDERR "ERROR: server returned $server\n";
+ $status = 1;
+}
+
+
+exit $status;
diff --git a/TAO/examples/CSD_Strategy/ThreadPool5/CSD_Test_ThreadPool5.mpc b/TAO/examples/CSD_Strategy/ThreadPool5/CSD_Test_ThreadPool5.mpc
new file mode 100644
index 00000000000..983089c4247
--- /dev/null
+++ b/TAO/examples/CSD_Strategy/ThreadPool5/CSD_Test_ThreadPool5.mpc
@@ -0,0 +1,37 @@
+// -*- MPC -*-
+// $Id$
+
+project(*Server): csd_threadpool, taoserver, pi {
+ exename = server_main
+
+ Source_Files {
+ server_main.cpp
+ Foo_i.cpp
+ FooC.cpp
+ FooS.cpp
+ Callback_i.cpp
+ CallbackC.cpp
+ CallbackS.cpp
+ ServerApp.cpp
+ ClientTask.cpp
+ FooServantList.cpp
+ OrbTask.cpp
+ OrbShutdownTask.cpp
+ }
+}
+
+project(*Client): csd_threadpool, taoserver, pi {
+ exename = client_main
+ after += *Server
+
+ Source_Files {
+ client_main.cpp
+ Callback_i.cpp
+ CallbackC.cpp
+ CallbackS.cpp
+ FooC.cpp
+ ClientTask.cpp
+ ClientApp.cpp
+ }
+}
+
diff --git a/TAO/examples/CSD_Strategy/ThreadPool5/Callback_i.h b/TAO/examples/CSD_Strategy/ThreadPool5/Callback_i.h
new file mode 100644
index 00000000000..fe35e4d2e74
--- /dev/null
+++ b/TAO/examples/CSD_Strategy/ThreadPool5/Callback_i.h
@@ -0,0 +1,25 @@
+// $Id$
+#ifndef CALLBACK_I_H
+#define CALLBACK_I_H
+
+#include "CallbackS.h"
+
+
+class Callback_i : public virtual POA_Callback
+{
+ public:
+
+ Callback_i();
+
+ virtual ~Callback_i();
+
+ virtual void test_method (
+ ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS
+ )
+ ACE_THROW_SPEC ((
+ CORBA::SystemException
+ ));
+};
+
+
+#endif
diff --git a/TAO/examples/CSD_Strategy/ThreadPool5/ClientApp.cpp b/TAO/examples/CSD_Strategy/ThreadPool5/ClientApp.cpp
new file mode 100644
index 00000000000..36adb94e0d8
--- /dev/null
+++ b/TAO/examples/CSD_Strategy/ThreadPool5/ClientApp.cpp
@@ -0,0 +1,229 @@
+// $Id$
+#include "ClientApp.h"
+#include "Callback_i.h"
+#include "ClientTask.h"
+#include "tao/CSD_ThreadPool/CSD_TP_Strategy.h"
+#include "tao/Intrusive_Ref_Count_Handle_T.h"
+#include "ace/Get_Opt.h"
+#include "ace/Log_Msg.h"
+// To force static load the service.
+#include "tao/PI/PI.h"
+#include "tao/CSD_ThreadPool/CSD_ThreadPool.h"
+
+
+ClientApp::ClientApp()
+{
+}
+
+
+ClientApp::~ClientApp()
+{
+}
+
+
+int
+ClientApp::run(int argc, char* argv[] ACE_ENV_ARG_DECL)
+{
+ CORBA::ORB_var orb
+ = CORBA::ORB_init(argc, argv, "" ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+
+ // Parse the command-line args for this application.
+ // * Raises -1 if problems are encountered.
+ // * Returns 1 if the usage statement was explicitly requested.
+ // * Returns 0 otherwise.
+ int result = this->parse_args(argc, argv);
+ if (result != 0)
+ {
+ return result;
+ }
+
+ CORBA::Object_var obj
+ = orb->string_to_object(this->ior_.c_str() ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+
+ if (CORBA::is_nil(obj.in()))
+ {
+ ACE_ERROR((LM_ERROR,
+ "(%P|%t) Failed to convert IOR string to obj ref.\n"));
+ ACE_THROW_RETURN (TestException(), -1);
+ }
+
+ Foo_var foo = Foo::_narrow(obj.in() ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+
+ if (CORBA::is_nil(foo.in()))
+ {
+ ACE_ERROR((LM_ERROR,
+ "(%P|%t) Failed to narrow obj ref to Foo interface.\n"));
+ ACE_THROW_RETURN (TestException(), -1);
+ }
+
+ // Create the callback object using the child poa with the custom
+ // strategy.
+ obj = orb->resolve_initial_references("RootPOA" ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+
+ if (CORBA::is_nil(obj.in()))
+ {
+ ACE_ERROR((LM_ERROR,
+ "(%P|%t) Failed to resolve initial ref for 'RootPOA'.\n"));
+ ACE_THROW_RETURN (TestException(), -1);
+ }
+
+ PortableServer::POA_var root_poa
+ = PortableServer::POA::_narrow(obj.in() ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+
+ if (CORBA::is_nil(root_poa.in()))
+ {
+ ACE_ERROR((LM_ERROR,
+ "(%P|%t) Failed to narrow obj ref to POA interface.\n"));
+ ACE_THROW_RETURN (TestException(), -1);
+ }
+
+ PortableServer::POAManager_var poa_manager
+ = root_poa->the_POAManager(ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+
+ // Create the child POA.
+ CORBA::PolicyList policies(0);
+ policies.length(0);
+
+ PortableServer::POA_var child_poa
+ = root_poa->create_POA("ChildPoa",
+ poa_manager.in(),
+ policies
+ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+
+ if (CORBA::is_nil(child_poa.in()))
+ {
+ ACE_ERROR((LM_ERROR, "(%P|%t) ERROR [ServerApp::run()]: "
+ "Failed to create the child POA.\n"));
+ ACE_THROW_RETURN (TestException(), -1);
+ }
+
+ // Create the thread pool servant dispatching strategy object, and
+ // hold it in a (local) smart pointer variable.
+ TAO_Intrusive_Ref_Count_Handle<TAO::CSD::TP_Strategy> csd_tp_strategy =
+ new TAO::CSD::TP_Strategy();
+
+ csd_tp_strategy->set_num_threads(1);
+
+ // Tell the strategy to apply itself to the child poa.
+ if (csd_tp_strategy->apply_to(child_poa.in() ACE_ENV_ARG_PARAMETER) == false)
+ {
+ ACE_ERROR((LM_ERROR, "(%P|%t) ERROR [ServerApp::run()]: "
+ "Failed to apply custom dispatching strategy to child poa.\n"));
+ ACE_THROW_RETURN (TestException(), -1);
+ }
+ ACE_CHECK_RETURN (-1);
+
+ // Create the servant object.
+ Callback_i* servant = new Callback_i ();
+
+ // local smart pointer variable to deal with releasing the reference
+ // to the servant object when the smart pointer object falls out of scope.
+ PortableServer::ServantBase_var owner_transfer(servant);
+
+ // Activate the servant using the Child POA.
+ PortableServer::ObjectId_var oid
+ = child_poa->activate_object(servant
+ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+
+ // Obtain the object reference.
+ obj = child_poa->servant_to_reference(servant ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+
+ if (CORBA::is_nil(obj.in()))
+ {
+ ACE_ERROR((LM_ERROR,
+ "(%P|%t) Failed to activate servant (Callback_i).\n"));
+ ACE_THROW_RETURN (TestException(), -1);
+ }
+
+ Callback_var callback = Callback::_narrow (obj.in () ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+
+ ClientTask client_task(orb.in (), foo.in (), callback.in ());
+
+ if (client_task.open () != 0)
+ {
+ ACE_THROW_RETURN (TestException(), -1);
+ }
+
+ // Activate the POA Manager
+ poa_manager->activate(ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+
+ ACE_DEBUG((LM_DEBUG,
+ "(%P|%t) ClientApp is ready.\n"));
+
+ orb->run(ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+
+ client_task.wait ();
+
+ ACE_DEBUG((LM_DEBUG,
+ "(%P|%t) ClientApp is destroying the Root POA.\n"));
+
+ // Tear-down the root poa and orb.
+ root_poa->destroy(1, 1 ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+
+ ACE_DEBUG((LM_DEBUG,
+ "(%P|%t) ClientApp is destroying the ORB.\n"));
+
+ orb->destroy(ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+
+ ACE_DEBUG((LM_DEBUG,
+ "(%P|%t) ClientApp has completed running successfully.\n"));
+
+ return 0;
+}
+
+
+int
+ClientApp::parse_args(int argc, char* argv[])
+{
+ this->exe_name_ = argv[0];
+
+ ACE_Get_Opt get_opts(argc, argv, "i:");
+
+ int c;
+
+ while ((c = get_opts()) != -1)
+ {
+ switch (c)
+ {
+ case 'i':
+ this->ior_ = get_opts.opt_arg();
+ break;
+
+ case '?':
+ this->usage_statement();
+ return 1;
+ default:
+ this->usage_statement();
+ return -1;
+ }
+ }
+
+ return 0;
+}
+
+
+void
+ClientApp::usage_statement()
+{
+ ACE_ERROR((LM_ERROR,
+ "Usage: %s [options]\n\n"
+ "OPTIONS:\n\n"
+ "\t[-i <ior>]\n"
+ "\t[-?]\n\n",
+ this->exe_name_.c_str()));
+}
+
diff --git a/TAO/examples/CSD_Strategy/ThreadPool5/Foo.idl b/TAO/examples/CSD_Strategy/ThreadPool5/Foo.idl
new file mode 100644
index 00000000000..7fd7e4d15f3
--- /dev/null
+++ b/TAO/examples/CSD_Strategy/ThreadPool5/Foo.idl
@@ -0,0 +1,73 @@
+// $Id$
+#ifndef FOO_IDL
+#define FOO_IDL
+
+#include "Callback.idl"
+
+exception FooException {};
+exception TestException {};
+
+typedef sequence<char, 32> Bounded_Var_Size;
+typedef sequence<char> Unbounded_Var_Size;
+typedef long Fixed_Array[20];
+typedef string Var_Array [3];
+
+struct TimeOfDay {
+ short hour; // 0 - 23
+ short minute; // 0 - 59
+ short second; // 0 - 59
+};
+interface Foo
+{
+ /// void return-type, no arguments
+ void op1();
+
+ /// void return-type, 1 "in" argument
+ void op2(in long value);
+
+ /// long return-type, no arguments
+ long op3();
+
+ /// one-way version of op2
+ oneway void op4(in long value);
+
+ /// Operation that always raises an exception.
+ void op5() raises (FooException);
+
+ /// Operation with the inout parameter.
+ boolean op6(in string user_name,
+ inout string message);
+
+ oneway void test_unbounded_string_arg(in string message);
+
+ oneway void test_bounded_string_arg(in string<20> message);
+
+ oneway void test_fixed_array_arg(in Fixed_Array message);
+
+ oneway void test_var_array_arg(in Var_Array messages);
+
+ oneway void test_bounded_var_size_arg(in Bounded_Var_Size message);
+
+ oneway void test_unbounded_var_size_arg(in Unbounded_Var_Size message);
+
+ oneway void test_fixed_size_arg (in TimeOfDay t);
+
+ oneway void test_special_basic_arg(in boolean value);
+
+ oneway void test_objref_arg (in Callback cb);
+
+ void test_fixed_size_arg_two_way (in TimeOfDay t);
+
+ /// Operation with the object reference parameter.
+ void callback_object (in Callback cb);
+
+ /// Operation that invoke remote operation on
+ // callback object.
+ void test_callback () raises (FooException);
+
+ /// Client calls this last. It will shutdown the server.
+ void done();
+};
+
+
+#endif
diff --git a/TAO/examples/CSD_Strategy/ThreadPool5/Foo_i.cpp b/TAO/examples/CSD_Strategy/ThreadPool5/Foo_i.cpp
new file mode 100644
index 00000000000..dd4f1c9821a
--- /dev/null
+++ b/TAO/examples/CSD_Strategy/ThreadPool5/Foo_i.cpp
@@ -0,0 +1,313 @@
+// $Id$
+#include "Foo_i.h"
+#include "FooServantList.h"
+#include "ace/OS.h"
+
+Foo_i::Foo_i(const char* servant_name,FooServantList* mgr)
+ : value_(0),
+ count_op1_(0),
+ count_op2_(0),
+ count_op3_(0),
+ count_op4_(0),
+ count_op5_(0),
+ servant_name_(servant_name),
+ mgr_(mgr),
+ active_ (true)
+{
+}
+
+
+Foo_i::~Foo_i()
+{
+}
+
+
+void
+Foo_i::op1(ACE_ENV_SINGLE_ARG_DECL_NOT_USED)
+ ACE_THROW_SPEC((CORBA::SystemException))
+{
+ ++this->count_op1_;
+ // Sleep for 10 milliseconds (10,000 microseconds)
+ //ACE_OS::sleep(ACE_Time_Value(0,10000));
+}
+
+
+void
+Foo_i::op2(CORBA::Long value ACE_ENV_ARG_DECL_NOT_USED)
+ ACE_THROW_SPEC((CORBA::SystemException))
+{
+ ++this->count_op2_;
+ this->value_ = value;
+}
+
+
+CORBA::Long
+Foo_i::op3(ACE_ENV_SINGLE_ARG_DECL)
+ ACE_THROW_SPEC((CORBA::SystemException))
+{
+ ++this->count_op3_;
+
+ if (this->count_op3_ == 30)
+ {
+ this->mgr_->deactivate_servant (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK_RETURN (0);
+ }
+
+ return this->value_.value ();
+}
+
+
+void
+Foo_i::op4(CORBA::Long value ACE_ENV_ARG_DECL_NOT_USED)
+ ACE_THROW_SPEC((CORBA::SystemException))
+{
+ ++this->count_op4_;
+ this->value_ = value;
+
+ if (this->count_op4_.value () % 1 == 0)
+ {
+ ACE_DEBUG((LM_DEBUG,
+ "(%P|%t) op4() has been called %d times now. value == %d\n",
+ this->count_op4_.value (), this->value_.value ()));
+ }
+
+ // Sleep for 10 milliseconds (10,000 microseconds)
+ //ACE_OS::sleep(ACE_Time_Value(0,10000));
+}
+
+
+void
+Foo_i::op5(ACE_ENV_SINGLE_ARG_DECL)
+ ACE_THROW_SPEC((CORBA::SystemException, FooException))
+{
+ ++this->count_op5_;
+ ACE_THROW (FooException());
+}
+
+
+CORBA::Boolean
+Foo_i::op6 (
+ const char * user_name,
+ char *& message
+ ACE_ENV_ARG_DECL_NOT_USED
+)
+ACE_THROW_SPEC ((
+ CORBA::SystemException
+))
+{
+ ACE_CString str(message);
+ str += user_name;
+ CORBA::string_free (message);
+ message = CORBA::string_dup (str.c_str ());
+ return 1;
+}
+
+
+void
+Foo_i::test_unbounded_string_arg (
+ const char * message
+ ACE_ENV_ARG_DECL_NOT_USED
+)
+ACE_THROW_SPEC ((
+CORBA::SystemException
+))
+{
+ ACE_DEBUG((LM_DEBUG, ACE_TEXT("(%P|%t)Foo_i::test_unbounded_string_arg ")
+ ACE_TEXT("got unbounded string %s\n"),
+ message));
+}
+
+
+void
+Foo_i::test_bounded_string_arg (
+ const char * message
+ ACE_ENV_ARG_DECL_NOT_USED
+)
+ACE_THROW_SPEC ((
+CORBA::SystemException
+))
+{
+ ACE_DEBUG((LM_DEBUG, ACE_TEXT("(%P|%t)Foo_i::test_bounded_string_arg ")
+ ACE_TEXT("got bounded string %s\n"),
+ message));
+}
+
+
+void
+Foo_i::test_fixed_array_arg (
+ const ::Fixed_Array message
+ ACE_ENV_ARG_DECL_NOT_USED
+)
+ACE_THROW_SPEC ((
+ CORBA::SystemException
+))
+{
+ for (CORBA::ULong i = 0; i < 20; i++)
+ {
+ ACE_DEBUG((LM_DEBUG, ACE_TEXT("(%P|%t)Foo_i::test_fixed_array_arg ")
+ ACE_TEXT("got fixed_array[i] = %d\n"),
+ i, message[i]));
+ }
+}
+
+
+void
+Foo_i::test_bounded_var_size_arg (
+ const ::Bounded_Var_Size & message
+ ACE_ENV_ARG_DECL_NOT_USED
+)
+ACE_THROW_SPEC ((
+ CORBA::SystemException
+))
+{
+ ACE_DEBUG((LM_DEBUG, ACE_TEXT("(%P|%t)Foo_i::test_bounded_var_size_arg ")
+ ACE_TEXT("got var array chars %s\n"),
+ message.get_buffer ()));
+}
+
+
+void
+Foo_i::test_unbounded_var_size_arg (
+ const ::Unbounded_Var_Size & message
+ ACE_ENV_ARG_DECL_NOT_USED
+)
+ACE_THROW_SPEC ((
+ CORBA::SystemException
+))
+{
+ ACE_DEBUG((LM_DEBUG, ACE_TEXT("(%P|%t)Foo_i::test_unbounded_var_size_arg ")
+ ACE_TEXT("got var array chars %s\n"),
+ message.get_buffer ()));
+}
+
+
+void
+Foo_i::test_fixed_size_arg (
+ const ::TimeOfDay & t
+ ACE_ENV_ARG_DECL_NOT_USED
+)
+ACE_THROW_SPEC ((
+ CORBA::SystemException
+))
+{
+ ACE_DEBUG((LM_DEBUG, ACE_TEXT("(%P|%t)Foo_i::test_fixed_size_arg ")
+ ACE_TEXT("got timeofday %d:%d:%d\n"),
+ t.hour, t.minute, t.second));
+}
+
+void
+Foo_i::test_fixed_size_arg_two_way (
+ const ::TimeOfDay & t
+ ACE_ENV_ARG_DECL_NOT_USED
+)
+ACE_THROW_SPEC ((
+ CORBA::SystemException
+))
+{
+ ACE_DEBUG((LM_DEBUG, ACE_TEXT("(%P|%t)Foo_i::test_fixed_size_arg_two_way ")
+ ACE_TEXT("got timeofday %d:%d:%d\n"),
+ t.hour, t.minute, t.second));
+}
+
+void
+Foo_i::test_var_array_arg (
+ const ::Var_Array messages
+ ACE_ENV_ARG_DECL_NOT_USED
+)
+ACE_THROW_SPEC ((
+ CORBA::SystemException
+))
+{
+ ACE_DEBUG((LM_DEBUG, ACE_TEXT("(%P|%t)Foo_i::test_var_array_arg ")
+ ACE_TEXT(" %s \n"), messages[0].in ()));
+ ACE_DEBUG((LM_DEBUG, ACE_TEXT("(%P|%t)Foo_i::test_var_array_arg ")
+ ACE_TEXT(" %s \n"), messages[1].in ()));
+ ACE_DEBUG((LM_DEBUG, ACE_TEXT("(%P|%t)Foo_i::test_var_array_arg ")
+ ACE_TEXT(" %s \n"), messages[2].in ()));
+}
+
+
+void
+Foo_i::test_special_basic_arg (
+ ::CORBA::Boolean value
+ ACE_ENV_ARG_DECL_NOT_USED
+)
+ACE_THROW_SPEC ((
+ CORBA::SystemException
+))
+{
+ ACE_DEBUG((LM_DEBUG, ACE_TEXT("(%P|%t)Foo_i::test_special_basic_arg ")
+ ACE_TEXT(" got special basic arg: %d \n"), value));
+}
+
+
+void
+Foo_i::test_objref_arg (
+ ::Callback_ptr cb
+ ACE_ENV_ARG_DECL_NOT_USED
+)
+ACE_THROW_SPEC ((
+ CORBA::SystemException
+))
+{
+ this->callback_ = Callback::_duplicate (cb);
+ ACE_DEBUG((LM_DEBUG, ACE_TEXT("(%P|%t)Foo_i::test_objref_arg ")
+ ACE_TEXT(" got callback object. \n")));
+}
+
+
+void
+Foo_i::callback_object (
+ ::Callback_ptr cb
+ ACE_ENV_ARG_DECL_NOT_USED
+)
+ACE_THROW_SPEC ((
+ CORBA::SystemException
+))
+{
+ this->callback_ = Callback::_duplicate (cb);
+}
+
+void
+Foo_i::test_callback (
+ ACE_ENV_SINGLE_ARG_DECL
+)
+ACE_THROW_SPEC ((
+ CORBA::SystemException, FooException
+))
+{
+ if (CORBA::is_nil (this->callback_.in ()))
+ {
+ ACE_THROW (FooException ());
+ }
+ else
+ {
+ this->callback_->test_method (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK;
+ }
+}
+
+
+void
+Foo_i::done(ACE_ENV_SINGLE_ARG_DECL)
+ ACE_THROW_SPEC((CORBA::SystemException))
+{
+ this->mgr_->client_done(ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK;
+}
+
+
+void
+Foo_i::active (bool flag)
+{
+ active_ = flag;
+}
+
+
+bool
+Foo_i::active ()
+{
+ return active_.value ();
+}
+
+
diff --git a/TAO/examples/CSD_Strategy/ThreadPool5/Foo_i.h b/TAO/examples/CSD_Strategy/ThreadPool5/Foo_i.h
new file mode 100644
index 00000000000..48f99ee7e23
--- /dev/null
+++ b/TAO/examples/CSD_Strategy/ThreadPool5/Foo_i.h
@@ -0,0 +1,165 @@
+// $Id$
+#ifndef FOO_I_H
+#define FOO_I_H
+
+#include "FooS.h"
+#include "CallbackC.h"
+#include "ace/SString.h"
+
+class FooServantList;
+
+
+class Foo_i : public virtual POA_Foo
+{
+ public:
+
+ Foo_i(const char* servant_name, FooServantList* mgr);
+ virtual ~Foo_i();
+
+ virtual void op1(ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC((CORBA::SystemException));
+
+ virtual void op2(CORBA::Long value ACE_ENV_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC((CORBA::SystemException));
+
+ virtual CORBA::Long op3(ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC((CORBA::SystemException));
+
+ virtual void op4(CORBA::Long value ACE_ENV_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC((CORBA::SystemException));
+
+ virtual void op5(ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC((CORBA::SystemException, FooException));
+
+ virtual CORBA::Boolean op6 (
+ const char * user_name,
+ char *& message
+ ACE_ENV_ARG_DECL_WITH_DEFAULTS
+ )
+ ACE_THROW_SPEC ((
+ CORBA::SystemException
+ ));
+
+ virtual void test_unbounded_string_arg (
+ const char * message
+ ACE_ENV_ARG_DECL_WITH_DEFAULTS
+ )
+ ACE_THROW_SPEC ((
+ CORBA::SystemException
+ ));
+
+ virtual void test_bounded_string_arg (
+ const char * message
+ ACE_ENV_ARG_DECL_WITH_DEFAULTS
+ )
+ ACE_THROW_SPEC ((
+ CORBA::SystemException
+ ));
+
+ virtual void test_fixed_array_arg (
+ const ::Fixed_Array message
+ ACE_ENV_ARG_DECL_WITH_DEFAULTS
+ )
+ ACE_THROW_SPEC ((
+ CORBA::SystemException
+ ));
+
+ virtual void test_var_array_arg (
+ const ::Var_Array messages
+ ACE_ENV_ARG_DECL_WITH_DEFAULTS
+ )
+ ACE_THROW_SPEC ((
+ CORBA::SystemException
+ ));
+
+ virtual void test_bounded_var_size_arg (
+ const ::Bounded_Var_Size & message
+ ACE_ENV_ARG_DECL_WITH_DEFAULTS
+ )
+ ACE_THROW_SPEC ((
+ CORBA::SystemException
+ ));
+
+ virtual void test_unbounded_var_size_arg (
+ const ::Unbounded_Var_Size & message
+ ACE_ENV_ARG_DECL_WITH_DEFAULTS
+ )
+ ACE_THROW_SPEC ((
+ CORBA::SystemException
+ ));
+
+ virtual void test_fixed_size_arg (
+ const ::TimeOfDay & t
+ ACE_ENV_ARG_DECL_WITH_DEFAULTS
+ )
+ ACE_THROW_SPEC ((
+ CORBA::SystemException
+ ));
+
+ virtual void test_fixed_size_arg_two_way (
+ const ::TimeOfDay & t
+ ACE_ENV_ARG_DECL_WITH_DEFAULTS
+ )
+ ACE_THROW_SPEC ((
+ CORBA::SystemException
+ ));
+
+ virtual void test_special_basic_arg (
+ ::CORBA::Boolean value
+ ACE_ENV_ARG_DECL_WITH_DEFAULTS
+ )
+ ACE_THROW_SPEC ((
+ CORBA::SystemException
+ ));
+
+ virtual void test_objref_arg (
+ ::Callback_ptr cb
+ ACE_ENV_ARG_DECL_WITH_DEFAULTS
+ )
+ ACE_THROW_SPEC ((
+ CORBA::SystemException
+ ));
+
+ virtual void callback_object (
+ ::Callback_ptr cb
+ ACE_ENV_ARG_DECL_WITH_DEFAULTS
+ )
+ ACE_THROW_SPEC ((
+ CORBA::SystemException
+ ));
+
+ virtual void test_callback (
+ ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS
+ )
+ ACE_THROW_SPEC ((
+ CORBA::SystemException, FooException
+ ));
+
+ virtual void done(ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC((CORBA::SystemException));
+
+ void active (bool flag);
+
+ bool active ();
+
+ private:
+
+ typedef ACE_Atomic_Op <ACE_SYNCH_MUTEX, CORBA::Long> AtomicLong;
+ typedef ACE_Atomic_Op <ACE_SYNCH_MUTEX, unsigned> AtomicUnsigned;
+ typedef ACE_Atomic_Op <ACE_SYNCH_MUTEX, bool> AtomicBool;
+
+ AtomicLong value_;
+ AtomicUnsigned count_op1_;
+ AtomicUnsigned count_op2_;
+ AtomicUnsigned count_op3_;
+ AtomicUnsigned count_op4_;
+ AtomicUnsigned count_op5_;
+
+ ACE_CString servant_name_;
+ FooServantList* mgr_;
+ AtomicBool active_;
+ Callback_var callback_;
+};
+
+
+#endif
diff --git a/TAO/examples/CSD_Strategy/ThreadPool5/ServerApp.cpp b/TAO/examples/CSD_Strategy/ThreadPool5/ServerApp.cpp
new file mode 100644
index 00000000000..b8cd5ed04a1
--- /dev/null
+++ b/TAO/examples/CSD_Strategy/ThreadPool5/ServerApp.cpp
@@ -0,0 +1,357 @@
+// $Id$
+#include "ServerApp.h"
+#include "OrbTask.h"
+#include "FooServantList.h"
+#include "ClientTask.h"
+#include "OrbShutdownTask.h"
+#include "ace/Get_Opt.h"
+#include "tao/CSD_ThreadPool/CSD_TP_Strategy.h"
+#include "tao/Intrusive_Ref_Count_Handle_T.h"
+// To force static load the service.
+#include "tao/PI/PI.h"
+#include "tao/CSD_ThreadPool/CSD_ThreadPool.h"
+
+
+ServerApp::ServerApp()
+ : ior_filename_("foo"),
+ num_servants_(1),
+ num_csd_threads_ (1),
+ num_clients_(1),
+ num_orb_threads_ (1),
+ collocated_test_ (0),
+ servant_to_deactivate_ (-1)
+{
+}
+
+
+ServerApp::~ServerApp()
+{
+}
+
+
+int
+ServerApp::run(int argc, char* argv[] ACE_ENV_ARG_DECL)
+{
+ CORBA::ORB_var orb = CORBA::ORB_init(argc, argv, "" ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+
+ // Parse the command-line args for this application.
+ // * Raises -1 if problems are encountered.
+ // * Returns 1 if the usage statement was explicitly requested.
+ // * Returns 0 otherwise.
+ int result = this->parse_args(argc, argv);
+ if (result != 0)
+ {
+ return result;
+ }
+
+ TheOrbShutdownTask::instance()->orb (orb.in ());
+
+ CORBA::Object_var obj
+ = orb->resolve_initial_references("RootPOA"
+ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+
+ if (CORBA::is_nil(obj.in()))
+ {
+ ACE_ERROR((LM_ERROR,
+ "(%P|%t) Failed to resolve initial ref for 'RootPOA'.\n"));
+ ACE_THROW_RETURN (TestException(), -1);
+ }
+
+ PortableServer::POA_var root_poa
+ = PortableServer::POA::_narrow(obj.in() ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+
+ if (CORBA::is_nil(root_poa.in()))
+ {
+ ACE_ERROR((LM_ERROR,
+ "(%P|%t) Failed to narrow obj ref to POA interface.\n"));
+ ACE_THROW_RETURN (TestException(), -1);
+ }
+
+ PortableServer::POAManager_var poa_manager
+ = root_poa->the_POAManager(ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+
+ // Create the child POA.
+ CORBA::PolicyList policies(1);
+ policies.length(1);
+
+ policies[0]
+ = root_poa->create_id_assignment_policy(PortableServer::USER_ID
+ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+
+ PortableServer::POA_var child_poa
+ = root_poa->create_POA("ChildPoa",
+ poa_manager.in(),
+ policies
+ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+
+ if (CORBA::is_nil(child_poa.in()))
+ {
+ ACE_ERROR((LM_ERROR, "(%P|%t) ERROR [ServerApp::run()]: "
+ "Failed to create the child POA.\n"));
+ ACE_THROW_RETURN (TestException(), -1);
+ }
+
+ policies[0]->destroy (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+
+ // Create the thread pool servant dispatching strategy object, and
+ // hold it in a (local) smart pointer variable.
+ TAO_Intrusive_Ref_Count_Handle<TAO::CSD::TP_Strategy> csd_tp_strategy =
+ new TAO::CSD::TP_Strategy();
+
+ csd_tp_strategy->set_num_threads(this->num_csd_threads_);
+
+ // Tell the strategy to apply itself to the child poa.
+ if (csd_tp_strategy->apply_to(child_poa.in() ACE_ENV_ARG_PARAMETER) == false)
+ {
+ ACE_ERROR((LM_ERROR, "(%P|%t) ERROR [ServerApp::run()]: "
+ "Failed to apply custom dispatching strategy to child poa.\n"));
+ ACE_THROW_RETURN (TestException(), -1);
+ }
+ ACE_CHECK_RETURN (-1);
+
+ FooServantList servants(this->ior_filename_.c_str(),
+ this->num_servants_,
+ this->num_clients_,
+ this->collocated_test_,
+ this->servant_to_deactivate_,
+ orb.in());
+
+ // Activate the POA Manager before start the ClientTask thread so that
+ // we do not need coordinate the ClientTask and main thread for the
+ // collocated test.
+ poa_manager->activate(ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+
+ servants.create_and_activate(orb.in (),
+ child_poa.in()
+ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+
+ ACE_DEBUG((LM_DEBUG,
+ "(%P|%t) ServerApp is ready.\n"));
+
+ // If the num_orb_threads_ is exactly one, then just use the current
+ // (mainline) thread to run the ORB event loop.
+ if (this->num_orb_threads_ == 1)
+ {
+ // Since the num_orb_threads_ is exactly one, we just use the current
+ // (mainline) thread to run the ORB event loop.
+ orb->run(ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+ }
+ else
+ {
+ // The num_orb_threads_ is greater than 1, so we will use an OrbTask
+ // (active object) to run the ORB event loop in (num_orb_threads_ - 1)
+ // threads. We use the current (mainline) thread as the other thread
+ // running the ORB event loop.
+ OrbTask orb_task(orb.in(), this->num_orb_threads_ - 1);
+
+ // Activate the OrbTask worker threads
+ if (orb_task.open() != 0)
+ {
+ ACE_ERROR((LM_ERROR,
+ "(%P|%t) Failed to open the OrbTask.\n"));
+ ACE_THROW_RETURN (TestException(), -1);
+ }
+
+ // This will use the current (mainline) thread to run the ORB event loop.
+ orb->run(ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+
+ // Now that the current thread has unblocked from running the orb,
+ // make sure to wait for all of the worker threads to complete.
+ orb_task.wait();
+ }
+
+ ACE_DEBUG((LM_DEBUG,
+ "(%P|%t) ServerApp is waiting for OrbShutdownTask.\n"));
+ TheOrbShutdownTask::instance()->wait ();
+
+ // Sleep for 2 second to let the done() two-way call complete
+ // before cleanup.
+ ACE_OS::sleep (2);
+
+ if (collocated_test_)
+ {
+ servants.collocated_client ()->wait ();
+ }
+
+ ACE_DEBUG((LM_DEBUG,
+ "(%P|%t) ServerApp is destroying the Root POA.\n"));
+
+ // Tear-down the root poa and orb.
+ root_poa->destroy(1, 1 ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+
+ ACE_DEBUG((LM_DEBUG,
+ "(%P|%t) ServerApp is destroying the ORB.\n"));
+
+ orb->destroy(ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+
+ ACE_DEBUG((LM_DEBUG,
+ "(%P|%t) ServerApp has completed running successfully.\n"));
+
+ return 0;
+}
+
+
+int
+ServerApp::parse_args(int argc, char* argv[])
+{
+ this->exe_name_ = argv[0];
+
+ ACE_Get_Opt get_opts(argc, argv, "p:s:c:t:l:d:n:");
+
+ int c;
+ int tmp;
+
+ while ((c = get_opts()) != -1)
+ {
+ int parse_error = 0;
+
+ switch (c)
+ {
+ case 'p':
+ this->ior_filename_ = get_opts.opt_arg();
+ break;
+
+ case 's':
+ tmp = ACE_OS::atoi(get_opts.opt_arg());
+ if (tmp < 1)
+ {
+ ACE_ERROR((LM_ERROR,
+ "(%P|%t) Error. -s must be followed by an integer "
+ "value greater than 0.\n"));
+ parse_error = 1;
+ }
+
+ this->num_servants_ = tmp;
+ break;
+
+ case 'c':
+ tmp = ACE_OS::atoi(get_opts.opt_arg());
+ if (tmp < 1)
+ {
+ ACE_ERROR((LM_ERROR,
+ "(%P|%t) Error. -c must be followed by an integer "
+ "value greater than 0.\n"));
+ parse_error = 1;
+ }
+
+ this->num_clients_ = tmp;
+ break;
+
+ case 't':
+ tmp = ACE_OS::atoi(get_opts.opt_arg());
+ if (tmp < 1)
+ {
+ ACE_ERROR((LM_ERROR,
+ "(%P|%t) Error. -t must be followed by an integer "
+ "value greater than 0.\n"));
+ parse_error = 1;
+ }
+
+ this->num_orb_threads_ = tmp;
+ break;
+
+ case 'n':
+ tmp = ACE_OS::atoi(get_opts.opt_arg());
+ if (tmp < 1)
+ {
+ ACE_ERROR((LM_ERROR,
+ "(%P|%t) Error. -n must be followed by an integer "
+ "value greater than 0.\n"));
+ parse_error = 1;
+ }
+
+ this->num_csd_threads_ = tmp;
+ break;
+
+ case 'l':
+ tmp = ACE_OS::atoi(get_opts.opt_arg());
+ if (tmp < 0)
+ {
+ ACE_ERROR((LM_ERROR,
+ "(%P|%t) Error. -l must be followed by an integer "
+ "value greater than -1.\n"));
+ parse_error = 1;
+ }
+
+ this->collocated_test_ = tmp;
+ break;
+
+ case 'd':
+ tmp = ACE_OS::atoi(get_opts.opt_arg());
+ if (tmp < 0)
+ {
+ ACE_ERROR((LM_ERROR,
+ "(%P|%t) Error. -d must be followed by an integer "
+ "value >= 0.\n"));
+ parse_error = 1;
+ }
+
+ this->servant_to_deactivate_ = tmp;
+ break;
+
+ case '?':
+ this->usage_statement();
+ return 1;
+
+ default:
+ this->usage_statement();
+ return -1;
+ }
+
+ if (parse_error != 0)
+ {
+ this->usage_statement();
+ return parse_error;
+ }
+ }
+
+ // The deadlock will happen with the collocated callback test
+ // when we have one working thread, so create at least one more
+ // working thread would resolve the deadlock.
+ if (this->collocated_test_ == 1 && this->num_csd_threads_ == 1)
+ {
+ ACE_ERROR((LM_ERROR,
+ "(%P|%t) Error. The num_csd_threads_ should be "
+ ">= 1.\n"));
+ return -1;
+ }
+
+ return 0;
+}
+
+
+void
+ServerApp::usage_statement()
+{
+ ACE_ERROR((LM_ERROR,
+ "(%P|%t) usage: %s \n"
+ "\t[-p <ior_filename_prefix>] \n"
+ "\t[-s <num_servants>] \n"
+ "\t[-c <num_clients>] \n"
+ "\t[-n <num_csd_threads>] \n"
+ "\t[-t <num_orb_threads>] \n"
+ "\t[-l <collocation_test>] \n"
+ "\t[-d <servant_to_deactivate>] \n"
+ "Default ior_filename_prefix is 'foo'.\n"
+ "Default num_servants is 1.\n"
+ "Default num_clients is 1.\n"
+ "Default num_orb_threads is 1.\n"
+ "Default collocation_test flag is 0.\n"
+ "Default servant_to_deactivate is -1 means not deactivate servant.\n"
+ " 0 means deactivate all servant. \n"
+ " >0 means the index (servant_to_deactivate-1) of the servant in the servant list.\n",
+ this->exe_name_.c_str ()));
+}
diff --git a/TAO/examples/CSD_Strategy/ThreadPool5/run_test.pl b/TAO/examples/CSD_Strategy/ThreadPool5/run_test.pl
new file mode 100755
index 00000000000..8778e2861e6
--- /dev/null
+++ b/TAO/examples/CSD_Strategy/ThreadPool5/run_test.pl
@@ -0,0 +1,135 @@
+eval '(exit $?0)' && eval 'exec perl -S $0 ${1+"$@"}'
+ & eval 'exec perl -S $0 $argv:q'
+ if 0;
+
+# $Id$
+# -*- perl -*-
+
+use lib '../../../../bin';
+use PerlACE::Run_Test;
+
+$status = 0;
+
+
+$iorfname_prefix = "server";
+$num_servants=1;
+$num_clients_per_servant=40;
+$num_orb_threads=1;
+$num_csd_threads=1;
+$collocated_test=0;
+$servant_cancellation_option="";
+
+if ($ARGV[0] eq 'collocated') {
+ # 1 servant, 1 collocated client, 1 orb thread, 2 strategy working threads
+ $num_clients_per_servant=1;
+ $collocated_test=1;
+ $num_csd_threads=2;
+}
+elsif ($ARGV[0] eq 'multiple_servants') {
+ # multiple servants and single orb thread.
+ # 10 servant, 40 client, 1 orb thread, 10 strategy working threads
+ $num_servants=10;
+ $num_csd_threads=10;
+ $num_clients_per_servant=4;
+}
+elsif ($ARGV[0] eq 'multiple_orb_threads') {
+ # multiple servants and multiple orb threads.
+ # 10 servant, 40 client, 4 orb thread, 10 strategy working threads
+ $num_servants=10;
+ $num_csd_threads=10;
+ $num_clients_per_servant=4;
+ $num_orb_threads=4;
+}
+elsif ($ARGV[0] eq 'cancel_servant') {
+ # Cancel one servant and leave the other alive.
+ # 2 servant, 10 client, 5 orb thread, 1 strategy working threads
+ $num_clients_per_servant=5;
+ $num_servants=2;
+ $num_csd_threads=2;
+ $num_orb_threads=5;
+ $servant_cancellation_option = " -d 1 ";
+}
+elsif ($ARGV[0] eq '') {
+ # default test - 1 servant, 40 clients , 1 orb thread, 1 csd thread
+}
+else {
+ print STDERR "ERROR: invalid parameter $ARGV[0] \n";
+ exit 1;
+}
+
+$num_clients=$num_servants * $num_clients_per_servant;
+
+#Delete old ior files.
+for (my $i = 0; $i < $num_servants; $i++) {
+ $servant_id = sprintf("%02d", ($i + 1));
+ $iorfile[$i] = PerlACE::LocalFile($iorfname_prefix . "_$servant_id.ior");
+
+ unlink $iorfile[$i];
+}
+
+
+if (PerlACE::is_vxworks_test()) {
+ $SV = new PerlACE::ProcessVX ("server_main",
+ "-p $iorfname_prefix -s $num_servants "
+ . "-c $num_clients -t $num_orb_threads -n $num_csd_threads "
+ . "-l $collocated_test $servant_cancellation_option");
+}
+else {
+ $SV = new PerlACE::Process ("server_main",
+ "-p $iorfname_prefix -s $num_servants "
+ . "-c $num_clients -t $num_orb_threads -n $num_csd_threads "
+ . "-l $collocated_test $servant_cancellation_option");
+}
+
+$SV->Spawn ();
+
+# Wait for the servant ior files created by server.
+for (my $i = 0; $i < $num_servants; $i++) {
+ $servant_id = sprintf("%02d", ($i + 1));
+ $iorfile[$i] = PerlACE::LocalFile($iorfname_prefix . "_$servant_id.ior");
+
+ if (PerlACE::waitforfile_timed ($iorfile[$i],
+ $PerlACE::wait_interval_for_process_creation) == -1) {
+ print STDERR "ERROR: cannot find file <$iorfile[$i]>\n";
+ $SV->Kill (); $SV->TimedWait (1);
+ exit 1;
+ }
+}
+
+$count = 0;
+
+if ($collocated_test == 0) {
+ for (my $i = 0; $i < $num_servants; $i++) {
+ for ($j = 0; $j < $num_clients_per_servant; $j++) {
+ $CLS[$count] = new PerlACE::Process ("client_main", " -i file://$iorfile[$i]");
+ $CLS[$count]->Spawn ();
+ $count ++;
+ }
+ }
+
+ for (my $i = 0; $i < $num_clients; $i++) {
+ $client = $CLS[$i]->WaitKill (60);
+
+ if ($client != 0) {
+ print STDERR "ERROR: client $i returned $client\n";
+ $status = 1;
+ }
+ }
+}
+
+$server = $SV->WaitKill (60);
+
+if ($server != 0) {
+ print STDERR "ERROR: server returned $server\n";
+ $status = 1;
+}
+
+#Delete ior files generated by this run.
+for (my $i = 0; $i < $num_servants; $i++) {
+ $servant_id = sprintf("%02d", ($i + 1));
+ $iorfile[$i] = PerlACE::LocalFile($iorfname_prefix . "_$servant_id.ior");
+
+ unlink $iorfile[$i];
+}
+
+exit $status;
diff --git a/TAO/examples/CSD_Strategy/ThreadPool6/CSD_Test_ThreadPool6.mpc b/TAO/examples/CSD_Strategy/ThreadPool6/CSD_Test_ThreadPool6.mpc
new file mode 100644
index 00000000000..be0e18a3cca
--- /dev/null
+++ b/TAO/examples/CSD_Strategy/ThreadPool6/CSD_Test_ThreadPool6.mpc
@@ -0,0 +1,26 @@
+// -*- MPC -*-
+// $Id$
+
+project(*Server): csd_threadpool, taoserver, minimum_corba, pi {
+ exename = server_main
+ idlflags -= -Sc
+
+ Source_Files {
+ Foo_i.cpp
+ ServerApp.cpp
+ server_main.cpp
+ OrbShutdownTask.cpp
+ }
+}
+
+project(*Client): taoexe, anytypecode {
+ exename = client_main
+ after += *Server
+
+ Source_Files {
+ FooC.cpp
+ ClientApp.cpp
+ client_main.cpp
+ }
+}
+
diff --git a/TAO/examples/CSD_Strategy/ThreadPool6/ServerApp.cpp b/TAO/examples/CSD_Strategy/ThreadPool6/ServerApp.cpp
new file mode 100644
index 00000000000..62de607a4fb
--- /dev/null
+++ b/TAO/examples/CSD_Strategy/ThreadPool6/ServerApp.cpp
@@ -0,0 +1,243 @@
+// $Id$
+#include "ServerApp.h"
+#include "Foo_i.h"
+#include "FooS_T.h"
+#include "OrbShutdownTask.h"
+#include "ace/Get_Opt.h"
+#include "tao/CSD_ThreadPool/CSD_TP_Strategy.h"
+#include "tao/Intrusive_Ref_Count_Handle_T.h"
+// To force static load the service.
+#include "tao/PI/PI.h"
+#include "tao/CSD_ThreadPool/CSD_ThreadPool.h"
+
+
+ServerApp::ServerApp()
+: ior_filename_ ("server.ior")
+{
+}
+
+
+ServerApp::~ServerApp()
+{
+}
+
+
+int
+ServerApp::run(int argc, char* argv[] ACE_ENV_ARG_DECL)
+{
+ CORBA::ORB_var orb = CORBA::ORB_init(argc, argv, "" ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+
+ // Parse the command-line args for this application.
+ // * Raises -1 if problems are encountered.
+ // * Returns 1 if the usage statement was explicitly requested.
+ // * Returns 0 otherwise.
+ int result = this->parse_args(argc, argv);
+ if (result != 0)
+ {
+ return result;
+ }
+
+ TheOrbShutdownTask::instance()->orb (orb.in ());
+
+ CORBA::Object_var obj
+ = orb->resolve_initial_references("RootPOA" ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+
+ if (CORBA::is_nil(obj.in()))
+ {
+ ACE_ERROR((LM_ERROR,
+ "(%P|%t) Failed to resolve initial ref for 'RootPOA'.\n"));
+ ACE_THROW_RETURN (TestException(), -1);;
+ }
+
+ PortableServer::POA_var root_poa
+ = PortableServer::POA::_narrow(obj.in() ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+
+ if (CORBA::is_nil(root_poa.in()))
+ {
+ ACE_ERROR((LM_ERROR,
+ "(%P|%t) Failed to narrow obj ref to POA interface.\n"));
+ ACE_THROW_RETURN (TestException(), -1);;
+ }
+
+ PortableServer::POAManager_var poa_manager
+ = root_poa->the_POAManager(ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+
+ // Create the child POA.
+ CORBA::PolicyList policies(1);
+ policies.length(1);
+
+ policies[0] =
+ root_poa->create_implicit_activation_policy (PortableServer::IMPLICIT_ACTIVATION
+ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+
+ PortableServer::POA_var child_poa
+ = root_poa->create_POA("ChildPoa",
+ poa_manager.in(),
+ policies
+ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+
+ if (CORBA::is_nil(child_poa.in()))
+ {
+ ACE_ERROR((LM_ERROR, "(%P|%t) ERROR [ServerApp::run()]: "
+ "Failed to create the child POA.\n"));
+ ACE_THROW_RETURN (TestException(), -1);;
+ }
+
+ policies[0]->destroy (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+
+ // Create the thread pool servant dispatching strategy object, and
+ // hold it in a (local) smart pointer variable.
+ TAO_Intrusive_Ref_Count_Handle<TAO::CSD::TP_Strategy> csd_tp_strategy =
+ new TAO::CSD::TP_Strategy();
+
+ // Tell the strategy to apply itself to the child poa.
+ if (csd_tp_strategy->apply_to(child_poa.in() ACE_ENV_ARG_PARAMETER) == false)
+ {
+ ACE_ERROR((LM_ERROR, "(%P|%t) ERROR [ServerApp::run()]: "
+ "Failed to apply custom dispatching strategy to child poa.\n"));
+ ACE_THROW_RETURN (TestException(), -1);;
+ }
+ ACE_CHECK_RETURN (-1);
+
+ // Create the Foo_i object.
+ Foo_i foo_i (this->num_clients_);
+
+ // Create tie object with the Foo_i object.
+ POA_Foo_tie<Foo_i> foo_tie_i (foo_i, child_poa.in ());
+
+ // Get Object Reference for the foo_tie_i object.
+ Foo_var foo = foo_tie_i._this (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+
+ if (CORBA::is_nil(foo.in()))
+ {
+ ACE_ERROR((LM_ERROR,
+ "(%P|%t) Failed to activate servant foo_tie_i.\n"));
+ ACE_THROW_RETURN (TestException(), -1);;
+ }
+
+ // Stringify the object reference
+ CORBA::String_var ior
+ = orb->object_to_string(foo.in() ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+
+ // Write the stringified object reference to the ior file.
+ FILE* ior_file = ACE_OS::fopen(this->ior_filename_.c_str(), "w");
+
+ if (ior_file == 0)
+ {
+ ACE_ERROR((LM_ERROR,
+ "(%P|%t) Cannot open output file for writing IOR: %s",
+ this->ior_filename_.c_str()));
+ ACE_THROW_RETURN (TestException(), -1);;
+ }
+
+ ACE_OS::fprintf(ior_file, "%s", ior.in ());
+ ACE_OS::fclose(ior_file);
+
+ // Activate the POA Manager
+ poa_manager->activate(ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+
+ ACE_DEBUG((LM_DEBUG,
+ "(%P|%t) ServerApp is ready. Running the ORB event loop.\n"));
+
+ // Run the ORB event loop.
+ orb->run(ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+
+ ACE_DEBUG((LM_DEBUG,
+ "(%P|%t) ServerApp ORB has stopped running. "
+ "Stop the CSD strategy.\n"));
+
+ ACE_DEBUG((LM_DEBUG,
+ "(%P|%t) ServerApp is waiting for OrbShutdownTask.\n"));
+ TheOrbShutdownTask::instance()->wait ();
+
+ ACE_DEBUG((LM_DEBUG,
+ "(%P|%t) ServerApp is destroying the Root POA.\n"));
+
+ // Sleep for 2 second to let the done() two-way call complete
+ // before cleanup.
+ ACE_OS::sleep (2);
+
+ // Tear-down the root poa and orb.
+ root_poa->destroy(1, 1 ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+
+ ACE_DEBUG((LM_DEBUG,
+ "(%P|%t) ServerApp is destroying the ORB.\n"));
+
+ orb->destroy(ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+
+ ACE_DEBUG((LM_DEBUG,
+ "(%P|%t) ServerApp has completed running successfully.\n"));
+
+ return 0;
+}
+
+
+int
+ServerApp::parse_args(int argc, char* argv[])
+{
+ this->exe_name_ = argv[0];
+
+ ACE_Get_Opt get_opts(argc, argv, "o:n:");
+
+ int c;
+
+ while ((c = get_opts()) != -1)
+ {
+ switch (c)
+ {
+ case 'o':
+ this->ior_filename_ = get_opts.opt_arg();
+ break;
+
+ case 'n':
+ {
+ int tmp = ACE_OS::atoi(get_opts.opt_arg());
+ if (tmp < 1)
+ {
+ this->usage_statement ();
+ return -1;
+ }
+
+ this->num_clients_ = tmp;
+ }
+ break;
+
+ case '?':
+ this->usage_statement();
+ return 1;
+
+ default:
+ this->usage_statement();
+ return -1;
+ }
+ }
+
+ return 0;
+}
+
+
+void
+ServerApp::usage_statement()
+{
+ ACE_ERROR((LM_ERROR,
+ "Usage: %s [options]\n\n"
+ "OPTIONS:\n\n"
+ "\t[-o <ior_filename>]\n"
+ "\t[-n <num_clients>]\n"
+ "\t[-?]\n\n",
+ this->exe_name_.c_str()));
+}
+
diff --git a/TAO/examples/CSD_Strategy/ThreadPool6/run_test.pl b/TAO/examples/CSD_Strategy/ThreadPool6/run_test.pl
new file mode 100755
index 00000000000..13f3fafd013
--- /dev/null
+++ b/TAO/examples/CSD_Strategy/ThreadPool6/run_test.pl
@@ -0,0 +1,60 @@
+eval '(exit $?0)' && eval 'exec perl -S $0 ${1+"$@"}'
+ & eval 'exec perl -S $0 $argv:q'
+ if 0;
+
+# $Id$
+# -*- perl -*-
+
+use lib '../../../../bin';
+use PerlACE::Run_Test;
+
+$iorfile = PerlACE::LocalFile ("server.ior");
+unlink $iorfile;
+$status = 0;
+
+$num_clients=1;
+
+if (PerlACE::is_vxworks_test()) {
+ $SV = new PerlACE::ProcessVX ("server_main", "-o $iorfile -n $num_clients");
+}
+else {
+ $SV = new PerlACE::Process ("server_main", "-o $iorfile -n $num_clients");
+}
+
+$SV->Spawn ();
+
+if (PerlACE::waitforfile_timed ($iorfile,
+ $PerlACE::wait_interval_for_process_creation) == -1) {
+ print STDERR "ERROR: cannot find file <$iorfile>\n";
+ $SV->Kill (); $SV->TimedWait (1);
+ exit 1;
+}
+
+for ($i = 0; $i < $num_clients; $i++) {
+
+ @CLS[$i] = new PerlACE::Process ("client_main", " -i file://$iorfile");
+
+ @CLS[$i]->Spawn ();
+}
+
+for ($i = 0; $i < $num_clients; $i++) {
+
+ $client = @CLS[$i]->WaitKill (60);
+
+ if ($client != 0) {
+ print STDERR "ERROR: client $i returned $client\n";
+ $status = 1;
+ }
+}
+
+
+$server = $SV->WaitKill (60);
+
+if ($server != 0) {
+ print STDERR "ERROR: server returned $server\n";
+ $status = 1;
+}
+
+unlink $iorfile;
+
+exit $status;
diff --git a/TAO/m4/tao.m4 b/TAO/m4/tao.m4
new file mode 100644
index 00000000000..1441e8b5316
--- /dev/null
+++ b/TAO/m4/tao.m4
@@ -0,0 +1,88 @@
+dnl -------------------------------------------------------------------------
+dnl $Id$
+dnl
+dnl tao.m4
+dnl
+dnl ACE M4 include file which contains TAO specific M4 macros
+dnl for enabling/disabling certain TAO features.
+dnl
+dnl -------------------------------------------------------------------------
+
+dnl Copyright (C) 1998, 1999, 2000, 2002 Ossama Othman
+dnl
+dnl All Rights Reserved
+dnl
+dnl This library is free software; you can redistribute it and/or
+dnl modify it under the current ACE distribution terms.
+dnl
+dnl This library is distributed in the hope that it will be useful,
+dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
+dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+
+AC_DEFUN([TAO_ENABLE_MINIMUM_CORBA],
+[AC_ARG_ENABLE([minimum-corba],
+ AS_HELP_STRING([--enable-minimum-corba],
+ [build TAO with minimum corba support [[[no]]]]),
+[
+case "${enableval}" in
+ yes)
+ tao_user_enable_minimum_corba=yes
+ ;;
+ no)
+ tao_user_enable_minimum_corba=no
+ ;;
+ *)
+ AC_MSG_ERROR([bad value ${enableval} for --enable-minimum-corba])
+ ;;
+esac
+],[
+tao_user_enable_minimum_corba=no
+])
+AM_CONDITIONAL([BUILD_MINIMUM_CORBA],
+ [test X$tao_user_enable_minimum_corba = Xyes])
+])
+
+AC_DEFUN([TAO_ENABLE_EXAMPLES],
+[AC_ARG_ENABLE([tao-examples],
+ AS_HELP_STRING([--enable-tao-examples],
+ [build TAO examples [[[yes]]]]),
+[
+case "${enableval}" in
+ yes)
+ tao_build_examples=yes
+ ;;
+ no)
+ tao_build_examples=no
+ ;;
+ *)
+ AC_MSG_ERROR([bad value ${enableval} for --enable-tao-examples])
+ ;;
+esac
+],[
+tao_build_examples=yes
+])
+AM_CONDITIONAL([BUILD_EXAMPLES], [test X$tao_build_examples = Xyes])
+])
+
+AC_DEFUN([TAO_ENABLE_TESTS],
+[AC_ARG_ENABLE([tao-tests],
+ AS_HELP_STRING([--enable-tao-tests],
+ [build TAO tests [[[yes]]]]),
+[
+case "${enableval}" in
+ yes)
+ tao_build_tests=yes
+ ;;
+ no)
+ tao_build_tests=no
+ ;;
+ *)
+ AC_MSG_ERROR([bad value ${enableval} for --enable-tao-tests])
+ ;;
+esac
+],[
+tao_build_tests=yes
+])
+AM_CONDITIONAL([BUILD_TESTS], [test X$tao_build_tests = Xyes])
+])
diff --git a/TAO/orbsvcs/Mobility_Service/GTP.idl b/TAO/orbsvcs/Mobility_Service/GTP.idl
new file mode 100644
index 00000000000..4f592550a5f
--- /dev/null
+++ b/TAO/orbsvcs/Mobility_Service/GTP.idl
@@ -0,0 +1,2 @@
+// $Id$
+//Hello
diff --git a/TAO/orbsvcs/orbsvcs/Concurrency/concurrency_serv_export.h b/TAO/orbsvcs/orbsvcs/Concurrency/concurrency_serv_export.h
new file mode 100644
index 00000000000..fe99ece77aa
--- /dev/null
+++ b/TAO/orbsvcs/orbsvcs/Concurrency/concurrency_serv_export.h
@@ -0,0 +1,40 @@
+
+// -*- C++ -*-
+// $Id$
+// Definition for Win32 Export directives.
+// This file is generated automatically by generate_export_file.pl
+// ------------------------------
+#ifndef TAO_CONCURRENCY_SERV_EXPORT_H
+#define TAO_CONCURRENCY_SERV_EXPORT_H
+
+#include "ace/config-all.h"
+
+#if defined (TAO_AS_STATIC_LIBS)
+# if !defined (TAO_CONCURRENCY_SERV_HAS_DLL)
+# define TAO_CONCURRENCY_SERV_HAS_DLL 0
+# endif /* ! TAO_CONCURRENCY_SERV_HAS_DLL */
+#else
+# if !defined (TAO_CONCURRENCY_SERV_HAS_DLL)
+# define TAO_CONCURRENCY_SERV_HAS_DLL 1
+# endif /* ! TAO_CONCURRENCY_SERV_HAS_DLL */
+#endif
+
+#if defined (TAO_CONCURRENCY_SERV_HAS_DLL) && (TAO_CONCURRENCY_SERV_HAS_DLL == 1)
+# if defined (TAO_CONCURRENCY_SERV_BUILD_DLL)
+# define TAO_Concurrency_Serv_Export ACE_Proper_Export_Flag
+# define TAO_CONCURRENCY_SERV_SINGLETON_DECLARATION(T) ACE_EXPORT_SINGLETON_DECLARATION (T)
+# define TAO_CONCURRENCY_SERV_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK) ACE_EXPORT_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK)
+# else /* TAO_CONCURRENCY_SERV_BUILD_DLL */
+# define TAO_Concurrency_Serv_Export ACE_Proper_Import_Flag
+# define TAO_CONCURRENCY_SERV_SINGLETON_DECLARATION(T) ACE_IMPORT_SINGLETON_DECLARATION (T)
+# define TAO_CONCURRENCY_SERV_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK) ACE_IMPORT_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK)
+# endif /* TAO_CONCURRENCY_SERV_BUILD_DLL */
+#else /* TAO_CONCURRENCY_SERV_HAS_DLL == 1 */
+# define TAO_Concurrency_Serv_Export
+# define TAO_CONCURRENCY_SERV_SINGLETON_DECLARATION(T)
+# define TAO_CONCURRENCY_SERV_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK)
+#endif /* TAO_CONCURRENCY_SERV_HAS_DLL == 1 */
+
+#endif /* TAO_CONCURRENCY_SERV_EXPORT_H */
+
+// End of auto generated file.
diff --git a/TAO/orbsvcs/orbsvcs/Concurrency/concurrency_skel_export.h b/TAO/orbsvcs/orbsvcs/Concurrency/concurrency_skel_export.h
new file mode 100644
index 00000000000..5894da8e9de
--- /dev/null
+++ b/TAO/orbsvcs/orbsvcs/Concurrency/concurrency_skel_export.h
@@ -0,0 +1,40 @@
+
+// -*- C++ -*-
+// $Id$
+// Definition for Win32 Export directives.
+// This file is generated automatically by generate_export_file.pl
+// ------------------------------
+#ifndef TAO_CONCURRENCY_SKEL_EXPORT_H
+#define TAO_CONCURRENCY_SKEL_EXPORT_H
+
+#include "ace/config-all.h"
+
+#if defined (TAO_AS_STATIC_LIBS)
+# if !defined (TAO_CONCURRENCY_SKEL_HAS_DLL)
+# define TAO_CONCURRENCY_SKEL_HAS_DLL 0
+# endif /* ! TAO_CONCURRENCY_SKEL_HAS_DLL */
+#else
+# if !defined (TAO_CONCURRENCY_SKEL_HAS_DLL)
+# define TAO_CONCURRENCY_SKEL_HAS_DLL 1
+# endif /* ! TAO_CONCURRENCY_SKEL_HAS_DLL */
+#endif
+
+#if defined (TAO_CONCURRENCY_SKEL_HAS_DLL) && (TAO_CONCURRENCY_SKEL_HAS_DLL == 1)
+# if defined (TAO_CONCURRENCY_SKEL_BUILD_DLL)
+# define TAO_Concurrency_Skel_Export ACE_Proper_Export_Flag
+# define TAO_CONCURRENCY_SKEL_SINGLETON_DECLARATION(T) ACE_EXPORT_SINGLETON_DECLARATION (T)
+# define TAO_CONCURRENCY_SKEL_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK) ACE_EXPORT_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK)
+# else /* TAO_CONCURRENCY_SKEL_BUILD_DLL */
+# define TAO_Concurrency_Skel_Export ACE_Proper_Import_Flag
+# define TAO_CONCURRENCY_SKEL_SINGLETON_DECLARATION(T) ACE_IMPORT_SINGLETON_DECLARATION (T)
+# define TAO_CONCURRENCY_SKEL_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK) ACE_IMPORT_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK)
+# endif /* TAO_CONCURRENCY_SKEL_BUILD_DLL */
+#else /* TAO_CONCURRENCY_SKEL_HAS_DLL == 1 */
+# define TAO_Concurrency_Skel_Export
+# define TAO_CONCURRENCY_SKEL_SINGLETON_DECLARATION(T)
+# define TAO_CONCURRENCY_SKEL_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK)
+#endif /* TAO_CONCURRENCY_SKEL_HAS_DLL == 1 */
+
+#endif /* TAO_CONCURRENCY_SKEL_EXPORT_H */
+
+// End of auto generated file.
diff --git a/TAO/orbsvcs/orbsvcs/LoadBalancing/README b/TAO/orbsvcs/orbsvcs/LoadBalancing/README
new file mode 100644
index 00000000000..175e8e074fd
--- /dev/null
+++ b/TAO/orbsvcs/orbsvcs/LoadBalancing/README
@@ -0,0 +1,35 @@
+This directory contains the implementations of the TAO Load Balancing
+service, which is called as Cygnus.
+
+Cygnus currently implements the latest revision of the OMG Load Balancing
+and Monitoring proposed specification. The features and advantages of
+Cygnus include:
+1. Multiple object group support.
+2. Extensible load balancing strategies through IDL interface.
+3. Extensible load monitoring.
+4. Support for push and pull style monitoring.
+5. Support for infrastructure and application controlled memberships.
+6. Efficient server side transparency.
+7. Default implementations of well known load balancing strategies.
+
+Future Work targeted:
+1. Implement a distributed load balancing service.
+2. Implement stateful load balancing service.
+3. Implement self adaptive load balancing strategies using control
+theoretical techniques.
+
+Papers about Cygnus:
+1. Ossama Othman, Carlos O'Ryan, and Douglas C. Schmidt, The Design of an
+Adaptive CORBA Load Balancing Service, IEEE Distributed Systems Online, Volume
+2, Number 4, April, 2001.
+2. Ossama Othman, Carlos O'Ryan, and Douglas C. Schmidt, An Efficient
+Adaptive Load Balancing Service for CORBA, IEEE Distributed Systems Online,
+Volume 2, Number 3, March, 2001.
+3. Jaiganesh Balasubramanian, Douglas C. Schmidt, Lawrence Dowdy, and Ossama
+Othman, Evaluating the Performance of Middleware Load Balancing Strategies,
+Proceedings of the 8th International IEEE Enterprise Distributed Object
+Computing Conference, Monterey, CA, September 2004
+4. Ossama Othman, Jaigaesh Balasubramanian, and Douglas C. Schmidt, The
+Design of an Adaptive Middleware Load Balancing and Monitoring Service, Third
+International Workshop on Self-Adaptive Software, Arlington, VA, USA, June
+9-11, 2003
diff --git a/TAO/orbsvcs/orbsvcs/Log/rteventlog_serv_export.h b/TAO/orbsvcs/orbsvcs/Log/rteventlog_serv_export.h
new file mode 100644
index 00000000000..c3791cd48ae
--- /dev/null
+++ b/TAO/orbsvcs/orbsvcs/Log/rteventlog_serv_export.h
@@ -0,0 +1,37 @@
+/* -*- C++ -*- $Id$ */
+// generate_export_file.pl,v 1.8 2001/03/04 09:16:29 nanbor Exp
+// Definition for Win32 Export directives.
+// This file is generated automatically by generate_export_file.pl
+// ------------------------------
+#ifndef TAO_RTEVENTLOG_SERV_EXPORT_H
+#define TAO_RTEVENTLOG_SERV_EXPORT_H
+
+#include "ace/config-all.h"
+
+#if defined (ACE_AS_STATIC_LIBS) && !defined (TAO_RTEVENTLOG_SERV_HAS_DLL)
+# define TAO_RTEVENTLOG_SERV_HAS_DLL 0
+#endif /* ACE_AS_STATIC_LIBS && TAO_RTEVENTLOG_SERV_HAS_DLL */
+
+#if !defined (TAO_RTEVENTLOG_SERV_HAS_DLL)
+# define TAO_RTEVENTLOG_SERV_HAS_DLL 1
+#endif /* ! TAO_RTEVENTLOG_SERV_HAS_DLL */
+
+#if defined (TAO_RTEVENTLOG_SERV_HAS_DLL) && (TAO_RTEVENTLOG_SERV_HAS_DLL == 1)
+# if defined (TAO_RTEVENTLOG_SERV_BUILD_DLL)
+# define TAO_RTEventLog_Serv_Export ACE_Proper_Export_Flag
+# define TAO_RTEVENTLOG_SERV_SINGLETON_DECLARATION(T) ACE_EXPORT_SINGLETON_DECLARATION (T)
+# define TAO_RTEVENTLOG_SERV_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK) ACE_EXPORT_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK)
+# else /* TAO_RTEVENTLOG_SERV_BUILD_DLL */
+# define TAO_RTEventLog_Serv_Export ACE_Proper_Import_Flag
+# define TAO_RTEVENTLOG_SERV_SINGLETON_DECLARATION(T) ACE_IMPORT_SINGLETON_DECLARATION (T)
+# define TAO_RTEVENTLOG_SERV_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK) ACE_IMPORT_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK)
+# endif /* TAO_RTEVENTLOG_SERV_BUILD_DLL */
+#else /* TAO_RTEVENTLOG_SERV_HAS_DLL == 1 */
+# define TAO_RTEventLog_Serv_Export
+# define TAO_RTEVENTLOG_SERV_SINGLETON_DECLARATION(T)
+# define TAO_RTEVENTLOG_SERV_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK)
+#endif /* TAO_RTEVENTLOG_SERV_HAS_DLL == 1 */
+
+#endif /* TAO_RTEVENTLOG_SERV_EXPORT_H */
+
+// End of auto generated file.
diff --git a/TAO/orbsvcs/orbsvcs/Log/rteventlog_skel_export.h b/TAO/orbsvcs/orbsvcs/Log/rteventlog_skel_export.h
new file mode 100644
index 00000000000..bd0276592f9
--- /dev/null
+++ b/TAO/orbsvcs/orbsvcs/Log/rteventlog_skel_export.h
@@ -0,0 +1,37 @@
+/* -*- C++ -*- $Id$ */
+// generate_export_file.pl,v 1.8 2001/03/04 09:16:29 nanbor Exp
+// Definition for Win32 Export directives.
+// This file is generated automatically by generate_export_file.pl
+// ------------------------------
+#ifndef TAO_RTEVENTLOG_SKEL_EXPORT_H
+#define TAO_RTEVENTLOG_SKEL_EXPORT_H
+
+#include "ace/config-all.h"
+
+#if defined (ACE_AS_STATIC_LIBS) && !defined (TAO_RTEVENTLOG_SKEL_HAS_DLL)
+# define TAO_RTEVENTLOG_SKEL_HAS_DLL 0
+#endif /* ACE_AS_STATIC_LIBS && TAO_RTEVENTLOG_SKEL_HAS_DLL */
+
+#if !defined (TAO_RTEVENTLOG_SKEL_HAS_DLL)
+# define TAO_RTEVENTLOG_SKEL_HAS_DLL 1
+#endif /* ! TAO_RTEVENTLOG_SKEL_HAS_DLL */
+
+#if defined (TAO_RTEVENTLOG_SKEL_HAS_DLL) && (TAO_RTEVENTLOG_SKEL_HAS_DLL == 1)
+# if defined (TAO_RTEVENTLOG_SKEL_BUILD_DLL)
+# define TAO_RTEventLog_Skel_Export ACE_Proper_Export_Flag
+# define TAO_RTEVENTLOG_SKEL_SINGLETON_DECLARATION(T) ACE_EXPORT_SINGLETON_DECLARATION (T)
+# define TAO_RTEVENTLOG_SKEL_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK) ACE_EXPORT_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK)
+# else /* TAO_RTEVENTLOG_SKEL_BUILD_DLL */
+# define TAO_RTEventLog_Skel_Export ACE_Proper_Import_Flag
+# define TAO_RTEVENTLOG_SKEL_SINGLETON_DECLARATION(T) ACE_IMPORT_SINGLETON_DECLARATION (T)
+# define TAO_RTEVENTLOG_SKEL_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK) ACE_IMPORT_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK)
+# endif /* TAO_RTEVENTLOG_SKEL_BUILD_DLL */
+#else /* TAO_RTEVENTLOG_SKEL_HAS_DLL == 1 */
+# define TAO_RTEventLog_Skel_Export
+# define TAO_RTEVENTLOG_SKEL_SINGLETON_DECLARATION(T)
+# define TAO_RTEVENTLOG_SKEL_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK)
+#endif /* TAO_RTEVENTLOG_SKEL_HAS_DLL == 1 */
+
+#endif /* TAO_RTEVENTLOG_SKEL_EXPORT_H */
+
+// End of auto generated file.
diff --git a/TAO/orbsvcs/orbsvcs/Property/property_serv_export.h b/TAO/orbsvcs/orbsvcs/Property/property_serv_export.h
new file mode 100644
index 00000000000..593f9bc7d37
--- /dev/null
+++ b/TAO/orbsvcs/orbsvcs/Property/property_serv_export.h
@@ -0,0 +1,40 @@
+
+// -*- C++ -*-
+// $Id$
+// Definition for Win32 Export directives.
+// This file is generated automatically by generate_export_file.pl
+// ------------------------------
+#ifndef TAO_PROPERTY_SERV_EXPORT_H
+#define TAO_PROPERTY_SERV_EXPORT_H
+
+#include "ace/config-all.h"
+
+#if defined (TAO_AS_STATIC_LIBS)
+# if !defined (TAO_PROPERTY_SERV_HAS_DLL)
+# define TAO_PROPERTY_SERV_HAS_DLL 0
+# endif /* ! TAO_PROPERTY_SERV_HAS_DLL */
+#else
+# if !defined (TAO_PROPERTY_SERV_HAS_DLL)
+# define TAO_PROPERTY_SERV_HAS_DLL 1
+# endif /* ! TAO_PROPERTY_SERV_HAS_DLL */
+#endif
+
+#if defined (TAO_PROPERTY_SERV_HAS_DLL) && (TAO_PROPERTY_SERV_HAS_DLL == 1)
+# if defined (TAO_PROPERTY_SERV_BUILD_DLL)
+# define TAO_Property_Serv_Export ACE_Proper_Export_Flag
+# define TAO_PROPERTY_SERV_SINGLETON_DECLARATION(T) ACE_EXPORT_SINGLETON_DECLARATION (T)
+# define TAO_PROPERTY_SERV_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK) ACE_EXPORT_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK)
+# else /* TAO_PROPERTY_SERV_BUILD_DLL */
+# define TAO_Property_Serv_Export ACE_Proper_Import_Flag
+# define TAO_PROPERTY_SERV_SINGLETON_DECLARATION(T) ACE_IMPORT_SINGLETON_DECLARATION (T)
+# define TAO_PROPERTY_SERV_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK) ACE_IMPORT_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK)
+# endif /* TAO_PROPERTY_SERV_BUILD_DLL */
+#else /* TAO_PROPERTY_SERV_HAS_DLL == 1 */
+# define TAO_Property_Serv_Export
+# define TAO_PROPERTY_SERV_SINGLETON_DECLARATION(T)
+# define TAO_PROPERTY_SERV_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK)
+#endif /* TAO_PROPERTY_SERV_HAS_DLL == 1 */
+
+#endif /* TAO_PROPERTY_SERV_EXPORT_H */
+
+// End of auto generated file.
diff --git a/TAO/orbsvcs/orbsvcs/Property/property_skel_export.h b/TAO/orbsvcs/orbsvcs/Property/property_skel_export.h
new file mode 100644
index 00000000000..60a4aa4fe46
--- /dev/null
+++ b/TAO/orbsvcs/orbsvcs/Property/property_skel_export.h
@@ -0,0 +1,40 @@
+
+// -*- C++ -*-
+// $Id$
+// Definition for Win32 Export directives.
+// This file is generated automatically by generate_export_file.pl
+// ------------------------------
+#ifndef TAO_PROPERTY_SKEL_EXPORT_H
+#define TAO_PROPERTY_SKEL_EXPORT_H
+
+#include "ace/config-all.h"
+
+#if defined (TAO_AS_STATIC_LIBS)
+# if !defined (TAO_PROPERTY_SKEL_HAS_DLL)
+# define TAO_PROPERTY_SKEL_HAS_DLL 0
+# endif /* ! TAO_PROPERTY_SKEL_HAS_DLL */
+#else
+# if !defined (TAO_PROPERTY_SKEL_HAS_DLL)
+# define TAO_PROPERTY_SKEL_HAS_DLL 1
+# endif /* ! TAO_PROPERTY_SKEL_HAS_DLL */
+#endif
+
+#if defined (TAO_PROPERTY_SKEL_HAS_DLL) && (TAO_PROPERTY_SKEL_HAS_DLL == 1)
+# if defined (TAO_PROPERTY_SKEL_BUILD_DLL)
+# define TAO_Property_Skel_Export ACE_Proper_Export_Flag
+# define TAO_PROPERTY_SKEL_SINGLETON_DECLARATION(T) ACE_EXPORT_SINGLETON_DECLARATION (T)
+# define TAO_PROPERTY_SKEL_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK) ACE_EXPORT_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK)
+# else /* TAO_PROPERTY_SKEL_BUILD_DLL */
+# define TAO_Property_Skel_Export ACE_Proper_Import_Flag
+# define TAO_PROPERTY_SKEL_SINGLETON_DECLARATION(T) ACE_IMPORT_SINGLETON_DECLARATION (T)
+# define TAO_PROPERTY_SKEL_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK) ACE_IMPORT_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK)
+# endif /* TAO_PROPERTY_SKEL_BUILD_DLL */
+#else /* TAO_PROPERTY_SKEL_HAS_DLL == 1 */
+# define TAO_Property_Skel_Export
+# define TAO_PROPERTY_SKEL_SINGLETON_DECLARATION(T)
+# define TAO_PROPERTY_SKEL_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK)
+#endif /* TAO_PROPERTY_SKEL_HAS_DLL == 1 */
+
+#endif /* TAO_PROPERTY_SKEL_EXPORT_H */
+
+// End of auto generated file.
diff --git a/TAO/orbsvcs/orbsvcs/TAO_CosConcurrency_Serv.pc.in b/TAO/orbsvcs/orbsvcs/TAO_CosConcurrency_Serv.pc.in
new file mode 100644
index 00000000000..60156a705ca
--- /dev/null
+++ b/TAO/orbsvcs/orbsvcs/TAO_CosConcurrency_Serv.pc.in
@@ -0,0 +1,11 @@
+prefix=@prefix@
+exec_prefix=@exec_prefix@
+libdir=@libdir@
+includedir=@includedir@
+
+Name: TAO_CosConcurrency_Serv
+Description: TAO CosConcurrency Service Library
+Requires: TAO_CosConcurrency_Skel
+Version: @VERSION@
+Libs: -L${libdir} -lTAO_CosConcurrency_Serv
+Cflags: -I${includedir}
diff --git a/TAO/orbsvcs/orbsvcs/TAO_CosConcurrency_Skel.pc.in b/TAO/orbsvcs/orbsvcs/TAO_CosConcurrency_Skel.pc.in
new file mode 100644
index 00000000000..6a7095e3c5a
--- /dev/null
+++ b/TAO/orbsvcs/orbsvcs/TAO_CosConcurrency_Skel.pc.in
@@ -0,0 +1,11 @@
+prefix=@prefix@
+exec_prefix=@exec_prefix@
+libdir=@libdir@
+includedir=@includedir@
+
+Name: TAO_CosConcurrency_Skel
+Description: TAO CosConcurrency Skeleton Library
+Requires: TAO_CosConcurrency, TAO_PortableServer
+Version: @VERSION@
+Libs: -L${libdir} -lTAO_CosConcurrency_Skel
+Cflags: -I${includedir}
diff --git a/TAO/orbsvcs/orbsvcs/TAO_CosProperty_Serv.pc.in b/TAO/orbsvcs/orbsvcs/TAO_CosProperty_Serv.pc.in
new file mode 100644
index 00000000000..ae944d6d818
--- /dev/null
+++ b/TAO/orbsvcs/orbsvcs/TAO_CosProperty_Serv.pc.in
@@ -0,0 +1,11 @@
+prefix=@prefix@
+exec_prefix=@exec_prefix@
+libdir=@libdir@
+includedir=@includedir@
+
+Name: TAO_CosProperty_Serv
+Description: TAO CosProperty Service Library
+Requires: TAO_PortableServer_Skel
+Version: @VERSION@
+Libs: -L${libdir} -lTAO_CosProperty_Serv
+Cflags: -I${includedir}
diff --git a/TAO/orbsvcs/orbsvcs/TAO_CosProperty_Skel.pc.in b/TAO/orbsvcs/orbsvcs/TAO_CosProperty_Skel.pc.in
new file mode 100644
index 00000000000..34cfa1f495f
--- /dev/null
+++ b/TAO/orbsvcs/orbsvcs/TAO_CosProperty_Skel.pc.in
@@ -0,0 +1,11 @@
+prefix=@prefix@
+exec_prefix=@exec_prefix@
+libdir=@libdir@
+includedir=@includedir@
+
+Name: TAO_CosProperty_Skel
+Description: TAO CosProperty Skeleton Library
+Requires: TAO_CosProperty, TAO_PortableServer
+Version: @VERSION@
+Libs: -L${libdir} -lTAO_CosProperty_Skel
+Cflags: -I${includedir}
diff --git a/TAO/orbsvcs/orbsvcs/TAO_RTEvent.pc.in b/TAO/orbsvcs/orbsvcs/TAO_RTEvent.pc.in
new file mode 100644
index 00000000000..b36d36acba5
--- /dev/null
+++ b/TAO/orbsvcs/orbsvcs/TAO_RTEvent.pc.in
@@ -0,0 +1,11 @@
+prefix=@prefix@
+exec_prefix=@exec_prefix@
+libdir=@libdir@
+includedir=@includedir@
+
+Name: TAO_RTEvent
+Description: TAO RTEvent Stub Library
+Requires: TAO_Svc_Utils, TAO_AnyTypeCode, TAO
+Version: @VERSION@
+Libs: -L${libdir} -lTAO_RTEvent
+Cflags: -I${includedir}
diff --git a/TAO/orbsvcs/orbsvcs/TAO_RTEventLogAdmin.pc.in b/TAO/orbsvcs/orbsvcs/TAO_RTEventLogAdmin.pc.in
new file mode 100644
index 00000000000..7c0ba70dab7
--- /dev/null
+++ b/TAO/orbsvcs/orbsvcs/TAO_RTEventLogAdmin.pc.in
@@ -0,0 +1,11 @@
+prefix=@prefix@
+exec_prefix=@exec_prefix@
+libdir=@libdir@
+includedir=@includedir@
+
+Name: TAO_RTEventLogAdmin
+Description: TAO RTEvent Logging Service Stub Library
+Requires: TAO, TAO_DsLogAdmin, TAO_RTEvent
+Version: @VERSION@
+Libs: -L${libdir} -lTAO_RTEventLogAdmin
+Cflags: -I${includedir}
diff --git a/TAO/orbsvcs/orbsvcs/TAO_RTEventLogAdmin_Serv.pc.in b/TAO/orbsvcs/orbsvcs/TAO_RTEventLogAdmin_Serv.pc.in
new file mode 100644
index 00000000000..8e63c1dd211
--- /dev/null
+++ b/TAO/orbsvcs/orbsvcs/TAO_RTEventLogAdmin_Serv.pc.in
@@ -0,0 +1,11 @@
+prefix=@prefix@
+exec_prefix=@exec_prefix@
+libdir=@libdir@
+includedir=@includedir@
+
+Name: TAO_RTEventLogAdmin_Serv
+Description: TAO RTEvent Logging Service Implementation Library
+Requires: TAO_RTEventLogAdmin_Skel, TAO_DsLogAdmin_Serv, TAO_RTEvent_Serv
+Version: @VERSION@
+Libs: -L${libdir} -lTAO_RTEventLogAdmin_Serv
+Cflags: -I${includedir}
diff --git a/TAO/orbsvcs/orbsvcs/TAO_RTEventLogAdmin_Skel.pc.in b/TAO/orbsvcs/orbsvcs/TAO_RTEventLogAdmin_Skel.pc.in
new file mode 100644
index 00000000000..210fe308b19
--- /dev/null
+++ b/TAO/orbsvcs/orbsvcs/TAO_RTEventLogAdmin_Skel.pc.in
@@ -0,0 +1,11 @@
+prefix=@prefix@
+exec_prefix=@exec_prefix@
+libdir=@libdir@
+includedir=@includedir@
+
+Name: TAO_RTEventLogAdmin_Skel
+Description: TAO RTEvent Logging Service Skeleton Library
+Requires: TAO_RTEventLogAdmin, TAO_DsLogAdmin_Skel, TAO_RTEvent_Skel, TAO_PortableServer
+Version: @VERSION@
+Libs: -L${libdir} -lTAO_RTEventLogAdmin_Skel
+Cflags: -I${includedir}
diff --git a/TAO/orbsvcs/orbsvcs/TAO_RTEvent_Serv.pc.in b/TAO/orbsvcs/orbsvcs/TAO_RTEvent_Serv.pc.in
new file mode 100644
index 00000000000..b37c07333ea
--- /dev/null
+++ b/TAO/orbsvcs/orbsvcs/TAO_RTEvent_Serv.pc.in
@@ -0,0 +1,11 @@
+prefix=@prefix@
+exec_prefix=@exec_prefix@
+libdir=@libdir@
+includedir=@includedir@
+
+Name: TAO_RTEvent_Serv
+Description: TAO RTEvent Service Library
+Requires: TAO_RTEvent_Skel, TAO_Svc_Utils, TAO_Messaging
+Version: @VERSION@
+Libs: -L${libdir} -lTAO_RTEvent_Serv
+Cflags: -I${includedir}
diff --git a/TAO/orbsvcs/orbsvcs/TAO_RTEvent_Skel.pc.in b/TAO/orbsvcs/orbsvcs/TAO_RTEvent_Skel.pc.in
new file mode 100644
index 00000000000..4d862cc270d
--- /dev/null
+++ b/TAO/orbsvcs/orbsvcs/TAO_RTEvent_Skel.pc.in
@@ -0,0 +1,11 @@
+prefix=@prefix@
+exec_prefix=@exec_prefix@
+libdir=@libdir@
+includedir=@includedir@
+
+Name: TAO_RTEvent_Skel
+Description: TAO RTEvent Skeleton Library
+Requires: TAO_RTEvent, TAO_PortableServer
+Version: @VERSION@
+Libs: -L${libdir} -lTAO_RTEvent_Skel
+Cflags: -I${includedir}
diff --git a/TAO/orbsvcs/tests/Bug_2074_Regression/Bug_2074_Regression.mpc b/TAO/orbsvcs/tests/Bug_2074_Regression/Bug_2074_Regression.mpc
new file mode 100644
index 00000000000..8bc20a15371
--- /dev/null
+++ b/TAO/orbsvcs/tests/Bug_2074_Regression/Bug_2074_Regression.mpc
@@ -0,0 +1,10 @@
+// -*- MPC -*-
+// $Id$
+
+project(*Test): taoclient, messaging, naming, minimum_corba {
+ exename = test
+ Source_Files {
+ test.cpp
+ ORB_Task.cpp
+ }
+}
diff --git a/TAO/orbsvcs/tests/Bug_2074_Regression/ORB_Task.cpp b/TAO/orbsvcs/tests/Bug_2074_Regression/ORB_Task.cpp
new file mode 100644
index 00000000000..41e64a4dd51
--- /dev/null
+++ b/TAO/orbsvcs/tests/Bug_2074_Regression/ORB_Task.cpp
@@ -0,0 +1,64 @@
+/**
+ * @file ORB_Task.cpp
+ *
+ * $Id$
+ *
+ * @author Carlos O'Ryan <coryan@atdesk.com>
+ *
+ */
+#include "ORB_Task.h"
+#include "tao/Messaging/Messaging.h"
+#include "orbsvcs/CosNamingC.h"
+
+ACE_RCSID(Bug_2074_Regression, ORB_Task, "$Id$")
+
+ORB_Task::ORB_Task (CORBA::ORB_ptr orb)
+ : orb_ (CORBA::ORB::_duplicate (orb))
+{
+}
+
+int
+ORB_Task::svc (void)
+{
+ try
+ {
+ CORBA::Object_var ncRef =
+ orb_->string_to_object(
+ "corbaloc:iiop:10.175.12.99:15025/NameService" );
+
+ CORBA::PolicyList policies;
+
+ TimeBase::TimeT timeout = 5000 * 10000;
+
+ CORBA::Any timeoutAny;
+ timeoutAny <<= timeout;
+
+ policies.length(1);
+ policies[0] = orb_->create_policy(
+ Messaging::RELATIVE_RT_TIMEOUT_POLICY_TYPE,
+ timeoutAny );
+
+ CORBA::Object_var object = ncRef->_set_policy_overrides(
+ policies, CORBA::SET_OVERRIDE );
+
+ policies[0]->destroy();
+
+ CosNaming::NamingContext_var namingContext =
+ CosNaming::NamingContext::_narrow( object.in() );
+ namingContext->_non_existent();
+ }
+ catch ( const CORBA::TRANSIENT&)
+ {
+ ACE_DEBUG ((LM_DEBUG, "Caught transient\n"));
+ }
+ catch ( const CORBA::TIMEOUT&)
+ {
+ ACE_DEBUG ((LM_DEBUG, "Caught timeout\n"));
+ }
+ catch ( const CORBA::Exception& e )
+ {
+ ACE_PRINT_EXCEPTION (e, "Exception caught");
+ }
+
+ return 0;
+}
diff --git a/TAO/orbsvcs/tests/Bug_2074_Regression/ORB_Task.h b/TAO/orbsvcs/tests/Bug_2074_Regression/ORB_Task.h
new file mode 100644
index 00000000000..cae39cbce9f
--- /dev/null
+++ b/TAO/orbsvcs/tests/Bug_2074_Regression/ORB_Task.h
@@ -0,0 +1,25 @@
+#ifndef ORB_Task__h_
+#define ORB_Task__h_
+/**
+ * @file ORB_Task.h
+ *
+ * $Id$
+ *
+ * @author Johnny Willemsen <jwillemsen@remedy.nl>
+ *
+ */
+#include "tao/ORB.h"
+#include "ace/Task.h"
+
+class ORB_Task : public ACE_Task_Base
+{
+public:
+ ORB_Task(CORBA::ORB_ptr orb);
+
+ virtual int svc (void);
+
+private:
+ CORBA::ORB_var orb_;
+};
+
+#endif /* ORB_Task__h_ */
diff --git a/TAO/orbsvcs/tests/Bug_2074_Regression/run_test.pl b/TAO/orbsvcs/tests/Bug_2074_Regression/run_test.pl
new file mode 100755
index 00000000000..dc046a8ace8
--- /dev/null
+++ b/TAO/orbsvcs/tests/Bug_2074_Regression/run_test.pl
@@ -0,0 +1,27 @@
+eval '(exit $?0)' && eval 'exec perl -S $0 ${1+"$@"}'
+ & eval 'exec perl -S $0 $argv:q'
+ if 0;
+
+# $Id$
+# -*- perl -*-
+
+use lib '../../../../bin';
+use PerlACE::Run_Test;
+
+if (PerlACE::is_vxworks_test()) {
+ $SV = new PerlACE::ProcessVX ("test", "");
+}
+else {
+ $SV = new PerlACE::Process ("test", "");
+}
+
+$SV->Spawn ();
+
+$server = $SV->WaitKill (120);
+
+if ($server != 0) {
+ print STDERR "ERROR: server returned $server\n";
+ $status = 1;
+}
+
+exit $status;
diff --git a/TAO/orbsvcs/tests/Bug_2074_Regression/test.cpp b/TAO/orbsvcs/tests/Bug_2074_Regression/test.cpp
new file mode 100644
index 00000000000..915e7419e76
--- /dev/null
+++ b/TAO/orbsvcs/tests/Bug_2074_Regression/test.cpp
@@ -0,0 +1,22 @@
+// $Id$
+
+#include "tao/corba.h"
+#include "ORB_Task.h"
+
+int main( int argc, char* argv[] )
+{
+ CORBA::ORB_var orb = CORBA::ORB_init( argc, argv );
+
+ ORB_Task worker (orb.in ());
+ worker.activate (THR_NEW_LWP | THR_JOINABLE,
+ 10);
+
+ ACE_Time_Value tv (20, 0);
+ orb->run(tv);
+
+ orb->destroy ();
+
+ worker.thr_mgr ()->wait ();
+
+ return 0;
+}
diff --git a/TAO/orbsvcs/tests/Bug_2285_Regression/Bug_2285_Regression.mpc b/TAO/orbsvcs/tests/Bug_2285_Regression/Bug_2285_Regression.mpc
new file mode 100644
index 00000000000..349374bb355
--- /dev/null
+++ b/TAO/orbsvcs/tests/Bug_2285_Regression/Bug_2285_Regression.mpc
@@ -0,0 +1,67 @@
+// -*- MPC -*-
+// $Id$
+
+project(*IDL): taoidldefaults {
+ IDL_Files {
+ Test.idl
+ }
+ custom_only = 1
+}
+
+project(*Client): taoserver, ftclientorb {
+ after += *IDL
+
+ exename = client
+ Source_Files {
+ client.cpp
+ Hello.cpp
+ TestS.cpp
+ TestC.cpp
+ }
+ IDL_Files {
+ }
+}
+
+project (*Server) : taoserver, ftclientorb, pi_server {
+ after += *IDL
+
+ exename = server
+ Source_Files {
+ server.cpp
+ Hello.cpp
+ ServerORBInitializer.cpp
+ ServerRequest_Interceptor.cpp
+ TestS.cpp
+ TestC.cpp
+ }
+ IDL_Files {
+ }
+}
+
+project(*Client2): taoclient, ftclientorb, iormanip {
+ after += *IDL
+
+ exename = client2
+ Source_Files {
+ client2.cpp
+ TestC.cpp
+ }
+ IDL_Files {
+ }
+}
+
+project (*Server2) : taoserver, pi_server, ftclientorb {
+ after += *IDL
+
+ exename = server2
+ Source_Files {
+ server2.cpp
+ Hello.cpp
+ ServerORBInitializer2.cpp
+ ServerRequest_Interceptor2.cpp
+ TestS.cpp
+ TestC.cpp
+ }
+ IDL_Files {
+ }
+}
diff --git a/TAO/orbsvcs/tests/Bug_2285_Regression/Hello.cpp b/TAO/orbsvcs/tests/Bug_2285_Regression/Hello.cpp
new file mode 100644
index 00000000000..6463bd8e9ec
--- /dev/null
+++ b/TAO/orbsvcs/tests/Bug_2285_Regression/Hello.cpp
@@ -0,0 +1,74 @@
+//
+// $Id$
+//
+#include "Hello.h"
+
+ACE_RCSID(Hello, Hello, "$Id$")
+
+CORBA::Boolean
+Hello::ids_differ_ = 1;
+
+Hello::Hello (CORBA::ORB_ptr orb, Test::Hello_ptr server, CORBA::ULong server_id)
+ : orb_ (CORBA::ORB::_duplicate (orb)),
+ server_ (Test::Hello::_duplicate (server)),
+ server_id_ (server_id)
+{
+}
+
+char *
+Hello::get_string (ACE_ENV_SINGLE_ARG_DECL_NOT_USED)
+ ACE_THROW_SPEC ((CORBA::SystemException))
+{
+ return CORBA::string_dup ("Hello there!");
+}
+
+void
+Hello::shutdown (ACE_ENV_SINGLE_ARG_DECL)
+ ACE_THROW_SPEC ((CORBA::SystemException))
+{
+ this->orb_->shutdown (0 ACE_ENV_ARG_PARAMETER);
+}
+
+void
+Hello::throw_exception (ACE_ENV_SINGLE_ARG_DECL)
+ ACE_THROW_SPEC ((CORBA::SystemException, Test::MyException))
+{
+ ACE_THROW (Test::MyException ());
+}
+
+// Nested sequence step 1 - This op called by the client on the server
+CORBA::Boolean
+Hello::call_me_back (Test::Hello_ptr me ACE_ENV_ARG_DECL)
+ ACE_THROW_SPEC ((CORBA::SystemException))
+{
+ CORBA::Boolean result = me->call_back (ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK;
+ return result;
+}
+
+// Nested sequence step 2 - This op called by the server on the client
+CORBA::Boolean
+Hello::call_back (ACE_ENV_SINGLE_ARG_DECL)
+ ACE_THROW_SPEC ((CORBA::SystemException))
+{
+ CORBA::Boolean result = server_->check_request_id (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK;
+ return result;
+}
+
+// Nested sequence step 3 - This op called by the client on the server
+CORBA::Boolean
+Hello::check_request_id (ACE_ENV_SINGLE_ARG_DECL_NOT_USED)
+ ACE_THROW_SPEC ((CORBA::SystemException))
+{
+ // The server request interceptor will have set this public static member
+ // false if the same retention id has been used twice
+ return ids_differ_;
+}
+
+CORBA::ULong
+Hello::drop_down_dead (ACE_ENV_SINGLE_ARG_DECL)
+ ACE_THROW_SPEC ((CORBA::SystemException))
+{
+ return server_id_;
+}
diff --git a/TAO/orbsvcs/tests/Bug_2285_Regression/Hello.h b/TAO/orbsvcs/tests/Bug_2285_Regression/Hello.h
new file mode 100644
index 00000000000..4967689c88a
--- /dev/null
+++ b/TAO/orbsvcs/tests/Bug_2285_Regression/Hello.h
@@ -0,0 +1,63 @@
+//
+// $Id$
+//
+
+#ifndef HELLO_H
+#define HELLO_H
+#include /**/ "ace/pre.h"
+
+#include "TestS.h"
+
+#if defined (_MSC_VER)
+# pragma warning(push)
+# pragma warning (disable:4250)
+#endif /* _MSC_VER */
+
+/// Implement the Test::Hello interface
+class Hello
+ : public virtual POA_Test::Hello
+{
+public:
+ /// Constructor
+ Hello (CORBA::ORB_ptr orb, Test::Hello_ptr server, CORBA::ULong server_id = 0);
+
+ // = The skeleton methods
+ virtual char * get_string (ACE_ENV_SINGLE_ARG_DECL)
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+ virtual void shutdown (ACE_ENV_SINGLE_ARG_DECL)
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+ virtual void throw_exception (ACE_ENV_SINGLE_ARG_DECL)
+ ACE_THROW_SPEC ((CORBA::SystemException, Test::MyException));
+
+ virtual CORBA::Boolean call_me_back (Test::Hello_ptr me ACE_ENV_ARG_DECL)
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+ virtual CORBA::Boolean call_back (ACE_ENV_SINGLE_ARG_DECL)
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+ virtual CORBA::Boolean check_request_id (ACE_ENV_SINGLE_ARG_DECL)
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+ virtual CORBA::ULong drop_down_dead (ACE_ENV_SINGLE_ARG_DECL)
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+ static CORBA::Boolean ids_differ_;
+
+private:
+ /// Use an ORB reference to conver strings to objects and shutdown
+ /// the application.
+ CORBA::ORB_var orb_;
+
+ Test::Hello_var server_;
+
+ CORBA::ULong server_id_;
+};
+
+#if defined(_MSC_VER)
+# pragma warning(pop)
+#endif /* _MSC_VER */
+
+#include /**/ "ace/post.h"
+#endif /* HELLO_H */
diff --git a/TAO/orbsvcs/tests/Bug_2285_Regression/README b/TAO/orbsvcs/tests/Bug_2285_Regression/README
new file mode 100644
index 00000000000..eb174b925d9
--- /dev/null
+++ b/TAO/orbsvcs/tests/Bug_2285_Regression/README
@@ -0,0 +1,96 @@
+// $Id$
+
+See http://deuce.doc.wustl.edu/bugzilla/show_bug.cgi?id=2285 for more.
+
+These two test scenarios test that the following FT spec conditions are met:
+
+1 / "The retention_id uniquely identifies the request within the scope of the client and the expiration_time."
+2 / "Each repetition of a request must carry the same client_id, retention_id, and expiration_time as the original request."
+3 / "If a client ORB loses the connection with a server or incurs some other kind of transport fault, the ORB may attempt to retransmit the request message, or retransmit the request message to an alternative destination or using an alternative transport, up to the expiration_time."
+4 / "TimeBase::TimeT expiration_time" and "TimeT represents a single time value, which is 64 bits in size, and holds the number of 100 nanoseconds that have passed since the base time. For absolute time the base is 15 October 1582 00:00 of the Gregorian Calendar. All absolute time shall be computed using dates from the Gregorian Calendar."
+
+Test #1 checks that unique retention IDs are used in two scenarios:
+1/ When a request follows a previous request that concluded with an exception being returned to the application code.
+2/ When a subsequent request is made in a thread when that thread still as a response to a previous request outstanding.
+
+__Test #1 - Regression 1 & 2__
+
+TAO249_ServerRequest_Interceptor::receive_request (24807|3074381504) called for method: throw_exception ... client retention id is: 1
+Client catches a MyException, as expected. No problem !
+TAO249_ServerRequest_Interceptor::receive_request (24807|3074381504) called for method: call_me_back ... client retention id is: 1
+Test Failed - REGRESSION !!! Same client retention id has been used for TWO consecutive independent invocations!!
+TAO249_ServerRequest_Interceptor::receive_request (24807|3074381504) called for method: check_request_id ... client retention id is: 1
+Test Failed - REGRESSION !!! Same client retention id has been used for TWO consecutive independent invocations!!
+TAO249_ServerRequest_Interceptor::receive_request (24807|3074381504) called for method: shutdown ... client retention id is: 2
+(24807|3074381504) server - event loop finished
+Error: REGRESSION identified!!!
+ERROR: client returned 1
+
+__Test #1 - Successful result__
+
+E:\doc_cvs\ACE_wrappers\TAO\orbsvcs\tests\tao249_regression>run_test.pl
+TAO249_ServerRequest_Interceptor::receive_request (2844|1244) called for method: throw_exception ... client retention id is: 1
+Client catches a MyException, as expected. No problem !
+TAO249_ServerRequest_Interceptor::receive_request (2844|1244) called for method: call_me_back ... client retention id is: 2
+TAO249_ServerRequest_Interceptor::receive_request (2844|1244) called for method: check_request_id ... client retention id is: 3
+TAO249_ServerRequest_Interceptor::receive_request (2844|1244) called for method: shutdown ... client retention id is: 4
+(2844|1244) server - event loop finished
+Test passed !!!
+
+Test #2 checks that 4 conditions are met:
+1/ That the conversion from ACE_Time_Value to TimeT used in the calculation of the expiration time is done correctly.
+2/ That the correct offset has been applied to convert from posix to gregorian time.
+3/ That the client reuses the same original expiration time on all retries of the same request.
+4/ That the client stops retrying a request once the expiration time has passed.
+
+__Test #2 - Regression 1__
+
+Test Failed - REGRESSION !!! Expiration time is garbage - it is after 2358 A.D.!!
+Expiration time: 18446744072261958952
+2358 A.D. : 244385856000000000
+Error: REGRESSION identified by server 0. Test Failed !!
+Error: REGRESSION identified!!!
+ERROR: client returned 1
+
+__Test #2 - Regression 2__
+
+Test Failed - REGRESSION !!! Expiration time is in wrong format - it is before 1970 A.D. !!
+Expiration time: 11301710711718750
+1970 A.D. : 122192928000000000
+Error: REGRESSION identified by server 0. Test Failed !!
+Error: REGRESSION identified!!!
+ERROR: client returned 1
+
+__Test #2 - Regression 3__
+
+abnormal program termination
+Test Failed - REGRESSION !!! Different expiration times used on consecutive retries of the same op!!
+Previous expiration: 133494646145937500
+Current expiration : 133494646183906250
+Error: REGRESSION identified by server 1. Test Failed !!
+Error: REGRESSION identified!!!
+ERROR: client returned 1
+
+__Test #2 - Regression 4__
+
+abnormal program termination
+...
+abnormal program termination
+Test Failed - REGRESSION !!! Client ORB is still retrying after the expiration time!!
+Expiration time : 133494661968437500
+Previous attempt : 133494661990000000
+Time now : 133494662015156250
+Error: REGRESSION identified by server 2. Test Failed !!
+Error: REGRESSION identified!!!
+ERROR: client returned 1
+
+__Test #2 - Successful result:__
+
+abnormal program termination
+
+abnormal program termination
+(4084|3584) EXCEPTION, Client caught transport exception, as expected. No problem !
+
+system exception, ID 'IDL:omg.org/CORBA/COMM_FAILURE:1.0' TAO exception, minor code = 6 (failed to recv request response; ENOENT), completed = MAYBE
+
+Test passed !!!
diff --git a/TAO/orbsvcs/tests/Bug_2285_Regression/ServerORBInitializer.cpp b/TAO/orbsvcs/tests/Bug_2285_Regression/ServerORBInitializer.cpp
new file mode 100644
index 00000000000..e371cd8c9be
--- /dev/null
+++ b/TAO/orbsvcs/tests/Bug_2285_Regression/ServerORBInitializer.cpp
@@ -0,0 +1,52 @@
+// -*- C++ -*-
+//
+// $Id$
+
+#include "ServerORBInitializer.h"
+#include "ServerRequest_Interceptor.h"
+#include "tao/ORB_Constants.h"
+#include "tao/Exception.h"
+
+
+void
+Server_ORBInitializer::pre_init (
+ PortableInterceptor::ORBInitInfo_ptr
+ ACE_ENV_ARG_DECL_NOT_USED)
+ ACE_THROW_SPEC ((CORBA::SystemException))
+{
+
+}
+
+void
+Server_ORBInitializer::post_init (
+ PortableInterceptor::ORBInitInfo_ptr info
+ ACE_ENV_ARG_DECL)
+ ACE_THROW_SPEC ((CORBA::SystemException))
+{
+ this->register_server_request_interceptors (info
+ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK;
+}
+
+void
+Server_ORBInitializer::register_server_request_interceptors (
+ PortableInterceptor::ORBInitInfo_ptr info
+ ACE_ENV_ARG_DECL)
+ ACE_THROW_SPEC ((CORBA::SystemException))
+{
+ PortableInterceptor::ServerRequestInterceptor_ptr sri =
+ PortableInterceptor::ServerRequestInterceptor::_nil ();
+
+ ACE_NEW_THROW_EX (sri,
+ TAO249_ServerRequest_Interceptor,
+ CORBA::NO_MEMORY ());
+
+ PortableInterceptor::ServerRequestInterceptor_var
+ server_interceptor = sri;
+
+ info->add_server_request_interceptor (server_interceptor.in ()
+ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK;
+}
+
+
diff --git a/TAO/orbsvcs/tests/Bug_2285_Regression/ServerORBInitializer.h b/TAO/orbsvcs/tests/Bug_2285_Regression/ServerORBInitializer.h
new file mode 100644
index 00000000000..d7ca298b858
--- /dev/null
+++ b/TAO/orbsvcs/tests/Bug_2285_Regression/ServerORBInitializer.h
@@ -0,0 +1,51 @@
+// -*- C++ -*-
+
+//=============================================================================
+/**
+ * $Id$
+ */
+//=============================================================================
+#ifndef TAO249_SERVER_ORBINITIALIZER_H
+#define TAO249_SERVER_ORBINITIALIZER_H
+
+#include /**/ "ace/pre.h"
+
+#include "tao/PortableInterceptorC.h"
+#include "tao/PI_Server/PI_Server_includeC.h"
+#include "tao/PI/PI.h"
+
+#if !defined (ACE_LACKS_PRAGMA_ONCE)
+# pragma once
+#endif /* ACE_LACKS_PRAGMA_ONCE */
+
+#include "tao/LocalObject.h"
+
+/// RTCORBA ORB initializer.
+class Server_ORBInitializer :
+ public virtual PortableInterceptor::ORBInitializer,
+ public virtual TAO_Local_RefCounted_Object
+{
+public:
+
+ virtual void pre_init (PortableInterceptor::ORBInitInfo_ptr info
+ ACE_ENV_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+ virtual void post_init (PortableInterceptor::ORBInitInfo_ptr info
+ ACE_ENV_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+private:
+
+ /// Register the necessary interceptors.
+ void register_server_request_interceptors (
+ PortableInterceptor::ORBInitInfo_ptr info
+ ACE_ENV_ARG_DECL)
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+};
+
+#include /**/ "ace/post.h"
+
+#endif /* TAO249_SERVER_ORBINITIALIZER_H */
+
diff --git a/TAO/orbsvcs/tests/Bug_2285_Regression/ServerORBInitializer2.cpp b/TAO/orbsvcs/tests/Bug_2285_Regression/ServerORBInitializer2.cpp
new file mode 100644
index 00000000000..f7a7b408be7
--- /dev/null
+++ b/TAO/orbsvcs/tests/Bug_2285_Regression/ServerORBInitializer2.cpp
@@ -0,0 +1,52 @@
+// -*- C++ -*-
+//
+// $Id$
+
+#include "ServerORBInitializer2.h"
+#include "ServerRequest_Interceptor2.h"
+#include "tao/ORB_Constants.h"
+#include "tao/Exception.h"
+
+
+void
+Server_ORBInitializer2::pre_init (
+ PortableInterceptor::ORBInitInfo_ptr
+ ACE_ENV_ARG_DECL_NOT_USED)
+ ACE_THROW_SPEC ((CORBA::SystemException))
+{
+
+}
+
+void
+Server_ORBInitializer2::post_init (
+ PortableInterceptor::ORBInitInfo_ptr info
+ ACE_ENV_ARG_DECL)
+ ACE_THROW_SPEC ((CORBA::SystemException))
+{
+ this->register_server_request_interceptors (info
+ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK;
+}
+
+void
+Server_ORBInitializer2::register_server_request_interceptors (
+ PortableInterceptor::ORBInitInfo_ptr info
+ ACE_ENV_ARG_DECL)
+ ACE_THROW_SPEC ((CORBA::SystemException))
+{
+ PortableInterceptor::ServerRequestInterceptor_ptr sri =
+ PortableInterceptor::ServerRequestInterceptor::_nil ();
+
+ ACE_NEW_THROW_EX (sri,
+ TAO249_ServerRequest_Interceptor2,
+ CORBA::NO_MEMORY ());
+
+ PortableInterceptor::ServerRequestInterceptor_var
+ server_interceptor = sri;
+
+ info->add_server_request_interceptor (server_interceptor.in ()
+ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK;
+}
+
+
diff --git a/TAO/orbsvcs/tests/Bug_2285_Regression/ServerORBInitializer2.h b/TAO/orbsvcs/tests/Bug_2285_Regression/ServerORBInitializer2.h
new file mode 100644
index 00000000000..a98a94523be
--- /dev/null
+++ b/TAO/orbsvcs/tests/Bug_2285_Regression/ServerORBInitializer2.h
@@ -0,0 +1,51 @@
+// -*- C++ -*-
+
+//=============================================================================
+/**
+ * $Id$
+ */
+//=============================================================================
+#ifndef TAO249_SERVER_ORBINITIALIZER2_H
+#define TAO249_SERVER_ORBINITIALIZER2_H
+
+#include /**/ "ace/pre.h"
+
+#include "tao/PortableInterceptorC.h"
+#include "tao/PI_Server/PI_Server_includeC.h"
+#include "tao/PI/PI.h"
+
+#if !defined (ACE_LACKS_PRAGMA_ONCE)
+# pragma once
+#endif /* ACE_LACKS_PRAGMA_ONCE */
+
+#include "tao/LocalObject.h"
+
+/// RTCORBA ORB initializer.
+class Server_ORBInitializer2 :
+ public virtual PortableInterceptor::ORBInitializer,
+ public virtual TAO_Local_RefCounted_Object
+{
+public:
+
+ virtual void pre_init (PortableInterceptor::ORBInitInfo_ptr info
+ ACE_ENV_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+ virtual void post_init (PortableInterceptor::ORBInitInfo_ptr info
+ ACE_ENV_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+private:
+
+ /// Register the necessary interceptors.
+ void register_server_request_interceptors (
+ PortableInterceptor::ORBInitInfo_ptr info
+ ACE_ENV_ARG_DECL)
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+};
+
+#include /**/ "ace/post.h"
+
+#endif /* TAO249_SERVER_ORBINITIALIZER2_H */
+
diff --git a/TAO/orbsvcs/tests/Bug_2285_Regression/ServerRequest_Interceptor.cpp b/TAO/orbsvcs/tests/Bug_2285_Regression/ServerRequest_Interceptor.cpp
new file mode 100644
index 00000000000..3ace3eaea71
--- /dev/null
+++ b/TAO/orbsvcs/tests/Bug_2285_Regression/ServerRequest_Interceptor.cpp
@@ -0,0 +1,145 @@
+// -*- C++ -*-
+
+#include "ServerRequest_Interceptor.h"
+#include "orbsvcs/FT_CORBA_ORBC.h"
+#include "tao/IOP_IORC.h"
+#include "tao/ORB_Constants.h"
+#include "tao/AnyTypeCode/DynamicC.h"
+#include "tao/AnyTypeCode/TypeCode.h"
+#include "tao/CDR.h"
+#include "ace/Log_Msg.h"
+#include "ace/OS_NS_string.h"
+#include "Hello.h"
+
+ACE_RCSID (FaultTolerance,
+ TAO249_ServerRequest_Interceptor,
+ "$Id$")
+
+TAO249_ServerRequest_Interceptor::TAO249_ServerRequest_Interceptor (void)
+: orb_ (0),
+ client_id_ (0)
+{
+}
+
+TAO249_ServerRequest_Interceptor::~TAO249_ServerRequest_Interceptor (void)
+{
+}
+
+
+char *
+TAO249_ServerRequest_Interceptor::name (ACE_ENV_SINGLE_ARG_DECL_NOT_USED)
+ACE_THROW_SPEC ((CORBA::SystemException))
+{
+ return CORBA::string_dup ("TAO_TAO249_ServerRequest_Interceptor");
+}
+
+void
+TAO249_ServerRequest_Interceptor::destroy (ACE_ENV_SINGLE_ARG_DECL_NOT_USED)
+ACE_THROW_SPEC ((CORBA::SystemException))
+{
+}
+
+void
+TAO249_ServerRequest_Interceptor::receive_request_service_contexts (
+ PortableInterceptor::ServerRequestInfo_ptr
+ ACE_ENV_ARG_DECL)
+ACE_THROW_SPEC ((CORBA::SystemException,
+ PortableInterceptor::ForwardRequest))
+{
+}
+
+void
+TAO249_ServerRequest_Interceptor::receive_request (
+ PortableInterceptor::ServerRequestInfo_ptr ri
+ ACE_ENV_ARG_DECL_NOT_USED)
+ACE_THROW_SPEC ((CORBA::SystemException,
+ PortableInterceptor::ForwardRequest))
+{
+ CORBA::String_var op = ri->operation (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK;
+ ACE_TRY
+ {
+ IOP::ServiceContext_var sc =
+ ri->get_request_service_context (IOP::FT_REQUEST
+ ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ TAO_InputCDR cdr (reinterpret_cast <const char*>
+ (sc->context_data.get_buffer ()),
+ sc->context_data.length ());
+
+ CORBA::Boolean byte_order;
+
+ if ((cdr >> ACE_InputCDR::to_boolean (byte_order)) == 0)
+ {
+ ACE_THROW (CORBA::BAD_PARAM (CORBA::OMGVMCID | 28,
+ CORBA::COMPLETED_NO));
+ }
+ ACE_TRY_CHECK;
+
+ cdr.reset_byte_order (static_cast <int> (byte_order));
+
+ FT::FTRequestServiceContext ftrsc;
+
+ if ((cdr >> ftrsc) == 0)
+ ACE_THROW (CORBA::BAD_PARAM (CORBA::OMGVMCID | 28,
+ CORBA::COMPLETED_NO));
+ ACE_TRY_CHECK;
+
+ ACE_DEBUG ((LM_DEBUG, "TAO249_ServerRequest_Interceptor::receive_request (%P|%t) called for method: %s ... client retention id is: %d\n", op.in (), ftrsc.retention_id ));
+
+ if (client_id_ == 0)
+ {
+ client_id_ = ftrsc.retention_id;
+ }
+ else
+ {
+ if (client_id_ != ftrsc.retention_id)
+ {
+ client_id_ = ftrsc.retention_id;
+ }
+ else
+ {
+ ACE_DEBUG ((LM_ERROR, "Test Failed - REGRESSION !!! Same client retention id has been used for TWO consecutive independent invocations!!\n"));
+ Hello::ids_differ_ = 0;
+ }
+ }
+ }
+ACE_CATCHANY
+ {
+ ACE_DEBUG ((LM_ERROR, "Unexpected (non regression) error - test failed\n"));
+ ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION,
+ "Exception in TAO249_ServerRequest_Interceptor::receive_request \n");
+ ACE_RE_THROW;
+ }
+ACE_ENDTRY;
+ACE_CHECK;
+
+}
+
+void
+TAO249_ServerRequest_Interceptor::send_reply (
+ PortableInterceptor::ServerRequestInfo_ptr
+ ACE_ENV_ARG_DECL_NOT_USED)
+ACE_THROW_SPEC ((CORBA::SystemException))
+{
+}
+
+void
+TAO249_ServerRequest_Interceptor::send_exception (
+ PortableInterceptor::ServerRequestInfo_ptr
+ ACE_ENV_ARG_DECL_NOT_USED)
+ACE_THROW_SPEC ((CORBA::SystemException,
+ PortableInterceptor::ForwardRequest))
+{
+}
+
+void
+TAO249_ServerRequest_Interceptor::send_other (
+ PortableInterceptor::ServerRequestInfo_ptr
+ ACE_ENV_ARG_DECL_NOT_USED)
+ACE_THROW_SPEC ((CORBA::SystemException,
+ PortableInterceptor::ForwardRequest))
+{
+}
+
diff --git a/TAO/orbsvcs/tests/Bug_2285_Regression/ServerRequest_Interceptor.h b/TAO/orbsvcs/tests/Bug_2285_Regression/ServerRequest_Interceptor.h
new file mode 100644
index 00000000000..fdccf530614
--- /dev/null
+++ b/TAO/orbsvcs/tests/Bug_2285_Regression/ServerRequest_Interceptor.h
@@ -0,0 +1,91 @@
+// -*- C++ -*-
+
+//=============================================================================
+/**
+ * $Id$
+ */
+//=============================================================================
+
+#ifndef TAO249_SERVER_REQUEST_INTERCEPTOR_H
+#define TAO249_SERVER_REQUEST_INTERCEPTOR_H
+
+#include "ace/config-all.h"
+
+#if !defined (ACE_LACKS_PRAGMA_ONCE)
+# pragma once
+#endif /* ACE_LACKS_PRAGMA_ONCE */
+#include "tao/LocalObject.h"
+#include "tao/PortableInterceptorC.h"
+#include "tao/ORB.h"
+#include "tao/PI/PI.h"
+#include "tao/PI_Server/PI_Server.h"
+
+/**
+* $Id$
+*/
+class TAO249_ServerRequest_Interceptor
+: public virtual PortableInterceptor::ServerRequestInterceptor,
+ public virtual TAO_Local_RefCounted_Object
+{
+public:
+
+/// Constructor.
+TAO249_ServerRequest_Interceptor (void);
+
+/// Destructor.
+~TAO249_ServerRequest_Interceptor (void);
+
+/**
+ * @name Methods Required by the Server Request Interceptor
+ * Interface
+ *
+ * These are methods that must be implemented since they are pure
+ * virtual in the abstract base class. They are the canonical
+ * methods required for all server request interceptors.
+ */
+//@{
+/// Return the name of this ServerRequestinterceptor.
+virtual char * name (ACE_ENV_SINGLE_ARG_DECL)
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+virtual void destroy (ACE_ENV_SINGLE_ARG_DECL)
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+virtual void receive_request_service_contexts (
+ PortableInterceptor::ServerRequestInfo_ptr ri
+ ACE_ENV_ARG_DECL)
+ACE_THROW_SPEC ((CORBA::SystemException,
+ PortableInterceptor::ForwardRequest));
+
+virtual void receive_request (
+ PortableInterceptor::ServerRequestInfo_ptr ri
+ ACE_ENV_ARG_DECL)
+ ACE_THROW_SPEC ((CORBA::SystemException,
+ PortableInterceptor::ForwardRequest));
+
+virtual void send_reply (
+ PortableInterceptor::ServerRequestInfo_ptr ri
+ ACE_ENV_ARG_DECL)
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+virtual void send_exception (
+ PortableInterceptor::ServerRequestInfo_ptr ri
+ ACE_ENV_ARG_DECL)
+ ACE_THROW_SPEC ((CORBA::SystemException,
+ PortableInterceptor::ForwardRequest));
+
+virtual void send_other (
+ PortableInterceptor::ServerRequestInfo_ptr ri
+ ACE_ENV_ARG_DECL)
+ ACE_THROW_SPEC ((CORBA::SystemException,
+ PortableInterceptor::ForwardRequest));
+//@}
+private:
+
+CORBA::ORB_var orb_;
+
+CORBA:: Long client_id_;
+};
+
+#endif /* TAO249_SERVER_REQUEST_INTERCEPTOR_H */
+
diff --git a/TAO/orbsvcs/tests/Bug_2285_Regression/ServerRequest_Interceptor2.cpp b/TAO/orbsvcs/tests/Bug_2285_Regression/ServerRequest_Interceptor2.cpp
new file mode 100644
index 00000000000..cc63dbf287e
--- /dev/null
+++ b/TAO/orbsvcs/tests/Bug_2285_Regression/ServerRequest_Interceptor2.cpp
@@ -0,0 +1,240 @@
+// -*- C++ -*-
+
+#include "ServerRequest_Interceptor2.h"
+#include "orbsvcs/FT_CORBA_ORBC.h"
+#include "tao/IOP_IORC.h"
+#include "tao/ORB_Constants.h"
+#include "tao/AnyTypeCode/DynamicC.h"
+#include "tao/AnyTypeCode/TypeCode.h"
+#include "tao/CDR.h"
+#include "ace/Log_Msg.h"
+#include "ace/OS_NS_string.h"
+#include "ace/OS_NS_stdio.h"
+#include "ace/OS_NS_unistd.h"
+#include "Hello.h"
+#include "ace/OS_NS_sys_time.h"
+
+ACE_RCSID (FaultTolerance,
+ TAO249_ServerRequest_Interceptor2,
+ "$Id$")
+
+TAO249_ServerRequest_Interceptor2::TAO249_ServerRequest_Interceptor2 (void)
+: orb_ (0),
+ client_id_ (0)
+{
+}
+
+TAO249_ServerRequest_Interceptor2::~TAO249_ServerRequest_Interceptor2 (void)
+{
+}
+
+
+char *
+TAO249_ServerRequest_Interceptor2::name (ACE_ENV_SINGLE_ARG_DECL_NOT_USED)
+ACE_THROW_SPEC ((CORBA::SystemException))
+{
+ return CORBA::string_dup ("TAO_TAO249_ServerRequest_Interceptor2");
+}
+
+void
+TAO249_ServerRequest_Interceptor2::destroy (ACE_ENV_SINGLE_ARG_DECL_NOT_USED)
+ACE_THROW_SPEC ((CORBA::SystemException))
+{
+}
+
+void
+TAO249_ServerRequest_Interceptor2::receive_request_service_contexts (
+ PortableInterceptor::ServerRequestInfo_ptr
+ ACE_ENV_ARG_DECL)
+ACE_THROW_SPEC ((CORBA::SystemException,
+ PortableInterceptor::ForwardRequest))
+{
+}
+
+void
+TAO249_ServerRequest_Interceptor2::receive_request (
+ PortableInterceptor::ServerRequestInfo_ptr ri
+ ACE_ENV_ARG_DECL_NOT_USED)
+ACE_THROW_SPEC ((CORBA::SystemException,
+ PortableInterceptor::ForwardRequest))
+{
+ CORBA::String_var op = ri->operation (ACE_ENV_SINGLE_ARG_PARAMETER);
+
+ if (ACE_OS::strcmp (op.in (), "drop_down_dead"))
+ {
+ // bail if not the op we are interested in -
+ // avoid excess spurious error clutter when client calls ::shutdown
+ return;
+ }
+
+ ACE_CHECK;
+ ACE_TRY
+ {
+ IOP::ServiceContext_var sc =
+ ri->get_request_service_context (IOP::FT_REQUEST
+ ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ TAO_InputCDR cdr (reinterpret_cast <const char*>
+ (sc->context_data.get_buffer ()
+ ),
+ sc->context_data.length ());
+
+ CORBA::Boolean byte_order;
+
+ if ((cdr >> ACE_InputCDR::to_boolean (byte_order)) == 0)
+ {
+ ACE_THROW (CORBA::BAD_PARAM (CORBA::OMGVMCID | 28,
+ CORBA::COMPLETED_NO));
+ }
+ ACE_TRY_CHECK;
+
+ cdr.reset_byte_order (static_cast <int>(byte_order));
+
+ FT::FTRequestServiceContext ftrsc;
+
+ if ((cdr >> ftrsc) == 0)
+ ACE_THROW (CORBA::BAD_PARAM (CORBA::OMGVMCID | 28,
+ CORBA::COMPLETED_NO));
+ ACE_TRY_CHECK;
+
+ FILE* last_exp_time_file = ACE_OS::fopen ("last_expiration_time", "r+");
+ TimeBase::TimeT last_exp_time = 0;
+
+ if (!last_exp_time_file)
+ {
+ // file does not exist ... we're the first server
+ // create new file for the expiration time
+ last_exp_time_file = ACE_OS::fopen ("last_expiration_time", "w+");
+ last_exp_time = ftrsc.expiration_time;
+ }
+ else
+ {
+ // We're a subsequent server... read in the previous server's expiration time
+ ACE_OS::fread (&last_exp_time,
+ 1,
+ sizeof (TimeBase::TimeT),
+ last_exp_time_file);
+ ACE_OS::sleep (1);
+ }
+
+ if (last_exp_time != ftrsc.expiration_time)
+ {
+ ACE_DEBUG ((LM_DEBUG, "Test Failed - REGRESSION !!! Different expiration times used on consecutive retries of the same op!!\n"));
+ ACE_DEBUG ((LM_DEBUG, ACE_TEXT("Previous expiration: %Q\n"), last_exp_time));
+ ACE_DEBUG ((LM_DEBUG, ACE_TEXT("Current expiration : %Q\n"), ftrsc.expiration_time));
+ return;
+ }
+
+
+ // This is the offset from UTC to posix - a value less than than this will
+ // indicate posix is (mistakenly) being used
+ TimeBase::TimeT the_seventies = ACE_UINT64_LITERAL (0x1B21DD213814000);
+
+ // @warning - this test is fragile. It will break in 2358 A.D. :-)
+ if (last_exp_time <= the_seventies)
+ {
+ ACE_DEBUG ((LM_ERROR, "Test Failed - REGRESSION !!! Expiration time is in wrong format - it is before 1970 A.D. !!\n"));
+ ACE_DEBUG ((LM_DEBUG, "Expiration time: %Q\n", last_exp_time));
+ ACE_DEBUG ((LM_DEBUG, "1970 A.D. : %Q\n", the_seventies));
+ return;
+ }
+ else if ( last_exp_time > (the_seventies * 2))
+ {
+ ACE_DEBUG ((LM_ERROR, "Test Failed - REGRESSION !!! Expiration time is garbage - it is after 2358 A.D. !!\n"));
+ ACE_DEBUG ((LM_DEBUG, "Expiration time: %Q\n", last_exp_time));
+ ACE_DEBUG ((LM_DEBUG, "2358 A.D. : %Q\n", (the_seventies * 2)));
+ return;
+ }
+
+ TimeBase::TimeT now = get_now ();
+
+ if (now > last_exp_time)
+ {
+ // We have passed the exp time... there should be no more retries received after this point...
+ FILE* no_more_retries = ACE_OS::fopen ("no_more_retries", "r+");
+ if (no_more_retries)
+ {
+ TimeBase::TimeT last_expired_attempt = 0;
+ ACE_OS::fread (&last_expired_attempt, 1, sizeof (TimeBase::TimeT), no_more_retries);
+ ACE_OS::fclose (no_more_retries);
+
+ // There has already been an attempt after the last server passed the expiration time
+ ACE_DEBUG ((LM_ERROR, "Test Failed - REGRESSION !!! Client ORB is still retrying after the expiration time!!\n"));
+ ACE_DEBUG ((LM_DEBUG, ACE_TEXT("Expiration time : %Q\n"), last_exp_time));
+ ACE_DEBUG ((LM_DEBUG, ACE_TEXT("Previous attempt : %Q\n"), last_expired_attempt));
+ ACE_DEBUG ((LM_DEBUG, ACE_TEXT("Time now : %Q\n"), now));
+ return;
+ }
+ else
+ {
+ // Tell the next server we've passed the point of no return
+ no_more_retries = ACE_OS::fopen ("no_more_retries", "w+");
+ ACE_OS::fwrite (&now, 1, sizeof (TimeBase::TimeT), no_more_retries);
+ ACE_OS::fflush (no_more_retries);
+ ACE_OS::fclose (no_more_retries);
+ }
+ }
+
+ // Everthing is fine so far. Write out the expiration time for the next server to check
+ ACE_OS::fwrite (&ftrsc.expiration_time, 1, sizeof (TimeBase::TimeT), last_exp_time_file);
+ ACE_OS::fflush (last_exp_time_file);
+ ACE_OS::fclose (last_exp_time_file);
+
+ // Goodbye cruel world !!
+ ACE_OS::abort ();
+ }
+ACE_CATCHANY
+ {
+ ACE_DEBUG ((LM_ERROR, "Unexpected (non regression problem) error - test failed\n"));
+ ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION,
+ "Exception in TAO249_ServerRequest_Interceptor2::receive_request \n");
+ ACE_RE_THROW;
+ }
+ACE_ENDTRY;
+ACE_CHECK;
+
+}
+
+TimeBase::TimeT
+TAO249_ServerRequest_Interceptor2::get_now (void)
+{
+ // 1582...
+ const TimeBase::TimeT timeOffset = ACE_UINT64_LITERAL (0x1B21DD213814000);
+
+ // Now in posix
+ ACE_Time_Value time_value = ACE_OS::gettimeofday ();
+
+ TimeBase::TimeT sec_part = time_value.sec ();
+ sec_part = sec_part * 10000000;
+ TimeBase::TimeT usec_part = time_value.usec ();
+ usec_part = usec_part * 10;
+ return (sec_part + usec_part + timeOffset);
+}
+
+void
+TAO249_ServerRequest_Interceptor2::send_reply (
+ PortableInterceptor::ServerRequestInfo_ptr
+ ACE_ENV_ARG_DECL_NOT_USED)
+ACE_THROW_SPEC ((CORBA::SystemException))
+{
+}
+
+void
+TAO249_ServerRequest_Interceptor2::send_exception (
+ PortableInterceptor::ServerRequestInfo_ptr
+ ACE_ENV_ARG_DECL_NOT_USED)
+ACE_THROW_SPEC ((CORBA::SystemException,
+ PortableInterceptor::ForwardRequest))
+{
+}
+
+void
+TAO249_ServerRequest_Interceptor2::send_other (
+ PortableInterceptor::ServerRequestInfo_ptr
+ ACE_ENV_ARG_DECL_NOT_USED)
+ACE_THROW_SPEC ((CORBA::SystemException,
+ PortableInterceptor::ForwardRequest))
+{
+}
+
diff --git a/TAO/orbsvcs/tests/Bug_2285_Regression/ServerRequest_Interceptor2.h b/TAO/orbsvcs/tests/Bug_2285_Regression/ServerRequest_Interceptor2.h
new file mode 100644
index 00000000000..74a92c7e0ed
--- /dev/null
+++ b/TAO/orbsvcs/tests/Bug_2285_Regression/ServerRequest_Interceptor2.h
@@ -0,0 +1,96 @@
+// -*- C++ -*-
+
+//=============================================================================
+/**
+ * $Id$
+ */
+//=============================================================================
+
+#ifndef TAO249_SERVER_REQUEST_INTERCEPTOR2_H
+#define TAO249_SERVER_REQUEST_INTERCEPTOR2_H
+
+#include "ace/config-all.h"
+
+#if !defined (ACE_LACKS_PRAGMA_ONCE)
+# pragma once
+#endif /* ACE_LACKS_PRAGMA_ONCE */
+#include "tao/LocalObject.h"
+#include "tao/PortableInterceptorC.h"
+#include "tao/ORB.h"
+#include "tao/PI/PI.h"
+#include "tao/PI_Server/PI_Server.h"
+#include "tao/TimeBaseC.h"
+
+/**
+* $Id$
+*/
+class TAO249_ServerRequest_Interceptor2
+: public virtual PortableInterceptor::ServerRequestInterceptor,
+ public virtual TAO_Local_RefCounted_Object
+{
+public:
+
+/// Constructor.
+TAO249_ServerRequest_Interceptor2 (void);
+
+/// Destructor.
+~TAO249_ServerRequest_Interceptor2 (void);
+
+/**
+ * @name Methods Required by the Server Request Interceptor
+ * Interface
+ *
+ * These are methods that must be implemented since they are pure
+ * virtual in the abstract base class. They are the canonical
+ * methods required for all server request interceptors.
+ */
+//@{
+/// Return the name of this ServerRequestinterceptor.
+virtual char * name (ACE_ENV_SINGLE_ARG_DECL)
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+virtual void destroy (ACE_ENV_SINGLE_ARG_DECL)
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+virtual void receive_request_service_contexts (
+ PortableInterceptor::ServerRequestInfo_ptr ri
+ ACE_ENV_ARG_DECL)
+ACE_THROW_SPEC ((CORBA::SystemException,
+ PortableInterceptor::ForwardRequest));
+
+virtual void receive_request (
+ PortableInterceptor::ServerRequestInfo_ptr ri
+ ACE_ENV_ARG_DECL)
+ ACE_THROW_SPEC ((CORBA::SystemException,
+ PortableInterceptor::ForwardRequest));
+
+virtual void send_reply (
+ PortableInterceptor::ServerRequestInfo_ptr ri
+ ACE_ENV_ARG_DECL)
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+virtual void send_exception (
+ PortableInterceptor::ServerRequestInfo_ptr ri
+ ACE_ENV_ARG_DECL)
+ ACE_THROW_SPEC ((CORBA::SystemException,
+ PortableInterceptor::ForwardRequest));
+
+virtual void send_other (
+ PortableInterceptor::ServerRequestInfo_ptr ri
+ ACE_ENV_ARG_DECL)
+ ACE_THROW_SPEC ((CORBA::SystemException,
+ PortableInterceptor::ForwardRequest));
+//@}
+
+protected:
+ TimeBase::TimeT get_now (void);
+
+private:
+
+CORBA::ORB_var orb_;
+
+CORBA::Long client_id_;
+};
+
+#endif /* TAO249_SERVER_REQUEST_INTERCEPTOR2_H */
+
diff --git a/TAO/orbsvcs/tests/Bug_2285_Regression/Test.idl b/TAO/orbsvcs/tests/Bug_2285_Regression/Test.idl
new file mode 100644
index 00000000000..00cc73c174e
--- /dev/null
+++ b/TAO/orbsvcs/tests/Bug_2285_Regression/Test.idl
@@ -0,0 +1,43 @@
+//
+// $Id$
+//
+
+/// Put the interfaces in a module, to avoid global namespace pollution
+module Test
+{
+ exception MyException {};
+ /// A very simple interface
+ interface Hello
+ {
+ /// A method to shutdown the ORB
+ /**
+ * This method is used to simplify the test shutdown process
+ */
+ oneway void shutdown ();
+
+ // Methods for first test
+
+ // The client first calls this to generate a (user) exception
+ // which is handled in the application code
+ void throw_exception () raises (MyException);
+
+ // Starts the nested sequence - client calls...
+ boolean call_me_back (in Hello me);
+
+ // ... then the server calls this back onto the client,
+ // which prompts the client to call...
+ boolean call_back ();
+
+ // ... this ! The server interceptor will have been recording
+ // if any retention ID has been reused in the sequence of invocations
+ // @return true for all different, false otherwise.
+ boolean check_request_id ();
+
+ // Method for second test. Makes the servant perform
+ // a number of checks and then either commit suicide (to prompt a
+ // retry on the next member of the IOGR) or to return
+ // successfully if it has detected a regresssion.
+ // @return the number identifying this servant with teh group
+ unsigned long drop_down_dead ();
+ };
+};
diff --git a/TAO/orbsvcs/tests/Bug_2285_Regression/client.cpp b/TAO/orbsvcs/tests/Bug_2285_Regression/client.cpp
new file mode 100644
index 00000000000..60c37b8dff5
--- /dev/null
+++ b/TAO/orbsvcs/tests/Bug_2285_Regression/client.cpp
@@ -0,0 +1,137 @@
+// $Id$
+
+#include "TestS.h"
+#include "ace/Get_Opt.h"
+#include "orbsvcs/FaultTolerance/FT_ClientService_Activate.h"
+#include "Hello.h"
+
+ACE_RCSID(Hello, client, "$Id$")
+
+const char *ior = "file://test.ior";
+
+int
+parse_args (int argc, char *argv[])
+{
+ ACE_Get_Opt get_opts (argc, argv, "k:");
+ int c;
+
+ while ((c = get_opts ()) != -1)
+ switch (c)
+ {
+ case 'k':
+ ior = get_opts.opt_arg ();
+ break;
+
+ case '?':
+ default:
+ ACE_ERROR_RETURN ((LM_ERROR,
+ "usage: %s "
+ "-k <ior> "
+ "\n",
+ argv [0]),
+ -1);
+ }
+ // Indicates sucessful parsing of the command line
+ return 0;
+}
+
+int
+main (int argc, char *argv[])
+{
+ CORBA::Boolean result = 0;
+ 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 tmp =
+ orb->string_to_object(ior ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ Test::Hello_var hello =
+ Test::Hello::_narrow(tmp.in () ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ if (CORBA::is_nil (hello.in ()))
+ {
+ ACE_ERROR_RETURN ((LM_DEBUG,
+ "Test failed - Not regression - Unexpected Nil Test::Hello reference <%s>\n",
+ ior),
+ 1);
+ }
+
+ CORBA::Object_var poa_object =
+ orb->resolve_initial_references("RootPOA" ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ PortableServer::POA_var root_poa =
+ PortableServer::POA::_narrow (poa_object.in () ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ if (CORBA::is_nil (root_poa.in ()))
+ ACE_ERROR_RETURN ((LM_ERROR,
+ " (%P|%t) Test failed - Not regression - unexpected nil RootPOA\n"),
+ 1);
+
+ 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;
+
+ Hello *hello_impl;
+ ACE_NEW_RETURN (hello_impl,
+ Hello (orb.in (), hello.in ()),
+ 1);
+ PortableServer::ServantBase_var owner_transfer(hello_impl);
+
+ Test::Hello_var me =
+ hello_impl->_this (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ poa_manager->activate (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ ACE_TRY
+ {
+ hello->throw_exception (ACE_ENV_SINGLE_ARG_PARAMETER);
+ }
+ ACE_CATCH (Test::MyException, my_ex)
+ {
+ ACE_UNUSED_ARG (my_ex);
+ ACE_DEBUG ((LM_DEBUG, "Client catches a MyException, as expected. No problem !\n"));
+ }
+ ACE_ENDTRY;
+
+ result = ! hello->call_me_back (me.in () ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ hello->shutdown (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ orb->destroy (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+ }
+ ACE_CATCHANY
+ {
+ ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION,
+ "Test failed (Not regression) because unexpected exception caught:");
+ return 1;
+ }
+ ACE_ENDTRY;
+
+ if (result)
+ {
+ ACE_DEBUG ((LM_ERROR, "Error: REGRESSION identified!!!\n"));
+ }
+ else
+ {
+ ACE_DEBUG ((LM_DEBUG, "Test passed !!!\n"));
+ }
+ return result;
+}
diff --git a/TAO/orbsvcs/tests/Bug_2285_Regression/client2.cpp b/TAO/orbsvcs/tests/Bug_2285_Regression/client2.cpp
new file mode 100644
index 00000000000..682b0d8f86f
--- /dev/null
+++ b/TAO/orbsvcs/tests/Bug_2285_Regression/client2.cpp
@@ -0,0 +1,215 @@
+// $Id$
+
+#include "TestC.h"
+#include "ace/Get_Opt.h"
+#include "orbsvcs/FaultTolerance/FT_ClientService_Activate.h"
+#include "tao/IORManipulation/IORManip_Loader.h"
+#include "orbsvcs/FaultTolerance/FT_IOGR_Property.h"
+
+ACE_RCSID(Hello, client, "$Id$")
+
+//const char *ior = "file://test.ior";
+TAO_IOP::TAO_IOR_Manipulation_var iorm = 0;
+CORBA::ULong number_of_servers = 0;
+
+int
+parse_args (int argc, char *argv[])
+{
+ ACE_Get_Opt get_opts (argc, argv, "k:n:");
+ int c;
+
+ while ((c = get_opts ()) != -1)
+ switch (c)
+ {
+ case 'k':
+ break;
+ case 'n':
+ number_of_servers = ACE_OS::atoi (get_opts.opt_arg ());
+ break;
+ case '?':
+ default:
+ ACE_ERROR_RETURN ((LM_ERROR,
+ "usage: %s "
+ "-k <ior> "
+ "\n",
+ argv [0]),
+ -1);
+ }
+ // Indicates sucessful parsing of the command line
+ return 0;
+}
+
+CORBA::Object_ptr
+make_iogr (const char* domain_id, CORBA::ULongLong group_id, CORBA::ULong group_version, Test::Hello_ptr* refs ACE_ENV_ARG_DECL)
+{
+ FT::TagFTGroupTaggedComponent ft_tag_component;
+ // Create the list
+ TAO_IOP::TAO_IOR_Manipulation::IORList iors (number_of_servers);
+ iors.length(number_of_servers);
+ for (CORBA::ULong i = 0; i < number_of_servers; ++i)
+ {
+ iors [i] = CORBA::Object::_duplicate (refs[i]);
+ }
+
+ CORBA::Object_var new_ref =
+ iorm->merge_iors (iors ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK_RETURN (0);
+
+ // Property values
+
+ // Major and Minor revision numbers
+ ft_tag_component.component_version.major = (CORBA::Octet) 1;
+ ft_tag_component.component_version.minor = (CORBA::Octet) 0;
+
+ // Domain id
+ //const char *id = "iogr_testing";
+ ft_tag_component.group_domain_id = domain_id;
+
+ // Object group id
+ ft_tag_component.object_group_id = group_id;
+
+ // Version
+ ft_tag_component.object_group_ref_version = group_version;
+
+ // Construct the IOGR Property class
+ TAO_FT_IOGR_Property iogr_prop (ft_tag_component);
+
+ // Set the property
+ CORBA::Boolean retval = iorm->set_property (&iogr_prop,
+ new_ref.in ()
+ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK_RETURN (0);
+
+ // Set the primary
+ // See we are setting the second ior as the primary
+ if (retval != 0)
+ {
+ retval = iorm->set_primary (&iogr_prop,
+ refs[0],
+ new_ref.in ()
+ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK_RETURN (0);
+ }
+
+ return new_ref._retn ();
+}
+
+int
+main (int argc, char *argv[])
+{
+ CORBA::Boolean result = 0;
+ 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;
+
+ // Get a ref to the IORManipulation object
+ CORBA::Object_var IORM =
+ orb->resolve_initial_references (TAO_OBJID_IORMANIPULATION,
+ 0
+ ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ // Narrow
+ iorm =
+ TAO_IOP::TAO_IOR_Manipulation::_narrow (IORM.in() ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ Test::Hello_ptr *servers = new Test::Hello_ptr [number_of_servers];
+
+ for (CORBA::ULong i = 0; i < number_of_servers; ++ i)
+ {
+ char buf[4]; // if you run more than 10000 servers then you need your head looking at
+ const char *number = ACE_OS::itoa ((int) i, buf, 10);
+ ACE_CString ior_file ("file://n");
+ const char *ior = ((ior_file += number) += ".ior").c_str ();
+
+ CORBA::Object_var tmp =
+ orb->string_to_object(ior ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ servers[i] =
+ Test::Hello::_narrow(tmp.in () ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ if (CORBA::is_nil (servers[i]))
+ {
+ ACE_ERROR_RETURN ((LM_DEBUG,
+ "Test failed - Not regression - Unexpected Nil Test::Hello reference <%s>\n",
+ ior),
+ 1);
+ }
+ }
+
+ CORBA::Object_var iogr = make_iogr ("Domain_1", 1, 1, servers ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ Test::Hello_var hello_iogr = Test::Hello::_narrow(iogr.in () ACE_ENV_ARG_PARAMETER);
+
+ CORBA::ULong last_server = 0;
+
+ ACE_TRY
+ {
+ last_server = hello_iogr->drop_down_dead (ACE_ENV_SINGLE_ARG_PARAMETER);
+ // If the call 'succeeds' the server has identified a regression.
+ result = 1;
+ ACE_DEBUG ((LM_ERROR, "Error: REGRESSION identified by server %u. Test Failed !!\n", last_server));
+ }
+ ACE_CATCH (CORBA::COMM_FAILURE, my_ex)
+ {
+ ACE_UNUSED_ARG (my_ex);
+ // We can't use the word exception for fear of upsetting the build log parser
+ ACE_DEBUG ((LM_DEBUG, "Client caught one of those things that is normally used to indicate a problem ("
+ "although it doesn't in this case) and which we cannot name because the autobuild "
+ "script will think we have a problem if we do mention the word. No problem !\n"));
+ }
+ ACE_ENDTRY;
+
+ for (CORBA::ULong j = last_server; j < number_of_servers; ++j)
+ {
+ ACE_TRY
+ {
+ servers[j]->shutdown (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+ }
+ ACE_CATCHALL
+ {
+ // Well we tried...
+ }
+ ACE_ENDTRY;
+
+ CORBA::release (servers [j]);
+ }
+
+ for (CORBA::ULong k = 0; k < last_server; ++k)
+ {
+ CORBA::release (servers [k]);
+ }
+
+ delete [] servers;
+
+ orb->destroy (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+ }
+ ACE_CATCHANY
+ {
+ ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION,
+ "Test failed (Not regression) because unexpected exception caught:");
+ return 1;
+ }
+ ACE_ENDTRY;
+
+ if (result)
+ {
+ ACE_DEBUG ((LM_ERROR, "Error: REGRESSION identified!!!\n"));
+ }
+ else
+ {
+ ACE_DEBUG ((LM_DEBUG, "Test passed !!!\n"));
+ }
+ return result;
+}
diff --git a/TAO/orbsvcs/tests/Bug_2285_Regression/run_test.pl b/TAO/orbsvcs/tests/Bug_2285_Regression/run_test.pl
new file mode 100755
index 00000000000..de69f709455
--- /dev/null
+++ b/TAO/orbsvcs/tests/Bug_2285_Regression/run_test.pl
@@ -0,0 +1,49 @@
+eval '(exit $?0)' && eval 'exec perl -S $0 ${1+"$@"}'
+ & eval 'exec perl -S $0 $argv:q'
+ if 0;
+
+# $Id$
+# -*- perl -*-
+
+use lib '../../../../bin';
+use PerlACE::Run_Test;
+
+$status = 0;
+
+$iorfile = PerlACE::LocalFile ("server.ior");
+unlink $iorfile;
+
+if (PerlACE::is_vxworks_test()) {
+ $SV = new PerlACE::ProcessVX ("server", "-o server.ior");
+}
+else {
+ $SV = new PerlACE::Process ("server", "-o $iorfile");
+}
+$CL = new PerlACE::Process ("client", " -k file://$iorfile");
+
+$SV->Spawn ();
+
+if (PerlACE::waitforfile_timed ($iorfile,
+ $PerlACE::wait_interval_for_process_creation) == -1) {
+ print STDERR "ERROR: cannot find file <$iorfile>\n";
+ $SV->Kill (); $SV->TimedWait (1);
+ exit 1;
+}
+
+$client = $CL->SpawnWaitKill (300);
+
+if ($client != 0) {
+ print STDERR "ERROR: client returned $client\n";
+ $status = 1;
+}
+
+$server = $SV->WaitKill (10);
+
+if ($server != 0) {
+ print STDERR "ERROR: server returned $server\n";
+ $status = 1;
+}
+
+unlink $iorfile;
+
+exit $status;
diff --git a/TAO/orbsvcs/tests/Bug_2285_Regression/run_test2.pl b/TAO/orbsvcs/tests/Bug_2285_Regression/run_test2.pl
new file mode 100755
index 00000000000..e96b15a55b2
--- /dev/null
+++ b/TAO/orbsvcs/tests/Bug_2285_Regression/run_test2.pl
@@ -0,0 +1,70 @@
+eval '(exit $?0)' && eval 'exec perl -S $0 ${1+"$@"}'
+ & eval 'exec perl -S $0 $argv:q'
+ if 0;
+
+# $Id$
+# -*- perl -*-
+
+use lib '../../../../bin';
+use PerlACE::Run_Test;
+
+$status = 0;
+$number_of_servers = 5;
+
+@SV;
+
+unlink PerlACE::LocalFile ("last_expiration_time");
+unlink PerlACE::LocalFile ("no_more_retries");
+
+for ($counter = 0; $counter < $number_of_servers; $counter++)
+{
+ unlink PerlACE::LocalFile ("n".$counter.".ior");
+}
+
+for($counter=0; $counter < $number_of_servers; $counter++)
+{
+ if (PerlACE::is_vxworks_test()) {
+ push (@SV, new PerlACE::ProcessVX ("server2", "-n $counter"));
+ }
+ else {
+ push (@SV, new PerlACE::Process ("server2", "-n $counter"));
+ }
+
+ $SV[$counter]->Spawn ();
+}
+
+# Loops are cheap.
+for ($counter2=0; $counter2 < $number_of_servers; $counter2++)
+{
+ if (PerlACE::waitforfile_timed (PerlACE::LocalFile ("n".$counter2.".ior"),
+ $PerlACE::wait_interval_for_process_creation) == -1)
+ {
+ print STDERR "ERROR: cannot find file <n$counter2.ior>\n";
+ for ($kill_count = 0; $kill_count < $number_of_servers; $kill_count++)
+ {
+ $SV[$kill_count]->Kill (); $SV[$kill_count]->TimedWait (1);
+ }
+ exit 1;
+ }
+}
+
+$CL = new PerlACE::Process ("client2", " -n $number_of_servers");
+
+$client = $CL->SpawnWaitKill (300);
+
+if ($client != 0) {
+ print STDERR "ERROR: client returned $client\n";
+ $status = 1;
+}
+
+for ($counter = 0; $counter < $number_of_servers; $counter++)
+{
+ $SV[$counter]->WaitKill (10);
+
+ unlink PerlACE::LocalFile ("n".$counter.".ior");
+}
+
+unlink PerlACE::LocalFile ("last_expiration_time");
+unlink PerlACE::LocalFile ("no_more_retries");
+
+exit $status;
diff --git a/TAO/orbsvcs/tests/Bug_2285_Regression/server.cpp b/TAO/orbsvcs/tests/Bug_2285_Regression/server.cpp
new file mode 100644
index 00000000000..8c27291400e
--- /dev/null
+++ b/TAO/orbsvcs/tests/Bug_2285_Regression/server.cpp
@@ -0,0 +1,241 @@
+// $Id$
+
+#include "Hello.h"
+#include "ace/Get_Opt.h"
+#include "ace/OS_NS_stdio.h"
+#include "tao/IORManipulation/IORManip_Loader.h"
+#include "tao/PortableServer/PortableServer.h"
+#include "orbsvcs/FaultTolerance/FT_IOGR_Property.h"
+#include "ServerORBInitializer.h"
+#include "ServerRequest_Interceptor.h"
+#include "tao/PI/PI.h"
+#include "tao/ORBInitializer_Registry.h"
+
+ACE_RCSID (Hello,
+ server,
+ "$Id$")
+
+const char *ior_output_file = "test.ior";
+TAO_IOP::TAO_IOR_Manipulation_var iorm = 0;
+
+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;
+}
+
+CORBA::Object_ptr
+make_iogr (const char* domain_id, CORBA::ULongLong group_id, CORBA::ULong group_version, CORBA::Object_ptr ref ACE_ENV_ARG_DECL)
+{
+ FT::TagFTGroupTaggedComponent ft_tag_component;
+ // Create the list
+ TAO_IOP::TAO_IOR_Manipulation::IORList iors (1);
+ iors.length(1);
+ iors [0] = CORBA::Object::_duplicate (ref);
+
+ CORBA::Object_var new_ref =
+ iorm->merge_iors (iors ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK_RETURN (0);
+
+ // Property values
+
+ // Major and Minor revision numbers
+ ft_tag_component.component_version.major = (CORBA::Octet) 1;
+ ft_tag_component.component_version.minor = (CORBA::Octet) 0;
+
+ // Domain id
+ //const char *id = "iogr_testing";
+ ft_tag_component.group_domain_id = domain_id;
+
+ // Object group id
+ ft_tag_component.object_group_id = group_id;
+
+ // Version
+ ft_tag_component.object_group_ref_version = group_version;
+
+ // Construct the IOGR Property class
+ TAO_FT_IOGR_Property iogr_prop (ft_tag_component);
+
+ // Set the property
+ CORBA::Boolean retval = iorm->set_property (&iogr_prop,
+ new_ref.in ()
+ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK_RETURN (0);
+
+ // Set the primary
+ // See we are setting the second ior as the primary
+ if (retval != 0)
+ {
+ retval = iorm->set_primary (&iogr_prop,
+ new_ref.in (),
+ new_ref.in ()
+ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK_RETURN (0);
+ }
+
+ return new_ref._retn ();
+}
+
+int
+main (int argc, char *argv[])
+{
+ ACE_TRY_NEW_ENV
+ {
+ Server_ORBInitializer *temp_initializer = 0;
+ ACE_NEW_RETURN (temp_initializer,
+ Server_ORBInitializer,
+ -1); // No exceptions yet!
+ PortableInterceptor::ORBInitializer_var orb_initializer =
+ temp_initializer;
+
+ PortableInterceptor::register_orb_initializer (orb_initializer.in ()
+ ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ 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;
+
+ PortableServer::POA_var root_poa =
+ PortableServer::POA::_narrow (poa_object.in () ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ if (CORBA::is_nil (root_poa.in ()))
+ ACE_ERROR_RETURN ((LM_ERROR,
+ " (%P|%t) Panic: nil RootPOA\n"),
+ 1);
+
+ PortableServer::POAManager_var poa_manager =
+ root_poa->the_POAManager (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ CORBA::PolicyList policies (2);
+ policies.length (2);
+
+ policies[0] =
+ root_poa->create_id_assignment_policy (PortableServer::USER_ID
+ ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK
+
+ policies[1] =
+ root_poa->create_lifespan_policy (PortableServer::PERSISTENT
+ ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ PortableServer::POA_var my_poa =
+ root_poa->create_POA ("my_poa",
+ poa_manager.in (),
+ policies
+ ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ // Creation of the new POA is over, so destroy the Policy_ptr's.
+ for (CORBA::ULong i = 0; i < policies.length (); ++i)
+ {
+ CORBA::Policy_ptr policy = policies[i];
+ policy->destroy (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+ }
+
+
+ if (parse_args (argc, argv) != 0)
+ return 1;
+
+ Hello *hello_impl;
+ ACE_NEW_RETURN (hello_impl,
+ Hello (orb.in (), Test::Hello::_nil ()),
+ 1);
+
+ PortableServer::ObjectId_var server_id =
+ PortableServer::string_to_ObjectId ("server_id");
+
+ my_poa->activate_object_with_id (server_id.in (),
+ hello_impl
+ ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ CORBA::Object_var hello =
+ my_poa->id_to_reference (server_id.in () ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ CORBA::String_var ior =
+ orb->object_to_string (hello.in () ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ // Get a ref to the IORManipulation object
+ CORBA::Object_var IORM =
+ orb->resolve_initial_references (TAO_OBJID_IORMANIPULATION,
+ 0
+ ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ // Narrow
+ iorm =
+ TAO_IOP::TAO_IOR_Manipulation::_narrow (IORM.in() ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ CORBA::Object_var iogr = make_iogr ("Domain_1", 1, 1, orb->string_to_object (ior.in ()) ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ CORBA::String_var iorgr_string =
+ orb->object_to_string (iogr.in () ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ // Output the IOR to the <ior_output_file>
+ 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", iorgr_string.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/orbsvcs/tests/Bug_2285_Regression/server2.cpp b/TAO/orbsvcs/tests/Bug_2285_Regression/server2.cpp
new file mode 100644
index 00000000000..43a23d567ec
--- /dev/null
+++ b/TAO/orbsvcs/tests/Bug_2285_Regression/server2.cpp
@@ -0,0 +1,175 @@
+// $Id$
+
+#include "Hello.h"
+#include "ace/Get_Opt.h"
+#include "ace/OS_NS_stdio.h"
+#include "tao/PortableServer/PortableServer.h"
+#include "ServerORBInitializer2.h"
+#include "ServerRequest_Interceptor2.h"
+#include "tao/PI/PI.h"
+#include "tao/ORBInitializer_Registry.h"
+
+ACE_RCSID (Hello,
+ server,
+ "$Id$")
+
+const char *ior_output_file = "";
+
+CORBA::ULong my_id_number = 0;
+
+int
+parse_args (int argc, char *argv[])
+{
+ ACE_Get_Opt get_opts (argc, argv, "o:n:");
+ int c;
+ ACE_CString ior_file ("n");
+ while ((c = get_opts ()) != -1)
+ switch (c)
+ {
+ case 'o':
+ ior_output_file = get_opts.opt_arg ();
+ break;
+ case 'n':
+ my_id_number = (CORBA::ULong) ACE_OS::atoi (get_opts.opt_arg ());
+ ior_file += get_opts.opt_arg ();
+ ior_file += ".ior";
+ ior_output_file = CORBA::string_dup (ior_file.c_str ());
+ break;
+ case '?':
+ default:
+ ACE_ERROR_RETURN ((LM_ERROR,
+ "usage: %s "
+ "[-o <iorfile>]"
+ "[-i <server_id>]"
+ "\n",
+ argv [0]),
+ -1);
+ }
+ // Indicates sucessful parsing of the command line
+ return 0;
+}
+
+
+
+int
+main (int argc, char *argv[])
+{
+ ACE_TRY_NEW_ENV
+ {
+ Server_ORBInitializer2 *temp_initializer = 0;
+ ACE_NEW_RETURN (temp_initializer,
+ Server_ORBInitializer2,
+ -1); // No exceptions yet!
+ PortableInterceptor::ORBInitializer_var orb_initializer =
+ temp_initializer;
+
+ PortableInterceptor::register_orb_initializer (orb_initializer.in ()
+ ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ 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;
+
+ PortableServer::POA_var root_poa =
+ PortableServer::POA::_narrow (poa_object.in () ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ if (CORBA::is_nil (root_poa.in ()))
+ ACE_ERROR_RETURN ((LM_ERROR,
+ " (%P|%t) Panic: nil RootPOA\n"),
+ 1);
+
+ PortableServer::POAManager_var poa_manager =
+ root_poa->the_POAManager (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ CORBA::PolicyList policies (2);
+ policies.length (2);
+
+ policies[0] =
+ root_poa->create_id_assignment_policy (PortableServer::USER_ID
+ ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK
+
+ policies[1] =
+ root_poa->create_lifespan_policy (PortableServer::PERSISTENT
+ ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ PortableServer::POA_var my_poa =
+ root_poa->create_POA ("my_poa",
+ poa_manager.in (),
+ policies
+ ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ // Creation of the new POA is over, so destroy the Policy_ptr's.
+ for (CORBA::ULong i = 0; i < policies.length (); ++i)
+ {
+ CORBA::Policy_ptr policy = policies[i];
+ policy->destroy (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+ }
+
+
+ if (parse_args (argc, argv) != 0)
+ return 1;
+
+ Hello *hello_impl;
+ ACE_NEW_RETURN (hello_impl,
+ Hello (orb.in (), Test::Hello::_nil (), my_id_number),
+ 1);
+
+ PortableServer::ObjectId_var server_id =
+ PortableServer::string_to_ObjectId ("server_id");
+
+ my_poa->activate_object_with_id (server_id.in (),
+ hello_impl
+ ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ CORBA::Object_var hello =
+ my_poa->id_to_reference (server_id.in () ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ CORBA::String_var ior =
+ orb->object_to_string (hello.in () ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ // Output the IOR to the <ior_output_file>
+ 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\n",
+ 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;
+
+ 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/orbsvcs/tests/Bug_2287_Regression/Bug_2287_Regression.mpc b/TAO/orbsvcs/tests/Bug_2287_Regression/Bug_2287_Regression.mpc
new file mode 100644
index 00000000000..4138843a913
--- /dev/null
+++ b/TAO/orbsvcs/tests/Bug_2287_Regression/Bug_2287_Regression.mpc
@@ -0,0 +1,39 @@
+// -*- MPC -*-
+// $Id$
+
+project(*IDL): taoidldefaults {
+ IDL_Files {
+ Test.idl
+ }
+ custom_only = 1
+}
+
+project(*Client): taoserver, ftclientorb {
+ after += *IDL
+
+ exename = client
+ Source_Files {
+ client.cpp
+ Hello.cpp
+ TestS.cpp
+ TestC.cpp
+ }
+ IDL_Files {
+ }
+}
+
+project (*Server) : taoserver, ftclientorb, pi_server {
+ after += *IDL
+
+ exename = server
+ Source_Files {
+ server.cpp
+ Hello.cpp
+ ServerORBInitializer2.cpp
+ ServerRequest_Interceptor2.cpp
+ TestS.cpp
+ TestC.cpp
+ }
+ IDL_Files {
+ }
+}
diff --git a/TAO/orbsvcs/tests/Bug_2287_Regression/Hello.cpp b/TAO/orbsvcs/tests/Bug_2287_Regression/Hello.cpp
new file mode 100644
index 00000000000..995e0eeed0d
--- /dev/null
+++ b/TAO/orbsvcs/tests/Bug_2287_Regression/Hello.cpp
@@ -0,0 +1,32 @@
+//
+// $Id$
+//
+#include "Hello.h"
+
+ACE_RCSID(Hello, Hello, "$Id$")
+
+Hello::Hello (CORBA::ORB_ptr orb, Test::Hello_ptr, CORBA::ULong)
+ : orb_ (CORBA::ORB::_duplicate (orb))
+{
+}
+
+void
+Hello::shutdown (ACE_ENV_SINGLE_ARG_DECL)
+ ACE_THROW_SPEC ((CORBA::SystemException))
+{
+ this->orb_->shutdown (0 ACE_ENV_ARG_PARAMETER);
+}
+
+void
+Hello::ping (ACE_ENV_SINGLE_ARG_DECL)
+ ACE_THROW_SPEC ((CORBA::SystemException))
+{
+ return;
+}
+
+void
+Hello::throw_location_forward (ACE_ENV_SINGLE_ARG_DECL)
+ ACE_THROW_SPEC ((CORBA::SystemException))
+{
+ return;
+}
diff --git a/TAO/orbsvcs/tests/Bug_2287_Regression/Hello.h b/TAO/orbsvcs/tests/Bug_2287_Regression/Hello.h
new file mode 100644
index 00000000000..c1d688daa82
--- /dev/null
+++ b/TAO/orbsvcs/tests/Bug_2287_Regression/Hello.h
@@ -0,0 +1,45 @@
+//
+// $Id$
+//
+
+#ifndef HELLO_H
+#define HELLO_H
+#include /**/ "ace/pre.h"
+
+#include "TestS.h"
+
+#if defined (_MSC_VER)
+# pragma warning(push)
+# pragma warning (disable:4250)
+#endif /* _MSC_VER */
+
+/// Implement the Test::Hello interface
+class Hello
+ : public virtual POA_Test::Hello
+{
+public:
+ /// Constructor
+ Hello (CORBA::ORB_ptr orb, Test::Hello_ptr server, CORBA::ULong server_id = 0);
+
+ // = The skeleton methods
+ virtual void shutdown (ACE_ENV_SINGLE_ARG_DECL)
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+ virtual void ping (ACE_ENV_SINGLE_ARG_DECL)
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+ virtual void throw_location_forward (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)
+# pragma warning(pop)
+#endif /* _MSC_VER */
+
+#include /**/ "ace/post.h"
+#endif /* HELLO_H */
diff --git a/TAO/orbsvcs/tests/Bug_2287_Regression/README b/TAO/orbsvcs/tests/Bug_2287_Regression/README
new file mode 100644
index 00000000000..3c77b3edb08
--- /dev/null
+++ b/TAO/orbsvcs/tests/Bug_2287_Regression/README
@@ -0,0 +1,32 @@
+// $Id$
+
+This test provides regression coverage for bugzilla #2287.
+
+See http://deuce.doc.wustl.edu/bugzilla/show_bug.cgi?id=2287 for more.
+
+The server installs a server request interceptor and persistent servant and writes out an IOGR for itself.
+The client installs client side FT support and invokes the method "throw_location_forward" on the IOGR.
+The server request interceptor detects invocations of this method and in response either:
+a/ Throws a location forward back to the original IOGR if cannot determine (from the expiration_time member of the FT request service context) thatthe client must have despatched the request after the expiration time.
+b/ Allows the request to be completed if it can determine absolutely that the request was despatched after the expiration time. This indicates a regression to the client.
+
+A successful outcome is if the client stops following the location forwards once it detects that the expiration time has passed, and a TRANSIENT system exception is recived in the application code.
+
+__Regression Output__
+
+The expiration time has now passed !!
+Expiration time : 133496335605156250
+Time now : 133496335605312500
+Test Failed - REGRESSION !!! Client ORB is still retrying LOCATION_FORWARDs after the expiration time!!
+Expiration time : 133496335605156250
+Time now : 133496335605312500
+REGRESSION - Test has failed !!!
+(3128|3992) server - event loop finished
+Error: REGRESSION identified!!!
+ERROR: client returned 1
+
+__Successful Output__
+
+Client catches a TRANSIENT, as expected. No problem !
+(3528|3532) server - event loop finished
+Test passed !!!
diff --git a/TAO/orbsvcs/tests/Bug_2287_Regression/ServerORBInitializer2.cpp b/TAO/orbsvcs/tests/Bug_2287_Regression/ServerORBInitializer2.cpp
new file mode 100644
index 00000000000..f7a7b408be7
--- /dev/null
+++ b/TAO/orbsvcs/tests/Bug_2287_Regression/ServerORBInitializer2.cpp
@@ -0,0 +1,52 @@
+// -*- C++ -*-
+//
+// $Id$
+
+#include "ServerORBInitializer2.h"
+#include "ServerRequest_Interceptor2.h"
+#include "tao/ORB_Constants.h"
+#include "tao/Exception.h"
+
+
+void
+Server_ORBInitializer2::pre_init (
+ PortableInterceptor::ORBInitInfo_ptr
+ ACE_ENV_ARG_DECL_NOT_USED)
+ ACE_THROW_SPEC ((CORBA::SystemException))
+{
+
+}
+
+void
+Server_ORBInitializer2::post_init (
+ PortableInterceptor::ORBInitInfo_ptr info
+ ACE_ENV_ARG_DECL)
+ ACE_THROW_SPEC ((CORBA::SystemException))
+{
+ this->register_server_request_interceptors (info
+ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK;
+}
+
+void
+Server_ORBInitializer2::register_server_request_interceptors (
+ PortableInterceptor::ORBInitInfo_ptr info
+ ACE_ENV_ARG_DECL)
+ ACE_THROW_SPEC ((CORBA::SystemException))
+{
+ PortableInterceptor::ServerRequestInterceptor_ptr sri =
+ PortableInterceptor::ServerRequestInterceptor::_nil ();
+
+ ACE_NEW_THROW_EX (sri,
+ TAO249_ServerRequest_Interceptor2,
+ CORBA::NO_MEMORY ());
+
+ PortableInterceptor::ServerRequestInterceptor_var
+ server_interceptor = sri;
+
+ info->add_server_request_interceptor (server_interceptor.in ()
+ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK;
+}
+
+
diff --git a/TAO/orbsvcs/tests/Bug_2287_Regression/ServerORBInitializer2.h b/TAO/orbsvcs/tests/Bug_2287_Regression/ServerORBInitializer2.h
new file mode 100644
index 00000000000..a98a94523be
--- /dev/null
+++ b/TAO/orbsvcs/tests/Bug_2287_Regression/ServerORBInitializer2.h
@@ -0,0 +1,51 @@
+// -*- C++ -*-
+
+//=============================================================================
+/**
+ * $Id$
+ */
+//=============================================================================
+#ifndef TAO249_SERVER_ORBINITIALIZER2_H
+#define TAO249_SERVER_ORBINITIALIZER2_H
+
+#include /**/ "ace/pre.h"
+
+#include "tao/PortableInterceptorC.h"
+#include "tao/PI_Server/PI_Server_includeC.h"
+#include "tao/PI/PI.h"
+
+#if !defined (ACE_LACKS_PRAGMA_ONCE)
+# pragma once
+#endif /* ACE_LACKS_PRAGMA_ONCE */
+
+#include "tao/LocalObject.h"
+
+/// RTCORBA ORB initializer.
+class Server_ORBInitializer2 :
+ public virtual PortableInterceptor::ORBInitializer,
+ public virtual TAO_Local_RefCounted_Object
+{
+public:
+
+ virtual void pre_init (PortableInterceptor::ORBInitInfo_ptr info
+ ACE_ENV_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+ virtual void post_init (PortableInterceptor::ORBInitInfo_ptr info
+ ACE_ENV_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+private:
+
+ /// Register the necessary interceptors.
+ void register_server_request_interceptors (
+ PortableInterceptor::ORBInitInfo_ptr info
+ ACE_ENV_ARG_DECL)
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+};
+
+#include /**/ "ace/post.h"
+
+#endif /* TAO249_SERVER_ORBINITIALIZER2_H */
+
diff --git a/TAO/orbsvcs/tests/Bug_2287_Regression/ServerRequest_Interceptor2.cpp b/TAO/orbsvcs/tests/Bug_2287_Regression/ServerRequest_Interceptor2.cpp
new file mode 100644
index 00000000000..226898bcf40
--- /dev/null
+++ b/TAO/orbsvcs/tests/Bug_2287_Regression/ServerRequest_Interceptor2.cpp
@@ -0,0 +1,176 @@
+// -*- C++ -*-
+
+#include "ServerRequest_Interceptor2.h"
+#include "orbsvcs/FT_CORBA_ORBC.h"
+#include "tao/IOP_IORC.h"
+#include "tao/ORB_Constants.h"
+#include "tao/AnyTypeCode/DynamicC.h"
+#include "tao/AnyTypeCode/TypeCode.h"
+#include "tao/CDR.h"
+#include "ace/Log_Msg.h"
+#include "ace/OS_NS_string.h"
+#include "ace/OS_NS_stdio.h"
+#include "ace/OS_NS_unistd.h"
+#include "Hello.h"
+#include "ace/OS_NS_sys_time.h"
+#include "tao/PI/PIForwardRequestC.h"
+
+ACE_RCSID (FaultTolerance,
+ TAO249_ServerRequest_Interceptor2,
+ "$Id$")
+
+CORBA::Object_var
+TAO249_ServerRequest_Interceptor2::server_iogr_ = CORBA::Object::_nil ();
+
+TAO249_ServerRequest_Interceptor2::TAO249_ServerRequest_Interceptor2 (void)
+: orb_ (0),
+ expired_ (0)
+{
+}
+
+TAO249_ServerRequest_Interceptor2::~TAO249_ServerRequest_Interceptor2 (void)
+{
+}
+
+char *
+TAO249_ServerRequest_Interceptor2::name (ACE_ENV_SINGLE_ARG_DECL_NOT_USED)
+ACE_THROW_SPEC ((CORBA::SystemException))
+{
+ return CORBA::string_dup ("TAO_TAO249_ServerRequest_Interceptor2");
+}
+
+void
+TAO249_ServerRequest_Interceptor2::destroy (ACE_ENV_SINGLE_ARG_DECL_NOT_USED)
+ACE_THROW_SPEC ((CORBA::SystemException))
+{
+}
+
+void
+TAO249_ServerRequest_Interceptor2::receive_request_service_contexts (
+ PortableInterceptor::ServerRequestInfo_ptr
+ ACE_ENV_ARG_DECL)
+ACE_THROW_SPEC ((CORBA::SystemException,
+ PortableInterceptor::ForwardRequest))
+{
+}
+
+void
+TAO249_ServerRequest_Interceptor2::receive_request (
+ PortableInterceptor::ServerRequestInfo_ptr ri
+ ACE_ENV_ARG_DECL_NOT_USED)
+ACE_THROW_SPEC ((CORBA::SystemException,
+ PortableInterceptor::ForwardRequest))
+{
+ CORBA::String_var op = ri->operation (ACE_ENV_SINGLE_ARG_PARAMETER);
+
+ if (ACE_OS::strcmp (op.in (), "throw_location_forward"))
+ {
+ // bail if not the op we are interested in -
+ // avoid excess spurious error clutter when client calls ::shutdown
+ return;
+ }
+
+
+ IOP::ServiceContext_var sc =
+ ri->get_request_service_context (IOP::FT_REQUEST
+ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK;
+
+ TAO_InputCDR cdr (reinterpret_cast <const char*>
+ (sc->context_data.get_buffer ()
+ ),
+ sc->context_data.length ());
+
+ CORBA::Boolean byte_order;
+
+ if ((cdr >> ACE_InputCDR::to_boolean (byte_order)) == 0)
+ {
+ ACE_THROW (CORBA::BAD_PARAM (CORBA::OMGVMCID | 28,
+ CORBA::COMPLETED_NO));
+ }
+ ACE_CHECK;
+
+ cdr.reset_byte_order (static_cast <int>(byte_order));
+
+ FT::FTRequestServiceContext ftrsc;
+
+ if ((cdr >> ftrsc) == 0)
+ ACE_THROW (CORBA::BAD_PARAM (CORBA::OMGVMCID | 28,
+ CORBA::COMPLETED_NO));
+ ACE_CHECK;
+
+ TimeBase::TimeT now = get_now ();
+
+ if (now > ftrsc.expiration_time)
+ {
+ // We have passed the exp time... there should be no more retries received after this point...
+ if (expired_)
+ {
+ // The client has retried after the expiration time. This is a regression
+ ACE_DEBUG ((LM_ERROR, "Test Failed - REGRESSION !!! Client ORB is still retrying LOCATION_FORWARDs after the expiration time!!\n"));
+ ACE_DEBUG ((LM_DEBUG, ACE_TEXT("Expiration time : %Q\n"), ftrsc.expiration_time));
+ ACE_DEBUG ((LM_DEBUG, ACE_TEXT("Time now : %Q\n"), now));
+
+ // Let the request 'succeed' rather than throwing a forward exception.
+ return;
+ }
+ else
+ {
+ // A request has been recioved after the expiration time.
+ // This could legitimately happen - it is only definitely a problem if
+ // the client keeps on retrying after now. We set a flag so we can check for this.
+ expired_ = 1;
+ ACE_DEBUG ((LM_DEBUG, "The expiration time has now passed !!\n"));
+ ACE_DEBUG ((LM_DEBUG, ACE_TEXT("Expiration time : %Q\n"), ftrsc.expiration_time));
+ ACE_DEBUG ((LM_DEBUG, ACE_TEXT("Time now : %Q\n"), now));
+ }
+ }
+
+ // Let's forward the client back to us again. I would like to be able to make this a PERM
+ // but there's no such animal in the PortableInterceptor module. Plus as we (currently) transform
+ // and marshal *all* forward requests as vanilla LOCATION_FORWARD it doesn't really matter.
+ ACE_THROW (PortableInterceptor::ForwardRequest (server_iogr_.in ()));
+}
+
+TimeBase::TimeT
+TAO249_ServerRequest_Interceptor2::get_now (void)
+{
+ // 1582...
+ const TimeBase::TimeT timeOffset = ACE_UINT64_LITERAL (0x1B21DD213814000);
+
+ // Now in posix
+ ACE_Time_Value time_value = ACE_OS::gettimeofday ();
+
+ TimeBase::TimeT sec_part = time_value.sec ();
+ sec_part = sec_part * 10000000;
+ TimeBase::TimeT usec_part = time_value.usec ();
+ usec_part = usec_part * 10;
+ return (sec_part + usec_part + timeOffset);
+}
+
+void
+TAO249_ServerRequest_Interceptor2::send_reply (
+ PortableInterceptor::ServerRequestInfo_ptr
+ ACE_ENV_ARG_DECL_NOT_USED)
+ACE_THROW_SPEC ((CORBA::SystemException))
+{
+}
+
+void
+TAO249_ServerRequest_Interceptor2::send_exception (
+ PortableInterceptor::ServerRequestInfo_ptr
+ ACE_ENV_ARG_DECL_NOT_USED)
+ACE_THROW_SPEC ((CORBA::SystemException,
+ PortableInterceptor::ForwardRequest))
+{
+}
+
+void
+TAO249_ServerRequest_Interceptor2::send_other (
+ PortableInterceptor::ServerRequestInfo_ptr
+ ACE_ENV_ARG_DECL_NOT_USED)
+ACE_THROW_SPEC ((CORBA::SystemException,
+ PortableInterceptor::ForwardRequest))
+{
+}
+
diff --git a/TAO/orbsvcs/tests/Bug_2287_Regression/ServerRequest_Interceptor2.h b/TAO/orbsvcs/tests/Bug_2287_Regression/ServerRequest_Interceptor2.h
new file mode 100644
index 00000000000..b7767f6d798
--- /dev/null
+++ b/TAO/orbsvcs/tests/Bug_2287_Regression/ServerRequest_Interceptor2.h
@@ -0,0 +1,98 @@
+// -*- C++ -*-
+
+//=============================================================================
+/**
+ * $Id$
+ */
+//=============================================================================
+
+#ifndef TAO249_SERVER_REQUEST_INTERCEPTOR2_H
+#define TAO249_SERVER_REQUEST_INTERCEPTOR2_H
+
+#include "ace/config-all.h"
+
+#if !defined (ACE_LACKS_PRAGMA_ONCE)
+# pragma once
+#endif /* ACE_LACKS_PRAGMA_ONCE */
+#include "tao/LocalObject.h"
+#include "tao/PortableInterceptorC.h"
+#include "tao/ORB.h"
+#include "tao/PI/PI.h"
+#include "tao/PI_Server/PI_Server.h"
+#include "tao/TimeBaseC.h"
+
+/**
+* $Id$
+*/
+class TAO249_ServerRequest_Interceptor2
+: public virtual PortableInterceptor::ServerRequestInterceptor,
+ public virtual TAO_Local_RefCounted_Object
+{
+public:
+
+/// Constructor.
+TAO249_ServerRequest_Interceptor2 (void);
+
+/// Destructor.
+~TAO249_ServerRequest_Interceptor2 (void);
+
+/**
+ * @name Methods Required by the Server Request Interceptor
+ * Interface
+ *
+ * These are methods that must be implemented since they are pure
+ * virtual in the abstract base class. They are the canonical
+ * methods required for all server request interceptors.
+ */
+//@{
+/// Return the name of this ServerRequestinterceptor.
+virtual char * name (ACE_ENV_SINGLE_ARG_DECL)
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+virtual void destroy (ACE_ENV_SINGLE_ARG_DECL)
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+virtual void receive_request_service_contexts (
+ PortableInterceptor::ServerRequestInfo_ptr ri
+ ACE_ENV_ARG_DECL)
+ACE_THROW_SPEC ((CORBA::SystemException,
+ PortableInterceptor::ForwardRequest));
+
+virtual void receive_request (
+ PortableInterceptor::ServerRequestInfo_ptr ri
+ ACE_ENV_ARG_DECL)
+ ACE_THROW_SPEC ((CORBA::SystemException,
+ PortableInterceptor::ForwardRequest));
+
+virtual void send_reply (
+ PortableInterceptor::ServerRequestInfo_ptr ri
+ ACE_ENV_ARG_DECL)
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+virtual void send_exception (
+ PortableInterceptor::ServerRequestInfo_ptr ri
+ ACE_ENV_ARG_DECL)
+ ACE_THROW_SPEC ((CORBA::SystemException,
+ PortableInterceptor::ForwardRequest));
+
+virtual void send_other (
+ PortableInterceptor::ServerRequestInfo_ptr ri
+ ACE_ENV_ARG_DECL)
+ ACE_THROW_SPEC ((CORBA::SystemException,
+ PortableInterceptor::ForwardRequest));
+//@}
+
+static CORBA::Object_var server_iogr_;
+
+protected:
+ TimeBase::TimeT get_now (void);
+
+private:
+
+CORBA::ORB_var orb_;
+
+CORBA::Boolean expired_;
+};
+
+#endif /* TAO249_SERVER_REQUEST_INTERCEPTOR2_H */
+
diff --git a/TAO/orbsvcs/tests/Bug_2287_Regression/Test.idl b/TAO/orbsvcs/tests/Bug_2287_Regression/Test.idl
new file mode 100644
index 00000000000..9e1fa22e0be
--- /dev/null
+++ b/TAO/orbsvcs/tests/Bug_2287_Regression/Test.idl
@@ -0,0 +1,24 @@
+//
+// $Id$
+//
+
+/// Put the interfaces in a module, to avoid global namespace pollution
+module Test
+{
+ interface Hello
+ {
+ /// A method to shutdown the ORB
+ /**
+ * This method is used to simplify the test shutdown process
+ */
+ oneway void shutdown ();
+
+ // Lets make sure things are working
+ void ping ();
+
+ // The client calls this method which will generate
+ // a locate forward to the same IOGR on every invocation
+ // until well after the request expiration time when it will then succeed
+ void throw_location_forward ();
+ };
+};
diff --git a/TAO/orbsvcs/tests/Bug_2287_Regression/client.cpp b/TAO/orbsvcs/tests/Bug_2287_Regression/client.cpp
new file mode 100644
index 00000000000..efc5c8c1da7
--- /dev/null
+++ b/TAO/orbsvcs/tests/Bug_2287_Regression/client.cpp
@@ -0,0 +1,110 @@
+// $Id$
+
+#include "TestS.h"
+#include "ace/Get_Opt.h"
+#include "orbsvcs/FaultTolerance/FT_ClientService_Activate.h"
+#include "Hello.h"
+
+ACE_RCSID(Hello, client, "$Id$")
+
+const char *ior = "file://test.ior";
+
+int
+parse_args (int argc, char *argv[])
+{
+ ACE_Get_Opt get_opts (argc, argv, "k:");
+ int c;
+
+ while ((c = get_opts ()) != -1)
+ switch (c)
+ {
+ case 'k':
+ ior = get_opts.opt_arg ();
+ break;
+
+ case '?':
+ default:
+ ACE_ERROR_RETURN ((LM_ERROR,
+ "usage: %s "
+ "-k <ior> "
+ "\n",
+ argv [0]),
+ -1);
+ }
+ // Indicates sucessful parsing of the command line
+ return 0;
+}
+
+int
+main (int argc, char *argv[])
+{
+ CORBA::Boolean result = 0;
+ 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 tmp =
+ orb->string_to_object(ior ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ Test::Hello_var hello =
+ Test::Hello::_narrow(tmp.in () ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ if (CORBA::is_nil (hello.in ()))
+ {
+ ACE_ERROR_RETURN ((LM_DEBUG,
+ "Test failed - Not regression - Unexpected Nil Test::Hello reference <%s>\n",
+ ior),
+ 1);
+ }
+
+ // Check this isn't generating transients for any other reason
+ hello->ping (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+
+ ACE_TRY
+ {
+ hello->throw_location_forward (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ ACE_DEBUG ((LM_ERROR, "REGRESSION - Test has failed !!!\n"));
+ result = 1;
+ }
+ ACE_CATCH (CORBA::TRANSIENT, my_ex)
+ {
+ ACE_UNUSED_ARG (my_ex);
+ ACE_DEBUG ((LM_DEBUG, "Client catches a TRANSIENT, as expected. No problem !\n"));
+ }
+ ACE_ENDTRY;
+
+ hello->shutdown (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ orb->destroy (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+ }
+ ACE_CATCHANY
+ {
+ ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION,
+ "Test failed (Not regression) because unexpected exception caught:");
+ return 1;
+ }
+ ACE_ENDTRY;
+
+ if (result)
+ {
+ ACE_DEBUG ((LM_ERROR, "Error: REGRESSION identified!!!\n"));
+ }
+ else
+ {
+ ACE_DEBUG ((LM_DEBUG, "Test passed !!!\n"));
+ }
+ return result;
+}
diff --git a/TAO/orbsvcs/tests/Bug_2287_Regression/run_test.pl b/TAO/orbsvcs/tests/Bug_2287_Regression/run_test.pl
new file mode 100755
index 00000000000..de69f709455
--- /dev/null
+++ b/TAO/orbsvcs/tests/Bug_2287_Regression/run_test.pl
@@ -0,0 +1,49 @@
+eval '(exit $?0)' && eval 'exec perl -S $0 ${1+"$@"}'
+ & eval 'exec perl -S $0 $argv:q'
+ if 0;
+
+# $Id$
+# -*- perl -*-
+
+use lib '../../../../bin';
+use PerlACE::Run_Test;
+
+$status = 0;
+
+$iorfile = PerlACE::LocalFile ("server.ior");
+unlink $iorfile;
+
+if (PerlACE::is_vxworks_test()) {
+ $SV = new PerlACE::ProcessVX ("server", "-o server.ior");
+}
+else {
+ $SV = new PerlACE::Process ("server", "-o $iorfile");
+}
+$CL = new PerlACE::Process ("client", " -k file://$iorfile");
+
+$SV->Spawn ();
+
+if (PerlACE::waitforfile_timed ($iorfile,
+ $PerlACE::wait_interval_for_process_creation) == -1) {
+ print STDERR "ERROR: cannot find file <$iorfile>\n";
+ $SV->Kill (); $SV->TimedWait (1);
+ exit 1;
+}
+
+$client = $CL->SpawnWaitKill (300);
+
+if ($client != 0) {
+ print STDERR "ERROR: client returned $client\n";
+ $status = 1;
+}
+
+$server = $SV->WaitKill (10);
+
+if ($server != 0) {
+ print STDERR "ERROR: server returned $server\n";
+ $status = 1;
+}
+
+unlink $iorfile;
+
+exit $status;
diff --git a/TAO/orbsvcs/tests/Bug_2287_Regression/server.cpp b/TAO/orbsvcs/tests/Bug_2287_Regression/server.cpp
new file mode 100644
index 00000000000..eca1cfc94de
--- /dev/null
+++ b/TAO/orbsvcs/tests/Bug_2287_Regression/server.cpp
@@ -0,0 +1,243 @@
+// $Id$
+
+#include "Hello.h"
+#include "ace/Get_Opt.h"
+#include "ace/OS_NS_stdio.h"
+#include "tao/IORManipulation/IORManip_Loader.h"
+#include "tao/PortableServer/PortableServer.h"
+#include "orbsvcs/FaultTolerance/FT_IOGR_Property.h"
+#include "ServerORBInitializer2.h"
+#include "ServerRequest_Interceptor2.h"
+#include "tao/PI/PI.h"
+#include "tao/ORBInitializer_Registry.h"
+
+ACE_RCSID (Hello,
+ server,
+ "$Id$")
+
+const char *ior_output_file = "test.ior";
+TAO_IOP::TAO_IOR_Manipulation_var iorm = 0;
+
+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;
+}
+
+CORBA::Object_ptr
+make_iogr (const char* domain_id, CORBA::ULongLong group_id, CORBA::ULong group_version, CORBA::Object_ptr ref ACE_ENV_ARG_DECL)
+{
+ FT::TagFTGroupTaggedComponent ft_tag_component;
+ // Create the list
+ TAO_IOP::TAO_IOR_Manipulation::IORList iors (1);
+ iors.length(1);
+ iors [0] = CORBA::Object::_duplicate (ref);
+
+ CORBA::Object_var new_ref =
+ iorm->merge_iors (iors ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK_RETURN (0);
+
+ // Property values
+
+ // Major and Minor revision numbers
+ ft_tag_component.component_version.major = (CORBA::Octet) 1;
+ ft_tag_component.component_version.minor = (CORBA::Octet) 0;
+
+ // Domain id
+ //const char *id = "iogr_testing";
+ ft_tag_component.group_domain_id = domain_id;
+
+ // Object group id
+ ft_tag_component.object_group_id = group_id;
+
+ // Version
+ ft_tag_component.object_group_ref_version = group_version;
+
+ // Construct the IOGR Property class
+ TAO_FT_IOGR_Property iogr_prop (ft_tag_component);
+
+ // Set the property
+ CORBA::Boolean retval = iorm->set_property (&iogr_prop,
+ new_ref.in ()
+ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK_RETURN (0);
+
+ // Set the primary
+ // See we are setting the second ior as the primary
+ if (retval != 0)
+ {
+ retval = iorm->set_primary (&iogr_prop,
+ new_ref.in (),
+ new_ref.in ()
+ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK_RETURN (0);
+ }
+
+ return new_ref._retn ();
+}
+
+int
+main (int argc, char *argv[])
+{
+ ACE_TRY_NEW_ENV
+ {
+ Server_ORBInitializer2 *temp_initializer = 0;
+ ACE_NEW_RETURN (temp_initializer,
+ Server_ORBInitializer2,
+ -1); // No exceptions yet!
+ PortableInterceptor::ORBInitializer_var orb_initializer =
+ temp_initializer;
+
+ PortableInterceptor::register_orb_initializer (orb_initializer.in ()
+ ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ 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;
+
+ PortableServer::POA_var root_poa =
+ PortableServer::POA::_narrow (poa_object.in () ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ if (CORBA::is_nil (root_poa.in ()))
+ ACE_ERROR_RETURN ((LM_ERROR,
+ " (%P|%t) Panic: nil RootPOA\n"),
+ 1);
+
+ PortableServer::POAManager_var poa_manager =
+ root_poa->the_POAManager (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ CORBA::PolicyList policies (2);
+ policies.length (2);
+
+ policies[0] =
+ root_poa->create_id_assignment_policy (PortableServer::USER_ID
+ ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK
+
+ policies[1] =
+ root_poa->create_lifespan_policy (PortableServer::PERSISTENT
+ ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ PortableServer::POA_var my_poa =
+ root_poa->create_POA ("my_poa",
+ poa_manager.in (),
+ policies
+ ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ // Creation of the new POA is over, so destroy the Policy_ptr's.
+ for (CORBA::ULong i = 0; i < policies.length (); ++i)
+ {
+ CORBA::Policy_ptr policy = policies[i];
+ policy->destroy (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+ }
+
+
+ if (parse_args (argc, argv) != 0)
+ return 1;
+
+ Hello *hello_impl;
+ ACE_NEW_RETURN (hello_impl,
+ Hello (orb.in (), Test::Hello::_nil ()),
+ 1);
+
+ PortableServer::ObjectId_var server_id =
+ PortableServer::string_to_ObjectId ("server_id");
+
+ my_poa->activate_object_with_id (server_id.in (),
+ hello_impl
+ ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ CORBA::Object_var hello =
+ my_poa->id_to_reference (server_id.in () ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ CORBA::String_var ior =
+ orb->object_to_string (hello.in () ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ // Get a ref to the IORManipulation object
+ CORBA::Object_var IORM =
+ orb->resolve_initial_references (TAO_OBJID_IORMANIPULATION,
+ 0
+ ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ // Narrow
+ iorm =
+ TAO_IOP::TAO_IOR_Manipulation::_narrow (IORM.in() ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ CORBA::Object_var iogr = make_iogr ("Domain_1", 1, 1, orb->string_to_object (ior.in ()) ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ CORBA::String_var iorgr_string =
+ orb->object_to_string (iogr.in () ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ // Output the IOR to the <ior_output_file>
+ 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", iorgr_string.in ());
+ ACE_OS::fclose (output_file);
+
+ TAO249_ServerRequest_Interceptor2::server_iogr_ = CORBA::Object::_duplicate (iogr.in ());
+
+ 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/orbsvcs/tests/Bug_2316_Regression/Bug_2316_Regression.mpc b/TAO/orbsvcs/tests/Bug_2316_Regression/Bug_2316_Regression.mpc
new file mode 100644
index 00000000000..2b4960fc5cd
--- /dev/null
+++ b/TAO/orbsvcs/tests/Bug_2316_Regression/Bug_2316_Regression.mpc
@@ -0,0 +1,36 @@
+// -*- MPC -*-
+// $Id$
+
+project(*IDL): taoidldefaults {
+ IDL_Files {
+ Test.idl
+ }
+ custom_only = 1
+}
+
+project(*Server): orbsvcsexe, portablegroup, portableserver {
+ exename = server
+ after += *IDL
+
+ Source_Files {
+ Test_impl.cpp
+ server.cpp
+ TestS.cpp
+ TestC.cpp
+ }
+ IDL_Files {
+ }
+}
+
+project(*Client): orbsvcsexe, portablegroup {
+ exename = client
+ after += *IDL
+
+ Source_Files {
+ client.cpp
+ TestC.cpp
+ }
+ IDL_Files {
+ }
+}
+
diff --git a/TAO/orbsvcs/tests/Bug_2316_Regression/README b/TAO/orbsvcs/tests/Bug_2316_Regression/README
new file mode 100644
index 00000000000..89f1c090651
--- /dev/null
+++ b/TAO/orbsvcs/tests/Bug_2316_Regression/README
@@ -0,0 +1,26 @@
+$Id$
+
+This client and server in this test both load the UIPMC protocol plug in
+(see svc.conf).
+
+The client creates a MIOP object ref and tests that it can be marshalled
+and demarshalled without problems by passing it over the wire to the server.
+
+_Expected successful result_:
+
+E:\worcvs\tao14\prism\tests\tao277_regression>run_test.pl
+Test passed !!
+
+_Expected regression result_:
+
+E:\worcvs\tao14\prism\tests\tao277_regression>run_test.pl
+TAO (1808|644) ERROR: Could not create all profiles while extracting object
+TAO (1808|644) ERROR: reference from the CDR stream.
+Test Failed - Regression. Sending UIPMC object ref to server failed with:
+(1924|1884) EXCEPTION, Exception :
+
+system exception, ID 'IDL:omg.org/CORBA/MARSHAL:1.0'
+TAO exception, minor code = 0 (unknown location; unspecified errno), completed =
+ NO
+
+ERROR: Test failed - client returned 1
diff --git a/TAO/orbsvcs/tests/Bug_2316_Regression/Test.idl b/TAO/orbsvcs/tests/Bug_2316_Regression/Test.idl
new file mode 100644
index 00000000000..36820e2b6d1
--- /dev/null
+++ b/TAO/orbsvcs/tests/Bug_2316_Regression/Test.idl
@@ -0,0 +1,12 @@
+// $Id$
+
+#ifndef _TEST_IDL_
+#define _TEST_IDL_
+
+interface server
+{
+ void method (in Object obj);
+ oneway void shutdown ();
+};
+
+#endif // _TEST_IDL_
diff --git a/TAO/orbsvcs/tests/Bug_2316_Regression/Test_impl.cpp b/TAO/orbsvcs/tests/Bug_2316_Regression/Test_impl.cpp
new file mode 100644
index 00000000000..d469544e251
--- /dev/null
+++ b/TAO/orbsvcs/tests/Bug_2316_Regression/Test_impl.cpp
@@ -0,0 +1,19 @@
+// $Id$
+
+#include "Test_impl.h"
+
+void Server_impl::shutdown ()
+ throw (CORBA::SystemException)
+{
+ this->orb_->shutdown (0);
+}
+
+Server_impl::Server_impl (CORBA::ORB_ptr orb)
+ : orb_ (CORBA::ORB::_duplicate (orb))
+{
+}
+
+void Server_impl::method (CORBA::Object_ptr)
+ throw (CORBA::SystemException)
+{
+}
diff --git a/TAO/orbsvcs/tests/Bug_2316_Regression/Test_impl.h b/TAO/orbsvcs/tests/Bug_2316_Regression/Test_impl.h
new file mode 100644
index 00000000000..41c11b90668
--- /dev/null
+++ b/TAO/orbsvcs/tests/Bug_2316_Regression/Test_impl.h
@@ -0,0 +1,19 @@
+// $Id$
+
+#ifndef TEST_IMPL_HPP
+#define TEST_IMPL_HPP
+
+#include "TestS.h"
+
+class Server_impl : public virtual POA_server
+{
+public:
+ Server_impl (CORBA::ORB_ptr orb);
+ virtual void method (CORBA::Object_ptr object) throw (CORBA::SystemException);
+ virtual void shutdown () throw (CORBA::SystemException);
+
+private:
+ CORBA::ORB_var orb_;
+};
+
+#endif /* TEST_IMPL_HPP */
diff --git a/TAO/orbsvcs/tests/Bug_2316_Regression/client.cpp b/TAO/orbsvcs/tests/Bug_2316_Regression/client.cpp
new file mode 100644
index 00000000000..183bc338fd4
--- /dev/null
+++ b/TAO/orbsvcs/tests/Bug_2316_Regression/client.cpp
@@ -0,0 +1,55 @@
+// $Id$
+
+#include "Test_impl.h"
+#include "ace/OS_NS_stdio.h"
+
+const char *ior_callback = "callback.ior";
+const char *ior_server = "file://server.ior";
+
+int
+main (int argc, char *argv[])
+{
+ int result = 0;
+ try
+ {
+ CORBA::ORB_var orb = CORBA::ORB_init (argc, argv);
+
+ CORBA::Object_var poa_object =
+ orb->resolve_initial_references("RootPOA");
+
+ PortableServer::POA_var root_poa =
+ PortableServer::POA::_narrow (poa_object.in ());
+
+ PortableServer::POAManager_var poa_manager =
+ root_poa->the_POAManager ();
+ poa_manager->activate ();
+
+ const char* uipmc_ior = "corbaloc:miop:1.0@1.0-domain-1/127.0.0.1:23232";
+ CORBA::Object_var obj =orb->string_to_object (uipmc_ior);
+
+ CORBA::Object_var tmp = orb->string_to_object (ior_server);
+ server_var server = server::_narrow (tmp.in ());
+
+ try
+ {
+ server->method (obj.in());
+
+ ACE_DEBUG ((LM_DEBUG, "Test passed !!\n"));
+ }
+ catch (const CORBA::SystemException& marshal)
+ {
+ ACE_DEBUG ((LM_ERROR, "Test Failed - Regression. "
+ "Sending UIPMC object ref to server failed with:\n"));
+ ACE_PRINT_EXCEPTION (marshal, "Exception : \n");
+ result = 1;
+ }
+
+ server->shutdown ();
+ }
+ catch(const CORBA::SystemException& e)
+ {
+ ACE_PRINT_EXCEPTION (e, "Unexpected exception - not a regression.\n");
+ result = 1;
+ }
+ return result;
+}
diff --git a/TAO/orbsvcs/tests/Bug_2316_Regression/run_test.pl b/TAO/orbsvcs/tests/Bug_2316_Regression/run_test.pl
new file mode 100755
index 00000000000..ba9d7040c5a
--- /dev/null
+++ b/TAO/orbsvcs/tests/Bug_2316_Regression/run_test.pl
@@ -0,0 +1,42 @@
+eval '(exit $?0)' && eval 'exec perl -S $0 ${1+"$@"}'
+ & eval 'exec perl -S $0 $argv:q'
+ if 0;
+
+# $Id$
+# -*- perl -*-
+
+use lib '../../../../bin';
+use PerlACE::Run_Test;
+
+$iorfile = PerlACE::LocalFile ("server.ior");
+unlink $iorfile;
+$status = 0;
+
+$SV = new PerlACE::Process ("server");
+$CL = new PerlACE::Process ("client");
+
+$SV->Spawn ();
+
+if (PerlACE::waitforfile_timed ($iorfile, 5) == -1) {
+ print STDERR "ERROR: Test failed. Not regression. Cannot find file <$iorfile>\n";
+ $SV->Kill (); $SV->TimedWait (1);
+ exit 1;
+}
+
+$client = $CL->SpawnWaitKill (300);
+
+if ($client != 0) {
+ print STDERR "ERROR: Test failed - client returned $client\n";
+ $status = 1;
+}
+
+$server = $SV->WaitKill (10);
+
+if ($server != 0) {
+ print STDERR "ERROR: During clean up - killing server returned $server\n";
+ $status = 1;
+}
+
+unlink $iorfile;
+
+exit $status;
diff --git a/TAO/orbsvcs/tests/Bug_2316_Regression/server.cpp b/TAO/orbsvcs/tests/Bug_2316_Regression/server.cpp
new file mode 100644
index 00000000000..76443812a25
--- /dev/null
+++ b/TAO/orbsvcs/tests/Bug_2316_Regression/server.cpp
@@ -0,0 +1,38 @@
+// $Id$
+
+#include "Test_impl.h"
+#include "ace/OS_NS_stdio.h"
+
+int
+main (int argc, char *argv[])
+{
+ try
+ {
+ CORBA::ORB_var orb = CORBA::ORB_init (argc, argv);
+
+ CORBA::Object_var poa_object =
+ orb->resolve_initial_references("RootPOA");
+ PortableServer::POA_var root_poa =
+ PortableServer::POA::_narrow (poa_object.in ());
+ PortableServer::POAManager_var poa_manager =
+ root_poa->the_POAManager ();
+ poa_manager->activate ();
+
+ Server_impl* server_obj = new Server_impl(orb.in());
+ server_var server = server_obj->_this();
+ CORBA::String_var ior = orb->object_to_string (server.in ());
+
+ FILE *output_file = ACE_OS::fopen ("server.ior", "w");
+ ACE_OS::fprintf (output_file, "%s", ior.in ());
+ ACE_OS::fclose (output_file);
+
+ orb->run ();
+ orb->destroy ();
+ }
+ catch(...)
+ {
+ return 1;
+ }
+
+ return 0;
+}
diff --git a/TAO/orbsvcs/tests/Bug_2316_Regression/svc.conf b/TAO/orbsvcs/tests/Bug_2316_Regression/svc.conf
new file mode 100644
index 00000000000..65508eb6d59
--- /dev/null
+++ b/TAO/orbsvcs/tests/Bug_2316_Regression/svc.conf
@@ -0,0 +1,4 @@
+# $Id$
+dynamic UIPMC_Factory Service_Object * TAO_PortableGroup:_make_TAO_UIPMC_Protocol_Factory() ""
+static Resource_Factory "-ORBProtocolFactory IIOP_Factory -ORBProtocolFactory UIPMC_Factory"
+dynamic PortableGroup_Loader Service_Object * TAO_PortableGroup:_make_TAO_PortableGroup_Loader() ""
diff --git a/TAO/orbsvcs/tests/Bug_2377_Regression/Bug_2377_Regression.mpc b/TAO/orbsvcs/tests/Bug_2377_Regression/Bug_2377_Regression.mpc
new file mode 100644
index 00000000000..6616beb3c5d
--- /dev/null
+++ b/TAO/orbsvcs/tests/Bug_2377_Regression/Bug_2377_Regression.mpc
@@ -0,0 +1,9 @@
+// -*- MPC -*-
+// $Id$
+
+project(*Test) : orbsvcsexe, taoidldefaults, portablegroup, portableserver {
+ exename = uipmc_test
+ Source_Files {
+ Hello.cpp
+ }
+}
diff --git a/TAO/orbsvcs/tests/Bug_2377_Regression/Hello.cpp b/TAO/orbsvcs/tests/Bug_2377_Regression/Hello.cpp
new file mode 100644
index 00000000000..03cb59b88e1
--- /dev/null
+++ b/TAO/orbsvcs/tests/Bug_2377_Regression/Hello.cpp
@@ -0,0 +1,340 @@
+//
+// $Id$
+//
+
+#include "HelloS.h"
+
+#include "ace/SString.h"
+#include "ace/Log_Msg.h"
+#include "ace/Task.h"
+#include "ace/Mutex.h"
+#include "ace/streams.h"
+#include "ace/OS_NS_time.h"
+#include "ace/OS_NS_unistd.h"
+#include "tao/debug.h"
+#include "tao/corba.h"
+#include "orbsvcs/PortableGroup/MIOP.h"
+#include "orbsvcs/PortableGroup/GOA.h"
+
+#define CLIENT_SLEEP_TIME 100 /* in milliseconds */
+#define NB_HELLO_CLIENT_THREAD 8
+#define NB_HELLO_CALLS 100
+
+void
+sleep(int millisec)
+{
+ ACE_Time_Value tv(millisec / 1000, (millisec % 1000) * 1000);
+
+ ACE_OS::sleep ((const ACE_Time_Value &) tv);
+}
+
+class MessageLog
+{
+ private:
+ bool *sent;
+ bool *recv;
+ int extent;
+
+ public:
+ MessageLog(int num)
+ {
+ extent = num + 1;
+ sent = new bool[extent];
+ recv = new bool[extent];
+
+ int i;
+
+ for (i = 0; i < extent; i++)
+ {
+ sent[i] = false;
+ recv[i] = false;
+ }
+ }
+
+ void
+ register_message_send(int message_num)
+ {
+ sent[message_num] = true;
+ }
+
+ void
+ register_message_recv(int message_num)
+ {
+ recv[message_num] = true;
+ }
+
+ bool
+ lost_messages()
+ {
+ bool lm = false;
+ int i;
+
+ for (i = 0; i < extent; i++)
+ {
+ if (sent[i] && !recv[i])
+ {
+ // message lost
+ lm = true;
+ break;
+ }
+ }
+ return lm;
+ }
+
+ void
+ report_lost_messages(const ACE_TCHAR *int_format_string)
+ {
+ int i;
+
+ for (i = 0; i < extent; i++)
+ {
+ if (sent[i] && !recv[i])
+ {
+ ACE_DEBUG ((LM_DEBUG,
+ int_format_string,
+ i));
+ }
+ }
+ }
+};
+
+namespace Test
+{
+ class Hello_impl
+ : public virtual POA_Test::Hello
+ {
+ private:
+ MessageLog *logger;
+ public:
+ Hello_impl(MessageLog *log)
+ : logger(log)
+ {
+ }
+
+ void say_hello(CORBA::Short count) throw(CORBA::SystemException)
+ {
+ logger->register_message_recv(count);
+ if (TAO_debug_level == 0)
+ {
+ ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("R")));
+ }
+ }
+ };
+}
+
+class OrbRunThread
+: public ACE_Task_Base
+{
+ public:
+ OrbRunThread(CORBA::ORB_ptr orb)
+ : m_orb(CORBA::ORB::_duplicate(orb))
+ {
+ }
+ virtual int svc()
+ {
+ m_orb->run();
+ return 1;
+ }
+ private:
+ CORBA::ORB_var m_orb;
+};
+
+class HelloClientThread
+: public ACE_Task_Base
+{
+ public:
+ HelloClientThread(Test::Hello_ptr hello, MessageLog *log)
+ : m_hello(Test::Hello::_duplicate(hello)),
+ logger(log),
+ m_count(0)
+ {
+ }
+ virtual int svc()
+ {
+ while (m_count < NB_HELLO_CALLS)
+ {
+ ACE_TRY_NEW_ENV
+ {
+ int count;
+ {
+ // get your message number here
+ ACE_Guard < ACE_Mutex > guard(m_mutex);
+ count = m_count++;
+ if (TAO_debug_level == 0)
+ {
+ ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("s")));
+ }
+ }
+ {
+ // send your message number here
+#ifdef SEQUENCED_SAY_HELLO_REQUIRED
+ ACE_Guard < ACE_Mutex > guard(m_mutex);
+#endif /* SEQUENCED_SAY_HELLO_REQUIRED */
+ logger->register_message_send(count);
+ m_hello->say_hello(count);
+ }
+ sleep(CLIENT_SLEEP_TIME);
+ }
+ ACE_CATCHANY
+ {
+ ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION,
+ ACE_TEXT ("Exception thrown during say_hello()\n"));
+ }
+ ACE_ENDTRY;
+ }
+ return 1;
+ }
+ private:
+ Test::Hello_var m_hello;
+ MessageLog *logger;
+ int m_count;
+ ACE_Mutex m_mutex;
+};
+
+int
+main(int argc, char *argv[])
+{
+ MessageLog *logger = 0;
+ CORBA::ORB_var orb = CORBA::ORB::_nil();
+ int exit_code = 0;
+
+ OrbRunThread *orbThread = 0;
+ Test::Hello_impl * hello_i = 0;
+
+ ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("<<< %s Started - \"s\" = message sent \"R\" = message received >>>\n"), argv[0]));
+
+ ACE_TRY_NEW_ENV
+ {
+ /*** in svc.conf
+dynamic UIPMC_Factory Service_Object * TAO_PortableGroup:_make_TAO_UIPMC_Protocol_Factory() ""
+static Resource_Factory "-ORBProtocolFactory IIOP_Factory -ORBProtocolFactory UIPMC_Factory"
+dynamic PortableGroup_Loader Service_Object * TAO_PortableGroup:_make_TAO_PortableGroup_Loader() ""
+static Server_Strategy_Factory "-ORBConcurrency reactive -ORBPOALock thread -ORBAllowReactivationOfSystemids 1"
+static Client_Strategy_Factory "-ORBProfileLock thread -ORBClientConnectionHandler MT"
+ ***/
+
+ // Initialize the ORB
+ if (TAO_debug_level > 0)
+ {
+ ACE_DEBUG ((LM_DEBUG, ACE_TEXT (" - ORB_init\n")));
+ }
+ orb = CORBA::ORB_init(argc, argv);
+
+ // Get the root POA
+ CORBA::Object_var obj_root =
+ orb->resolve_initial_references("RootPOA");
+ PortableGroup::GOA_var rootPOA =
+ PortableGroup::GOA::_narrow(obj_root.in());
+
+ // Activate the POA manager
+ if (TAO_debug_level > 0)
+ {
+ ACE_DEBUG ((LM_DEBUG, ACE_TEXT (" - POA manager activation\n")));
+ }
+ PortableServer::POAManager_var poaManager = rootPOA->the_POAManager();
+
+ poaManager->activate();
+
+ // create Message Log
+ logger = new MessageLog(NB_HELLO_CALLS);
+
+ // create Hello servant
+ if (TAO_debug_level > 0)
+ {
+ ACE_DEBUG ((LM_DEBUG, ACE_TEXT (" - create Hello servant\n")));
+ }
+ hello_i = new Test::Hello_impl(logger);
+
+ // activate Hello Object
+ if (TAO_debug_level > 0)
+ {
+ ACE_DEBUG ((LM_DEBUG, ACE_TEXT (" - activate Hello object\n")));
+ }
+ PortableServer::ObjectId_var obj_id =
+ rootPOA->activate_object(hello_i);
+
+ // create MIOP reference
+ if (TAO_debug_level > 0)
+ {
+ ACE_DEBUG ((LM_DEBUG, ACE_TEXT (" - create MIOP reference\n")));
+ }
+ ACE_CString multicast_addr("corbaloc:miop:1.0@1.0-cdmwftdomain-1/225.1.1.8:5555");
+ CORBA::Object_var miop_ref =
+ orb->string_to_object(multicast_addr.c_str());
+
+ // associate MIOP reference with Hello object
+ if (TAO_debug_level > 0)
+ {
+ ACE_DEBUG ((LM_DEBUG,
+ ACE_TEXT (" - associate MIOP reference with Hello object\n")));
+ }
+ rootPOA->associate_reference_with_id(miop_ref.in(), obj_id.in ());
+
+ // create Hello reference
+ if (TAO_debug_level > 0)
+ {
+ ACE_DEBUG ((LM_DEBUG, ACE_TEXT (" - create Hello reference\n")));
+ }
+ Test::Hello_var hello = Test::Hello::_unchecked_narrow(miop_ref.in());
+
+ // start ORB run() in a thread
+ orbThread = new OrbRunThread(orb.in());
+ orbThread->activate(THR_NEW_LWP, 1);
+
+ // create client threads
+ HelloClientThread *helloThread = new HelloClientThread(hello.in(),
+ logger);
+
+ // start client threads
+ ACE_DEBUG ((LM_DEBUG,
+ ACE_TEXT ("--------------------------------------------------\n")));
+ helloThread->activate(THR_NEW_LWP, NB_HELLO_CLIENT_THREAD);
+ helloThread->wait();
+ delete helloThread;
+ }
+ ACE_CATCHANY
+ {
+ ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION,
+ ACE_TEXT ("Exception thrown during main()\n"));
+ exit_code = 1;
+ }
+ ACE_ENDTRY;
+
+ ACE_DEBUG ((LM_DEBUG,
+ ACE_TEXT ("\n--------------------------------------------------\n")));
+ if (logger->lost_messages())
+ {
+ logger->report_lost_messages(ACE_TEXT ("LOST ==> say_hello() %d\n"));
+ exit_code = 1;
+ }
+ else if (exit_code == 0)
+ {
+ ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("<<< %s - no lost messages >>>\n"), argv[0]));
+ }
+
+ delete logger;
+
+ if (orbThread != 0)
+ {
+ orb->shutdown(true);
+ orbThread->wait();
+ delete orbThread;
+ delete hello_i;
+ }
+ if (!CORBA::is_nil(orb.in()))
+ {
+ ACE_TRY_NEW_ENV
+ {
+ orb->destroy();
+ }
+ ACE_CATCHANY
+ {
+ ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION,
+ ACE_TEXT ("Exception thrown during orb check\n"));
+ exit_code = 1;
+ }
+ ACE_ENDTRY;
+ }
+ exit(exit_code);
+ return 0;
+}
diff --git a/TAO/orbsvcs/tests/Bug_2377_Regression/Hello.idl b/TAO/orbsvcs/tests/Bug_2377_Regression/Hello.idl
new file mode 100644
index 00000000000..f6b6d7eb0b7
--- /dev/null
+++ b/TAO/orbsvcs/tests/Bug_2377_Regression/Hello.idl
@@ -0,0 +1,9 @@
+// $Id$
+module Test {
+
+ interface Hello {
+ oneway void say_hello(in short count);
+ };
+
+
+};
diff --git a/TAO/orbsvcs/tests/Bug_2377_Regression/run_test.pl b/TAO/orbsvcs/tests/Bug_2377_Regression/run_test.pl
new file mode 100755
index 00000000000..322eeff3e7e
--- /dev/null
+++ b/TAO/orbsvcs/tests/Bug_2377_Regression/run_test.pl
@@ -0,0 +1,32 @@
+eval '(exit $?0)' && eval 'exec perl -S $0 ${1+"$@"}'
+ & eval 'exec perl -S $0 $argv:q'
+ if 0;
+
+# $Id$
+# -*- perl -*-
+
+use lib '../../../../bin';
+use PerlACE::Run_Test;
+
+$dum_core = PerlACE::LocalFile ("core");
+$status = 0;
+unlink $dum_core;
+
+$HELLO = new PerlACE::Process ("uipmc_test", "");
+
+$prog = $HELLO->SpawnWaitKill (20);
+
+if ($prog != 0) {
+ print STDERR "ERROR: uipmc_test returned $prog\n";
+ $status = 1;
+}
+
+if (-e $dum_core) {
+ print STDERR "ERROR: uipmc_test core dumped\n";
+ $status = 1;
+}
+
+unlink $dum_core;
+
+exit $status;
+
diff --git a/TAO/orbsvcs/tests/Bug_2377_Regression/svc.conf b/TAO/orbsvcs/tests/Bug_2377_Regression/svc.conf
new file mode 100644
index 00000000000..1510ade0e8f
--- /dev/null
+++ b/TAO/orbsvcs/tests/Bug_2377_Regression/svc.conf
@@ -0,0 +1,5 @@
+dynamic UIPMC_Factory Service_Object * TAO_PortableGroup:_make_TAO_UIPMC_Protocol_Factory() ""
+static Resource_Factory "-ORBProtocolFactory IIOP_Factory -ORBProtocolFactory UIPMC_Factory"
+dynamic PortableGroup_Loader Service_Object * TAO_PortableGroup:_make_TAO_PortableGroup_Loader() ""
+static Server_Strategy_Factory "-ORBConcurrency reactive -ORBPOALock thread -ORBAllowReactivationOfSystemids 1"
+static Client_Strategy_Factory "-ORBProfileLock thread -ORBClientConnectionHandler MT"
diff --git a/TAO/orbsvcs/tests/InterfaceRepo/IFR_Inheritance_Test/IFR_Inheritance_Test.idl b/TAO/orbsvcs/tests/InterfaceRepo/IFR_Inheritance_Test/IFR_Inheritance_Test.idl
new file mode 100644
index 00000000000..55d1cb99edb
--- /dev/null
+++ b/TAO/orbsvcs/tests/InterfaceRepo/IFR_Inheritance_Test/IFR_Inheritance_Test.idl
@@ -0,0 +1,33 @@
+// $Id$
+#ifndef __IFR_INHERITANCE_TEST_DEFINED
+#define __IFR_INHERITANCE_TEST_DEFINED
+
+module IFR_Test
+{
+ typedef sequence<string> NameList;
+
+ interface InterfaceRoot
+ {
+ readonly attribute string root_attr1;
+ attribute string root_attr2;
+
+ void get_root(in string root_name, out InterfaceRoot iroot);
+
+ readonly attribute string root_attr3;
+
+ NameList get_all_roots();
+ };
+
+ interface SubInterface : InterfaceRoot
+ {
+ attribute long sub_attr1;
+
+ void set_sub(in string sub_name);
+
+ NameList get_all_subs();
+
+ readonly attribute string sub_attr2;
+ };
+};
+
+#endif
diff --git a/TAO/orbsvcs/tests/InterfaceRepo/IFR_Inheritance_Test/IFR_Inheritance_Test.mpc b/TAO/orbsvcs/tests/InterfaceRepo/IFR_Inheritance_Test/IFR_Inheritance_Test.mpc
new file mode 100644
index 00000000000..858b1fdd3ee
--- /dev/null
+++ b/TAO/orbsvcs/tests/InterfaceRepo/IFR_Inheritance_Test/IFR_Inheritance_Test.mpc
@@ -0,0 +1,11 @@
+// -*- MPC -*-
+// $Id$
+
+project: taoexe, ifr_client, portableserver {
+ exename = IFR_Inheritance_Test
+
+ IDL_Files {
+ // exclude this file
+ !IFR_Inheritance_Test.idl
+ }
+}
diff --git a/TAO/orbsvcs/tests/InterfaceRepo/IFR_Inheritance_Test/README b/TAO/orbsvcs/tests/InterfaceRepo/IFR_Inheritance_Test/README
new file mode 100644
index 00000000000..5948342f0c9
--- /dev/null
+++ b/TAO/orbsvcs/tests/InterfaceRepo/IFR_Inheritance_Test/README
@@ -0,0 +1,75 @@
+$Id$
+
+This is a simple test showing that Interface inheritance
+is supported by the Interface Repository.
+
+ --- The test should output: ---
+operation InterfaceRoot::get_root
+operation InterfaceRoot::get_all_roots
+attribute InterfaceRoot::root_attr1
+attribute InterfaceRoot::root_attr2
+attribute InterfaceRoot::root_attr3
+operation SubInterface::get_root
+operation SubInterface::get_all_roots
+operation SubInterface::set_sub
+operation SubInterface::get_all_subs
+attribute SubInterface::root_attr1
+attribute SubInterface::root_attr2
+attribute SubInterface::root_attr3
+attribute SubInterface::sub_attr1
+attribute SubInterface::sub_attr2
+
+Thanks to Bryan Cassell <BryanCassell@iti-team.com> for identifying
+problem and providing non-automated test code.
+
+
+To build this test, the TAO library, the TypeCodeFactory
+library, the Interface Repository (the last two found in
+TAO/orbsvcs/IFR_Service), and these test files must all be built.
+In addition, the Interface Repository requires the TAO_Svc_Utils
+library in TAO/orbsvcs/orbsvcs.
+
+To run this test, either use the Perl script run_test.pl, or
+
+
+
+(Windows)
+start the Interface Repository by typing
+
+ ..\..\..\IFR_Service\IFR_Service
+
+in one window, then (in another window)
+
+REM may need this to avoid error finding CL.EXE
+"C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\bin\vcvars32.bat"
+
+%ACE_ROOT%\bin\tao_ifr IFR_Inheritance_Test.idl -ORBInitRef InterfaceRepository=file://if_repo.ior
+
+and then
+
+ IFR_Inheritance_Test -ORBInitRef InterfaceRepository=file://if_repo.ior
+
+(Unix)
+in this directory, type
+
+ ../../../IFR_Service/IFR_Service &
+
+then
+
+%TAO_ROOT%/orbsvcs/IFR_Service/tao_ifr IFR_Inheritance_Test.idl -ORBInitRef InterfaceRepository=file://if_repo.ior
+
+and then
+ ./IFR_Inheritance_Test -ORBInitRef InterfaceRepository=file://if_repo.ior
+
+
+
+You may use IP multicast discovery by starting the server with "-m 1"
+and use the default multicast address for the InterfaceRepository.
+
+ ../../../IFR_Service/IFR_Service -m 1
+
+and
+
+ ./IFR_Inheritance_Test
+
+- Scott Harris <harris_s@ociweb.com> \ No newline at end of file
diff --git a/TAO/orbsvcs/tests/InterfaceRepo/IFR_Inheritance_Test/run_test.pl b/TAO/orbsvcs/tests/InterfaceRepo/IFR_Inheritance_Test/run_test.pl
new file mode 100755
index 00000000000..cdbe13a4a8f
--- /dev/null
+++ b/TAO/orbsvcs/tests/InterfaceRepo/IFR_Inheritance_Test/run_test.pl
@@ -0,0 +1,156 @@
+eval '(exit $?0)' && eval 'exec perl -S $0 ${1+"$@"}'
+ & eval 'exec perl -S $0 $argv:q'
+ if 0;
+
+# $Id$
+# -*- perl -*-
+
+use lib "../../../../../bin";
+use PerlACE::Run_Test;
+use strict;
+
+my %isa = ();
+$isa{"InterfaceRoot::get_root"} = "operation";
+$isa{"InterfaceRoot::get_all_roots"} = "operation";
+$isa{"InterfaceRoot::root_attr1"} = "attribute";
+$isa{"InterfaceRoot::root_attr2"} = "attribute";
+$isa{"InterfaceRoot::root_attr3"} = "attribute";
+$isa{"SubInterface::get_root"} = "operation";
+$isa{"SubInterface::get_all_roots"} = "operation";
+$isa{"SubInterface::set_sub"} = "operation";
+$isa{"SubInterface::get_all_subs"} = "operation";
+$isa{"SubInterface::root_attr1"} = "attribute";
+$isa{"SubInterface::root_attr2"} = "attribute";
+$isa{"SubInterface::root_attr3"} = "attribute";
+$isa{"SubInterface::sub_attr1"} = "attribute";
+$isa{"SubInterface::sub_attr2"} = "attribute";
+
+my %got = ();
+$got{"InterfaceRoot::get_root"} = 13;
+$got{"InterfaceRoot::get_all_roots"} = 13;
+$got{"InterfaceRoot::root_attr1"} = 13;
+$got{"InterfaceRoot::root_attr2"} = 13;
+$got{"InterfaceRoot::root_attr3"} = 13;
+$got{"SubInterface::get_root"} = 13;
+$got{"SubInterface::get_all_roots"} = 13;
+$got{"SubInterface::set_sub"} = 13;
+$got{"SubInterface::get_all_subs"} = 13;
+$got{"SubInterface::root_attr1"} = 13;
+$got{"SubInterface::root_attr2"} = 13;
+$got{"SubInterface::root_attr3"} = 13;
+$got{"SubInterface::sub_attr1"} = 13;
+$got{"SubInterface::sub_attr2"} = 13;
+
+my $iorfile = "if_repo.ior";
+
+my $testoutputfilename = "IFR_Inheritance_test.output";
+
+unlink $testoutputfilename;
+
+my $status = 0;
+
+unlink $iorfile;
+
+my $SV = new PerlACE::Process ("../../../IFR_Service/IFR_Service", " -o $iorfile" );
+
+my $CL = new PerlACE::Process ("IFR_Inheritance_Test",
+ " -ORBInitRef InterfaceRepository=file://$iorfile");
+
+# The location of the tao_idl utility - depends on O/S
+my $tao_ifr = "undefined";
+if ($^O eq "MSWin32")
+{
+ $tao_ifr = "../../../../../bin/tao_ifr";
+}
+else
+{
+ $tao_ifr = "../../../IFR_Service/tao_ifr";
+}
+
+# Compile the IDL
+#
+my $TAO_IFR = new PerlACE::Process("$tao_ifr",
+ "IFR_Inheritance_Test.idl"
+ . " -ORBInitRef InterfaceRepository=file://$iorfile");
+
+$SV->Spawn ();
+
+if (PerlACE::waitforfile_timed ($iorfile, 15) == -1) {
+ print STDERR "ERROR: cannot find file <$iorfile>\n";
+ $SV->Kill ();
+ exit 1;
+}
+
+if( $TAO_IFR->SpawnWaitKill(10) != 0 )
+{
+ print STDERR "ERROR: can't compile IDL\n";
+ $TAO_IFR->Kill ();
+ $status = 1;
+ exit $status;
+}
+
+# Redirect STDERR to a log file so that
+# we can make sure that we got a warning
+open(SAVE, ">&STDOUT");
+open(STDOUT, ">$testoutputfilename");
+
+my $client = $CL->SpawnWaitKill (60);
+
+# Close the log file and restore STDERR
+close(STDOUT);
+open(STDOUT, ">&SAVE");
+
+
+my $type = "";
+my $name = "";
+open(THELOG, "< $testoutputfilename") or die "could not open the saved log";
+while (<THELOG>) {
+ if (/^attribute/ || "^operation") {
+ chomp($_);
+ ($type, $name) = split(/ /, $_);
+ #print "found $type $name\n";
+ if ($isa{$name} eq $type) {
+ #print "got $name\n";
+ $got{$name} = 1;
+ }
+ else {
+ print STDERR "ERROR: $type $name was not expected\n";
+ $status = 1;
+ }
+ }
+ else {
+ print STDOUT "ERROR: unexpected line: $_\n";
+ }
+}
+close(THELOG);
+
+### did we get all of the expected attributes and operations?
+my $key = "";
+foreach $key (keys (%got)) {
+ #print "got\{$key\} = $got{$key}\n";
+ if (! exists $isa{$key} ) {
+ print STDERR "CONFIG ERROR: \$got has $key but \$isa does not\n";
+ $status = 1;
+ }
+ if ($got{$key} == 13) {
+ print STDERR "ERROR: $isa{$key} $key was not found\n";
+ $status = 1;
+ }
+}
+
+if ($client != 0) {
+ print STDERR "ERROR: client returned $client\n";
+ $status = 1;
+}
+
+my $server = $SV->TerminateWaitKill (5);
+
+if ($server != 0) {
+ print STDERR "ERROR: server returned $server\n";
+ $status = 1;
+}
+
+unlink $iorfile;
+
+exit $status;
+
diff --git a/TAO/orbsvcs/tests/LoadBalancing/GenericFactory/Application_Controlled/README b/TAO/orbsvcs/tests/LoadBalancing/GenericFactory/Application_Controlled/README
new file mode 100644
index 00000000000..107953609c2
--- /dev/null
+++ b/TAO/orbsvcs/tests/LoadBalancing/GenericFactory/Application_Controlled/README
@@ -0,0 +1,11 @@
+This program tests the application controlled membership support
+of the Cygnus load balancer. The aim is to allow the application
+to create the replicas and then forcefully add them as the members
+of the object group maintained by the Cygnus load balancer. When
+the clients make a request on the IOR exported by the load
+balancer, the load balancer makes use of the round robin algorithm
+to make a call on any of the object group members registered with
+the load balancer.
+
+Please see $TAO_ROOT/orbsvcs/orbsvcs/Loadbalancing for the implementations
+of the Cygnus load balancer.
diff --git a/TAO/orbsvcs/tests/LoadBalancing/GenericFactory/Infrastructure_Controlled/README b/TAO/orbsvcs/tests/LoadBalancing/GenericFactory/Infrastructure_Controlled/README
new file mode 100644
index 00000000000..679b3d67b4b
--- /dev/null
+++ b/TAO/orbsvcs/tests/LoadBalancing/GenericFactory/Infrastructure_Controlled/README
@@ -0,0 +1,8 @@
+This program tests the infrastructure controlled membership support
+of the Cygnus Load Balancer. The aim is to allow Cygnus to set the
+factories needed to create the "replicas", when the object group
+is created. This way, the load balancer can decide when to create
+the object group members.
+
+Please see $TAO_ROOT/orbsvcs/orbsvcs/Loadbalancing for the implementations
+of the Cygnus load balancer.
diff --git a/TAO/orbsvcs/tests/Notify/lib/common.cpp b/TAO/orbsvcs/tests/Notify/lib/common.cpp
new file mode 100644
index 00000000000..ff6f0bc6296
--- /dev/null
+++ b/TAO/orbsvcs/tests/Notify/lib/common.cpp
@@ -0,0 +1,56 @@
+// $Id$
+
+#include "common.h"
+
+#include "orbsvcs/CosNotifyCommC.h"
+#include "orbsvcs/CosNamingC.h"
+#include "ace/OS_NS_stdio.h"
+#include "ace/OS_NS_string.h"
+
+
+const char*
+Any_String (const CORBA::Any& any)
+{
+ static char out[256] = "";
+ CORBA::Short s;
+ CORBA::UShort us;
+ CORBA::Long l;
+ CORBA::ULong ul;
+ CORBA::ULongLong ull;
+ const char* str;
+
+ if (any >>= s)
+ {
+ ACE_OS::sprintf (out, ACE_INT16_FORMAT_SPECIFIER, s);
+ }
+ else if (any >>= us)
+ {
+ ACE_OS::sprintf (out, ACE_UINT16_FORMAT_SPECIFIER, us);
+ }
+ else if (any >>= l)
+ {
+ ACE_OS::sprintf (out, ACE_INT32_FORMAT_SPECIFIER, l);
+ }
+ else if (any >>= ul)
+ {
+ ACE_OS::sprintf (out, ACE_UINT32_FORMAT_SPECIFIER, ul);
+ }
+ else if (any >>= str)
+ {
+ ACE_OS::strcpy (out, str);
+ }
+ else if (any >>= ull)
+ {
+#if defined (ACE_LACKS_LONGLONG_T)
+ ACE_OS::strcpy (out, ull.as_string (out));
+#else
+ ACE_OS::sprintf (out, ACE_UINT64_FORMAT_SPECIFIER, ull);
+#endif /* ACE_LACKS_LONGLONG_T */
+ }
+ else
+ {
+ ACE_OS::strcpy (out, "Unsupported Any Type");
+ }
+
+ return out;
+}
diff --git a/TAO/orbsvcs/tests/Notify/lib/common.h b/TAO/orbsvcs/tests/Notify/lib/common.h
new file mode 100644
index 00000000000..7704baa6a25
--- /dev/null
+++ b/TAO/orbsvcs/tests/Notify/lib/common.h
@@ -0,0 +1,36 @@
+/* -*- C++ -*- */
+// $Id$
+// ==========================================================================
+//
+// = LIBRARY
+// TAO/orbsvcs/tests/Notify/lib
+//
+// = FILENAME
+// common.h
+//
+// = DESCRIPTION
+// A couple of useful functions
+//
+// = AUTHOR
+// Chad Elliott <elliott_c@ociweb.com>
+//
+// ==========================================================================
+#ifndef TAO_COMMON_H
+#define TAO_COMMON_H
+
+#include /**/ "ace/pre.h"
+
+#include "notify_test_export.h"
+
+#if !defined (ACE_LACKS_PRAGMA_ONCE)
+# pragma once
+#endif /* ACE_LACKS_PRAGMA_ONCE */
+
+#include "orbsvcs/CosNotifyChannelAdminS.h"
+
+
+TAO_NOTIFY_TEST_Export
+const char* Any_String (const CORBA::Any& any);
+
+#include /**/ "ace/post.h"
+#endif /* TAO_COMMON_H */
diff --git a/TAO/orbsvcs/tests/Security/MT_SSLIOP/run_test_harsh.pl b/TAO/orbsvcs/tests/Security/MT_SSLIOP/run_test_harsh.pl
new file mode 100755
index 00000000000..0bdb4fe461c
--- /dev/null
+++ b/TAO/orbsvcs/tests/Security/MT_SSLIOP/run_test_harsh.pl
@@ -0,0 +1,64 @@
+eval '(exit $?0)' && eval 'exec perl -S $0 ${1+"$@"}'
+ & eval 'exec perl -S $0 $argv:q'
+ if 0;
+
+# $Id$
+# -*- perl -*-
+
+use lib '../../../../../bin';
+use PerlACE::Run_Test;
+
+$status = 0;
+$threads = '4';
+$iorfile = PerlACE::LocalFile ("test.ior");
+$sv_conf = PerlACE::LocalFile ("server$PerlACE::svcconf_ext");
+$cl_conf = PerlACE::LocalFile ("client$PerlACE::svcconf_ext");
+
+unlink $iorfile;
+
+$SV = new PerlACE::Process ("server", "-ORBsvcconf $sv_conf -o $iorfile -n $threads");
+
+$CL1 = new PerlACE::Process
+ ("client", "-k file://$iorfile -n 10 -i 1000 -ORBSvcConf $cl_conf");
+
+$CLS = new PerlACE::Process
+ ("client", "-k file://$iorfile -n 10 -i 1000 -ORBSvcConf $cl_conf -x");
+
+$SV->Spawn ();
+
+if (PerlACE::waitforfile_timed ($iorfile, 5) == -1) {
+ print STDERR "ERROR: cannot find file <$iorfile>\n";
+ $SV->Kill ();
+ exit 1;
+}
+
+$CL1->Spawn ();
+$client = $CL1->WaitKill (480);
+
+if ($client != 0) {
+ print STDERR "ERROR: client returned $client\n";
+ $status = 1;
+}
+
+$client = $CLS->SpawnWaitKill (480);
+
+if ($client != 0) {
+ print STDERR "ERROR: client returned $client\n";
+ $status = 1
+}
+
+$server = $SV->WaitKill (5);
+
+if ($server != 0) {
+ print STDERR "ERROR: server returned $server\n";
+ $status = 1
+}
+
+unlink $iorfile;
+
+exit $status
+
+
+
+
+
diff --git a/TAO/orbsvcs/tests/Security/MT_SSLIOP/run_test_heavy.pl b/TAO/orbsvcs/tests/Security/MT_SSLIOP/run_test_heavy.pl
new file mode 100644
index 00000000000..ad20195c287
--- /dev/null
+++ b/TAO/orbsvcs/tests/Security/MT_SSLIOP/run_test_heavy.pl
@@ -0,0 +1,65 @@
+
+eval '(exit $?0)' && eval 'exec perl -S $0 ${1+"$@"}'
+ & eval 'exec perl -S $0 $argv:q'
+ if 0;
+
+# $Id$
+# -*- perl -*-
+
+use lib '../../../../../bin';
+use PerlACE::Run_Test;
+
+$status = 0;
+$threads = '100';
+$iorfile = PerlACE::LocalFile ("test.ior");
+$sv_conf = PerlACE::LocalFile ("server$PerlACE::svcconf_ext");
+$cl_conf = PerlACE::LocalFile ("client$PerlACE::svcconf_ext");
+
+unlink $iorfile;
+
+$SV = new PerlACE::Process ("server", "-ORBsvcconf $sv_conf -o $iorfile -n $threads");
+
+$CL1 = new PerlACE::Process
+ ("client", "-k file://$iorfile -n 20 -i 10000 -ORBSvcConf $cl_conf");
+
+$CLS = new PerlACE::Process
+ ("client", "-k file://$iorfile -n 20 -i 10000 -ORBSvcConf $cl_conf -x");
+
+$SV->Spawn ();
+
+if (PerlACE::waitforfile_timed ($iorfile, 5) == -1) {
+ print STDERR "ERROR: cannot find file <$iorfile>\n";
+ $SV->Kill ();
+ exit 1;
+}
+
+$CL1->Spawn ();
+$client = $CL1->WaitKill (600);
+
+if ($client != 0) {
+ print STDERR "ERROR: client returned $client\n";
+ $status = 1;
+}
+
+$client = $CLS->SpawnWaitKill (600);
+
+if ($client != 0) {
+ print STDERR "ERROR: client returned $client\n";
+ $status = 1
+}
+
+$server = $SV->WaitKill (5);
+
+if ($server != 0) {
+ print STDERR "ERROR: server returned $server\n";
+ $status = 1
+}
+
+unlink $iorfile;
+
+exit $status
+
+
+
+
+
diff --git a/TAO/performance-tests/CSD_Strategy/TestApps/ServerApp.cpp b/TAO/performance-tests/CSD_Strategy/TestApps/ServerApp.cpp
new file mode 100644
index 00000000000..1584ad68bd2
--- /dev/null
+++ b/TAO/performance-tests/CSD_Strategy/TestApps/ServerApp.cpp
@@ -0,0 +1,430 @@
+// $Id$
+#include "ServerApp.h"
+#include "TestInf/AppHelper.h"
+#include "TestInf/OrbRunner.h"
+#include "TestInf/AppShutdown.h"
+#include "TestInf/TestAppExceptionC.h"
+#include "TestServant/Foo_ClientEngine.h"
+#include "ace/OS.h"
+#include "ace/Get_Opt.h"
+#include "ace/Time_Value.h"
+#include "ace/High_Res_Timer.h"
+// To force static load the service.
+#include "tao/PI/PI.h"
+#include "tao/CSD_ThreadPool/CSD_ThreadPool.h"
+
+
+ServerApp::ServerApp()
+ : TestAppBase("CSD_PT_ServerApp"),
+ ior_filename_prefix_("foo"),
+ num_servants_(1),
+ num_csd_threads_(1),
+ num_orb_threads_(1),
+ num_remote_clients_(1),
+ num_collocated_clients_(0),
+ num_loops_(1),
+ use_csd_(1),
+ scenario_id_("UnknownScenarioId"),
+ trial_id_(0)
+{
+}
+
+
+ServerApp::~ServerApp()
+{
+}
+
+
+int
+ServerApp::run_i(int argc, char* argv[] ACE_ENV_ARG_DECL)
+{
+ int result = this->init(argc, argv ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+ if (result != 0)
+ {
+ return result;
+ }
+
+ this->poa_setup(ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+ this->csd_setup(ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+ this->servant_setup(ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+ this->collocated_setup();
+ this->poa_activate(ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+
+ ACE_High_Res_Timer timer;
+ timer.start();
+
+ this->run_collocated_clients(ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+ this->run_orb_event_loop(ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+
+
+ timer.stop();
+
+ ACE_Time_Value tv;
+ timer.elapsed_time(tv);
+
+ // Calling wait on ACE_Thread_Manager singleton to avoid the problem
+ // that the main thread might exit before all CSD Threads exit.
+
+ // Wait for all CSD task threads exit.
+ ACE_Thread_Manager::instance ()->wait ();
+
+ unsigned num_operations = this->stats_.total();
+
+ double ops_per_msec = (1.0 * num_operations) / tv.msec();
+
+ ACE_DEBUG((LM_DEBUG, "%s,%d,%d,%d,%.2f\n",
+ this->scenario_id_.c_str(),
+ this->trial_id_,
+ num_operations,
+ tv.msec(),
+ ops_per_msec));
+
+ this->cleanup();
+ return this->check_results () ? 0 : -1;
+}
+
+
+int
+ServerApp::init(int argc, char* argv[] ACE_ENV_ARG_DECL)
+{
+ this->orb_ = CORBA::ORB_init(argc, argv, "" ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+
+ // Parse the command-line args for this application.
+ // * Raises -1 if problems are encountered.
+ // * Returns 1 if the usage statement was explicitly requested.
+ // * Returns 0 otherwise.
+ int result = this->parse_args(argc, argv);
+
+ if (result != 0)
+ {
+ return result;
+ }
+
+ TheAppShutdown->init(this->orb_.in(),
+ this->num_remote_clients_ +
+ this->num_collocated_clients_
+ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+
+ return 0;
+}
+
+
+void
+ServerApp::poa_setup(ACE_ENV_SINGLE_ARG_DECL)
+{
+ this->poa_ = this->create_poa(this->orb_.in(),
+ "ChildPoa"
+ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK;
+}
+
+
+void
+ServerApp::csd_setup(ACE_ENV_SINGLE_ARG_DECL)
+{
+ this->tp_strategy_ = new TAO::CSD::TP_Strategy(this->num_csd_threads_);
+
+ if (this->use_csd_ > 0)
+ {
+ if (!this->tp_strategy_->apply_to(this->poa_.in() ACE_ENV_ARG_PARAMETER))
+ {
+ ACE_ERROR((LM_ERROR,
+ "Failed to apply CSD strategy to poa.\n"));
+ ACE_THROW(TestAppException());
+ }
+ ACE_CHECK;
+ }
+}
+
+
+void
+ServerApp::servant_setup(ACE_ENV_SINGLE_ARG_DECL)
+{
+ this->servants_.create_and_activate(this->num_servants_,
+ this->orb_.in (),
+ this->poa_.in (),
+ this->ior_filename_prefix_.c_str()
+ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK;
+}
+
+
+void
+ServerApp::collocated_setup()
+{
+ int client_id = this->num_remote_clients_;
+
+ for (unsigned i = 0; i < this->num_collocated_clients_; i++)
+ {
+ ++client_id;
+
+ // Dole out the servant object references in a round-robin fashion.
+ unsigned servant_index = i % this->num_servants_;
+
+ ServantListType::T_stub_var obj = this->servants_.objref(servant_index);
+
+ ClientEngine_Handle engine = new Foo_ClientEngine(obj.in(), client_id);
+
+ this->collocated_client_task_.add_engine(engine.in());
+ }
+
+ this->collocated_client_task_.num_loops(this->num_loops_);
+}
+
+
+void
+ServerApp::poa_activate(ACE_ENV_SINGLE_ARG_DECL)
+{
+ PortableServer::POAManager_var poa_manager
+ = this->poa_->the_POAManager(ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK;
+
+ poa_manager->activate(ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK;
+}
+
+
+void
+ServerApp::run_collocated_clients(ACE_ENV_SINGLE_ARG_DECL)
+{
+ if (this->num_collocated_clients_ > 0)
+ {
+ if (this->collocated_client_task_.open() == -1)
+ {
+ ACE_THROW (TestAppException ());
+ }
+ }
+}
+
+
+void
+ServerApp::run_orb_event_loop(ACE_ENV_SINGLE_ARG_DECL)
+{
+ OrbRunner orb_runner(this->orb_.in(), this->num_orb_threads_);
+ orb_runner.run(ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK;
+ TheAppShutdown->wait ();
+}
+
+
+void
+ServerApp::cleanup()
+{
+}
+
+
+int
+ServerApp::parse_args(int argc, char* argv[])
+{
+ this->exe_name_ = argv[0];
+
+ ACE_Get_Opt get_opts(argc, argv, "p:s:n:t:r:c:l:u:x:z:");
+
+ int c;
+
+ while ((c = get_opts()) != -1)
+ {
+ int result = 0;
+ switch (c)
+ {
+ case 'p':
+ this->ior_filename_prefix_ = get_opts.opt_arg();
+ break;
+
+ case 's':
+ result = this->set_arg(this->num_servants_,
+ get_opts.opt_arg(),
+ c,
+ "num_servants",
+ 1);
+ break;
+
+ case 'n':
+ result = this->set_arg(this->num_csd_threads_,
+ get_opts.opt_arg(),
+ c,
+ "num_servants",
+ 1);
+ break;
+
+ case 't':
+ result = this->set_arg(this->num_orb_threads_,
+ get_opts.opt_arg(),
+ c,
+ "num_orb_threads",
+ 1);
+ break;
+
+ case 'r':
+ result = this->set_arg(this->num_remote_clients_,
+ get_opts.opt_arg(),
+ c,
+ "num_remote_clients");
+ break;
+
+ case 'c':
+ result = this->set_arg(this->num_collocated_clients_,
+ get_opts.opt_arg(),
+ c,
+ "num_collocated_clients");
+ break;
+
+ case 'l':
+ result = this->set_arg(this->num_loops_,
+ get_opts.opt_arg(),
+ c,
+ "num_loops",
+ 1);
+ break;
+
+ case 'u':
+ result = this->set_arg(this->use_csd_,
+ get_opts.opt_arg(),
+ c,
+ "use_csd_flag");
+ break;
+
+ case 'x':
+ this->scenario_id_ = get_opts.opt_arg();
+ break;
+
+ case 'z':
+ result = this->set_arg(this->trial_id_,
+ get_opts.opt_arg(),
+ c,
+ "trial_id_number",
+ 1);
+ break;
+
+ case '?':
+ this->usage_statement();
+ return 1;
+
+ default:
+ this->usage_statement();
+ return -1;
+ }
+
+ if (result != 0)
+ {
+ return result;
+ }
+ }
+
+ return this->arg_dependency_checks();
+}
+
+void
+ServerApp::usage_statement()
+{
+ ACE_ERROR((LM_ERROR,
+ "Usage: %s [options]\n\n"
+ "OPTIONS:\n\n"
+ "\t[-p <ior_filename_prefix>]\n"
+ "\t[-s <num_servants>]\n"
+ "\t[-n <num_csd_threads>]\n"
+ "\t[-t <num_orb_threads>]\n"
+ "\t[-r <num_remote_clients>]\n"
+ "\t[-c <num_collocated_clients>]\n"
+ "\t[-l <num_loops>]\n"
+ "\t[-u <use_csd_flag>]\n"
+ "\t[-x <scenario_id_string>]\n"
+ "\t[-z <trial_id_number>]\n"
+ "\t[-?]\n\n",
+ this->exe_name_.c_str()));
+}
+
+
+int
+ServerApp::arg_dependency_checks()
+{
+ return (this->num_remote_clients_
+ + this->num_collocated_clients_) > 0 ? 0 : -1;
+}
+
+
+int
+ServerApp::set_arg(unsigned& value,
+ const char* arg,
+ char opt,
+ const char* name,
+ int min)
+{
+ int tmp = ACE_OS::atoi(arg);
+
+ if (tmp < min)
+ {
+ ACE_ERROR((LM_ERROR,
+ "Error: -%c <%s> must be integer type with a value of, "
+ "at least, %d.\n", opt, name, min));
+ this->usage_statement();
+ return -1;
+ }
+
+ value = tmp;
+ return 0;
+}
+
+
+PortableServer::POA_ptr
+ServerApp::create_poa(CORBA::ORB_ptr orb,
+ const char* poa_name
+ ACE_ENV_ARG_DECL)
+{
+ // Get the Root POA.
+ PortableServer::POA_var root_poa
+ = RefHelper<PortableServer::POA>::resolve_initial_ref(orb,
+ "RootPOA"
+ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK_RETURN (PortableServer::POA::_nil ());
+
+ // Get the POAManager from the Root POA.
+ PortableServer::POAManager_var poa_manager
+ = root_poa->the_POAManager(ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK_RETURN (PortableServer::POA::_nil ());
+
+ // Create the child POA Policies.
+ CORBA::PolicyList policies(0);
+ policies.length(0);
+
+ // Create the child POA
+ PortableServer::POA_var poa = AppHelper::create_poa(poa_name,
+ root_poa.in(),
+ poa_manager.in(),
+ policies
+ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK_RETURN (PortableServer::POA::_nil ());
+
+ // Give away the child POA_ptr from the POA_var variable.
+ return poa._retn();
+}
+
+
+bool
+ServerApp::check_results()
+{
+
+ this->stats_.init(this->num_remote_clients_ +
+ this->num_collocated_clients_,
+ this->num_loops_);
+
+ Foo_ClientEngine::expected_results(this->stats_);
+
+ for (unsigned i = 0; i < this->num_servants_; i++)
+ {
+ this->servants_.servant(i)->gather_stats(this->stats_);
+ }
+
+ this->stats_.actual_vs_expected();
+
+ return true;
+}
diff --git a/TAO/performance-tests/CSD_Strategy/TestApps/run_test.pl b/TAO/performance-tests/CSD_Strategy/TestApps/run_test.pl
new file mode 100755
index 00000000000..433747be660
--- /dev/null
+++ b/TAO/performance-tests/CSD_Strategy/TestApps/run_test.pl
@@ -0,0 +1,244 @@
+eval '(exit $?0)' && eval 'exec perl -S $0 ${1+"$@"}'
+ & eval 'exec perl -S $0 $argv:q'
+ if 0;
+
+# $Id$
+# -*- perl -*-
+
+use lib '../../../../bin';
+use PerlACE::Run_Test;
+
+# 5 Minute server timeout.
+my $server_timeout_secs = 300;
+
+my $status = 0;
+
+my $iorfname_prefix = "servant";
+my $num_servants = 1;
+my $num_orb_threads = 1;
+my $num_remote_clients = 1;
+my $num_csd_threads = 1;
+my $num_collocated_clients = 0;
+my $num_loops = 100;
+my $use_csd = 1;
+my $scenario_id = "UnsetScenarioId";
+my $trial_id = 1;
+
+my $i;
+my $j;
+my @iorfile;
+
+my $ARGC = @ARGV;
+
+if ($ARGC > 0)
+{
+ if ($ARGC > 3)
+ {
+ print STDERR "ERROR: Too many command-line arguments for $0.\n";
+ exit 1;
+ }
+
+ if ($ARGC < 2)
+ {
+ print STDERR "ERROR: Too few command-line arguments for $0.\n";
+ exit 1;
+ }
+
+ if ($ARGC > 2)
+ {
+ $num_loops = $ARGV[2];
+ }
+
+ $scenario_id = $ARGV[0];
+ $trial_id = $ARGV[1];
+
+ my $subtest = $scenario_id;
+
+ if ($subtest =~ /^x_(.+)$/)
+ {
+ $subtest = $1;
+ $use_csd = 0;
+ }
+
+ if ($subtest eq 'remote')
+ {
+ $num_remote_clients = 40;
+ }
+ elsif ($subtest eq 'collocated')
+ {
+ $num_remote_clients = 0;
+ $num_collocated_clients = 10;
+ }
+ elsif ($subtest eq 'remote_orbthreads')
+ {
+ $num_orb_threads = 5;
+ $num_remote_clients = 40;
+ }
+ elsif ($subtest eq 'remote_servants')
+ {
+ $num_servants = 5;
+ $num_remote_clients = 40;
+ }
+ elsif ($subtest eq 'remote_csdthreads')
+ {
+ $num_csd_threads = 5;
+ $num_servants = 5;
+ $num_remote_clients = 40;
+ }
+ elsif ($subtest eq 'remote_big')
+ {
+ $num_csd_threads = 5;
+ $num_servants = 10;
+ $num_orb_threads = 4;
+ $num_remote_clients = 40;
+ }
+ elsif ($subtest eq 'collocated_big')
+ {
+ $num_csd_threads = 5;
+ $num_servants = 10;
+ $num_remote_clients = 0;
+ $num_collocated_clients = 40;
+ }
+ elsif ($subtest eq 'big')
+ {
+ $num_csd_threads = 5;
+ $num_servants = 10;
+ $num_orb_threads = 4;
+ $num_remote_clients = 40;
+ $num_collocated_clients = 40;
+ }
+ elsif ($subtest eq 'remote_huge')
+ {
+ $num_csd_threads = 5;
+ $num_servants = 10;
+ $num_orb_threads = 4;
+ $num_remote_clients = 400;
+ $num_loops = $num_loops / 10;
+ # 15 minute server timeout
+ $server_timeout_secs = 1800;
+ }
+ elsif ($subtest eq 'collocated_huge')
+ {
+ $num_csd_threads = 20;
+ $num_servants = 10;
+ $num_remote_clients = 0;
+ $num_collocated_clients = 40;
+ }
+ elsif ($subtest eq 'usage')
+ {
+ print STDOUT "Usage: $0 [<subtest>]\n" .
+ "\n" .
+ "Supported <subtest> values:\n" .
+ "\n" .
+ "\tremote\n" .
+ "\tcollocated\n" .
+ "\tremote_orbthreads\n" .
+ "\tremote_servants\n" .
+ "\tremote_csdthreads\n" .
+ "\tremote_big\n" .
+ "\tcollocated_big\n" .
+ "\tbig\n" .
+ "\tremote_huge\n" .
+ "\tusage\n" .
+ "\n";
+ exit 0;
+ }
+ else
+ {
+ print STDERR "ERROR: invalid subtest argument for $0: $subtest\n";
+ exit 1;
+ }
+}
+
+#Delete old ior files.
+for ($i = 0; $i < $num_servants; $i++) {
+ my $servant_id = sprintf("%02d", ($i + 1));
+ $iorfile[$i] = PerlACE::LocalFile($iorfname_prefix . "_$servant_id.ior");
+ unlink $iorfile[$i];
+}
+
+if (PerlACE::is_vxworks_test()) {
+ $SV = new PerlACE::ProcessVX ("server_main",
+ "-p $iorfname_prefix " .
+ "-s $num_servants " .
+ "-n $num_csd_threads " .
+ "-t $num_orb_threads " .
+ "-r $num_remote_clients " .
+ "-c $num_collocated_clients " .
+ "-l $num_loops " .
+ "-u $use_csd " .
+ "-x $scenario_id " .
+ "-z $trial_id");
+}
+else {
+ $SV = new PerlACE::Process("server_main",
+ "-p $iorfname_prefix " .
+ "-s $num_servants " .
+ "-n $num_csd_threads " .
+ "-t $num_orb_threads " .
+ "-r $num_remote_clients " .
+ "-c $num_collocated_clients " .
+ "-l $num_loops " .
+ "-u $use_csd " .
+ "-x $scenario_id " .
+ "-z $trial_id");
+
+}
+
+
+$SV->Spawn();
+
+# Wait for the servant ior files created by server.
+for ($i = 0; $i < $num_servants; $i++) {
+ if (PerlACE::waitforfile_timed
+ ($iorfile[$i],
+ $PerlACE::wait_interval_for_process_creation) == -1) {
+ print STDERR "ERROR: cannot find file <$iorfile[$i]>\n";
+ $SV->Kill();
+ $SV->TimedWait(1);
+ exit 1;
+ }
+}
+
+my $count = 0;
+
+for ($i = 0; $i < $num_remote_clients; $i++)
+{
+ $client_id = $i+1;
+
+ # Round-robin assignment of servants to clients.
+ $j = $i % $num_servants;
+
+ $CLS[$i] = new PerlACE::Process("client_main",
+ "-i file://$iorfile[$j] ".
+ "-n $client_id " .
+ "-l $num_loops");
+
+ $CLS[$i]->Spawn();
+}
+
+for ($i = 0; $i < $num_remote_clients; $i++)
+{
+ $client = $CLS[$i]->WaitKill(600);
+
+ if ($client != 0)
+ {
+ print STDERR "ERROR: client $i returned $client\n";
+ $status = 1;
+ }
+}
+
+
+$server = $SV->WaitKill(600);
+
+if ($server != 0) {
+ print STDERR "ERROR: server returned $server\n";
+ $status = 1;
+}
+
+#Delete ior files generated by this run.
+for ($i = 0; $i < $num_servants; $i++) {
+ unlink $iorfile[$i];
+}
+
+exit $status;
diff --git a/TAO/performance-tests/CSD_Strategy/TestInf/ClientTask.cpp b/TAO/performance-tests/CSD_Strategy/TestInf/ClientTask.cpp
new file mode 100644
index 00000000000..c09255b1ae2
--- /dev/null
+++ b/TAO/performance-tests/CSD_Strategy/TestInf/ClientTask.cpp
@@ -0,0 +1,117 @@
+// $Id$
+// This may look like C, but it's really -*- C++ -*-
+#include "ClientTask.h"
+#include "tao/Exception.h"
+#include "ace/SString.h"
+
+
+ClientTask::ClientTask()
+ : failure_count_(0),
+ num_loops_(1)
+{
+}
+
+
+ClientTask::~ClientTask()
+{
+}
+
+
+void
+ClientTask::add_engine(ClientEngine* engine)
+{
+ // Pass in false so that _add_ref() is called.
+ ClientEngine_Handle engine_handle(engine,false);
+ this->engines_.push_back(engine_handle);
+}
+
+
+void
+ClientTask::num_loops(unsigned num_loops)
+{
+ this->num_loops_ = num_loops;
+}
+
+
+int
+ClientTask::open(void*)
+{
+ size_t num_threads = this->engines_.size();
+
+ if (num_threads == 0)
+ {
+ ACE_ERROR_RETURN((LM_ERROR,
+ "(%P|%t) ClientTask cannot activate 0 threads.\n"),
+ -1);
+ }
+
+ if (this->activate(THR_NEW_LWP | THR_JOINABLE, num_threads) != 0)
+ {
+ // Assumes that when activate returns non-zero return code that
+ // no threads were activated.
+ ACE_ERROR_RETURN((LM_ERROR,
+ "(%P|%t) ClientTask failed to activate "
+ "the %d client threads.\n", num_threads),
+ -1);
+ }
+
+ return 0;
+}
+
+
+int
+ClientTask::svc()
+{
+ ClientEngine_Handle engine;
+ unsigned num_loops;
+
+ {
+ GuardType guard(this->lock_);
+ this->engines_.get(engine, this->engines_.size() - 1);
+ this->engines_.pop_back();
+ num_loops = this->num_loops_;
+ }
+
+ ACE_TRY_NEW_ENV
+ {
+ if (engine->execute(num_loops ACE_ENV_ARG_PARAMETER) == false)
+ {
+ GuardType guard(this->lock_);
+ this->failure_count_++;
+ }
+ ACE_TRY_CHECK;
+ }
+ ACE_CATCHANY
+ {
+ ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION,
+ "ClientTask::svc Caught exception from execute():");
+
+ GuardType guard(this->lock_);
+ this->failure_count_ ++;
+ }
+ ACE_CATCHALL
+ {
+ ACE_ERROR((LM_ERROR,
+ "(%P|%t) ClientTask::svc caught unknown (...) exception "\
+ "in execute() " ));
+ GuardType guard(this->lock_);
+ this->failure_count_++;
+ }
+ ACE_ENDTRY;
+
+ return 0;
+}
+
+
+int
+ClientTask::close(u_long)
+{
+ return 0;
+}
+
+
+unsigned
+ClientTask::failure_count() const
+{
+ return this->failure_count_;
+}
diff --git a/TAO/performance-tests/CSD_Strategy/TestInf/csd_pt_testinf.mpc b/TAO/performance-tests/CSD_Strategy/TestInf/csd_pt_testinf.mpc
new file mode 100644
index 00000000000..39bea8a0c18
--- /dev/null
+++ b/TAO/performance-tests/CSD_Strategy/TestInf/csd_pt_testinf.mpc
@@ -0,0 +1,38 @@
+//$Id$
+project : taolib_with_idl, csd_threadpool {
+ sharedname = CSD_PT_TestInf
+ dynamicflags = CSD_PT_TESTINF_BUILD_DLL
+ idlflags += -Wb,export_macro=CSD_PT_TestInf_Export -Wb,export_include=CSD_PT_TestInf_Export.h
+ includes += $(TAO_ROOT)/tao
+
+ IDL_Files {
+ FooException.idl
+ TestAppException.idl
+ CancelledException.idl
+ CustomException.idl
+ }
+
+ Source_Files {
+ AppHelper.cpp
+ AppShutdown.cpp
+ ClientEngine.cpp
+ ClientTask.cpp
+ OrbRunner.cpp
+ OrbShutdownTask.cpp
+ OrbTask.cpp
+ TestAppBase.cpp
+ FooExceptionC.cpp
+ FooExceptionS.cpp
+ TestAppExceptionC.cpp
+ TestAppExceptionS.cpp
+ CancelledExceptionC.cpp
+ CancelledExceptionS.cpp
+ CustomExceptionC.cpp
+ CustomExceptionS.cpp
+ }
+
+ Template_Files {
+ ServantList_T.cpp
+ }
+
+}
diff --git a/TAO/performance-tests/CSD_Strategy/TestServant/Foo_i.h b/TAO/performance-tests/CSD_Strategy/TestServant/Foo_i.h
new file mode 100644
index 00000000000..47105f27393
--- /dev/null
+++ b/TAO/performance-tests/CSD_Strategy/TestServant/Foo_i.h
@@ -0,0 +1,45 @@
+// $Id$
+#ifndef FOO_I_H
+#define FOO_I_H
+
+#include "CSD_PT_TestServant_Export.h"
+#include "FooS.h"
+#include "Foo_Statistics.h"
+
+
+class CSD_PT_TestServant_Export Foo_i : public virtual POA_Foo
+{
+ public:
+
+ Foo_i();
+ virtual ~Foo_i();
+
+ virtual void op1(ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC((CORBA::SystemException));
+
+ virtual void op2(CORBA::Long value ACE_ENV_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC((CORBA::SystemException));
+
+ virtual CORBA::Long op3(CORBA::Long value ACE_ENV_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC((CORBA::SystemException));
+
+ virtual void op4(CORBA::Long value ACE_ENV_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC((CORBA::SystemException));
+
+ virtual void op5(ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC((CORBA::SystemException,
+ FooException));
+
+ virtual void done(ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC((CORBA::SystemException));
+
+
+ void gather_stats(Foo_Statistics& stats);
+
+
+ private:
+
+ unsigned op_count_[5];
+};
+
+#endif
diff --git a/TAO/tao/CSD_Framework.mpc b/TAO/tao/CSD_Framework.mpc
new file mode 100644
index 00000000000..51aa8cd4736
--- /dev/null
+++ b/TAO/tao/CSD_Framework.mpc
@@ -0,0 +1,38 @@
+//$Id$
+project : taolib, portableserver, core, pi {
+ sharedname = TAO_CSD_Framework
+ dynamicflags = TAO_CSD_FW_BUILD_DLL
+ includes += $(TAO_ROOT)/tao
+
+ Source_Files {
+ CSD_Framework
+ }
+
+ Header_Files {
+ CSD_Framework
+ }
+
+ Inline_Files {
+ CSD_Framework
+ }
+
+ Template_Files {
+ CSD_Framework
+ }
+
+ Resource_Files {
+ CSD_Framework
+ }
+
+ IDL_Files {
+ CSD_Framework
+ }
+
+ PIDL_Files {
+ CSD_Framework
+ }
+
+ Pkgconfig_Files {
+ CSD_Framework/TAO_CSD_Framework.pc.in
+ }
+}
diff --git a/TAO/tao/CSD_Framework/CSD_FW_Server_Request_Wrapper.cpp b/TAO/tao/CSD_Framework/CSD_FW_Server_Request_Wrapper.cpp
new file mode 100644
index 00000000000..f8cc7c0d008
--- /dev/null
+++ b/TAO/tao/CSD_Framework/CSD_FW_Server_Request_Wrapper.cpp
@@ -0,0 +1,465 @@
+// $Id$
+#include "tao/CSD_Framework/CSD_FW_Server_Request_Wrapper.h"
+#include "tao/debug.h"
+#include "tao/ORB_Constants.h"
+#include "tao/ORB_Core.h"
+#include "tao/Transport.h"
+#include "tao/CDR.h"
+
+
+ACE_RCSID (CSD_Framework,
+ FW_Server_Request_Wrapper,
+ "$Id$")
+
+#if !defined (__ACE_INLINE__)
+# include "tao/CSD_Framework/CSD_FW_Server_Request_Wrapper.inl"
+#endif /* ! __ACE_INLINE__ */
+
+TAO_BEGIN_VERSIONED_NAMESPACE_DECL
+
+TAO::CSD::FW_Server_Request_Wrapper::~FW_Server_Request_Wrapper()
+{
+ // Only delete the request if we cloned it.
+ if (this->is_clone_)
+ {
+ // Since this TAO_ServerRequest object is a clone, it
+ // "owns" the input and output CDR objects held by the
+ // incoming_ and outgoing_ data members, respectfully.
+ // Thus, for the clone case, the TAO_ServerRequest dtor
+ // needs to release (aka, delete) the CDR objects.
+ delete this->request_->incoming_;
+
+ // Get the start message block that reference to the data allocated
+ // on the heap.
+ if (this->request_->outgoing_ != 0)
+ {
+ char* buffer = this->request_->outgoing_->begin ()->base ();
+ delete [] buffer;
+ delete this->request_->outgoing_;
+ }
+ if (this->request_->operation_details_ != 0)
+ {
+ char* opname = (char*)this->request_->operation_details_->opname_;
+ delete [] opname;
+ delete this->request_->operation_details_;
+ }
+ delete this->request_;
+ }
+}
+
+
+// Assumes that the servant argument is not a NULL pointer.
+void
+TAO::CSD::FW_Server_Request_Wrapper::dispatch
+ (PortableServer::Servant servant
+ ACE_ENV_ARG_DECL)
+{
+ ACE_TRY
+ {
+ servant->_dispatch(*this->request_, 0 ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK;
+ }
+ // Only CORBA exceptions are caught here.
+ ACE_CATCHANY
+ {
+ if (this->request_->collocated())
+ {
+ // For collocated requests, we re-throw the exception.
+ ACE_RE_THROW;
+ }
+ else if (!this->request_->sync_with_server() &&
+ this->request_->response_expected() &&
+ !this->request_->deferred_reply())
+ {
+ // The request is a remote request that is expecting a reply.
+ this->request_->tao_send_reply_exception(ACE_ANY_EXCEPTION);
+ }
+ else if (TAO_debug_level > 0)
+ {
+ // It is unfortunate that an exception (probably a system
+ // exception) was thrown by the dispatch code (even by the
+ // user) when the client was not expecting a response.
+ // However, in this case, we cannot close the connection
+ // down, since it really isn't the client's fault.
+
+ ACE_ERROR ((LM_ERROR,
+ ACE_TEXT ("(%P|%t) exception thrown ")
+ ACE_TEXT ("but client is not waiting a response\n")));
+
+ ACE_PRINT_EXCEPTION (
+ ACE_ANY_EXCEPTION,
+ "FW_Server_Request_Wrapper::dispatch ()");
+ }
+ }
+#if defined (TAO_HAS_EXCEPTIONS)
+ ACE_CATCHALL
+ {
+ // @@ TODO some c++ exception or another, but what do we do with
+ // it?
+ // We are supposed to map it into a CORBA::UNKNOWN exception.
+ // BTW, this cannot be detected if using the <env> mapping. If
+ // we have native exceptions but no support for them in the ORB
+ // we should still be able to catch it. If we don't have native
+ // exceptions it couldn't have been raised in the first place!
+ CORBA::UNKNOWN exception (CORBA::SystemException::_tao_minor_code
+ (TAO_UNHANDLED_SERVER_CXX_EXCEPTION, 0),
+ CORBA::COMPLETED_MAYBE);
+
+ if (this->request_->collocated())
+ {
+ // For collocated requests, we re-throw the exception.
+ ACE_RE_THROW;
+ }
+ else if (!this->request_->sync_with_server() &&
+ this->request_->response_expected() &&
+ !this->request_->deferred_reply())
+ {
+ // The request is a remote request that is expecting a reply.
+ this->request_->tao_send_reply_exception(exception);
+ }
+ else if (TAO_debug_level > 0)
+ {
+ // It is unfortunate that an exception (probably a system
+ // exception) was thrown by the dispatch code (even by the
+ // user) when the client was not expecting a response.
+ // However, in this case, we cannot close the connection
+ // down, since it really isn't the client's fault.
+
+ ACE_ERROR ((LM_ERROR,
+ ACE_TEXT ("(%P|%t) exception thrown ")
+ ACE_TEXT ("but client is not waiting a response\n")));
+
+ ACE_PRINT_EXCEPTION (
+ exception,
+ "FW_Server_Request_Wrapper::dispatch ()");
+ }
+ }
+#endif /* TAO_HAS_EXCEPTIONS */
+
+ ACE_ENDTRY;
+}
+
+
+TAO_ServerRequest*
+TAO::CSD::FW_Server_Request_Wrapper::clone (TAO_ServerRequest*& request)
+{
+ // TBD-CSD: Ultimately add an argument for an allocator.
+ TAO_ServerRequest* clone_obj = this->create_new_request ();
+
+ if (clone_obj == 0)
+ {
+ return 0;
+ }
+
+ // TYPE: TAO_Pluggable_Messaging*
+ // ACTION: Assuming that a shallow-copy is ok here.
+ clone_obj->mesg_base_ = request->mesg_base_;
+
+ // TYPE: ACE_CString
+ // ACTION: Assignment performs deep-copy of string contents.
+ clone_obj->operation_ = request->operation_;
+
+ // TYPE: CORBA::Object_var
+ // ACTION: Assignment performs reference-counted copy of object ref.
+ clone_obj->forward_location_ = request->forward_location_;
+
+ // TYPE: TAO_InputCDR*
+ // ACTION: This *must* be "cloned".
+ if (request->incoming_ != 0)
+ {
+ clone_obj->incoming_ = this->clone (request->incoming_);
+ }
+
+ // TYPE: TAO_OutputCDR*
+ // ACTION: This *must* be "cloned".
+ if (request->outgoing_ != 0)
+ {
+ clone_obj->outgoing_ = this->create_new_output_cdr ();
+ }
+
+ // TYPE: TAO_Transport*
+ // ACTION: Assuming that a shallow-copy is ok here.
+ clone_obj->transport_ = request->transport_;
+
+ // TYPE: CORBA::Boolean
+ // ACTION: Primitive data type assignment.
+ clone_obj->response_expected_ = request->response_expected_;
+
+ // TYPE: CORBA::Boolean
+ // ACTION: Primitive data type assignment.
+ clone_obj->deferred_reply_ = request->deferred_reply_;
+
+ // TYPE: CORBA::Boolean
+ // ACTION: Primitive data type assignment.
+ clone_obj->sync_with_server_ = request->sync_with_server_;
+
+ // TYPE: CORBA::Boolean
+ // ACTION: Primitive data type assignment.
+ clone_obj->is_dsi_ = request->is_dsi_;
+
+ // TYPE: CORBA::ULong
+ // ACTION: Primitive data type assignment.
+ clone_obj->exception_type_ = request->exception_type_;
+
+ // TYPE: TAO_ORB_Core*
+ // ACTION: Assuming that a shallow-copy is ok here.
+ clone_obj->orb_core_ = request->orb_core_;
+
+ // TYPE: TAO_Service_Context
+ // ACTION: No copy/assignment operator, so adding/using a clone operation.
+ this->clone (request->request_service_context_, clone_obj->request_service_context_);
+
+ // TYPE: TAO_Service_Context
+ // ACTION: No copy/assignment operator, so adding/using a clone operation.
+ this->clone (request->reply_service_context_, clone_obj->reply_service_context_);
+
+ // TYPE: CORBA::ULong
+ // ACTION: Primitive data type assignment.
+ clone_obj->request_id_ = request->request_id_;
+
+ // TYPE: TAO_Tagged_Profile
+ // ACTION: No copy/assignment operator, so adding/using a clone operation.
+ this->clone (request->profile_, clone_obj->profile_);
+
+ // TYPE: CORBA::OctetSeq_var
+ // ACTION: Assignment performs reference-counted copy of sequence.
+ clone_obj->requesting_principal_ = request->requesting_principal_;
+
+ // TYPE: ptrdiff_t
+ // ACTION: Primitive data type assignment (unsigned integral type).
+ clone_obj->dsi_nvlist_align_ = request->dsi_nvlist_align_;
+
+ // TYPE: TAO_Operation_Details const * const
+ // ACTION: Need to clone this.
+ if (request->operation_details_ != 0)
+ {
+ ACE_ASSERT (request->incoming_ == 0);
+ if (this->clone (request->operation_details_,
+ clone_obj->operation_details_,
+ clone_obj->incoming_) == false)
+ {
+ return 0;
+ }
+ }
+
+ // TYPE: CORBA::Boolean
+ // ACTION: Primitive data type assignment.
+ clone_obj->argument_flag_ = request->argument_flag_;
+
+ //#if TAO_HAS_INTERCEPTORS == 1
+ // TYPE: size_t
+ // ACTION: Primitive data type assignment.
+ // Just leave this alone for a clone.
+ //
+ //clone_obj->interceptor_count_ = request->interceptor_count_;
+
+ // TYPE: TAO::PICurrent_Impl
+ // ACTION: Copy/assignment operator disabled on purpose.
+ // Just leave this alone for a clone.
+ //
+ // clone_obj->rs_pi_current_
+
+ // TYPE: TAO::PICurrent_Copy_Callback
+ // ACTION: No copy/assignment operator.
+ // Just leave this alone for a clone.
+ //
+ // clone_obj->pi_current_copy_callback_
+
+ // TYPE: CORBA::OctetSeq_var
+ // ACTION: Assignment performs reference-counted copy of sequence.
+ // Assuming that this is ok.
+ // Just leave this alone for a clone.
+ //
+ //clone_obj->result_seq_ = request->result_seq_;
+ //#endif /* TAO_HAS_INTERCEPTORS == 1 */
+
+ if (clone_obj->transport_ != 0)
+ {
+ clone_obj->transport_->assign_translators(clone_obj->incoming_,
+ clone_obj->outgoing_);
+ }
+ return clone_obj;
+}
+
+
+TAO_InputCDR*
+TAO::CSD::FW_Server_Request_Wrapper::clone (TAO_InputCDR*& from)
+{
+ TAO_InputCDR* clone_ptr = 0;
+ ACE_NEW_RETURN (clone_ptr,
+ TAO_InputCDR(*from),
+ 0);
+ return clone_ptr;
+}
+
+
+bool
+TAO::CSD::FW_Server_Request_Wrapper::clone (TAO_Operation_Details const *& from,
+ TAO_Operation_Details const *& to,
+ TAO_InputCDR*& cdr)
+{
+ TAO_Operation_Details *& from_non_const
+ = const_cast <TAO_Operation_Details *&>(from);
+
+ char* cloned_op_name = new char[from_non_const->opname_len_ + 1];
+ ACE_OS::strncpy(cloned_op_name, from_non_const->opname_, from_non_const->opname_len_);
+ cloned_op_name[from_non_const->opname_len_] = '\0';
+
+ TAO_OutputCDR outcdr;
+
+ if (! from_non_const->marshal_args (outcdr))
+ {
+ ACE_ERROR ((LM_ERROR,
+ ACE_TEXT("(%P|%T) TAO::CSD::FW_Server_Request_Wrapper::")
+ ACE_TEXT("clone TAO_Operation_Details failed\n")));
+ return false;
+ }
+
+ ACE_NEW_RETURN (cdr,
+ TAO_InputCDR (outcdr),
+ false);
+
+
+ // CSD-TBD: Eventually need to use allocators.
+
+ // CSD-TBD: Assert that this->ex_data_ and this->ex_count_ are both == 0
+ TAO_Operation_Details* to_non_const;
+ ACE_NEW_RETURN (to_non_const,
+ TAO_Operation_Details(cloned_op_name,
+ from_non_const->opname_len_,
+ from_non_const->argument_flag_,
+ 0,
+ 0,
+ 0,
+ 0),
+ false);
+
+
+ // DATA MEMBER: const char *opname_;
+ // DATA MEMBER: CORBA::ULong opname_len_;
+ // DATA MEMBER: CORBA::Boolean argument_flag_;
+ // DATA MEMBER: TAO::Argument **args_;
+ // DATA MEMBER: CORBA::ULong num_args_;
+ // DATA MEMBER: TAO::Exception_Data *ex_data_;
+ // DATA MEMBER: CORBA::ULong ex_count_;
+ //
+ // ACTION: None - handled in ctor
+ //
+
+ // DATA MEMBER: CORBA::ULong request_id_;
+ // DATA MEMBER: CORBA::Octet response_flags_;
+ // DATA MEMBER: TAO_Target_Specification::TAO_Target_Address addressing_mode_;
+ // DATA MEMBER: TAO_Service_Context request_service_info_;
+ // DATA MEMBER: TAO_Service_Context reply_service_info_;
+ //
+ // ACTION: Use assignment op to copy from "this" object to the clone.
+ //
+ to_non_const->request_id_ = from->request_id_;
+ to_non_const->response_flags_ = from->response_flags_;
+ to_non_const->addressing_mode_ = from->addressing_mode_;
+
+ // DATA MEMBER: TAO_Service_Context request_service_info_;
+ // DATA MEMBER: TAO_Service_Context reply_service_info_;
+ //
+ // ACTION: Use the TAO_Service_Context clone() method.
+ //
+ this->clone (from_non_const->request_service_info_, to_non_const->request_service_info_);
+ this->clone (from_non_const->reply_service_info_, to_non_const->reply_service_info_);
+
+ to = to_non_const;
+
+ return true;
+}
+
+
+void
+TAO::CSD::FW_Server_Request_Wrapper::clone (TAO_Tagged_Profile& from,
+ TAO_Tagged_Profile& to)
+{
+ to.orb_core_ = from.orb_core_;
+ to.discriminator_ = from.discriminator_;
+ to.object_key_extracted_ = from.object_key_extracted_;
+ to.object_key_ = from.object_key_;
+ to.profile_ = from.profile_;
+ to.profile_index_ = from.profile_index_;
+ to.type_id_ = from.type_id_;
+}
+
+
+void
+TAO::CSD::FW_Server_Request_Wrapper::clone (TAO_Service_Context& from,
+ TAO_Service_Context& to)
+{
+ to.service_context_ = from.service_context_;
+}
+
+TAO_ServerRequest*
+TAO::CSD::FW_Server_Request_Wrapper::create_new_request ()
+{
+ // Use one of constructor to create the TAO_ServerRequest object then
+ // reset the data members. This reduces the footprint due to a default
+ // TAO_ServerRequest constructor.
+ //
+ //TAO_ServerRequest (TAO_Pluggable_Messaging *mesg_base,
+ // TAO_InputCDR &input,
+ // TAO_OutputCDR &output,
+ // TAO_Transport *transport,
+ // TAO_ORB_Core *orb_core);
+
+ TAO_ServerRequest* request = 0;
+
+ TAO_InputCDR dummy_input ((ACE_Message_Block *)0); // empty input cdr stream
+ TAO_OutputCDR dummy_output ((char *)0, (size_t) 0); // empty output cdr stream
+ ACE_NEW_RETURN (request,
+ TAO_ServerRequest (0,
+ dummy_input,
+ dummy_output,
+ 0,
+ 0),
+ 0);
+
+ request->incoming_ = 0;
+ request->outgoing_ = 0;
+
+ return request;
+}
+
+
+TAO_OutputCDR*
+TAO::CSD::FW_Server_Request_Wrapper::create_new_output_cdr ()
+{
+ TAO_OutputCDR* cdr = 0;
+
+ // A buffer that we will use to initialise the CDR stream
+ char* repbuf = new char[ACE_CDR::DEFAULT_BUFSIZE];
+
+ ACE_CDR::Octet major;
+ ACE_CDR::Octet minor;
+ this->request_->outgoing_->get_version (major, minor);
+
+ // Initialze an output CDR on the stack
+ // NOTE: Don't jump to a conclusion as to why we are using the
+ // input_cdr and hence the global pool here. These pools will move
+ // to the lanes anyway at some point of time. Further, it would have
+ // been awesome to have this in TSS. But for some reason the cloning
+ // that happens when the ORB gets flow controlled while writing a
+ // reply is messing things up. We crash horribly. Doing this adds a
+ // lock, we need to set things like this -- put stuff in TSS here
+ // and transfer to global memory when we get flow controlled. We
+ // need to work on the message block to get it right!
+ ACE_NEW_RETURN (cdr,
+ TAO_OutputCDR (repbuf,
+ ACE_CDR::DEFAULT_BUFSIZE,
+ TAO_ENCAP_BYTE_ORDER,
+ this->request_->orb_core_->input_cdr_buffer_allocator (),
+ this->request_->orb_core_->input_cdr_dblock_allocator (),
+ this->request_->orb_core_->input_cdr_msgblock_allocator (),
+ this->request_->orb_core_->orb_params ()->cdr_memcpy_tradeoff (),
+ major,
+ minor),
+ 0);
+
+ return cdr;
+}
+
+TAO_END_VERSIONED_NAMESPACE_DECL
diff --git a/TAO/tao/CSD_Framework/CSD_FW_Server_Request_Wrapper.h b/TAO/tao/CSD_Framework/CSD_FW_Server_Request_Wrapper.h
new file mode 100644
index 00000000000..e76b4090487
--- /dev/null
+++ b/TAO/tao/CSD_Framework/CSD_FW_Server_Request_Wrapper.h
@@ -0,0 +1,131 @@
+// -*- C++ -*-
+
+//=============================================================================
+/**
+ * @file CSD_FW_Server_Request_Wrapper.h
+ *
+ * $Id$
+ *
+ * @author Tim Bradley <bradley_t@ociweb.com>
+ */
+//=============================================================================
+
+#ifndef TAO_CSD_FW_SERVER_REQUEST_WRAPPER_H
+#define TAO_CSD_FW_SERVER_REQUEST_WRAPPER_H
+
+#include /**/ "ace/pre.h"
+
+#include "tao/CSD_Framework/CSD_FW_Export.h"
+
+#if !defined (ACE_LACKS_PRAGMA_ONCE)
+# pragma once
+#endif /* ACE_LACKS_PRAGMA_ONCE */
+
+#include "tao/TAO_Server_Request.h"
+#include "tao/operation_details.h"
+#include "tao/PortableServer/Servant_Base.h"
+
+TAO_BEGIN_VERSIONED_NAMESPACE_DECL
+
+namespace TAO
+{
+ namespace CSD
+ {
+
+ /**
+ * @class FW_Server_Request_Wrapper
+ *
+ * @brief Wrapper around a TAO_Server_Request that will be cloned
+ * at the proper time.
+ *
+ * This CSD Framework class is used to provide an interface to a
+ * TAO_ServerRequest object such that it can be used for CSD strategies
+ * that need to clone TAO_Server_Requests (ie, so that they may be
+ * placed on a queue to be dispatched by another thread).
+ *
+ * There are several purposes for this class, with the main thing being
+ * that the TAO_ServerRequest object is not used directly by the
+ * CSD Strategies since it is, after all, an internal TAO class that was
+ * never meant to be exposed. Future changes to TAO's internal design
+ * may cause disruption in the TAO_ServerRequest class. These changes
+ * would only need to be accounted for here in this
+ * FW_Server_Request_Wrapper class' implementation, and all CSD
+ * Strategies will work again. It's a maintenance issue.
+ *
+ * @note: The CSD namespace is inside of TAO namespace in current
+ * implementation. This can be changed but, at least for now, it's
+ * already been delivered to some customs, we leave it as-is. If it
+ * needs to change, we will make this change.
+ */
+ class TAO_CSD_FW_Export FW_Server_Request_Wrapper
+ {
+ public:
+
+ /// Constructor.
+ FW_Server_Request_Wrapper(TAO_ServerRequest& server_request);
+
+ /// Destructor.
+ ~FW_Server_Request_Wrapper();
+
+ /// Perform the clone operation.
+ void clone();
+
+ /// Dispatch the request to the servant.
+ void dispatch(PortableServer::Servant servant ACE_ENV_ARG_DECL);
+
+ /// Cancel the request.
+ void cancel();
+
+
+ private:
+
+ /// Create a deep copy of the request_ object.
+ /// The other clone methods are used to support the TAO_ServerRequest clone.
+ TAO_ServerRequest* clone (TAO_ServerRequest*& from);
+
+ /// Clone an input cdr stream.
+ TAO_InputCDR* clone (TAO_InputCDR*& from);
+
+ /// Create a deep copy of a TAO_Operation_Details object and marshall
+ /// the arguments into a TAO_InputCDR stream. The cloned TAO_Operation_Details
+ /// object is created without any arguments. This would help the skeleton
+ /// code to determine whether the arguments are in the operation_details_
+ /// object or should be demarshalled from the incoming_ stream in the request_
+ /// object.
+ bool clone (TAO_Operation_Details const *& from,
+ TAO_Operation_Details const *& to,
+ TAO_InputCDR* & cdr);
+
+ /// Clone the TAO_Tagged_Profile object.
+ void clone (TAO_Tagged_Profile& from, TAO_Tagged_Profile& to);
+
+ /// Clone the TAO_Service_Context object.
+ void clone (TAO_Service_Context& from, TAO_Service_Context& to);
+
+ /// Create a new TAO_ServerRequest with default initial values.
+ TAO_ServerRequest* create_new_request ();
+
+ /// Create a TAO_OutputCDR stream initialized with a heap allocated
+ /// buffer.
+ TAO_OutputCDR* create_new_output_cdr ();
+
+ /// A flag that indicates that the TAO_ServerRequest object
+ /// is already cloned.
+ bool is_clone_;
+
+ /// Pointer to the underlying TAO_ServerRequest object.
+ TAO_ServerRequest* request_;
+ };
+
+ }
+}
+
+TAO_END_VERSIONED_NAMESPACE_DECL
+
+#if defined (__ACE_INLINE__)
+# include "tao/CSD_Framework/CSD_FW_Server_Request_Wrapper.inl"
+#endif /* __ACE_INLINE__ */
+
+#include /**/ "ace/post.h"
+
+#endif /* TAO_CSD_FW_SERVER_REQUEST_WRAPPER_H */
diff --git a/TAO/tao/CSD_Framework/CSD_FW_Server_Request_Wrapper.inl b/TAO/tao/CSD_Framework/CSD_FW_Server_Request_Wrapper.inl
new file mode 100644
index 00000000000..13d78a1664c
--- /dev/null
+++ b/TAO/tao/CSD_Framework/CSD_FW_Server_Request_Wrapper.inl
@@ -0,0 +1,46 @@
+// -*- C++ -*-
+//
+// $Id$
+
+TAO_BEGIN_VERSIONED_NAMESPACE_DECL
+
+ACE_INLINE
+TAO::CSD::FW_Server_Request_Wrapper::FW_Server_Request_Wrapper
+ (TAO_ServerRequest& server_request)
+ : is_clone_(false),
+ request_(&server_request)
+{
+}
+
+
+ACE_INLINE
+void
+TAO::CSD::FW_Server_Request_Wrapper::clone()
+{
+ // Only clone the TAO_Server_Request object if we have not performed the
+ // clone already. This really should only be called once, but this code
+ // makes sure that we do not introduce a leak.
+ if (!this->is_clone_)
+ {
+ this->request_ = this->clone (this->request_);
+ this->is_clone_ = true;
+ }
+}
+
+
+ACE_INLINE
+void
+TAO::CSD::FW_Server_Request_Wrapper::cancel()
+{
+ // We only need to handle remote requests that are expecting a reply.
+ if (!this->request_->collocated() &&
+ !this->request_->sync_with_server() &&
+ this->request_->response_expected() &&
+ !this->request_->deferred_reply())
+ {
+ CORBA::NO_IMPLEMENT ex;
+ this->request_->tao_send_reply_exception(ex);
+ }
+}
+
+TAO_END_VERSIONED_NAMESPACE_DECL
diff --git a/TAO/tao/CSD_Framework/CSD_Framework.pidl b/TAO/tao/CSD_Framework/CSD_Framework.pidl
new file mode 100644
index 00000000000..b0e78b39331
--- /dev/null
+++ b/TAO/tao/CSD_Framework/CSD_Framework.pidl
@@ -0,0 +1,77 @@
+// -*- IDL -*-
+/**
+ * @file CSD_Framework.pidl
+ *
+ * $Id$
+ *
+ * @brief Pre-compiled IDL source for the CSD_Framework module.
+ *
+ * This file was used to generate the code in
+ * CSD_FrameworkC.{h,inl,cpp}, using the following command:
+ *
+ * $ACE_ROOT/bin/tao_idl \
+ * -o orig -Gp -Gd -Ge 1 -Gt -Sc -GA -I$TAO_ROOT \
+ * -Wb,export_macro=TAO_CSD_FW_Export \
+ * -Wb,export_include="CSD_FW_Export.h" \
+ * -Wb,pre_include="ace/pre.h" \
+ * -Wb,post_include="ace/post.h" \
+ * -Wb,versioning_begin=TAO_BEGIN_VERSIONED_NAMESPACE_DECL \
+ * -Wb,versioning_end=TAO_END_VERSIONED_NAMESPACE_DECL \
+ * CSD_Framework.pidl
+ *
+ * After the file is generated a patch from the diffs directory must
+ * be applied. The patch:
+ *
+ * - Disables parts of the code under certain configurations.
+ *
+ * - Eliminates cycles in the include dependencies.
+ *
+ * - Adds non-idl components of CSD_Framework to the namespace.
+ * This includes (a) Servant (b) ServantBase (c) RefCountServantBase
+ * (d) Cookie (e) ObjectId_to_string (f) string_to_ObjectId (g)
+ * ObjectId_to_wstring (h) wstring_to_ObjectId (i) ServantBase_var
+ * (j) DynamicImplementation (k) LocalServantBase
+ *
+ * Apply patches using the following command:
+ *
+ * patch < diffs/CSD_Framework.diff
+ *
+ * Note: The diffs were generated using:
+ *
+ * rm diffs/CSD_Framework.diff
+ * for i in CSD_FrameworkC.{h,i,cpp}; do
+ * diff -wub orig/$i $i >> diffs/CSD_Framework.diff
+ * done
+ */
+
+#ifndef CSD_FRAMEWORK_PIDL
+#define CSD_FRAMEWORK_PIDL
+
+#include "tao/PortableServer/PortableServer.pidl"
+
+module CSD_Framework {
+
+ # pragma version CSD_Framework 2.3
+
+ // This is a common base interface for all CSD strategy
+ // implementations
+ local interface Strategy {
+
+ # pragma version Strategy 2.3
+
+ // This is support for a legacy method of supplying a strategy to a
+ // POA.
+ boolean apply_to(in PortableServer::POA p);
+ };
+
+ // Specialized POA providing a method to supply a strategy object to
+ // the POA.
+ local interface POA : PortableServer::POA {
+
+ # pragma version POA 2.3
+
+ void set_csd_strategy (in Strategy s);
+ };
+};
+
+#endif //CSD_FRAMEWORK_PIDL
diff --git a/TAO/tao/CSD_Framework/CSD_FrameworkA.cpp b/TAO/tao/CSD_Framework/CSD_FrameworkA.cpp
new file mode 100644
index 00000000000..267e866b903
--- /dev/null
+++ b/TAO/tao/CSD_Framework/CSD_FrameworkA.cpp
@@ -0,0 +1,76 @@
+// -*- C++ -*-
+//
+// $Id$
+
+// **** Code generated by the The ACE ORB (TAO) IDL Compiler ****
+// TAO and the TAO IDL Compiler have been developed by:
+// Center for Distributed Object Computing
+// Washington University
+// St. Louis, MO
+// USA
+// http://www.cs.wustl.edu/~schmidt/doc-center.html
+// and
+// Distributed Object Computing Laboratory
+// University of California at Irvine
+// Irvine, CA
+// USA
+// http://doc.ece.uci.edu/
+// and
+// Institute for Software Integrated Systems
+// Vanderbilt University
+// Nashville, TN
+// USA
+// http://www.isis.vanderbilt.edu/
+//
+// Information about TAO is available at:
+// http://www.cs.wustl.edu/~schmidt/TAO.html
+
+#include "tao/CSD_Framework/CSD_FrameworkA.h"
+#include "tao/AnyTypeCode/Null_RefCount_Policy.h"
+#include "tao/AnyTypeCode/TypeCode_Constants.h"
+#include "tao/AnyTypeCode/Alias_TypeCode_Static.h"
+#include "tao/AnyTypeCode/Objref_TypeCode_Static.h"
+#include "tao/AnyTypeCode/String_TypeCode_Static.h"
+#include "tao/AnyTypeCode/Any.h"
+#include "tao/CDR.h"
+#include "tao/AnyTypeCode/Any.h"
+#include "tao/AnyTypeCode/Any_Impl_T.h"
+
+TAO_BEGIN_VERSIONED_NAMESPACE_DECL
+
+// TAO_IDL - Generated from
+// c:\csd\ace_wrappers\tao\tao_idl\be\be_visitor_typecode/objref_typecode.cpp:76
+
+static TAO::TypeCode::Objref<char const *,
+ TAO::Null_RefCount_Policy>
+ _tao_tc_CSD_Framework_Strategy (
+ ::CORBA::tk_local_interface,
+ "IDL:CSD_Framework/Strategy:2.3",
+ "Strategy");
+
+namespace CSD_Framework
+{
+ ::CORBA::TypeCode_ptr const _tc_Strategy =
+ &_tao_tc_CSD_Framework_Strategy;
+}
+
+
+
+// TAO_IDL - Generated from
+// c:\csd\ace_wrappers\tao\tao_idl\be\be_visitor_typecode/objref_typecode.cpp:76
+
+static TAO::TypeCode::Objref<char const *,
+ TAO::Null_RefCount_Policy>
+ _tao_tc_CSD_Framework_POA (
+ ::CORBA::tk_local_interface,
+ "IDL:CSD_Framework/POA:2.3",
+ "POA");
+
+namespace CSD_Framework
+{
+ ::CORBA::TypeCode_ptr const _tc_POA =
+ &_tao_tc_CSD_Framework_POA;
+}
+
+
+TAO_END_VERSIONED_NAMESPACE_DECL
diff --git a/TAO/tao/CSD_Framework/CSD_FrameworkA.h b/TAO/tao/CSD_Framework/CSD_FrameworkA.h
new file mode 100644
index 00000000000..da09d57dec2
--- /dev/null
+++ b/TAO/tao/CSD_Framework/CSD_FrameworkA.h
@@ -0,0 +1,68 @@
+// -*- C++ -*-
+//
+// $Id$
+
+// **** Code generated by the The ACE ORB (TAO) IDL Compiler ****
+// TAO and the TAO IDL Compiler have been developed by:
+// Center for Distributed Object Computing
+// Washington University
+// St. Louis, MO
+// USA
+// http://www.cs.wustl.edu/~schmidt/doc-center.html
+// and
+// Distributed Object Computing Laboratory
+// University of California at Irvine
+// Irvine, CA
+// USA
+// http://doc.ece.uci.edu/
+// and
+// Institute for Software Integrated Systems
+// Vanderbilt University
+// Nashville, TN
+// USA
+// http://www.isis.vanderbilt.edu/
+//
+// Information about TAO is available at:
+// http://www.cs.wustl.edu/~schmidt/TAO.html
+
+// TAO_IDL - Generated from
+// .\be\be_codegen.cpp:754
+
+#ifndef _TAO_IDL_ORIG_CSD_FRAMEWORKA_H_
+#define _TAO_IDL_ORIG_CSD_FRAMEWORKA_H_
+
+#include /**/ "ace/pre.h"
+
+#include "tao/CSD_Framework/CSD_FW_Export.h"
+#include "tao/CSD_Framework/CSD_FrameworkC.h"
+//#include "tao/PortableServer/PortableServerA.h"
+
+
+TAO_BEGIN_VERSIONED_NAMESPACE_DECL
+
+// TAO_IDL - Generated from
+// c:\csd\ace_wrappers\tao\tao_idl\be\be_visitor_module/module_ch.cpp:59
+
+namespace CSD_Framework
+{
+
+ // TAO_IDL - Generated from
+ // c:\csd\ace_wrappers\tao\tao_idl\be\be_visitor_typecode/typecode_decl.cpp:49
+
+ extern TAO_CSD_FW_Export ::CORBA::TypeCode_ptr const _tc_Strategy;
+
+ // TAO_IDL - Generated from
+ // c:\csd\ace_wrappers\tao\tao_idl\be\be_visitor_typecode/typecode_decl.cpp:49
+
+ extern TAO_CSD_FW_Export ::CORBA::TypeCode_ptr const _tc_POA;
+
+// TAO_IDL - Generated from
+// c:\csd\ace_wrappers\tao\tao_idl\be\be_visitor_module/module_ch.cpp:86
+
+} // module CSD_Framework
+
+TAO_END_VERSIONED_NAMESPACE_DECL
+
+#include /**/ "ace/post.h"
+
+#endif /* ifndef */
diff --git a/TAO/tao/CSD_Framework/CSD_FrameworkC.h b/TAO/tao/CSD_Framework/CSD_FrameworkC.h
new file mode 100644
index 00000000000..e78eaf949ae
--- /dev/null
+++ b/TAO/tao/CSD_Framework/CSD_FrameworkC.h
@@ -0,0 +1,316 @@
+// -*- C++ -*-
+//
+// $Id$
+
+// **** Code generated by the The ACE ORB (TAO) IDL Compiler ****
+// TAO and the TAO IDL Compiler have been developed by:
+// Center for Distributed Object Computing
+// Washington University
+// St. Louis, MO
+// USA
+// http://www.cs.wustl.edu/~schmidt/doc-center.html
+// and
+// Distributed Object Computing Laboratory
+// University of California at Irvine
+// Irvine, CA
+// USA
+// http://doc.ece.uci.edu/
+// and
+// Institute for Software Integrated Systems
+// Vanderbilt University
+// Nashville, TN
+// USA
+// http://www.isis.vanderbilt.edu/
+//
+// Information about TAO is available at:
+// http://www.cs.wustl.edu/~schmidt/TAO.html
+
+// TAO_IDL - Generated from
+// .\be\be_codegen.cpp:154
+
+#ifndef _TAO_IDL_ORIG_CSD_FRAMEWORKC_H_
+#define _TAO_IDL_ORIG_CSD_FRAMEWORKC_H_
+
+#include /**/ "ace/pre.h"
+
+
+#include "ace/config-all.h"
+
+#if !defined (ACE_LACKS_PRAGMA_ONCE)
+# pragma once
+#endif /* ACE_LACKS_PRAGMA_ONCE */
+
+#include "tao/CSD_Framework/CSD_FW_Export.h"
+#include "tao/ORB.h"
+#include "tao/SystemException.h"
+#include "tao/Environment.h"
+#include "tao/Object.h"
+#include "tao/Objref_VarOut_T.h"
+
+#include "tao/PortableServer/PortableServer.h"
+
+#if defined (TAO_EXPORT_MACRO)
+#undef TAO_EXPORT_MACRO
+#endif
+#define TAO_EXPORT_MACRO TAO_CSD_FW_Export
+
+// TAO_IDL - Generated from
+// c:\csd\ace_wrappers\tao\tao_idl\be\be_visitor_module/module_ch.cpp:49
+
+TAO_BEGIN_VERSIONED_NAMESPACE_DECL
+
+namespace CSD_Framework
+{
+
+ // TAO_IDL - Generated from
+ // .\be\be_interface.cpp:646
+
+#if !defined (_CSD_FRAMEWORK_STRATEGY__VAR_OUT_CH_)
+#define _CSD_FRAMEWORK_STRATEGY__VAR_OUT_CH_
+
+ class Strategy;
+ typedef Strategy *Strategy_ptr;
+
+ typedef
+ TAO_Objref_Var_T<
+ Strategy
+ >
+ Strategy_var;
+
+ typedef
+ TAO_Objref_Out_T<
+ Strategy
+ >
+ Strategy_out;
+
+#endif /* end #if !defined */
+
+ // TAO_IDL - Generated from
+ // c:\csd\ace_wrappers\tao\tao_idl\be\be_visitor_interface/interface_ch.cpp:54
+
+#if !defined (_CSD_FRAMEWORK_STRATEGY_CH_)
+#define _CSD_FRAMEWORK_STRATEGY_CH_
+
+ class TAO_CSD_FW_Export Strategy
+ : public virtual ::CORBA::Object
+ {
+ public:
+ typedef Strategy_ptr _ptr_type;
+ typedef Strategy_var _var_type;
+
+ // The static operations.
+ static Strategy_ptr _duplicate (Strategy_ptr obj);
+
+ static void _tao_release (Strategy_ptr obj);
+
+ static Strategy_ptr _narrow (
+ ::CORBA::Object_ptr obj
+ ACE_ENV_ARG_DECL_WITH_DEFAULTS
+ );
+
+ static Strategy_ptr _unchecked_narrow (
+ ::CORBA::Object_ptr obj
+ ACE_ENV_ARG_DECL_WITH_DEFAULTS
+ );
+
+ static Strategy_ptr _nil (void)
+ {
+ return static_cast<Strategy_ptr> (0);
+ }
+
+
+
+ // TAO_IDL - Generated from
+ // c:\csd\ace_wrappers\tao\tao_idl\be\be_visitor_operation/operation_ch.cpp:46
+
+ virtual ::CORBA::Boolean apply_to (
+ ::PortableServer::POA_ptr p
+ ACE_ENV_ARG_DECL_WITH_DEFAULTS
+ )
+ ACE_THROW_SPEC ((
+ ::CORBA::SystemException
+ )) = 0;
+
+ // TAO_IDL - Generated from
+ // c:\csd\ace_wrappers\tao\tao_idl\be\be_visitor_interface/interface_ch.cpp:210
+
+ virtual ::CORBA::Boolean _is_a (
+ const char *type_id
+ ACE_ENV_ARG_DECL_WITH_DEFAULTS
+ );
+
+ virtual const char* _interface_repository_id (void) const;
+ virtual ::CORBA::Boolean marshal (TAO_OutputCDR &cdr);
+
+ protected:
+ // Abstract or local interface only.
+ Strategy (void);
+
+ virtual ~Strategy (void);
+
+ private:
+ // Private and unimplemented for concrete interfaces.
+ Strategy (const Strategy &);
+
+ void operator= (const Strategy &);
+ };
+
+#endif /* end #if !defined */
+
+ // TAO_IDL - Generated from
+ // .\be\be_interface.cpp:646
+
+#if !defined (_CSD_FRAMEWORK_POA__VAR_OUT_CH_)
+#define _CSD_FRAMEWORK_POA__VAR_OUT_CH_
+
+ class POA;
+ typedef POA *POA_ptr;
+
+ typedef
+ TAO_Objref_Var_T<
+ POA
+ >
+ POA_var;
+
+ typedef
+ TAO_Objref_Out_T<
+ POA
+ >
+ POA_out;
+
+#endif /* end #if !defined */
+
+ // TAO_IDL - Generated from
+ // c:\csd\ace_wrappers\tao\tao_idl\be\be_visitor_interface/interface_ch.cpp:54
+
+#if !defined (_CSD_FRAMEWORK_POA_CH_)
+#define _CSD_FRAMEWORK_POA_CH_
+
+ class TAO_CSD_FW_Export POA
+ : public virtual ::PortableServer::POA
+ {
+ public:
+ typedef POA_ptr _ptr_type;
+ typedef POA_var _var_type;
+
+ // The static operations.
+ static POA_ptr _duplicate (POA_ptr obj);
+
+ static void _tao_release (POA_ptr obj);
+
+ static POA_ptr _narrow (
+ ::CORBA::Object_ptr obj
+ ACE_ENV_ARG_DECL_WITH_DEFAULTS
+ );
+
+ static POA_ptr _unchecked_narrow (
+ ::CORBA::Object_ptr obj
+ ACE_ENV_ARG_DECL_WITH_DEFAULTS
+ );
+
+ static POA_ptr _nil (void)
+ {
+ return static_cast<POA_ptr> (0);
+ }
+
+
+
+ // TAO_IDL - Generated from
+ // c:\csd\ace_wrappers\tao\tao_idl\be\be_visitor_operation/operation_ch.cpp:46
+
+ virtual void set_csd_strategy (
+ ::CSD_Framework::Strategy_ptr s
+ ACE_ENV_ARG_DECL_WITH_DEFAULTS
+ )
+ ACE_THROW_SPEC ((
+ ::CORBA::SystemException
+ )) = 0;
+
+ // TAO_IDL - Generated from
+ // c:\csd\ace_wrappers\tao\tao_idl\be\be_visitor_interface/interface_ch.cpp:210
+
+ virtual ::CORBA::Boolean _is_a (
+ const char *type_id
+ ACE_ENV_ARG_DECL_WITH_DEFAULTS
+ );
+
+ virtual const char* _interface_repository_id (void) const;
+ virtual ::CORBA::Boolean marshal (TAO_OutputCDR &cdr);
+
+ protected:
+ // Abstract or local interface only.
+ POA (void);
+
+ virtual ~POA (void);
+
+ private:
+ // Private and unimplemented for concrete interfaces.
+ POA (const POA &);
+
+ void operator= (const POA &);
+ };
+
+#endif /* end #if !defined */
+
+// TAO_IDL - Generated from
+// c:\csd\ace_wrappers\tao\tao_idl\be\be_visitor_module/module_ch.cpp:78
+
+} // module CSD_Framework
+
+// TAO_IDL - Generated from
+// .\be\be_visitor_traits.cpp:61
+
+// Traits specializations.
+namespace TAO
+{
+
+#if !defined (_CSD_FRAMEWORK_STRATEGY__TRAITS_)
+#define _CSD_FRAMEWORK_STRATEGY__TRAITS_
+
+ template<>
+ struct TAO_CSD_FW_Export Objref_Traits< ::CSD_Framework::Strategy>
+ {
+ static ::CSD_Framework::Strategy_ptr duplicate (
+ ::CSD_Framework::Strategy_ptr
+ );
+ static void release (
+ ::CSD_Framework::Strategy_ptr
+ );
+ static ::CSD_Framework::Strategy_ptr nil (void);
+ static ::CORBA::Boolean marshal (
+ ::CSD_Framework::Strategy_ptr p,
+ TAO_OutputCDR & cdr
+ );
+ };
+
+#endif /* end #if !defined */
+
+#if !defined (_CSD_FRAMEWORK_POA__TRAITS_)
+#define _CSD_FRAMEWORK_POA__TRAITS_
+
+ template<>
+ struct TAO_CSD_FW_Export Objref_Traits< ::CSD_Framework::POA>
+ {
+ static ::CSD_Framework::POA_ptr duplicate (
+ ::CSD_Framework::POA_ptr
+ );
+ static void release (
+ ::CSD_Framework::POA_ptr
+ );
+ static ::CSD_Framework::POA_ptr nil (void);
+ static ::CORBA::Boolean marshal (
+ ::CSD_Framework::POA_ptr p,
+ TAO_OutputCDR & cdr
+ );
+ };
+
+#endif /* end #if !defined */
+}
+
+TAO_END_VERSIONED_NAMESPACE_DECL
+
+#include /**/ "ace/post.h"
+
+#endif /* ifndef */
+
+
diff --git a/TAO/tao/CSD_Framework/CSD_Framework_Loader.cpp b/TAO/tao/CSD_Framework/CSD_Framework_Loader.cpp
new file mode 100644
index 00000000000..99094e9e166
--- /dev/null
+++ b/TAO/tao/CSD_Framework/CSD_Framework_Loader.cpp
@@ -0,0 +1,30 @@
+// $Id$
+
+#include "tao/CSD_Framework/CSD_Framework_Loader.h"
+#include "tao/CSD_Framework/CSD_Object_Adapter_Factory.h"
+#include "tao/CSD_Framework/CSD_Strategy_Repository.h"
+#include "ace/Dynamic_Service.h"
+
+ACE_RCSID (CSD_Framework,
+ CSD_Framework_Loader,
+ "$Id$")
+
+#include "tao/ORB_Core.h"
+
+TAO_BEGIN_VERSIONED_NAMESPACE_DECL
+
+int
+TAO_CSD_Framework_Loader::init (void)
+{
+ ACE_Service_Config::process_directive (ace_svc_desc_TAO_CSD_Object_Adapter_Factory);
+
+ TAO_ORB_Core::set_poa_factory ("TAO_CSD_Object_Adapter_Factory",
+ "dynamic TAO_CSD_Object_Adapter_Factory Service_Object * _make_TAO_CSD_Object_Adapter_Factory()");
+
+
+ ACE_Service_Config::process_directive (ace_svc_desc_TAO_CSD_Strategy_Repository);
+
+ return 0;
+}
+
+TAO_END_VERSIONED_NAMESPACE_DECL
diff --git a/TAO/tao/CSD_Framework/CSD_Framework_Loader.h b/TAO/tao/CSD_Framework/CSD_Framework_Loader.h
new file mode 100644
index 00000000000..44aa1f5c73c
--- /dev/null
+++ b/TAO/tao/CSD_Framework/CSD_Framework_Loader.h
@@ -0,0 +1,47 @@
+/* -*- C++ -*- */
+
+//=============================================================================
+/**
+ * @file CSD_Framework_Loader.h
+ *
+ * $Id$
+ *
+ * Header file for loading CSD framework service objects.
+ *
+ * @author Yan Dai (dai_y@ociweb.com)
+ */
+//=============================================================================
+
+#ifndef TAO_CSD_FRAMEWORK_LOADER_H
+#define TAO_CSD_FRAMEWORK_LOADER_H
+#include /**/ "ace/pre.h"
+
+#include "tao/CSD_Framework/CSD_FW_Export.h"
+
+#if !defined (ACE_LACKS_PRAGMA_ONCE)
+# pragma once
+#endif /* ACE_LACKS_PRAGMA_ONCE */
+
+#include "tao/Versioned_Namespace.h"
+
+TAO_BEGIN_VERSIONED_NAMESPACE_DECL
+
+/**
+ * @class TAO_CSD_Framework_Loader
+ *
+ * @brief TAO_CSD_Framework_Loader.
+ *
+ * This class acts as a facade for the CSD_Framework library to the
+ * ORB.
+ */
+class TAO_CSD_FW_Export TAO_CSD_Framework_Loader
+{
+ public:
+ /// Used to force the initialization of the ORB code.
+ static int init (void);
+};
+
+TAO_END_VERSIONED_NAMESPACE_DECL
+
+#include /**/ "ace/post.h"
+#endif /* TAO_CSD_FRAMEWORK_LOADER_H */
diff --git a/TAO/tao/CSD_Framework/CSD_ORBInitializer.cpp b/TAO/tao/CSD_Framework/CSD_ORBInitializer.cpp
new file mode 100644
index 00000000000..b67ea4bbc08
--- /dev/null
+++ b/TAO/tao/CSD_Framework/CSD_ORBInitializer.cpp
@@ -0,0 +1,36 @@
+// $Id$
+#include "tao/CSD_Framework/CSD_ORBInitializer.h"
+
+#if defined (TAO_HAS_CORBA_MESSAGING) && TAO_HAS_CORBA_MESSAGING != 0
+
+ACE_RCSID (CSD_Framework,
+ CSD_ORBInitializer,
+ "$Id$")
+
+#include "tao/CSD_Framework/CSD_Object_Adapter_Factory.h"
+
+TAO_BEGIN_VERSIONED_NAMESPACE_DECL
+
+TAO_CSD_ORBInitializer::TAO_CSD_ORBInitializer ()
+{
+}
+
+void
+TAO_CSD_ORBInitializer::pre_init (
+ PortableInterceptor::ORBInitInfo_ptr
+ ACE_ENV_ARG_DECL)
+ ACE_THROW_SPEC ((CORBA::SystemException))
+{
+}
+
+void
+TAO_CSD_ORBInitializer::post_init (
+ PortableInterceptor::ORBInitInfo_ptr
+ ACE_ENV_ARG_DECL)
+ ACE_THROW_SPEC ((CORBA::SystemException))
+{
+}
+
+TAO_END_VERSIONED_NAMESPACE_DECL
+
+#endif /* TAO_HAS_CORBA_MESSAGING && TAO_HAS_CORBA_MESSAGING != 0 */
diff --git a/TAO/tao/CSD_Framework/CSD_ORBInitializer.h b/TAO/tao/CSD_Framework/CSD_ORBInitializer.h
new file mode 100644
index 00000000000..8d6aa8a03e5
--- /dev/null
+++ b/TAO/tao/CSD_Framework/CSD_ORBInitializer.h
@@ -0,0 +1,70 @@
+// -*- C++ -*-
+
+//=============================================================================
+/**
+ * @file CSD_ORBInitializer.h
+ *
+ * $Id$
+ *
+ * @author Yan Dai (dai_y@ociweb.com)
+ */
+//=============================================================================
+
+
+#ifndef TAO_CSD_ORB_INITIALIZER_H
+#define TAO_CSD_ORB_INITIALIZER_H
+
+#include /**/ "ace/pre.h"
+
+#include "tao/orbconf.h"
+
+#if defined (TAO_HAS_CORBA_MESSAGING) && TAO_HAS_CORBA_MESSAGING != 0
+
+#include "tao/CSD_Framework/CSD_FW_Export.h"
+
+#if !defined (ACE_LACKS_PRAGMA_ONCE)
+# pragma once
+#endif /* ACE_LACKS_PRAGMA_ONCE */
+
+//#include "tao/PortableInterceptorC.h"
+#include "tao/LocalObject.h"
+#include "tao/PI/ORBInitializerC.h"
+
+// This is to remove "inherits via dominance" warnings from MSVC.
+// MSVC is being a little too paranoid.
+#if defined(_MSC_VER)
+#pragma warning(push)
+#pragma warning(disable:4250)
+#endif /* _MSC_VER */
+
+TAO_BEGIN_VERSIONED_NAMESPACE_DECL
+
+/// CSD ORB initializer.
+class TAO_CSD_ORBInitializer
+ : public virtual PortableInterceptor::ORBInitializer
+ , public virtual TAO_Local_RefCounted_Object
+{
+public:
+
+ TAO_CSD_ORBInitializer ();
+
+ virtual void pre_init (PortableInterceptor::ORBInitInfo_ptr info
+ ACE_ENV_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+ virtual void post_init (PortableInterceptor::ORBInitInfo_ptr info
+ ACE_ENV_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC ((CORBA::SystemException));
+};
+
+TAO_END_VERSIONED_NAMESPACE_DECL
+
+#if defined(_MSC_VER)
+#pragma warning(pop)
+#endif /* _MSC_VER */
+
+#endif /* TAO_HAS_CORBA_MESSAGING && TAO_HAS_CORBA_MESSAGING != 0 */
+
+#include /**/ "ace/post.h"
+
+#endif /* TAO_CSD_ORB_INITIALIZER_H */
diff --git a/TAO/tao/CSD_Framework/CSD_Object_Adapter.cpp b/TAO/tao/CSD_Framework/CSD_Object_Adapter.cpp
new file mode 100644
index 00000000000..ed74e7c413b
--- /dev/null
+++ b/TAO/tao/CSD_Framework/CSD_Object_Adapter.cpp
@@ -0,0 +1,45 @@
+// $Id$
+
+#include "tao/CSD_Framework/CSD_Object_Adapter.h"
+#include "tao/CSD_Framework/CSD_Strategy_Proxy.h"
+#include "tao/CSD_Framework/CSD_POA.h"
+
+ACE_RCSID (CSD_Framework,
+ CSD_Object_Adapter,
+ "$Id$")
+
+TAO_BEGIN_VERSIONED_NAMESPACE_DECL
+
+TAO_CSD_Object_Adapter::TAO_CSD_Object_Adapter (
+ const TAO_Server_Strategy_Factory::Active_Object_Map_Creation_Parameters &creation_parameters,
+ TAO_ORB_Core &orb_core)
+ : TAO_Object_Adapter (creation_parameters, orb_core)
+{
+
+}
+
+TAO_CSD_Object_Adapter::~TAO_CSD_Object_Adapter ()
+{
+}
+
+void
+TAO_CSD_Object_Adapter::do_dispatch (
+ TAO_ServerRequest& req,
+ TAO::Portable_Server::Servant_Upcall& upcall
+ ACE_ENV_ARG_DECL)
+{
+ TAO_Root_POA& poa = upcall.poa ();
+ TAO_CSD_POA* csd_poa = dynamic_cast<TAO_CSD_POA*> (&poa);
+
+ if (csd_poa == 0)
+ {
+ ACE_THROW (CORBA::BAD_PARAM ());
+ }
+
+ TAO::CSD::Strategy_Proxy& proxy
+ = csd_poa->servant_dispatching_strategy_proxy ();
+ proxy.dispatch_request (req, upcall ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK;
+}
+
+TAO_END_VERSIONED_NAMESPACE_DECL
diff --git a/TAO/tao/CSD_Framework/CSD_Object_Adapter.h b/TAO/tao/CSD_Framework/CSD_Object_Adapter.h
new file mode 100644
index 00000000000..34016654cba
--- /dev/null
+++ b/TAO/tao/CSD_Framework/CSD_Object_Adapter.h
@@ -0,0 +1,57 @@
+// -*- C++ -*-
+
+//=============================================================================
+/**
+ * @file CSD_Object_Adapter.h
+ *
+ * $Id$
+ *
+ * @author Yan Dai (dai_y@ociweb.com)
+ */
+//=============================================================================
+
+
+#ifndef TAO_CSD_OBJECT_ADAPTER_H
+#define TAO_CSD_OBJECT_ADAPTER_H
+#include /**/ "ace/pre.h"
+
+#include "tao/CSD_Framework/CSD_FW_Export.h"
+
+#if !defined (ACE_LACKS_PRAGMA_ONCE)
+# pragma once
+#endif /* ACE_LACKS_PRAGMA_ONCE */
+
+#include "tao/PortableServer/Object_Adapter.h"
+
+TAO_BEGIN_VERSIONED_NAMESPACE_DECL
+
+/**
+ * @class TAO_CSD_Object_Adapter
+ *
+ * @brief Defines the CSD version Object Adapter which overrides
+ * default dispatch implementation.
+ *
+ * This class will be used as a facade for the CSD POAs in a server
+ */
+class TAO_CSD_FW_Export TAO_CSD_Object_Adapter : public TAO_Object_Adapter
+{
+public:
+
+ /// Constructor
+ TAO_CSD_Object_Adapter (const TAO_Server_Strategy_Factory::Active_Object_Map_Creation_Parameters &creation_parameters,
+ TAO_ORB_Core &orb_core);
+
+ /// Destructor
+ virtual ~TAO_CSD_Object_Adapter (void);
+
+ /// Hand the request to the Service_Dispatching_Strategy_Proxy for
+ /// dispatching.
+ virtual void do_dispatch (TAO_ServerRequest& req,
+ TAO::Portable_Server::Servant_Upcall& upcall
+ ACE_ENV_ARG_DECL);
+};
+
+TAO_END_VERSIONED_NAMESPACE_DECL
+
+#include /**/ "ace/post.h"
+#endif /* TAO_CSD_OBJECT_ADAPTER_H */
diff --git a/TAO/tao/CSD_Framework/CSD_Object_Adapter_Factory.cpp b/TAO/tao/CSD_Framework/CSD_Object_Adapter_Factory.cpp
new file mode 100644
index 00000000000..fa06817ec2c
--- /dev/null
+++ b/TAO/tao/CSD_Framework/CSD_Object_Adapter_Factory.cpp
@@ -0,0 +1,96 @@
+// $Id$
+
+#include "tao/CSD_Framework/CSD_Object_Adapter_Factory.h"
+#include "tao/CSD_Framework/CSD_Strategy_Repository.h"
+#include "tao/CSD_Framework/CSD_Object_Adapter.h"
+#include "tao/CSD_Framework/CSD_ORBInitializer.h"
+#include "tao/CSD_Framework/CSD_Default_Servant_Dispatcher.h"
+#include "tao/ORB_Core.h"
+#include "tao/ORBInitializer_Registry.h"
+#include "ace/Dynamic_Service.h"
+
+ACE_RCSID (CSD_Framework,
+ CSD_Object_Adapter_Factory,
+ "$Id$")
+
+
+TAO_BEGIN_VERSIONED_NAMESPACE_DECL
+
+TAO_CSD_Object_Adapter_Factory::TAO_CSD_Object_Adapter_Factory (void)
+{
+}
+
+TAO_Adapter*
+TAO_CSD_Object_Adapter_Factory::create (TAO_ORB_Core *oc)
+{
+ // Create the CSD object adapter.
+ TAO_CSD_Object_Adapter *object_adapter = 0;
+ ACE_NEW_RETURN (object_adapter,
+ TAO_CSD_Object_Adapter (oc->server_factory ()->
+ active_object_map_creation_parameters (),
+ *oc),
+ 0);
+
+ // Create and register the CSD servant dispatcher.
+ TAO_CSD_Default_Servant_Dispatcher * csd_servant_dispatcher = 0;
+ ACE_NEW_RETURN (csd_servant_dispatcher,
+ TAO_CSD_Default_Servant_Dispatcher,
+ 0);
+ object_adapter->servant_dispatcher (csd_servant_dispatcher);
+
+ return object_adapter;
+}
+
+int
+TAO_CSD_Object_Adapter_Factory::init (int /* argc */,
+ ACE_TCHAR* /* argv */ [])
+{
+ TAO_CSD_Strategy_Repository *repo =
+ ACE_Dynamic_Service<TAO_CSD_Strategy_Repository>::instance ("TAO_CSD_Strategy_Repository");
+
+ if (repo != 0)
+ repo->init(0,0);
+
+ ACE_DECLARE_NEW_CORBA_ENV;
+ ACE_TRY
+ {
+ /// Register the Messaging ORBInitializer.
+ PortableInterceptor::ORBInitializer_ptr temp_orb_initializer =
+ PortableInterceptor::ORBInitializer::_nil ();
+
+ ACE_NEW_THROW_EX (temp_orb_initializer,
+ TAO_CSD_ORBInitializer,
+ CORBA::NO_MEMORY (
+ CORBA::SystemException::_tao_minor_code (
+ TAO::VMCID,
+ ENOMEM),
+ CORBA::COMPLETED_NO));
+ ACE_TRY_CHECK;
+
+ PortableInterceptor::ORBInitializer_var orb_initializer =
+ temp_orb_initializer;
+
+ PortableInterceptor::register_orb_initializer (orb_initializer.in ()
+ ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+ }
+ ACE_CATCHANY
+ {
+ ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION,
+ "Caught exception:");
+ return -1;
+ }
+ ACE_ENDTRY;
+
+ return 0;
+}
+
+TAO_END_VERSIONED_NAMESPACE_DECL
+
+ACE_FACTORY_DEFINE (TAO_CSD_FW, TAO_CSD_Object_Adapter_Factory)
+ACE_STATIC_SVC_DEFINE (TAO_CSD_Object_Adapter_Factory,
+ ACE_TEXT ("TAO_CSD_Object_Adapter_Factory"),
+ ACE_SVC_OBJ_T,
+ &ACE_SVC_NAME (TAO_CSD_Object_Adapter_Factory),
+ ACE_Service_Type::DELETE_THIS | ACE_Service_Type::DELETE_OBJ,
+ 0)
diff --git a/TAO/tao/CSD_Framework/CSD_Object_Adapter_Factory.h b/TAO/tao/CSD_Framework/CSD_Object_Adapter_Factory.h
new file mode 100644
index 00000000000..7914266c53c
--- /dev/null
+++ b/TAO/tao/CSD_Framework/CSD_Object_Adapter_Factory.h
@@ -0,0 +1,49 @@
+// -*- C++ -*-
+
+//=============================================================================
+/**
+ * @file CSD_Object_Adapter_Factory.h
+ *
+ * $Id$
+ *
+ * @author Yan Dai (dai_y@ociweb.com)
+ */
+//=============================================================================
+
+
+#ifndef TAO_CSD_OBJECT_ADAPTER_FACTORY_H
+#define TAO_CSD_OBJECT_ADAPTER_FACTORY_H
+#include /**/ "ace/pre.h"
+
+#include "tao/CSD_Framework/CSD_FW_Export.h"
+
+#if !defined (ACE_LACKS_PRAGMA_ONCE)
+# pragma once
+#endif /* ACE_LACKS_PRAGMA_ONCE */
+
+#include "tao/Adapter_Factory.h"
+#include "ace/Service_Config.h"
+
+TAO_BEGIN_VERSIONED_NAMESPACE_DECL
+
+class TAO_CSD_FW_Export TAO_CSD_Object_Adapter_Factory : public TAO_Adapter_Factory
+{
+public:
+ /// Constructor
+ TAO_CSD_Object_Adapter_Factory (void);
+
+ // = The TAO_Adapter_Factory methods, please read tao/Adapter.h for
+ // details.
+ virtual TAO_Adapter *create (TAO_ORB_Core *orb_core);
+
+ virtual int init (int argc,
+ ACE_TCHAR* argv[]);
+};
+
+TAO_END_VERSIONED_NAMESPACE_DECL
+
+ACE_STATIC_SVC_DECLARE_EXPORT (TAO_CSD_FW, TAO_CSD_Object_Adapter_Factory)
+ACE_FACTORY_DECLARE (TAO_CSD_FW, TAO_CSD_Object_Adapter_Factory)
+
+#include /**/ "ace/post.h"
+#endif /* TAO_CSD_OBJECT_ADAPTER_FACTORY_H */
diff --git a/TAO/tao/CSD_Framework/CSD_POA.inl b/TAO/tao/CSD_Framework/CSD_POA.inl
new file mode 100644
index 00000000000..5e94cf5401e
--- /dev/null
+++ b/TAO/tao/CSD_Framework/CSD_POA.inl
@@ -0,0 +1,14 @@
+// -*- C++ -*-
+//
+// $Id$
+
+TAO_BEGIN_VERSIONED_NAMESPACE_DECL
+
+ACE_INLINE
+TAO::CSD::Strategy_Proxy&
+TAO_CSD_POA::servant_dispatching_strategy_proxy (void) const
+{
+ return *sds_proxy_;
+}
+
+TAO_END_VERSIONED_NAMESPACE_DECL
diff --git a/TAO/tao/CSD_Framework/CSD_Strategy_Base.cpp b/TAO/tao/CSD_Framework/CSD_Strategy_Base.cpp
new file mode 100644
index 00000000000..aa641fe9bc7
--- /dev/null
+++ b/TAO/tao/CSD_Framework/CSD_Strategy_Base.cpp
@@ -0,0 +1,132 @@
+// $Id$
+
+#include "tao/CSD_Framework/CSD_Strategy_Base.h"
+#include "tao/CSD_Framework/CSD_POA.h"
+#include "tao/CSD_Framework/CSD_Strategy_Proxy.h"
+#include "tao/PortableServer/Root_POA.h"
+#include "tao/PortableServer/POAManager.h"
+#include "tao/PortableServer/Servant_Base.h"
+#include "tao/TAO_Server_Request.h"
+
+ACE_RCSID (CSD_Framework,
+ CSD_Strategy_Base,
+ "$Id$")
+
+#if !defined (__ACE_INLINE__)
+# include "tao/CSD_Framework/CSD_Strategy_Base.inl"
+#endif /* ! __ACE_INLINE__ */
+
+TAO_BEGIN_VERSIONED_NAMESPACE_DECL
+
+TAO::CSD::Strategy_Base::~Strategy_Base()
+{
+}
+
+CORBA::Boolean
+TAO::CSD::Strategy_Base::apply_to (PortableServer::POA_ptr poa
+ ACE_ENV_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC ((CORBA::SystemException))
+{
+ if (CORBA::is_nil(poa))
+ {
+ if (TAO_debug_level > 0)
+ ACE_ERROR((LM_ERROR,
+ ACE_TEXT("(%P|%t) CSD Strategy cannot ")
+ ACE_TEXT("be applied to a nil POA.\n")));
+ return false;
+ }
+
+ if (!CORBA::is_nil(this->poa_.in()))
+ {
+ if (TAO_debug_level > 0)
+ ACE_ERROR((LM_ERROR,
+ ACE_TEXT("(%P|%t) CSD Strategy already ")
+ ACE_TEXT("applied to a POA.\n")));
+ return false;
+ }
+
+ // The POA is a local interface (IDL terminology), and thus we know that
+ // we can downcast the POA_ptr to its (TAO) implementation type.
+ TAO_CSD_POA* poa_impl = dynamic_cast<TAO_CSD_POA*>(poa);
+
+ if (poa_impl == 0)
+ {
+ if (TAO_debug_level > 0)
+ ACE_ERROR((LM_ERROR,
+ ACE_TEXT("(%P|%t) CSD Strategy cannot ")
+ ACE_TEXT("be applied to a non CSD POA.\n")));
+ return false;
+ }
+
+ // We need to check to see if the POA is already "active". If this is
+ // the case, then we need to handle the poa_activated_event() right now.
+ // If the POA is not already "active", then we can just wait until it
+ // does get activated, and we (the strategy) will be informed of the
+ // poa_activated_event() at that time.
+ if (poa_impl->tao_poa_manager().get_state() ==
+ PortableServer::POAManager::ACTIVE)
+ {
+ // The POA is already "active" (since its POAManager is active).
+ // We need to "raise" the poa_activated_event() now. Otherwise,
+ // the event will be raised when the POAManager does become active.
+ if (!this->poa_activated_event())
+ {
+ // An error has been already been reported to the log with
+ // the detailed reason for the failure to handle the event.
+ return false;
+ }
+ }
+
+ // Set the CSD Strategy_Base on the strategy proxy object owned by the POA.
+ bool strategy_set = false;
+ ACE_TRY_NEW_ENV
+ {
+ poa_impl->set_csd_strategy (this ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+ strategy_set = true;
+ }
+ ACE_CATCHANY
+ {
+ }
+ ACE_ENDTRY;
+
+ if (! strategy_set)
+ {
+ // We need to make sure that we raise a poa_deactivated_event() if
+ // we earlier raised a poa_activated_event().
+ this->poa_deactivated_event();
+
+ // An error has been already been reported to the log with
+ // the detailed reason why the proxy will not accept the
+ // custom strategy.
+ return false;
+ }
+
+ // Save a duplicate of the poa into our data member.
+ this->poa_ = PortableServer::POA::_duplicate (poa);
+
+ // Success
+ return true;
+}
+
+
+void
+TAO::CSD::Strategy_Base::servant_activated_event_i
+ (PortableServer::Servant ,
+ const PortableServer::ObjectId&
+ ACE_ENV_ARG_DECL)
+{
+ // do nothing.
+}
+
+
+void
+TAO::CSD::Strategy_Base::servant_deactivated_event_i
+ (PortableServer::Servant,
+ const PortableServer::ObjectId&
+ ACE_ENV_ARG_DECL)
+{
+ // do nothing.
+}
+
+TAO_END_VERSIONED_NAMESPACE_DECL
diff --git a/TAO/tao/CSD_Framework/CSD_Strategy_Base.h b/TAO/tao/CSD_Framework/CSD_Strategy_Base.h
new file mode 100644
index 00000000000..d65753a27f7
--- /dev/null
+++ b/TAO/tao/CSD_Framework/CSD_Strategy_Base.h
@@ -0,0 +1,174 @@
+// -*- C++ -*-
+
+//=============================================================================
+/**
+ * @file CSD_Strategy_Base.h
+ *
+ * $Id$
+ *
+ * @author Tim Bradley <bradley_t@ociweb.com>
+ */
+//=============================================================================
+
+#ifndef TAO_CSD_FW_CUSTOM_SERVANT_DISPATCHING_STRATEGY_H
+#define TAO_CSD_FW_CUSTOM_SERVANT_DISPATCHING_STRATEGY_H
+
+#include /**/ "ace/pre.h"
+
+#include "tao/CSD_Framework/CSD_FW_Export.h"
+
+#include "tao/PortableServer/PortableServer.h"
+#include "tao/PortableServer/Servant_Upcall.h"
+#include "tao/PortableServer/Servant_Base.h"
+#include "tao/TAO_Server_Request.h"
+#include "tao/LocalObject.h"
+
+
+#if !defined (ACE_LACKS_PRAGMA_ONCE)
+# pragma once
+#endif /* ACE_LACKS_PRAGMA_ONCE */
+
+#include "tao/CSD_Framework/CSD_FrameworkC.h"
+
+TAO_BEGIN_VERSIONED_NAMESPACE_DECL
+
+class TAO_Root_POA;
+namespace PortableServer
+{
+ class POAManager;
+}
+
+namespace TAO
+{
+ namespace CSD
+ {
+ /**
+ * @class Strategy_Base
+ *
+ * @brief Base class for all Custom Servant Dispatching Strategies.
+ *
+ * This class serves as the base class for all "custom" strategies that
+ * perform servant dispatching. An instance of (a subclass of) this class
+ * can be applied to a POA object. Any servant requests for the POA will
+ * be "dispatched" to this strategy object.
+ *
+ */
+ class TAO_CSD_FW_Export Strategy_Base
+ : public CSD_Framework::Strategy,
+ public TAO_Local_RefCounted_Object
+ {
+ public:
+
+ /// Result Type for dispatching method(s).
+ enum DispatchResult
+ {
+ // The request dispatching has been handled.
+ DISPATCH_HANDLED,
+
+ // The request dispatching has been rejected.
+ DISPATCH_REJECTED,
+
+ // Defer to "default" dispatching strategy (use the caller's thread).
+ DISPATCH_DEFERRED
+ };
+
+ /// Virtual Destructor.
+ virtual ~Strategy_Base();
+
+ /// This method is invoked to "attach" this strategy object to
+ /// the supplied POA. Returns true for success, and false for failure.
+ CORBA::Boolean apply_to(PortableServer::POA_ptr poa ACE_ENV_ARG_DECL)
+ ACE_THROW_SPEC((CORBA::SystemException));
+
+ protected:
+ /// Default Constructor.
+ Strategy_Base();
+
+ /// Subclass provides implementation to dispatch a remote request.
+ virtual DispatchResult dispatch_remote_request_i
+ (TAO_ServerRequest& server_request,
+ const PortableServer::ObjectId& object_id,
+ PortableServer::POA_ptr poa,
+ const char* operation,
+ PortableServer::Servant servant
+ ACE_ENV_ARG_DECL) = 0;
+
+ /// Subclass provides implementation to dispatch a collocated request.
+ virtual DispatchResult dispatch_collocated_request_i
+ (TAO_ServerRequest& server_request,
+ const PortableServer::ObjectId& object_id,
+ PortableServer::POA_ptr poa,
+ const char* operation,
+ PortableServer::Servant servant
+ ACE_ENV_ARG_DECL) = 0;
+
+ /// Event - The POA has been activated.
+ virtual bool poa_activated_event_i() = 0;
+
+ /// Event - The POA has been deactivated.
+ virtual void poa_deactivated_event_i() = 0;
+
+ /// Event - A servant has been activated.
+ virtual void servant_activated_event_i
+ (PortableServer::Servant servant,
+ const PortableServer::ObjectId& oid
+ ACE_ENV_ARG_DECL);
+
+ /// Event - A servant has been deactivated.
+ virtual void servant_deactivated_event_i
+ (PortableServer::Servant servant,
+ const PortableServer::ObjectId& oid
+ ACE_ENV_ARG_DECL);
+
+ private:
+
+ /// Only our friend, the proxy, is allowed to invoke our private operations.
+ /// This allows us to not pollute the public interface of the CSD Strategy_Base
+ /// subclasses with methods that should never be called (except by the
+ /// proxy, of course).
+ friend class Strategy_Proxy;
+
+ /// This CSD Strategy_Base has been asked to dispatch a (collocated or remote)
+ /// request.
+ void dispatch_request(TAO_ServerRequest& server_request,
+ ::TAO::Portable_Server::Servant_Upcall& upcall
+ ACE_ENV_ARG_DECL);
+
+ /// Event - The POA has been activated. This happens when the POA_Manager
+ /// is activated.
+ bool poa_activated_event();
+
+ /// Event - The POA has been deactivated. This happens when the
+ /// POAManager is deactivated, or when the POA is destroyed.
+ void poa_deactivated_event();
+
+ /// Event - A servant has been activated.
+ void servant_activated_event(PortableServer::Servant servant,
+ const PortableServer::ObjectId& oid
+ ACE_ENV_ARG_DECL);
+
+ /// Event - A servant has been deactivated. This also occurs when
+ /// the POA is destroyed.
+ void servant_deactivated_event(PortableServer::Servant servant,
+ const PortableServer::ObjectId& oid
+ ACE_ENV_ARG_DECL);
+
+ /// The POA to which this strategy has been applied.
+ ::PortableServer::POA_var poa_;
+
+ /// This flag indicates that the POA is currently active (true) or
+ /// currently inactive (false).
+ bool poa_activated_;
+ };
+ }
+}
+
+TAO_END_VERSIONED_NAMESPACE_DECL
+
+#if defined (__ACE_INLINE__)
+# include "tao/CSD_Framework/CSD_Strategy_Base.inl"
+#endif /* __ACE_INLINE__ */
+
+#include /**/ "ace/post.h"
+
+#endif /* TAO_CSD_FW_CUSTOM_SERVANT_DISPATCHING_STRATEGY_H */
diff --git a/TAO/tao/CSD_Framework/CSD_Strategy_Base.inl b/TAO/tao/CSD_Framework/CSD_Strategy_Base.inl
new file mode 100644
index 00000000000..6dce0cf7397
--- /dev/null
+++ b/TAO/tao/CSD_Framework/CSD_Strategy_Base.inl
@@ -0,0 +1,144 @@
+// -*- C++ -*-
+//
+// $Id$
+
+#include "tao/debug.h"
+
+TAO_BEGIN_VERSIONED_NAMESPACE_DECL
+
+ACE_INLINE
+TAO::CSD::Strategy_Base::Strategy_Base()
+ : poa_activated_(false)
+{
+}
+
+ACE_INLINE
+void
+TAO::CSD::Strategy_Base::dispatch_request
+ (TAO_ServerRequest& server_request,
+ TAO::Portable_Server::Servant_Upcall& upcall
+ ACE_ENV_ARG_DECL)
+{
+ DispatchResult result;
+
+ if (server_request.collocated())
+ {
+ result = this->dispatch_collocated_request_i(server_request,
+ upcall.user_id(),
+ this->poa_.in(),
+ server_request.operation(),
+ upcall.servant()
+ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK;
+ }
+ else
+ {
+ result = this->dispatch_remote_request_i(server_request,
+ upcall.user_id(),
+ this->poa_.in(),
+ server_request.operation(),
+ upcall.servant()
+ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK;
+ }
+
+ switch (result)
+ {
+ case DISPATCH_HANDLED:
+ // Do nothing. Everything has been handled.
+ break;
+
+ case DISPATCH_REJECTED:
+ if (server_request.collocated ())
+ {
+ CORBA::NO_IMPLEMENT ex;
+ ex._raise ();
+ }
+ else
+ {
+ // Raise an appropriate SystemException if the request is expecting
+ // a reply.
+ if (!server_request.sync_with_server() &&
+ server_request.response_expected() &&
+ !server_request.deferred_reply())
+ {
+ CORBA::NO_IMPLEMENT ex;
+ server_request.tao_send_reply_exception(ex);
+ }
+ }
+ break;
+
+ case DISPATCH_DEFERRED:
+ // Perform the "default" dispatching strategy logic for this request
+ // right now, using the current thread.
+ upcall.servant()->_dispatch(server_request,
+ (void*)&upcall
+ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK;
+ break;
+
+ default:
+ if (TAO_debug_level > 0)
+ ACE_ERROR((LM_ERROR,
+ ACE_TEXT("(%P|%t) Unknown result (%d) from call to ")
+ ACE_TEXT("dispatch_remote_request_i().\n"), result));
+ // Since we do not know what to do here, just do the minimum, which
+ // treats this case just like the DISPATCH_HANDLED case, for better
+ // or worse. Hitting this default case means a coding error.
+ break;
+ }
+}
+
+
+ACE_INLINE
+bool
+TAO::CSD::Strategy_Base::poa_activated_event()
+{
+ // Notify the subclass of the event, saving the result.
+ this->poa_activated_ = this->poa_activated_event_i();
+
+ // Return the result
+ return this->poa_activated_;
+}
+
+ACE_INLINE
+void
+TAO::CSD::Strategy_Base::poa_deactivated_event()
+{
+ if (this->poa_activated_)
+ {
+ this->poa_activated_ = false;
+
+ // Notify the subclass of the event.
+ this->poa_deactivated_event_i();
+
+ // Reset the poa to nil to decrement the reference count.
+ // This will break the circular dependency of the deletion
+ // of the CSD POA.
+ this->poa_ = 0;
+ }
+}
+
+ACE_INLINE
+void
+TAO::CSD::Strategy_Base::servant_activated_event
+ (PortableServer::Servant servant,
+ const PortableServer::ObjectId& oid
+ ACE_ENV_ARG_DECL)
+{
+ this->servant_activated_event_i(servant, oid ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK;
+}
+
+ACE_INLINE
+void
+TAO::CSD::Strategy_Base::servant_deactivated_event
+ (PortableServer::Servant servant,
+ const PortableServer::ObjectId& oid
+ ACE_ENV_ARG_DECL)
+{
+ this->servant_deactivated_event_i(servant, oid ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK;
+}
+
+TAO_END_VERSIONED_NAMESPACE_DECL
diff --git a/TAO/tao/CSD_Framework/CSD_Strategy_Proxy.cpp b/TAO/tao/CSD_Framework/CSD_Strategy_Proxy.cpp
new file mode 100644
index 00000000000..b163134be56
--- /dev/null
+++ b/TAO/tao/CSD_Framework/CSD_Strategy_Proxy.cpp
@@ -0,0 +1,50 @@
+// $Id$
+
+#include "tao/CSD_Framework/CSD_Strategy_Proxy.h"
+#include "tao/TAO_Server_Request.h"
+#include "tao/debug.h"
+
+ACE_RCSID (CSD_Framework,
+ CSD_Strategy_Base,
+ "$Id$")
+
+
+#if !defined (__ACE_INLINE__)
+# include "tao/CSD_Framework/CSD_Strategy_Proxy.inl"
+#endif /* ! __ACE_INLINE__ */
+
+TAO_BEGIN_VERSIONED_NAMESPACE_DECL
+
+bool
+TAO::CSD::Strategy_Proxy::custom_strategy
+ (CSD_Framework::Strategy_ptr strategy)
+{
+ if (this->strategy_impl_)
+ {
+ if (TAO_debug_level > 0)
+ ACE_ERROR((LM_ERROR,
+ ACE_TEXT("(%P|%t) Error - TAO::CSD::Strategy_Proxy ")
+ ACE_TEXT("object already has a custom strategy.\n")));
+
+ return false;
+ }
+
+ if (CORBA::is_nil(strategy))
+ {
+ if (TAO_debug_level > 0)
+ ACE_ERROR((LM_ERROR,
+ ACE_TEXT("(%P|%t) Error - TAO::CSD::Strategy_Proxy ")
+ ACE_TEXT("supplied with a NIL custom strategy.\n")));
+
+ return false;
+ }
+
+ // We need to bump up the reference count of the strategy before saving
+ // it off into our handle (smart pointer) data member.
+ this->strategy_ = CSD_Framework::Strategy::_duplicate(strategy);
+ this->strategy_impl_ = dynamic_cast <TAO::CSD::Strategy_Base*> (strategy);
+
+ return true;
+}
+
+TAO_END_VERSIONED_NAMESPACE_DECL
diff --git a/TAO/tao/CSD_Framework/CSD_Strategy_Proxy.h b/TAO/tao/CSD_Framework/CSD_Strategy_Proxy.h
new file mode 100644
index 00000000000..959a7cb9ebb
--- /dev/null
+++ b/TAO/tao/CSD_Framework/CSD_Strategy_Proxy.h
@@ -0,0 +1,114 @@
+// -*- C++ -*-
+
+//=============================================================================
+/**
+ * @file CSD_Strategy_Proxy.h
+ *
+ * $Id$
+ *
+ * @author Tim Bradley <bradley_t@ociweb.com>
+ */
+//=============================================================================
+
+#ifndef TAO_SERVANT_DISPATCHING_STRATEGY_PROXY_H
+#define TAO_SERVANT_DISPATCHING_STRATEGY_PROXY_H
+
+#include /**/ "ace/pre.h"
+
+#include "tao/CSD_Framework/CSD_FW_Export.h"
+
+#include "tao/PortableServer/PortableServer.h"
+#include "tao/PortableServer/Servant_Upcall.h"
+
+#if !defined (ACE_LACKS_PRAGMA_ONCE)
+# pragma once
+#endif /* ACE_LACKS_PRAGMA_ONCE */
+
+#include "tao/CSD_Framework/CSD_Strategy_Base.h"
+
+
+TAO_BEGIN_VERSIONED_NAMESPACE_DECL
+
+class TAO_ServerRequest;
+
+namespace TAO
+{
+ namespace CSD
+ {
+ /**
+ * @class Strategy_Proxy
+ *
+ * @brief Proxy class for the Custom Servant Dispatching Strategy.
+ *
+ * If no custom servant dispatching strategy is provided to the proxy,
+ * then the "default servant dispatching strategy" logic is used.
+ */
+ class TAO_CSD_FW_Export Strategy_Proxy
+ {
+ public:
+
+ /// Default Constructor.
+ Strategy_Proxy();
+
+ /// Destructor.
+ ~Strategy_Proxy();
+
+ /// Mutator to provide the proxy with a CSD Strategy object.
+ /// A return value of true indicates success, and false indicates
+ /// failure to set the custom strategy on the proxy object.
+ bool custom_strategy(CSD_Framework::Strategy_ptr strategy);
+
+ /// Invoked by the Object_Adapter using an ORB thread.
+ ///
+ /// If the proxy object holds a custom strategy object, then this method
+ /// will simply delegate to the custom strategy object. Otherwise,
+ /// this method will perform the "default servant dispatching strategy"
+ /// logic, preserving the original logic path as it was prior to the
+ /// introduction of the Custom Servant Dispatching feature.
+ ///
+ /// This method will be inlined (if inlining is turned on during the build).
+ ///
+ /// The added cost to the original logic path will be this method
+ /// invocation + one conditional (an is_nil() call/comparison for truth on
+ /// the smart pointer to the custom dispatching strategy object).
+ void dispatch_request(TAO_ServerRequest& server_request,
+ TAO::Portable_Server::Servant_Upcall& upcall
+ ACE_ENV_ARG_DECL);
+
+
+ /// Event - The POA has been (or is being) activated.
+ bool poa_activated_event();
+
+ /// Event - The POA has been deactivated.
+ void poa_deactivated_event();
+
+ /// Event - A servant has been activated.
+ void servant_activated_event(PortableServer::Servant servant,
+ const PortableServer::ObjectId& oid
+ ACE_ENV_ARG_DECL);
+
+ /// Event - A servant has been deactivated.
+ void servant_deactivated_event(PortableServer::Servant servant,
+ const PortableServer::ObjectId& oid
+ ACE_ENV_ARG_DECL);
+
+ private:
+
+ /// Smart Pointer to a custom servant dispatching strategy object.
+ /// This smart pointer will be in the "nil" state when the "default"
+ /// strategy is to be applied.
+ CSD_Framework::Strategy_var strategy_;
+ TAO::CSD::Strategy_Base *strategy_impl_;
+ };
+ }
+}
+
+TAO_END_VERSIONED_NAMESPACE_DECL
+
+#if defined (__ACE_INLINE__)
+# include "tao/CSD_Framework/CSD_Strategy_Proxy.inl"
+#endif /* __ACE_INLINE__ */
+
+#include /**/ "ace/post.h"
+
+#endif
diff --git a/TAO/tao/CSD_Framework/CSD_Strategy_Proxy.inl b/TAO/tao/CSD_Framework/CSD_Strategy_Proxy.inl
new file mode 100644
index 00000000000..957852e6517
--- /dev/null
+++ b/TAO/tao/CSD_Framework/CSD_Strategy_Proxy.inl
@@ -0,0 +1,104 @@
+// -*- C++ -*-
+//
+// $Id$
+
+TAO_BEGIN_VERSIONED_NAMESPACE_DECL
+
+ACE_INLINE
+TAO::CSD::Strategy_Proxy::Strategy_Proxy()
+ : strategy_impl_(0)
+{
+}
+
+ACE_INLINE
+TAO::CSD::Strategy_Proxy::~Strategy_Proxy()
+{
+ strategy_impl_ = 0; // don't delete it! The var will do it for us.
+}
+
+ACE_INLINE
+void
+TAO::CSD::Strategy_Proxy::dispatch_request
+ (TAO_ServerRequest& server_request,
+ TAO::Portable_Server::Servant_Upcall& upcall
+ ACE_ENV_ARG_DECL)
+{
+
+ if (this->strategy_impl_ == 0)
+ {
+ // This is the "default" strategy implementation.
+ upcall.servant()->_dispatch(server_request,
+ (void*)&upcall
+ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK;
+ }
+ else
+ {
+ // Delegate to the custom strategy object.
+ this->strategy_impl_->dispatch_request(server_request,
+ upcall
+ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK;
+ }
+}
+
+ACE_INLINE
+bool
+TAO::CSD::Strategy_Proxy::poa_activated_event()
+{
+ // Delegate to the custom strategy object (or return true if this proxy
+ // is not holding a custom strategy).
+ return (this->strategy_impl_ == 0) ? true
+ : this->strategy_impl_->poa_activated_event();
+}
+
+
+ACE_INLINE
+void
+TAO::CSD::Strategy_Proxy::poa_deactivated_event()
+{
+ // We only need to do something if this proxy holds a custom strategy.
+ if (this->strategy_impl_)
+ {
+ // Delegate to the custom strategy object.
+ this->strategy_impl_->poa_deactivated_event();
+ }
+}
+
+ACE_INLINE
+void
+TAO::CSD::Strategy_Proxy::servant_activated_event
+ (PortableServer::Servant servant,
+ const PortableServer::ObjectId& oid
+ ACE_ENV_ARG_DECL)
+{
+ // We only need to do something if this proxy holds a custom strategy.
+ if (this->strategy_impl_)
+ {
+ // Delegate to the custom strategy object.
+ this->strategy_impl_->servant_activated_event(servant,
+ oid
+ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK;
+ }
+}
+
+ACE_INLINE
+void
+TAO::CSD::Strategy_Proxy::servant_deactivated_event
+ (PortableServer::Servant servant,
+ const PortableServer::ObjectId& oid
+ ACE_ENV_ARG_DECL)
+{
+ // We only need to do something if this proxy holds a custom strategy.
+ if (this->strategy_impl_)
+ {
+ // Delegate to the custom strategy object.
+ this->strategy_impl_->servant_deactivated_event(servant,
+ oid
+ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK;
+ }
+}
+
+TAO_END_VERSIONED_NAMESPACE_DECL
diff --git a/TAO/tao/CSD_Framework/CSD_Strategy_Repository.cpp b/TAO/tao/CSD_Framework/CSD_Strategy_Repository.cpp
new file mode 100644
index 00000000000..5a169516bf5
--- /dev/null
+++ b/TAO/tao/CSD_Framework/CSD_Strategy_Repository.cpp
@@ -0,0 +1,117 @@
+// $Id$
+
+#include "tao/CSD_Framework/CSD_Strategy_Repository.h"
+#include "tao/debug.h"
+
+ACE_RCSID (CSD_Framework,
+ CSD_Strategy_Factory,
+ "$Id$")
+
+
+TAO_BEGIN_VERSIONED_NAMESPACE_DECL
+
+TAO_CSD_Strategy_Repository::TAO_CSD_Strategy_Repository()
+{
+}
+
+
+TAO_CSD_Strategy_Repository::~TAO_CSD_Strategy_Repository()
+{
+ delete this->strategy_list_head_;
+}
+
+int
+TAO_CSD_Strategy_Repository::init(int, ACE_TCHAR **)
+{
+
+ static int initialized = 0;
+
+ // Only allow initialization once.
+ if (initialized)
+ return 0;
+
+ initialized = 1;
+ this->strategy_list_head_ = 0;
+ return 0;
+}
+
+CSD_Framework::Strategy_ptr
+TAO_CSD_Strategy_Repository::find (const ACE_CString& name)
+{
+
+ if (this->strategy_list_head_ != 0)
+ {
+ Strategy_Node *node = this->strategy_list_head_->find(name);
+ if (node != 0)
+ return CSD_Framework::Strategy::_duplicate (node->strategy_.in());
+ }
+
+ return CSD_Framework::Strategy::_nil();
+}
+
+
+int
+TAO_CSD_Strategy_Repository::add_strategy (const ACE_CString& name,
+ CSD_Framework::Strategy_ptr strat)
+{
+ Strategy_Node *node = 0;
+ ACE_NEW_RETURN (node, Strategy_Node(name,strat),-1);
+ if (this->strategy_list_head_ == 0)
+ this->strategy_list_head_ = node;
+ else
+ this->strategy_list_head_->add_node(node);
+
+ if (TAO_debug_level > 3)
+ {
+ ACE_DEBUG ((LM_DEBUG,
+ ACE_TEXT("Strategy_Repository::add_strategy for %s \n"),
+ name.c_str ()));
+ }
+ return 0;
+}
+
+TAO_CSD_Strategy_Repository::Strategy_Node::Strategy_Node (const ACE_CString& name,
+ CSD_Framework::Strategy_ptr strat)
+ : poa_name_(name),
+ strategy_(CSD_Framework::Strategy::_duplicate(strat)),
+ next_(0)
+{
+}
+
+TAO_CSD_Strategy_Repository::Strategy_Node::~Strategy_Node ()
+{
+ if (this->next_)
+ delete this->next_;
+}
+
+void
+TAO_CSD_Strategy_Repository::Strategy_Node::add_node(Strategy_Node *node)
+{
+ if (this->next_)
+ this->next_->add_node(node);
+ else
+ this->next_ = node;
+}
+
+TAO_CSD_Strategy_Repository::Strategy_Node *
+TAO_CSD_Strategy_Repository::Strategy_Node::find(const ACE_CString &name)
+{
+ if (this->poa_name_ == name)
+ return this;
+ if (this->next_)
+ return this->next_->find(name);
+ return 0;
+}
+
+TAO_END_VERSIONED_NAMESPACE_DECL
+
+/////////////////////////////////////////////////////////////////////
+
+ACE_FACTORY_DEFINE (TAO_CSD_FW, TAO_CSD_Strategy_Repository)
+ACE_STATIC_SVC_DEFINE (TAO_CSD_Strategy_Repository,
+ ACE_TEXT ("TAO_CSD_Strategy_Repository"),
+ ACE_SVC_OBJ_T,
+ &ACE_SVC_NAME (TAO_CSD_Strategy_Repository),
+ ACE_Service_Type::DELETE_THIS
+ | ACE_Service_Type::DELETE_OBJ,
+ 0)
diff --git a/TAO/tao/CSD_Framework/CSD_Strategy_Repository.h b/TAO/tao/CSD_Framework/CSD_Strategy_Repository.h
new file mode 100644
index 00000000000..7e50fe5f62f
--- /dev/null
+++ b/TAO/tao/CSD_Framework/CSD_Strategy_Repository.h
@@ -0,0 +1,78 @@
+// -*- C++ -*-
+
+//=============================================================================
+/**
+ * @file CSD_Strategy_Repository.h
+ *
+ * $Id$
+ *
+ * @author Yan Dai <dai_y@ociweb.com>
+ */
+//=============================================================================
+
+#ifndef TAO_CSD_STRATEGY_FACTORY_H
+#define TAO_CSD_STRATEGY_FACTORY_H
+
+#include /**/ "ace/pre.h"
+
+#include "tao/CSD_Framework/CSD_FW_Export.h"
+#include "tao/CSD_Framework/CSD_FrameworkC.h"
+#include "ace/Service_Object.h"
+#include "ace/Service_Config.h"
+#include "ace/Synch.h"
+
+#if !defined (ACE_LACKS_PRAGMA_ONCE)
+# pragma once
+#endif /* ACE_LACKS_PRAGMA_ONCE */
+
+TAO_BEGIN_VERSIONED_NAMESPACE_DECL
+
+/**
+ * @class TAO_CSD_Strategy_Factory
+ *
+ * @brief An ACE_Service_Object capable of creating TP_Strategy objects.
+ *
+ * TBD - Explain in more detail.
+ *
+ */
+class TAO_CSD_FW_Export TAO_CSD_Strategy_Repository : public ACE_Service_Object
+{
+public:
+
+ /// Constructor.
+ TAO_CSD_Strategy_Repository();
+
+ /// Virtual Destructor.
+ virtual ~TAO_CSD_Strategy_Repository();
+
+ int init (int argc, ACE_TCHAR ** argv);
+
+ /// Factory method used to create a CSD_Strategy object.
+ CSD_Framework::Strategy_ptr find (const ACE_CString& poa_name);
+
+ int add_strategy (const ACE_CString& poa_name,
+ CSD_Framework::Strategy_ptr strategy);
+
+private:
+ struct Strategy_Node {
+ Strategy_Node(const ACE_CString& poa_name,
+ CSD_Framework::Strategy_ptr strategy);
+ ~Strategy_Node();
+ void add_node (Strategy_Node *);
+ Strategy_Node *find(const ACE_CString& name);
+
+ ACE_CString poa_name_;
+ CSD_Framework::Strategy_var strategy_;
+ Strategy_Node * next_;
+ };
+ Strategy_Node * strategy_list_head_;
+};
+
+TAO_END_VERSIONED_NAMESPACE_DECL
+
+ACE_STATIC_SVC_DECLARE_EXPORT (TAO_CSD_FW, TAO_CSD_Strategy_Repository)
+ACE_FACTORY_DECLARE (TAO_CSD_FW, TAO_CSD_Strategy_Repository)
+
+#include /**/ "ace/post.h"
+
+#endif /* TAO_CSD_STRATEGY_FACTORY_H */
diff --git a/TAO/tao/CSD_Framework/diffs/CSD_Framework.diff b/TAO/tao/CSD_Framework/diffs/CSD_Framework.diff
new file mode 100644
index 00000000000..bfbc5679c5c
--- /dev/null
+++ b/TAO/tao/CSD_Framework/diffs/CSD_Framework.diff
@@ -0,0 +1,84 @@
+--- orig/CSD_FrameworkC.h 2005-10-20 11:20:03.234375000 -0700
++++ CSD_FrameworkC.h 2005-10-20 11:26:07.578125000 -0700
+@@ -1,6 +1,6 @@
+ // -*- C++ -*-
+ //
+-// $Id$
++// $Id$
+
+ // **** Code generated by the The ACE ORB (TAO) IDL Compiler ****
+ // TAO and the TAO IDL Compiler have been developed by:
+@@ -47,7 +47,7 @@
+ #include "tao/Object.h"
+ #include "tao/Objref_VarOut_T.h"
+
+-#include "tao/PortableServer/PortableServerC.h"
++#include "tao/PortableServer/PortableServer.h"
+
+ #if defined (TAO_EXPORT_MACRO)
+ #undef TAO_EXPORT_MACRO
+@@ -305,13 +305,6 @@
+ #endif /* end #if !defined */
+ }
+
+-// TAO_IDL - Generated from
+-// .\be\be_codegen.cpp:1040
+-
+-#if defined (__ACE_INLINE__)
+-#include "CSD_FrameworkC.inl"
+-#endif /* defined INLINE */
+-
+ #include /**/ "ace/post.h"
+
+ #endif /* ifndef */
+--- orig/CSD_FrameworkC.cpp 2005-10-20 11:20:03.234375000 -0700
++++ CSD_FrameworkC.cpp 2005-10-20 11:22:19.171875000 -0700
+@@ -1,6 +1,6 @@
+ // -*- C++ -*-
+ //
+-// $Id$
++// $Id$
+
+ // **** Code generated by the The ACE ORB (TAO) IDL Compiler ****
+ // TAO and the TAO IDL Compiler have been developed by:
+@@ -33,9 +33,6 @@
+ #include "tao/CDR.h"
+ #include "ace/OS_NS_string.h"
+
+-#if !defined (__ACE_INLINE__)
+-#include "CSD_FrameworkC.inl"
+-#endif /* !defined INLINE */
+
+ // TAO_IDL - Generated from
+ // .\be\be_visitor_arg_traits.cpp:70
+--- orig/CSD_FrameworkA.h 2005-10-20 11:20:03.250000000 -0700
++++ CSD_FrameworkA.h 2005-10-20 11:26:42.359375000 -0700
+@@ -1,6 +1,6 @@
+ // -*- C++ -*-
+ //
+-// $Id$
++// $Id$
+
+ // **** Code generated by the The ACE ORB (TAO) IDL Compiler ****
+ // TAO and the TAO IDL Compiler have been developed by:
+@@ -34,8 +34,8 @@
+ #include /**/ "ace/pre.h"
+
+ #include "CSD_FW_Export.h"
+-#include "tao/orig/CSD_FrameworkC.h"
+-#include "tao/PortableServer/PortableServerA.h"
++#include "CSD_FrameworkC.h"
++//#include "tao/PortableServer/PortableServerA.h"
+
+
+ // TAO_IDL - Generated from
+--- orig/CSD_FrameworkA.cpp 2005-10-20 11:20:03.234375000 -0700
++++ CSD_FrameworkA.cpp 2005-10-20 11:23:07.562500000 -0700
+@@ -1,6 +1,6 @@
+ // -*- C++ -*-
+ //
+-// $Id$
++// $Id$
+
+ // **** Code generated by the The ACE ORB (TAO) IDL Compiler ****
+ // TAO and the TAO IDL Compiler have been developed by:
diff --git a/TAO/tao/CSD_ThreadPool/CSD_TP_Cancel_Visitor.cpp b/TAO/tao/CSD_ThreadPool/CSD_TP_Cancel_Visitor.cpp
new file mode 100644
index 00000000000..35b6b316012
--- /dev/null
+++ b/TAO/tao/CSD_ThreadPool/CSD_TP_Cancel_Visitor.cpp
@@ -0,0 +1,48 @@
+// $Id$
+
+#include "tao/CSD_ThreadPool/CSD_TP_Cancel_Visitor.h"
+#include "tao/CSD_ThreadPool/CSD_TP_Request.h"
+
+ACE_RCSID (CSD_TP,
+ Cancel_Visitor,
+ "$Id$")
+
+#if !defined (__ACE_INLINE__)
+# include "tao/CSD_ThreadPool/CSD_TP_Cancel_Visitor.inl"
+#endif /* ! __ACE_INLINE__ */
+
+
+TAO_BEGIN_VERSIONED_NAMESPACE_DECL
+
+TAO::CSD::TP_Cancel_Visitor::~TP_Cancel_Visitor()
+{
+}
+
+
+bool
+TAO::CSD::TP_Cancel_Visitor::visit_request(TP_Request* request,
+ bool& remove_flag)
+{
+ // If our servant_ data member is in the 'nil' state, then
+ // we are supposed to cancel *ALL* requests that we visit.
+ //
+ // Otherwise, if our servant_ data member is not in the 'nil' state,
+ // we are supposed to cancel only requests that target our specific
+ // servant_.
+
+ if ((this->servant_.in() == 0) || (request->is_target(this->servant_.in())))
+ {
+ // Set the remove_flag to true so that this request is removed
+ // (and released) from the queue when we finish our visit.
+ remove_flag = true;
+
+ // Cancel the request
+ request->cancel();
+ }
+
+ // Since we are either cancelling requests to any servant or a
+ // specific servant, always continue visitation.
+ return true;
+}
+
+TAO_END_VERSIONED_NAMESPACE_DECL
diff --git a/TAO/tao/CSD_ThreadPool/CSD_TP_Cancel_Visitor.h b/TAO/tao/CSD_ThreadPool/CSD_TP_Cancel_Visitor.h
new file mode 100644
index 00000000000..d9b2472e507
--- /dev/null
+++ b/TAO/tao/CSD_ThreadPool/CSD_TP_Cancel_Visitor.h
@@ -0,0 +1,87 @@
+// -*- C++ -*-
+
+//=============================================================================
+/**
+ * @file CSD_TP_Cancel_Visitor.h
+ *
+ * $Id$
+ *
+ * @author Tim Bradley <bradley_t@ociweb.com>
+ */
+//=============================================================================
+
+#ifndef TAO_CSD_TP_CANCEL_VISITOR_H
+#define TAO_CSD_TP_CANCEL_VISITOR_H
+
+#include /**/ "ace/pre.h"
+
+#include "tao/CSD_ThreadPool/CSD_TP_Export.h"
+#include "tao/PortableServer/Servant_Base.h"
+
+#if !defined (ACE_LACKS_PRAGMA_ONCE)
+# pragma once
+#endif /* ACE_LACKS_PRAGMA_ONCE */
+
+#include "tao/CSD_ThreadPool/CSD_TP_Queue_Visitor.h"
+
+
+TAO_BEGIN_VERSIONED_NAMESPACE_DECL
+
+namespace TAO
+{
+ namespace CSD
+ {
+ /**
+ * @class TP_Cancel_Visitor
+ *
+ * @brief Used to extract/cancel request(s) from the queue.
+ *
+ * This visitor is used to cancel certain requests in the queue
+ * as they are visited.
+ *
+ * Note that this is currently implemented to cancel *all*
+ * requests in the queue, or requests that are targeted for a specific
+ * servant. This could be extended in the future to perhaps
+ * cancel all requests that have the same operation name, or something
+ * else.
+ *
+ */
+ class TAO_CSD_TP_Export TP_Cancel_Visitor : public TP_Queue_Visitor
+ {
+ public:
+
+ /// Default Constructor - cancel *all* requests.
+ TP_Cancel_Visitor();
+
+ /// Constructor with provided servant - cancel requests that
+ /// target the supplied servant.
+ TP_Cancel_Visitor(PortableServer::Servant servant);
+
+ /// Virtual Destructor.
+ virtual ~TP_Cancel_Visitor();
+
+ /// Returns true to continue visitation. Returns false to stop
+ /// visitation. Sets the remove_flag to true if the request should
+ /// be removed from the queue as a result of the visit. Leaves the
+ /// remove_flag alone otherwise.
+ virtual bool visit_request(TP_Request* request, bool& remove_flag);
+
+ private:
+
+ /// Left as nil if we are to cancel all requests, or set to a specific
+ /// servant if only requests targeting that servant should be cancelled.
+ PortableServer::ServantBase_var servant_;
+ };
+
+ }
+}
+
+TAO_END_VERSIONED_NAMESPACE_DECL
+
+#if defined (__ACE_INLINE__)
+# include "tao/CSD_ThreadPool/CSD_TP_Cancel_Visitor.inl"
+#endif /* __ACE_INLINE__ */
+
+#include /**/ "ace/post.h"
+
+#endif /* TAO_CSD_TP_DISPATCHABLE_VISITOR_H */
diff --git a/TAO/tao/CSD_ThreadPool/CSD_TP_Cancel_Visitor.inl b/TAO/tao/CSD_ThreadPool/CSD_TP_Cancel_Visitor.inl
new file mode 100644
index 00000000000..e1602e2dde3
--- /dev/null
+++ b/TAO/tao/CSD_ThreadPool/CSD_TP_Cancel_Visitor.inl
@@ -0,0 +1,32 @@
+// -*- C++ -*-
+//
+// $Id$
+
+TAO_BEGIN_VERSIONED_NAMESPACE_DECL
+
+ACE_INLINE
+TAO::CSD::TP_Cancel_Visitor::TP_Cancel_Visitor()
+{
+}
+
+
+ACE_INLINE
+TAO::CSD::TP_Cancel_Visitor::TP_Cancel_Visitor(PortableServer::Servant servant)
+ : servant_(servant)
+{
+ // This try-catch block is not really necessary for current implementation
+ // since the _add_ref does not throw exception, but we have to add it to
+ // satisfy the non-exception builds. If _add_ref really throws an exception
+ // then this constructor needs deal with the exception.
+ ACE_TRY_NEW_ENV
+ {
+ this->servant_->_add_ref (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+ }
+ ACE_CATCHALL
+ {
+ }
+ ACE_ENDTRY;
+}
+
+TAO_END_VERSIONED_NAMESPACE_DECL
diff --git a/TAO/tao/CSD_ThreadPool/CSD_TP_Collocated_Asynch_Request.cpp b/TAO/tao/CSD_ThreadPool/CSD_TP_Collocated_Asynch_Request.cpp
new file mode 100644
index 00000000000..0e4c596f682
--- /dev/null
+++ b/TAO/tao/CSD_ThreadPool/CSD_TP_Collocated_Asynch_Request.cpp
@@ -0,0 +1,60 @@
+// $Id$
+
+#include "tao/CSD_ThreadPool/CSD_TP_Collocated_Asynch_Request.h"
+
+ACE_RCSID (CSD_ThreadPool,
+ TP_Collocated_Asynch_Request,
+ "$Id$")
+
+#if !defined (__ACE_INLINE__)
+# include "tao/CSD_ThreadPool/CSD_TP_Collocated_Asynch_Request.inl"
+#endif /* ! __ACE_INLINE__ */
+
+
+TAO_BEGIN_VERSIONED_NAMESPACE_DECL
+
+TAO::CSD::TP_Collocated_Asynch_Request::~TP_Collocated_Asynch_Request()
+{
+}
+
+
+void
+TAO::CSD::TP_Collocated_Asynch_Request::prepare_for_queue_i()
+{
+ this->do_clone();
+}
+
+
+void
+TAO::CSD::TP_Collocated_Asynch_Request::dispatch_i()
+{
+ ACE_DECLARE_NEW_CORBA_ENV;
+ ACE_TRY
+ {
+ this->do_dispatch(ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+ }
+ ACE_CATCHANY
+ {
+ // Eat these. We probably should log these, but since we have already
+ // unblocked the requesting thread there is no point in saving it or
+ // doing anything with it.
+ }
+#if defined (TAO_HAS_EXCEPTIONS)
+ ACE_CATCHALL
+ {
+ // Eat these. We probably should log these, but since we have already
+ // unblocked the requesting thread there is no point in saving it or
+ // doing anything with it.
+ }
+#endif
+ ACE_ENDTRY;
+}
+
+void
+TAO::CSD::TP_Collocated_Asynch_Request::cancel_i()
+{
+ this->do_cancel();
+}
+
+TAO_END_VERSIONED_NAMESPACE_DECL
diff --git a/TAO/tao/CSD_ThreadPool/CSD_TP_Collocated_Asynch_Request.h b/TAO/tao/CSD_ThreadPool/CSD_TP_Collocated_Asynch_Request.h
new file mode 100644
index 00000000000..6cfa149f73a
--- /dev/null
+++ b/TAO/tao/CSD_ThreadPool/CSD_TP_Collocated_Asynch_Request.h
@@ -0,0 +1,90 @@
+// -*- C++ -*-
+
+//=============================================================================
+/**
+ * @file CSD_TP_Collocated_Asynch_Request.h
+ *
+ * $Id$
+ *
+ * @author Tim Bradley <bradley_t@ociweb.com>
+ */
+//=============================================================================
+
+#ifndef TAO_CSD_TP_COLLOCATED_ASYNCH_REQUEST_H
+#define TAO_CSD_TP_COLLOCATED_ASYNCH_REQUEST_H
+
+#include /**/ "ace/pre.h"
+
+#include "tao/CSD_ThreadPool/CSD_TP_Export.h"
+
+#if !defined (ACE_LACKS_PRAGMA_ONCE)
+# pragma once
+#endif /* ACE_LACKS_PRAGMA_ONCE */
+
+#include "tao/CSD_ThreadPool/CSD_TP_Corba_Request.h"
+
+TAO_BEGIN_VERSIONED_NAMESPACE_DECL
+
+namespace TAO
+{
+ namespace CSD
+ {
+
+ class TP_Collocated_Asynch_Request;
+ typedef TAO_Intrusive_Ref_Count_Handle<TP_Collocated_Asynch_Request>
+ TP_Collocated_Asynch_Request_Handle;
+
+ /**
+ * @class TP_Collocated_Asynch_Request
+ *
+ * @brief Represents a "queue-able", collocated, asynchronous,
+ * CORBA request.
+ *
+ * This kind request is one-way collocated request with the default
+ * SYNC_SCOPE policy (SYNC_WITH_TRANSPORT) applied. It is cloned
+ * before enqueuing and the "enqueuing" thread never blocks.
+ */
+ class TAO_CSD_TP_Export TP_Collocated_Asynch_Request
+ : public TP_Corba_Request
+ {
+ public:
+
+ /// Constructor.
+ TP_Collocated_Asynch_Request
+ (TAO_ServerRequest& server_request,
+ const PortableServer::ObjectId& object_id,
+ PortableServer::POA_ptr poa,
+ const char* operation,
+ PortableServer::Servant servant,
+ TP_Servant_State* servant_state);
+
+ /// Virtual Destructor.
+ virtual ~TP_Collocated_Asynch_Request();
+
+
+ protected:
+
+ /// Prepare this TP_Collocated_Asynch_Request object to be placed
+ /// into the request queue. This will cause the underlying
+ /// TAO_ServerRequest object to be cloned.
+ virtual void prepare_for_queue_i();
+
+ /// Dispatch the request to the servant.
+ virtual void dispatch_i();
+
+ /// Cancel the request.
+ virtual void cancel_i();
+ };
+
+ }
+}
+
+TAO_END_VERSIONED_NAMESPACE_DECL
+
+#if defined (__ACE_INLINE__)
+# include "tao/CSD_ThreadPool/CSD_TP_Collocated_Asynch_Request.inl"
+#endif /* __ACE_INLINE__ */
+
+#include /**/ "ace/post.h"
+
+#endif /* TAO_CSD_TP_COLLOCATED_ASYNCH_REQUEST_H */
diff --git a/TAO/tao/CSD_ThreadPool/CSD_TP_Collocated_Asynch_Request.inl b/TAO/tao/CSD_ThreadPool/CSD_TP_Collocated_Asynch_Request.inl
new file mode 100644
index 00000000000..d44f0bc56dd
--- /dev/null
+++ b/TAO/tao/CSD_ThreadPool/CSD_TP_Collocated_Asynch_Request.inl
@@ -0,0 +1,24 @@
+// -*- C++ -*-
+//
+// $Id$
+
+TAO_BEGIN_VERSIONED_NAMESPACE_DECL
+
+ACE_INLINE
+TAO::CSD::TP_Collocated_Asynch_Request::TP_Collocated_Asynch_Request
+ (TAO_ServerRequest& server_request,
+ const PortableServer::ObjectId& object_id,
+ PortableServer::POA_ptr poa,
+ const char* operation,
+ PortableServer::Servant servant,
+ TP_Servant_State* servant_state)
+ : TP_Corba_Request(object_id,
+ poa,
+ operation,
+ servant,
+ servant_state,
+ server_request)
+{
+}
+
+TAO_END_VERSIONED_NAMESPACE_DECL
diff --git a/TAO/tao/CSD_ThreadPool/CSD_TP_Collocated_Synch_Request.cpp b/TAO/tao/CSD_ThreadPool/CSD_TP_Collocated_Synch_Request.cpp
new file mode 100644
index 00000000000..31c6c32e1a7
--- /dev/null
+++ b/TAO/tao/CSD_ThreadPool/CSD_TP_Collocated_Synch_Request.cpp
@@ -0,0 +1,56 @@
+// $Id$
+
+#include "tao/CSD_ThreadPool/CSD_TP_Collocated_Synch_Request.h"
+
+ACE_RCSID (CSD_ThreadPool,
+ TP_Collocated_Synch_Request,
+ "$Id$")
+
+#include "tao/ORB_Core.h"
+
+#if !defined (__ACE_INLINE__)
+# include "tao/CSD_ThreadPool/CSD_TP_Collocated_Synch_Request.inl"
+#endif /* ! __ACE_INLINE__ */
+
+TAO_BEGIN_VERSIONED_NAMESPACE_DECL
+
+TAO::CSD::TP_Collocated_Synch_Request::~TP_Collocated_Synch_Request()
+{
+}
+
+
+void
+TAO::CSD::TP_Collocated_Synch_Request::dispatch_i()
+{
+ ACE_DECLARE_NEW_CORBA_ENV;
+ ACE_TRY
+ {
+ this->do_dispatch(ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+ }
+ ACE_CATCHANY
+ {
+ // We need to save off a copy of the exception.
+ this->exception_ = ACE_ANY_EXCEPTION._tao_duplicate();
+ }
+#if defined (TAO_HAS_EXCEPTIONS)
+ ACE_CATCHALL
+ {
+ this->exception_
+ = new CORBA::UNKNOWN (CORBA::SystemException::_tao_minor_code
+ (TAO_UNHANDLED_SERVER_CXX_EXCEPTION, 0),
+ CORBA::COMPLETED_MAYBE);
+ }
+#endif
+ ACE_ENDTRY;
+
+ this->synch_helper_.dispatched();
+}
+
+void
+TAO::CSD::TP_Collocated_Synch_Request::cancel_i()
+{
+ this->synch_helper_.cancelled();
+}
+
+TAO_END_VERSIONED_NAMESPACE_DECL
diff --git a/TAO/tao/CSD_ThreadPool/CSD_TP_Collocated_Synch_Request.h b/TAO/tao/CSD_ThreadPool/CSD_TP_Collocated_Synch_Request.h
new file mode 100644
index 00000000000..cad5fa52bd5
--- /dev/null
+++ b/TAO/tao/CSD_ThreadPool/CSD_TP_Collocated_Synch_Request.h
@@ -0,0 +1,109 @@
+// -*- C++ -*-
+
+//=============================================================================
+/**
+ * @file CSD_TP_Collocated_Synch_Request.h
+ *
+ * $Id$
+ *
+ * @author Tim Bradley <bradley_t@ociweb.com>
+ */
+//=============================================================================
+
+#ifndef TAO_CSD_TP_COLLOCATED_SYNCH_REQUEST_H
+#define TAO_CSD_TP_COLLOCATED_SYNCH_REQUEST_H
+
+#include /**/ "ace/pre.h"
+
+#include "tao/CSD_ThreadPool/CSD_TP_Export.h"
+
+#if !defined (ACE_LACKS_PRAGMA_ONCE)
+# pragma once
+#endif /* ACE_LACKS_PRAGMA_ONCE */
+
+#include "tao/CSD_ThreadPool/CSD_TP_Corba_Request.h"
+#include "tao/CSD_ThreadPool/CSD_TP_Synch_Helper.h"
+#include "tao/Exception.h"
+
+TAO_BEGIN_VERSIONED_NAMESPACE_DECL
+
+namespace TAO
+{
+ namespace CSD
+ {
+
+ class TP_Collocated_Synch_Request;
+ typedef TAO_Intrusive_Ref_Count_Handle<TP_Collocated_Synch_Request>
+ TP_Collocated_Synch_Request_Handle;
+
+ /**
+ * @class TP_Collocated_Synch_Request
+ *
+ * @brief Represents a "queue-able", synchronous, collocated,
+ * CORBA request.
+ *
+ * This kind request is the two-way or oneway(with SYNC_WITH_TARGET
+ * policy applied) collocated request. It is NOT cloned before
+ * enqueuing and the "enqueuing" thread will block until the request
+ * is dispatched/handled or cancelled.
+ */
+ class TAO_CSD_TP_Export TP_Collocated_Synch_Request
+ : public TP_Corba_Request
+ {
+ public:
+
+ /// Constructor.
+ TP_Collocated_Synch_Request
+ (TAO_ServerRequest& server_request,
+ const PortableServer::ObjectId& object_id,
+ PortableServer::POA_ptr poa,
+ const char* operation,
+ PortableServer::Servant servant,
+ TP_Servant_State* servant_state);
+
+ /// Virtual Destructor.
+ virtual ~TP_Collocated_Synch_Request();
+
+ /// Wait until the request has been dispatched (and completed), or
+ /// until it has been cancelled.
+ /// Returns true if the request has been dispatched, and returns
+ /// false if the request has been cancelled.
+ bool wait(ACE_ENV_SINGLE_ARG_DECL);
+
+
+ protected:
+
+ /// Note that we do not override our base class implementation of
+ /// prepare_for_queue_i() (which does nothing), because we don't
+ /// need to clone the Server Request object.
+
+ /// Dispatch the request to the servant.
+ virtual void dispatch_i();
+
+ /// Cancel the request.
+ virtual void cancel_i();
+
+
+ private:
+
+ /// Helper used to block and unblock the thread that invokes our
+ /// wait() method.
+ TP_Synch_Helper synch_helper_;
+
+ /// Set to NULL initially, and will only be set thereafter if an
+ /// exception is raised from the dispatch() call on the server_request_.
+ CORBA::Exception* exception_;
+ };
+
+ }
+}
+
+TAO_END_VERSIONED_NAMESPACE_DECL
+
+#if defined (__ACE_INLINE__)
+# include "tao/CSD_ThreadPool/CSD_TP_Collocated_Synch_Request.inl"
+#endif /* __ACE_INLINE__ */
+
+#include /**/ "ace/post.h"
+
+#endif /* TAO_CSD_TP_COLLOCATED_SYNCH_REQUEST_H */
diff --git a/TAO/tao/CSD_ThreadPool/CSD_TP_Collocated_Synch_Request.inl b/TAO/tao/CSD_ThreadPool/CSD_TP_Collocated_Synch_Request.inl
new file mode 100644
index 00000000000..c92dfe4719f
--- /dev/null
+++ b/TAO/tao/CSD_ThreadPool/CSD_TP_Collocated_Synch_Request.inl
@@ -0,0 +1,59 @@
+// -*- C++ -*-
+//
+// $Id$
+
+#include "ace/Auto_Ptr.h"
+
+TAO_BEGIN_VERSIONED_NAMESPACE_DECL
+
+ACE_INLINE
+TAO::CSD::TP_Collocated_Synch_Request::TP_Collocated_Synch_Request
+ (TAO_ServerRequest& server_request,
+ const PortableServer::ObjectId& object_id,
+ PortableServer::POA_ptr poa,
+ const char* operation,
+ PortableServer::Servant servant,
+ TP_Servant_State* servant_state)
+ : TP_Corba_Request(object_id,
+ poa,
+ operation,
+ servant,
+ servant_state,
+ server_request),
+ exception_(0)
+{
+}
+
+
+ACE_INLINE
+bool
+TAO::CSD::TP_Collocated_Synch_Request::wait(ACE_ENV_SINGLE_ARG_DECL)
+{
+ bool dispatched = this->synch_helper_.wait_while_pending();
+
+ if (dispatched)
+ {
+ // Check to see if the dispatching caused an exception to be raised.
+ if (this->exception_ != 0)
+ {
+ // An exception was raised during the actual dispatching to
+ // the servant. We need to raise the exception to our caller,
+ // which is the thread that made the collocated request in the
+ // first place.
+ CORBA::Exception* ex = this->exception_;
+ this->exception_ = 0;
+
+#if defined (TAO_HAS_EXCEPTIONS)
+ ACE_Auto_Basic_Ptr<CORBA::Exception> ex_holder(ex);
+ ex->_raise ();
+#else
+ ACE_TRY_ENV.exception (ex);
+#endif /* ACE_HAS_EXCEPTIONS */
+ }
+ }
+
+ return dispatched;
+
+}
+
+TAO_END_VERSIONED_NAMESPACE_DECL
diff --git a/TAO/tao/CSD_ThreadPool/CSD_TP_Collocated_Synch_With_Server_Request.cpp b/TAO/tao/CSD_ThreadPool/CSD_TP_Collocated_Synch_With_Server_Request.cpp
new file mode 100644
index 00000000000..70f43c863c7
--- /dev/null
+++ b/TAO/tao/CSD_ThreadPool/CSD_TP_Collocated_Synch_With_Server_Request.cpp
@@ -0,0 +1,72 @@
+// $Id$
+
+#include "tao/CSD_ThreadPool/CSD_TP_Collocated_Synch_With_Server_Request.h"
+
+ACE_RCSID (CSD_ThreadPool,
+ TP_Collocated_Synch_With_Server_Request,
+ "$Id$")
+
+#include "tao/Exception.h"
+
+#if !defined (__ACE_INLINE__)
+# include "tao/CSD_ThreadPool/CSD_TP_Collocated_Synch_With_Server_Request.inl"
+#endif /* ! __ACE_INLINE__ */
+
+TAO_BEGIN_VERSIONED_NAMESPACE_DECL
+
+TAO::CSD::TP_Collocated_Synch_With_Server_Request::~TP_Collocated_Synch_With_Server_Request()
+{
+}
+
+
+void
+TAO::CSD::TP_Collocated_Synch_With_Server_Request::prepare_for_queue_i()
+{
+ // NOTE: We *NEED* clone the TAO_ServerRequest for a collocated,
+ // one-way SYNC_WITH_SERVER request. This is because the
+ // calling thread is signalled just *before* the request is
+ // dispatched. It's (very) possible that the calling thread
+ // will destroy the underlying TAO_ServerRequest object while
+ // the request is dispatching to servant. This is why we make
+ // a clone - so that we have our own copy that won't be destroyed
+ // while we are using it.
+ this->do_clone();
+}
+
+
+void
+TAO::CSD::TP_Collocated_Synch_With_Server_Request::dispatch_i()
+{
+ // This is done *before* we do_dispatch().
+ this->synch_helper_.dispatched();
+
+ ACE_DECLARE_NEW_CORBA_ENV;
+ ACE_TRY
+ {
+ this->do_dispatch(ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+ }
+ ACE_CATCHANY
+ {
+ // Eat these. We probably should log these, but since we have already
+ // unblocked the requesting thread there is no point in saving it or
+ // doing anything with it.
+ }
+#if defined (TAO_HAS_EXCEPTIONS)
+ ACE_CATCHALL
+ {
+ // Eat these. We probably should log these, but since we have already
+ // unblocked the requesting thread there is no point in saving it or
+ // doing anything with it.
+ }
+#endif
+ ACE_ENDTRY;
+}
+
+void
+TAO::CSD::TP_Collocated_Synch_With_Server_Request::cancel_i()
+{
+ this->synch_helper_.cancelled();
+}
+
+TAO_END_VERSIONED_NAMESPACE_DECL
diff --git a/TAO/tao/CSD_ThreadPool/CSD_TP_Collocated_Synch_With_Server_Request.h b/TAO/tao/CSD_ThreadPool/CSD_TP_Collocated_Synch_With_Server_Request.h
new file mode 100644
index 00000000000..0b54d87ed06
--- /dev/null
+++ b/TAO/tao/CSD_ThreadPool/CSD_TP_Collocated_Synch_With_Server_Request.h
@@ -0,0 +1,110 @@
+// -*- C++ -*-
+
+//=============================================================================
+/**
+ * @file CSD_TP_Collocated_Synch_With_Server_Request.h
+ *
+ * $Id$
+ *
+ * @author Tim Bradley <bradley_t@ociweb.com>
+ */
+//=============================================================================
+
+#ifndef TAO_CSD_TP_COLLOCATED_SYNCH_WITH_SERVER_REQUEST_H
+#define TAO_CSD_TP_COLLOCATED_SYNCH_WITH_SERVER_REQUEST_H
+
+#include /**/ "ace/pre.h"
+
+#include "tao/CSD_ThreadPool/CSD_TP_Export.h"
+
+#if !defined (ACE_LACKS_PRAGMA_ONCE)
+# pragma once
+#endif /* ACE_LACKS_PRAGMA_ONCE */
+
+#include "tao/CSD_ThreadPool/CSD_TP_Corba_Request.h"
+#include "tao/CSD_ThreadPool/CSD_TP_Synch_Helper.h"
+
+TAO_BEGIN_VERSIONED_NAMESPACE_DECL
+
+namespace TAO
+{
+ namespace CSD
+ {
+
+ class TP_Collocated_Synch_With_Server_Request;
+ typedef TAO_Intrusive_Ref_Count_Handle
+ <TP_Collocated_Synch_With_Server_Request>
+ TP_Collocated_Synch_With_Server_Request_Handle;
+
+ /**
+ * @class TP_Collocated_Synch_With_Server_Request
+ *
+ * @brief Represents a "queue-able", one-way, collocated, CORBA
+ * request with a "Synch Scope" policy of SYNC_WITH_SERVER.
+ *
+ * This kind of request is one-way request with the SYNC_WITH_SERVER
+ * policy applied. It is cloned before enqueuing and the "enqueuing"
+ * thread will block until it is signalled by the TP_Task thread that
+ * will happen just before the request is dispatched or the request
+ * is cancelled.
+ */
+ class TAO_CSD_TP_Export TP_Collocated_Synch_With_Server_Request
+ : public TP_Corba_Request
+ {
+ public:
+
+ /// Constructor.
+ TP_Collocated_Synch_With_Server_Request
+ (TAO_ServerRequest& server_request,
+ const PortableServer::ObjectId& object_id,
+ PortableServer::POA_ptr poa,
+ const char* operation,
+ PortableServer::Servant servant,
+ TP_Servant_State* servant_state);
+
+ /// Virtual Destructor.
+ virtual ~TP_Collocated_Synch_With_Server_Request();
+
+ /// Wait until the request has been dispatched (but not completed), or
+ /// until it has been cancelled. Note that this will wait until just
+ /// *before* the request is dispatched by a worker thread. This is
+ /// different than the TP_Collocated_Synch_Request which waits until
+ /// just *after* the request is dispatched by a worker thread.
+ /// Returns true if the request has been dispatched, and returns
+ /// false if the request has been cancelled.
+ bool wait(ACE_ENV_SINGLE_ARG_DECL);
+
+
+ protected:
+
+ /// Prepare this TP_Collocated_Synch_With_Server_Request object to be
+ /// placed into the request queue. This will cause the underlying
+ /// TAO_ServerRequest object to be cloned.
+ virtual void prepare_for_queue_i();
+
+ /// Dispatch the request to the servant.
+ virtual void dispatch_i();
+
+ /// Cancel the request.
+ virtual void cancel_i();
+
+
+ private:
+
+ /// Helper used to block and unblock the thread that invokes our
+ /// wait() method.
+ TP_Synch_Helper synch_helper_;
+ };
+
+ }
+}
+
+TAO_END_VERSIONED_NAMESPACE_DECL
+
+#if defined (__ACE_INLINE__)
+# include "tao/CSD_ThreadPool/CSD_TP_Collocated_Synch_With_Server_Request.inl"
+#endif /* __ACE_INLINE__ */
+
+#include /**/ "ace/post.h"
+
+#endif /* TAO_CSD_TP_COLLOCATED_SYNCH_WITH_SERVER_REQUEST_H */
diff --git a/TAO/tao/CSD_ThreadPool/CSD_TP_Collocated_Synch_With_Server_Request.inl b/TAO/tao/CSD_ThreadPool/CSD_TP_Collocated_Synch_With_Server_Request.inl
new file mode 100644
index 00000000000..1ff0407d6fd
--- /dev/null
+++ b/TAO/tao/CSD_ThreadPool/CSD_TP_Collocated_Synch_With_Server_Request.inl
@@ -0,0 +1,32 @@
+// -*- C++ -*-
+//
+// $Id$
+
+TAO_BEGIN_VERSIONED_NAMESPACE_DECL
+
+ACE_INLINE
+TAO::CSD::TP_Collocated_Synch_With_Server_Request::TP_Collocated_Synch_With_Server_Request
+ (TAO_ServerRequest& server_request,
+ const PortableServer::ObjectId& object_id,
+ PortableServer::POA_ptr poa,
+ const char* operation,
+ PortableServer::Servant servant,
+ TP_Servant_State* servant_state)
+ : TP_Corba_Request(object_id,
+ poa,
+ operation,
+ servant,
+ servant_state,
+ server_request)
+{
+}
+
+
+ACE_INLINE
+bool
+TAO::CSD::TP_Collocated_Synch_With_Server_Request::wait(ACE_ENV_SINGLE_ARG_DECL_NOT_USED)
+{
+ return this->synch_helper_.wait_while_pending();
+}
+
+TAO_END_VERSIONED_NAMESPACE_DECL
diff --git a/TAO/tao/CSD_ThreadPool/CSD_TP_Corba_Request.cpp b/TAO/tao/CSD_ThreadPool/CSD_TP_Corba_Request.cpp
new file mode 100644
index 00000000000..ff2aa4709c9
--- /dev/null
+++ b/TAO/tao/CSD_ThreadPool/CSD_TP_Corba_Request.cpp
@@ -0,0 +1,19 @@
+// $Id$
+
+#include "tao/CSD_ThreadPool/CSD_TP_Corba_Request.h"
+
+ACE_RCSID (CSD_ThreadPool,
+ TP_Corba_Request,
+ "$Id$")
+
+#if !defined (__ACE_INLINE__)
+# include "tao/CSD_ThreadPool/CSD_TP_Corba_Request.inl"
+#endif /* ! __ACE_INLINE__ */
+
+TAO_BEGIN_VERSIONED_NAMESPACE_DECL
+
+TAO::CSD::TP_Corba_Request::~TP_Corba_Request()
+{
+}
+
+TAO_END_VERSIONED_NAMESPACE_DECL
diff --git a/TAO/tao/CSD_ThreadPool/CSD_TP_Corba_Request.h b/TAO/tao/CSD_ThreadPool/CSD_TP_Corba_Request.h
new file mode 100644
index 00000000000..2e0a6c7996f
--- /dev/null
+++ b/TAO/tao/CSD_ThreadPool/CSD_TP_Corba_Request.h
@@ -0,0 +1,103 @@
+// -*- C++ -*-
+
+//=============================================================================
+/**
+ * @file CSD_TP_Corba_Request.h
+ *
+ * $Id$
+ *
+ * @author Tim Bradley <bradley_t@ociweb.com>
+ */
+//=============================================================================
+
+#ifndef TAO_CSD_TP_CORBA_REQUEST_H
+#define TAO_CSD_TP_CORBA_REQUEST_H
+
+#include /**/ "ace/pre.h"
+
+#include "tao/CSD_ThreadPool/CSD_TP_Export.h"
+
+#if !defined (ACE_LACKS_PRAGMA_ONCE)
+# pragma once
+#endif /* ACE_LACKS_PRAGMA_ONCE */
+
+#include "tao/CSD_ThreadPool/CSD_TP_Request.h"
+#include "tao/CSD_Framework/CSD_FW_Server_Request_Wrapper.h"
+#include "tao/PortableServer/PortableServer.h"
+#include "tao/PortableServer/Servant_Base.h"
+#include "ace/SString.h"
+
+TAO_BEGIN_VERSIONED_NAMESPACE_DECL
+
+namespace TAO
+{
+ namespace CSD
+ {
+
+ class TP_Corba_Request;
+ typedef TAO_Intrusive_Ref_Count_Handle<TP_Corba_Request>
+ TP_Corba_Request_Handle;
+
+ /**
+ * @class TP_Corba_Request
+ *
+ * @brief Base class for "queue-able" CORBA requests.
+ *
+ * TBD - Add description
+ *
+ */
+ class TAO_CSD_TP_Export TP_Corba_Request : public TP_Request
+ {
+ public:
+
+ /// Virtual Destructor.
+ virtual ~TP_Corba_Request();
+
+
+ protected:
+
+ /// Constructor.
+ TP_Corba_Request(const PortableServer::ObjectId& object_id,
+ PortableServer::POA_ptr poa,
+ const char* operation,
+ PortableServer::Servant servant,
+ TP_Servant_State* servant_state,
+ TAO_ServerRequest& server_request);
+
+ /// Delegate to the FW_Server_Request_Wrapper clone() method.
+ void do_clone();
+
+ /// Delegate to the FW_Server_Request_Wrapper dispatch() method.
+ void do_dispatch(ACE_ENV_SINGLE_ARG_DECL);
+
+ /// Delegate to the FW_Server_Request_Wrapper cancel() method.
+ void do_cancel();
+
+
+ private:
+
+ /// The ObjectId for the target servant.
+ PortableServer::ObjectId object_id_;
+
+ /// The POA.
+ PortableServer::POA_var poa_;
+
+ /// The name of the IDL operation.
+ ACE_CString operation_;
+
+ /// The TAO_ServerRequest object wrapper.
+ FW_Server_Request_Wrapper server_request_;
+ };
+
+ }
+}
+
+TAO_END_VERSIONED_NAMESPACE_DECL
+
+#if defined (__ACE_INLINE__)
+# include "tao/CSD_ThreadPool/CSD_TP_Corba_Request.inl"
+#endif /* __ACE_INLINE__ */
+
+#include /**/ "ace/post.h"
+
+#endif /* TAO_CSD_TP_CORBA_REQUEST_H */
diff --git a/TAO/tao/CSD_ThreadPool/CSD_TP_Corba_Request.inl b/TAO/tao/CSD_ThreadPool/CSD_TP_Corba_Request.inl
new file mode 100644
index 00000000000..18d273c34a5
--- /dev/null
+++ b/TAO/tao/CSD_ThreadPool/CSD_TP_Corba_Request.inl
@@ -0,0 +1,45 @@
+// -*- C++ -*-
+//
+// $Id$
+
+TAO_BEGIN_VERSIONED_NAMESPACE_DECL
+
+ACE_INLINE
+TAO::CSD::TP_Corba_Request::TP_Corba_Request
+ (const PortableServer::ObjectId& object_id,
+ PortableServer::POA_ptr poa,
+ const char* operation,
+ PortableServer::Servant servant,
+ TP_Servant_State* servant_state,
+ TAO_ServerRequest& server_request)
+ : TP_Request(servant,servant_state),
+ object_id_(object_id),
+ operation_(operation),
+ server_request_(server_request)
+{
+ this->poa_ = PortableServer::POA::_duplicate(poa);
+}
+
+ACE_INLINE
+void
+TAO::CSD::TP_Corba_Request::do_clone()
+{
+ this->server_request_.clone();
+}
+
+ACE_INLINE
+void
+TAO::CSD::TP_Corba_Request::do_dispatch(ACE_ENV_SINGLE_ARG_DECL)
+{
+ this->server_request_.dispatch(this->servant() ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK;
+}
+
+ACE_INLINE
+void
+TAO::CSD::TP_Corba_Request::do_cancel()
+{
+ this->server_request_.cancel();
+}
+
+TAO_END_VERSIONED_NAMESPACE_DECL
diff --git a/TAO/tao/CSD_ThreadPool/CSD_TP_Custom_Asynch_Request.cpp b/TAO/tao/CSD_ThreadPool/CSD_TP_Custom_Asynch_Request.cpp
new file mode 100644
index 00000000000..6765f02eff6
--- /dev/null
+++ b/TAO/tao/CSD_ThreadPool/CSD_TP_Custom_Asynch_Request.cpp
@@ -0,0 +1,52 @@
+// $Id$
+
+#include "tao/CSD_ThreadPool/CSD_TP_Custom_Asynch_Request.h"
+
+ACE_RCSID (CSD_ThreadPool,
+ TP_Custom_Asynch_Request,
+ "$Id$")
+
+#if !defined (__ACE_INLINE__)
+# include "tao/CSD_ThreadPool/CSD_TP_Custom_Asynch_Request.inl"
+#endif /* ! __ACE_INLINE__ */
+
+TAO_BEGIN_VERSIONED_NAMESPACE_DECL
+
+TAO::CSD::TP_Custom_Asynch_Request::~TP_Custom_Asynch_Request()
+{
+}
+
+
+void
+TAO::CSD::TP_Custom_Asynch_Request::dispatch_i()
+{
+ ACE_DECLARE_NEW_CORBA_ENV;
+ ACE_TRY
+ {
+ this->execute_op();
+ ACE_TRY_CHECK;
+ }
+ ACE_CATCHANY
+ {
+ // Eat these. We probably should log these, but since we have already
+ // unblocked the requesting thread there is no point in saving it or
+ // doing anything with it.
+ }
+#if defined (TAO_HAS_EXCEPTIONS)
+ ACE_CATCHALL
+ {
+ // Eat these. We probably should log these, but since we have already
+ // unblocked the requesting thread there is no point in saving it or
+ // doing anything with it.
+ }
+#endif
+ ACE_ENDTRY;
+}
+
+void
+TAO::CSD::TP_Custom_Asynch_Request::cancel_i()
+{
+ this->cancel_op();
+}
+
+TAO_END_VERSIONED_NAMESPACE_DECL
diff --git a/TAO/tao/CSD_ThreadPool/CSD_TP_Custom_Asynch_Request.h b/TAO/tao/CSD_ThreadPool/CSD_TP_Custom_Asynch_Request.h
new file mode 100644
index 00000000000..aed6d8f88f5
--- /dev/null
+++ b/TAO/tao/CSD_ThreadPool/CSD_TP_Custom_Asynch_Request.h
@@ -0,0 +1,79 @@
+// -*- C++ -*-
+
+//=============================================================================
+/**
+ * @file CSD_TP_Custom_Asynch_Request.h
+ *
+ * $Id$
+ *
+ * @author Tim Bradley <bradley_t@ociweb.com>
+ */
+//=============================================================================
+
+#ifndef TAO_CSD_TP_CUSTOM_ASYNCH_REQUEST_H
+#define TAO_CSD_TP_CUSTOM_ASYNCH_REQUEST_H
+
+#include /**/ "ace/pre.h"
+
+#include "tao/CSD_ThreadPool/CSD_TP_Export.h"
+
+#if !defined (ACE_LACKS_PRAGMA_ONCE)
+# pragma once
+#endif /* ACE_LACKS_PRAGMA_ONCE */
+
+#include "tao/CSD_ThreadPool/CSD_TP_Custom_Request.h"
+
+TAO_BEGIN_VERSIONED_NAMESPACE_DECL
+
+namespace TAO
+{
+ namespace CSD
+ {
+
+ class TP_Custom_Asynch_Request;
+ typedef TAO_Intrusive_Ref_Count_Handle<TP_Custom_Asynch_Request>
+ TP_Custom_Asynch_Request_Handle;
+
+ /**
+ * @class TP_Custom_Asynch_Request
+ *
+ * @brief Base class for "queue-able", Custom (non-CORBA),
+ * Synchronous requests.
+ *
+ * TBD - Add description
+ *
+ */
+ class TAO_CSD_TP_Export TP_Custom_Asynch_Request
+ : public TP_Custom_Request
+ {
+ public:
+
+ /// Constructor.
+ TP_Custom_Asynch_Request(TP_Custom_Request_Operation* op,
+ TP_Servant_State* servant_state);
+
+ /// Virtual Destructor.
+ virtual ~TP_Custom_Asynch_Request();
+
+
+ protected:
+
+ /// Dispatch the request to the servant.
+ virtual void dispatch_i();
+
+ /// Cancel the request.
+ virtual void cancel_i();
+ };
+
+ }
+}
+
+TAO_END_VERSIONED_NAMESPACE_DECL
+
+#if defined (__ACE_INLINE__)
+# include "tao/CSD_ThreadPool/CSD_TP_Custom_Asynch_Request.inl"
+#endif /* __ACE_INLINE__ */
+
+#include /**/ "ace/post.h"
+
+#endif /* TAO_CSD_TP_CUSTOM_ASYNCH_REQUEST_H */
diff --git a/TAO/tao/CSD_ThreadPool/CSD_TP_Custom_Asynch_Request.inl b/TAO/tao/CSD_ThreadPool/CSD_TP_Custom_Asynch_Request.inl
new file mode 100644
index 00000000000..4242ce41e5d
--- /dev/null
+++ b/TAO/tao/CSD_ThreadPool/CSD_TP_Custom_Asynch_Request.inl
@@ -0,0 +1,15 @@
+// -*- C++ -*-
+//
+// $Id$
+
+TAO_BEGIN_VERSIONED_NAMESPACE_DECL
+
+ACE_INLINE
+TAO::CSD::TP_Custom_Asynch_Request::TP_Custom_Asynch_Request
+ (TP_Custom_Request_Operation* op,
+ TP_Servant_State* servant_state)
+ : TP_Custom_Request(op,servant_state)
+{
+}
+
+TAO_END_VERSIONED_NAMESPACE_DECL
diff --git a/TAO/tao/CSD_ThreadPool/CSD_TP_Custom_Request.cpp b/TAO/tao/CSD_ThreadPool/CSD_TP_Custom_Request.cpp
new file mode 100644
index 00000000000..fbe24fc0c53
--- /dev/null
+++ b/TAO/tao/CSD_ThreadPool/CSD_TP_Custom_Request.cpp
@@ -0,0 +1,19 @@
+// $Id$
+
+#include "tao/CSD_ThreadPool/CSD_TP_Custom_Request.h"
+
+ACE_RCSID (CSD_ThreadPool,
+ TP_Custom_Request,
+ "$Id$")
+
+#if !defined (__ACE_INLINE__)
+# include "tao/CSD_ThreadPool/CSD_TP_Custom_Request.inl"
+#endif /* ! __ACE_INLINE__ */
+
+TAO_BEGIN_VERSIONED_NAMESPACE_DECL
+
+TAO::CSD::TP_Custom_Request::~TP_Custom_Request()
+{
+}
+
+TAO_END_VERSIONED_NAMESPACE_DECL
diff --git a/TAO/tao/CSD_ThreadPool/CSD_TP_Custom_Request.h b/TAO/tao/CSD_ThreadPool/CSD_TP_Custom_Request.h
new file mode 100644
index 00000000000..c4c5bcbb0b4
--- /dev/null
+++ b/TAO/tao/CSD_ThreadPool/CSD_TP_Custom_Request.h
@@ -0,0 +1,81 @@
+// -*- C++ -*-
+
+//=============================================================================
+/**
+ * @file CSD_TP_Custom_Request.h
+ *
+ * $Id$
+ *
+ * @author Tim Bradley <bradley_t@ociweb.com>
+ */
+//=============================================================================
+
+#ifndef TAO_CSD_TP_CUSTOM_REQUEST_H
+#define TAO_CSD_TP_CUSTOM_REQUEST_H
+
+#include /**/ "ace/pre.h"
+
+#include "tao/CSD_ThreadPool/CSD_TP_Export.h"
+
+#if !defined (ACE_LACKS_PRAGMA_ONCE)
+# pragma once
+#endif /* ACE_LACKS_PRAGMA_ONCE */
+
+#include "tao/CSD_ThreadPool/CSD_TP_Request.h"
+#include "tao/CSD_ThreadPool/CSD_TP_Custom_Request_Operation.h"
+#include "tao/PortableServer/Servant_Base.h"
+
+TAO_BEGIN_VERSIONED_NAMESPACE_DECL
+
+namespace TAO
+{
+ namespace CSD
+ {
+
+ class TP_Custom_Request;
+ typedef TAO_Intrusive_Ref_Count_Handle<TP_Custom_Request>
+ TP_Custom_Request_Handle;
+
+ /**
+ * @class TP_Custom_Request
+ *
+ * @brief Base class for "queue-able" Custom (non-CORBA) requests.
+ *
+ * TBD - Add description
+ *
+ */
+ class TAO_CSD_TP_Export TP_Custom_Request : public TP_Request
+ {
+ public:
+
+ /// Virtual Destructor.
+ virtual ~TP_Custom_Request();
+
+
+ protected:
+
+ /// Constructor.
+ TP_Custom_Request(TP_Custom_Request_Operation* op,
+ TP_Servant_State* servant_state);
+
+ void execute_op();
+ void cancel_op();
+
+
+ private:
+
+ TP_Custom_Request_Operation_Handle op_;
+ };
+
+ }
+}
+
+TAO_END_VERSIONED_NAMESPACE_DECL
+
+#if defined (__ACE_INLINE__)
+# include "tao/CSD_ThreadPool/CSD_TP_Custom_Request.inl"
+#endif /* __ACE_INLINE__ */
+
+#include /**/ "ace/post.h"
+
+#endif /* TAO_CSD_TP_CUSTOM_REQUEST_H */
diff --git a/TAO/tao/CSD_ThreadPool/CSD_TP_Custom_Request.inl b/TAO/tao/CSD_ThreadPool/CSD_TP_Custom_Request.inl
new file mode 100644
index 00000000000..c63696ab628
--- /dev/null
+++ b/TAO/tao/CSD_ThreadPool/CSD_TP_Custom_Request.inl
@@ -0,0 +1,48 @@
+// -*- C++ -
+//
+// $Id$
+
+TAO_BEGIN_VERSIONED_NAMESPACE_DECL
+
+ACE_INLINE
+TAO::CSD::TP_Custom_Request::TP_Custom_Request
+ (TP_Custom_Request_Operation* op,
+ TP_Servant_State* servant_state)
+ : TP_Request(op->servant(),servant_state),
+ op_(op, false)
+{
+}
+
+
+ACE_INLINE
+void
+TAO::CSD::TP_Custom_Request::execute_op()
+{
+ this->op_->execute();
+
+ // Now drop the reference to the custom operation object.
+ // This is necessary so that custom operation objects can be created
+ // on the stack for synchronous custom requests. If we do not do this,
+ // then there is a race condition which could result in the stack-created
+ // custom operation object having a reference count of 2 when it falls
+ // out of scope (and destructs). Our op_ data member would be the one
+ // that held the other reference, and when our op_ data member destructs,
+ // it attempts to perform a _remove_ref() on the underlying operation
+ // object - which has already been destructed! Thus, we reset the op_
+ // data member here to the 'nil' state - causing the _remove_ref() to
+ // be performed now.
+ this->op_ = 0;
+}
+
+
+ACE_INLINE
+void
+TAO::CSD::TP_Custom_Request::cancel_op()
+{
+ this->op_->cancel();
+
+ // See comments in the execute_op() method.
+ this->op_ = 0;
+}
+
+TAO_END_VERSIONED_NAMESPACE_DECL
diff --git a/TAO/tao/CSD_ThreadPool/CSD_TP_Custom_Request_Operation.cpp b/TAO/tao/CSD_ThreadPool/CSD_TP_Custom_Request_Operation.cpp
new file mode 100644
index 00000000000..e2702b6c5a5
--- /dev/null
+++ b/TAO/tao/CSD_ThreadPool/CSD_TP_Custom_Request_Operation.cpp
@@ -0,0 +1,19 @@
+// $Id$
+
+#include "tao/CSD_ThreadPool/CSD_TP_Custom_Request_Operation.h"
+
+ACE_RCSID (CSD_ThreadPool,
+ TP_Custom_Request_Operation,
+ "$Id$")
+
+#if !defined (__ACE_INLINE__)
+# include "tao/CSD_ThreadPool/CSD_TP_Custom_Request_Operation.inl"
+#endif /* ! __ACE_INLINE__ */
+
+TAO_BEGIN_VERSIONED_NAMESPACE_DECL
+
+TAO::CSD::TP_Custom_Request_Operation::~TP_Custom_Request_Operation()
+{
+}
+
+TAO_END_VERSIONED_NAMESPACE_DECL
diff --git a/TAO/tao/CSD_ThreadPool/CSD_TP_Custom_Request_Operation.h b/TAO/tao/CSD_ThreadPool/CSD_TP_Custom_Request_Operation.h
new file mode 100644
index 00000000000..e3b85853f9f
--- /dev/null
+++ b/TAO/tao/CSD_ThreadPool/CSD_TP_Custom_Request_Operation.h
@@ -0,0 +1,99 @@
+// -*- C++ -*-
+
+//=============================================================================
+/**
+ * @file CSD_TP_Custom_Request_Operation.h
+ *
+ * $Id$
+ *
+ * @author Tim Bradley <bradley_t@ociweb.com>
+ */
+//=============================================================================
+
+#ifndef TAO_CSD_TP_CUSTOM_REQUEST_OPERATION_H
+#define TAO_CSD_TP_CUSTOM_REQUEST_OPERATION_H
+
+#include /**/ "ace/pre.h"
+
+#include "tao/CSD_ThreadPool/CSD_TP_Export.h"
+
+#if !defined (ACE_LACKS_PRAGMA_ONCE)
+# pragma once
+#endif /* ACE_LACKS_PRAGMA_ONCE */
+
+#include "tao/Intrusive_Ref_Count_Base_T.h"
+#include "tao/Intrusive_Ref_Count_Handle_T.h"
+#include "tao/PortableServer/Servant_Base.h"
+#include "ace/Synch.h"
+
+TAO_BEGIN_VERSIONED_NAMESPACE_DECL
+
+namespace TAO
+{
+ namespace CSD
+ {
+
+ class TP_Custom_Request_Operation;
+ typedef TAO_Intrusive_Ref_Count_Handle<TP_Custom_Request_Operation>
+ TP_Custom_Request_Operation_Handle;
+
+
+ /**
+ * @class TP_Custom_Request_Operation
+ *
+ * @brief Base class for all custom request operations.
+ *
+ * @note The caller that creates a new TP_Custom_Request_Operation
+ * object needs call _add_ref () on the servant before
+ * constructing it and the TP_Custom_Request_Operation object
+ * is responsible to decrement the reference count.
+ *
+ * TBD - Add description
+ */
+ class TAO_CSD_TP_Export TP_Custom_Request_Operation
+ : public TAO_Intrusive_Ref_Count_Base<ACE_SYNCH_MUTEX>
+ {
+ public:
+
+ /// Virtual Destructor.
+ virtual ~TP_Custom_Request_Operation();
+
+ /// Invoked by a worker thread to perform the operation.
+ void execute();
+
+ /// Invoked when the request has been cancelled.
+ void cancel();
+
+ /// Used by the TP_Strategy to obtain the target servant in order
+ /// to construct the custom request object. Returns the servant as
+ /// an "in" argument (the caller does not get a new 'copy'). This
+ /// is useful for chaining.
+ PortableServer::Servant servant();
+
+
+ protected:
+
+ /// Constructor.
+ TP_Custom_Request_Operation(PortableServer::Servant servant);
+
+ virtual void execute_i() = 0;
+ virtual void cancel_i() = 0;
+
+
+ private:
+
+ PortableServer::ServantBase_var servant_;
+ };
+
+ }
+}
+
+TAO_END_VERSIONED_NAMESPACE_DECL
+
+#if defined (__ACE_INLINE__)
+# include "tao/CSD_ThreadPool/CSD_TP_Custom_Request_Operation.inl"
+#endif /* __ACE_INLINE__ */
+
+#include /**/ "ace/post.h"
+
+#endif /* TAO_CSD_TP_CUSTOM_REQUEST_OPERATION_H */
diff --git a/TAO/tao/CSD_ThreadPool/CSD_TP_Custom_Request_Operation.inl b/TAO/tao/CSD_ThreadPool/CSD_TP_Custom_Request_Operation.inl
new file mode 100644
index 00000000000..6a05c5df7ee
--- /dev/null
+++ b/TAO/tao/CSD_ThreadPool/CSD_TP_Custom_Request_Operation.inl
@@ -0,0 +1,51 @@
+// -*- C++ -*-
+//
+// $Id$
+
+TAO_BEGIN_VERSIONED_NAMESPACE_DECL
+
+ACE_INLINE
+TAO::CSD::TP_Custom_Request_Operation::TP_Custom_Request_Operation
+ (PortableServer::Servant servant)
+: servant_ (servant)
+{
+ // This try-catch block is not really necessary for current implementation
+ // since the _add_ref does not throw exception, but we have to add it to
+ // satisfy the non-exception builds. If _add_ref really throws an exception
+ // then this constructor needs deal with the exception.
+ ACE_TRY_NEW_ENV
+ {
+ this->servant_->_add_ref (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+ }
+ ACE_CATCHALL
+ {
+ }
+ ACE_ENDTRY;
+}
+
+
+ACE_INLINE
+void
+TAO::CSD::TP_Custom_Request_Operation::execute()
+{
+ this->execute_i();
+}
+
+
+ACE_INLINE
+void
+TAO::CSD::TP_Custom_Request_Operation::cancel()
+{
+ this->cancel_i();
+}
+
+
+ACE_INLINE
+PortableServer::Servant
+TAO::CSD::TP_Custom_Request_Operation::servant()
+{
+ return this->servant_.in();
+}
+
+TAO_END_VERSIONED_NAMESPACE_DECL
diff --git a/TAO/tao/CSD_ThreadPool/CSD_TP_Custom_Synch_Request.cpp b/TAO/tao/CSD_ThreadPool/CSD_TP_Custom_Synch_Request.cpp
new file mode 100644
index 00000000000..287e516d7b4
--- /dev/null
+++ b/TAO/tao/CSD_ThreadPool/CSD_TP_Custom_Synch_Request.cpp
@@ -0,0 +1,35 @@
+// $Id$
+
+#include "tao/CSD_ThreadPool/CSD_TP_Custom_Synch_Request.h"
+
+ACE_RCSID (CSD_ThreadPool,
+ TP_Custom_Synch_Request,
+ "$Id$")
+
+#if !defined (__ACE_INLINE__)
+# include "tao/CSD_ThreadPool/CSD_TP_Custom_Synch_Request.inl"
+#endif /* ! __ACE_INLINE__ */
+
+TAO_BEGIN_VERSIONED_NAMESPACE_DECL
+
+TAO::CSD::TP_Custom_Synch_Request::~TP_Custom_Synch_Request()
+{
+}
+
+
+void
+TAO::CSD::TP_Custom_Synch_Request::dispatch_i()
+{
+ this->execute_op();
+ this->synch_helper_.dispatched();
+}
+
+
+void
+TAO::CSD::TP_Custom_Synch_Request::cancel_i()
+{
+ this->cancel_op();
+ this->synch_helper_.cancelled();
+}
+
+TAO_END_VERSIONED_NAMESPACE_DECL
diff --git a/TAO/tao/CSD_ThreadPool/CSD_TP_Custom_Synch_Request.h b/TAO/tao/CSD_ThreadPool/CSD_TP_Custom_Synch_Request.h
new file mode 100644
index 00000000000..02d66b20597
--- /dev/null
+++ b/TAO/tao/CSD_ThreadPool/CSD_TP_Custom_Synch_Request.h
@@ -0,0 +1,92 @@
+// -*- C++ -*-
+
+//=============================================================================
+/**
+ * @file CSD_TP_Custom_Synch_Request.h
+ *
+ * $Id$
+ *
+ * @author Tim Bradley <bradley_t@ociweb.com>
+ */
+//=============================================================================
+
+#ifndef TAO_CSD_TP_CUSTOM_SYNCH_REQUEST_H
+#define TAO_CSD_TP_CUSTOM_SYNCH_REQUEST_H
+
+#include /**/ "ace/pre.h"
+
+#include "tao/CSD_ThreadPool/CSD_TP_Export.h"
+
+#if !defined (ACE_LACKS_PRAGMA_ONCE)
+# pragma once
+#endif /* ACE_LACKS_PRAGMA_ONCE */
+
+#include "tao/CSD_ThreadPool/CSD_TP_Custom_Request.h"
+#include "tao/CSD_ThreadPool/CSD_TP_Synch_Helper.h"
+
+TAO_BEGIN_VERSIONED_NAMESPACE_DECL
+
+namespace TAO
+{
+ namespace CSD
+ {
+
+ class TP_Custom_Synch_Request;
+ typedef TAO_Intrusive_Ref_Count_Handle<TP_Custom_Synch_Request>
+ TP_Custom_Synch_Request_Handle;
+
+ /**
+ * @class TP_Custom_Synch_Request
+ *
+ * @brief Base class for "queue-able", Custom (non-CORBA),
+ * Synchronous requests.
+ *
+ * TBD - Add description
+ *
+ */
+ class TAO_CSD_TP_Export TP_Custom_Synch_Request : public TP_Custom_Request
+ {
+ public:
+
+ /// Constructor.
+ TP_Custom_Synch_Request(TP_Custom_Request_Operation* op,
+ TP_Servant_State* servant_state);
+
+ /// Virtual Destructor.
+ virtual ~TP_Custom_Synch_Request();
+
+ /// Wait until the request has been executed (and completes), or
+ /// until it has been cancelled. Returns true if the request has
+ /// been executed/completed, and returns false if the request has
+ /// been cancelled.
+ bool wait();
+
+
+ protected:
+
+ /// Dispatch the request to the servant.
+ virtual void dispatch_i();
+
+ /// Cancel the request.
+ virtual void cancel_i();
+
+
+ private:
+
+ /// Helper used to block and unblock the thread that invokes our
+ /// wait() method.
+ TP_Synch_Helper synch_helper_;
+ };
+
+ }
+}
+
+TAO_END_VERSIONED_NAMESPACE_DECL
+
+#if defined (__ACE_INLINE__)
+# include "tao/CSD_ThreadPool/CSD_TP_Custom_Synch_Request.inl"
+#endif /* __ACE_INLINE__ */
+
+#include /**/ "ace/post.h"
+
+#endif /* TAO_CSD_TP_CUSTOM_SYNCH_REQUEST_H */
diff --git a/TAO/tao/CSD_ThreadPool/CSD_TP_Custom_Synch_Request.inl b/TAO/tao/CSD_ThreadPool/CSD_TP_Custom_Synch_Request.inl
new file mode 100644
index 00000000000..cec37afcdac
--- /dev/null
+++ b/TAO/tao/CSD_ThreadPool/CSD_TP_Custom_Synch_Request.inl
@@ -0,0 +1,23 @@
+// -*- C++ -*-
+//
+// $Id$
+
+TAO_BEGIN_VERSIONED_NAMESPACE_DECL
+
+ACE_INLINE
+TAO::CSD::TP_Custom_Synch_Request::TP_Custom_Synch_Request
+ (TP_Custom_Request_Operation* op,
+ TP_Servant_State* servant_state)
+ : TP_Custom_Request(op,servant_state)
+{
+}
+
+
+ACE_INLINE
+bool
+TAO::CSD::TP_Custom_Synch_Request::wait()
+{
+ return this->synch_helper_.wait_while_pending();
+}
+
+TAO_END_VERSIONED_NAMESPACE_DECL
diff --git a/TAO/tao/CSD_ThreadPool/CSD_TP_Dispatchable_Visitor.cpp b/TAO/tao/CSD_ThreadPool/CSD_TP_Dispatchable_Visitor.cpp
new file mode 100644
index 00000000000..aeb5454c252
--- /dev/null
+++ b/TAO/tao/CSD_ThreadPool/CSD_TP_Dispatchable_Visitor.cpp
@@ -0,0 +1,53 @@
+// $Id$
+
+#include "tao/CSD_ThreadPool/CSD_TP_Dispatchable_Visitor.h"
+
+ACE_RCSID (CSD_TP,
+ Dispatchable_Visitor,
+ "$Id$")
+
+#if !defined (__ACE_INLINE__)
+# include "tao/CSD_ThreadPool/CSD_TP_Dispatchable_Visitor.inl"
+#endif /* ! __ACE_INLINE__ */
+
+TAO_BEGIN_VERSIONED_NAMESPACE_DECL
+
+TAO::CSD::TP_Dispatchable_Visitor::~TP_Dispatchable_Visitor()
+{
+}
+
+
+bool
+TAO::CSD::TP_Dispatchable_Visitor::visit_request(TP_Request* request,
+ bool& remove_flag)
+{
+ // Ask the request object if the target servant is "ready" to accept
+ // a request being dispatched to it.
+ if (request->is_ready())
+ {
+ // Ok. This request is a "dispatchable" request. It is what we were
+ // hoping to find.
+
+ // Save a copy of the request in our handle data member.
+ request->_add_ref();
+ this->request_ = request;
+
+ // Make sure that the queue will extract the request from the queue
+ // upon our return.
+ remove_flag = true;
+
+ // Mark the target servant as being "busy".
+ request->mark_as_busy();
+
+ // Stop the visitation by returning false.
+ return false;
+ }
+
+ // The target servant object of the request isn't ready, so the request
+ // is not considered to be a "dispatchable" request.
+
+ // Return true to visit the next request in the queue (if there is one).
+ return true;
+}
+
+TAO_END_VERSIONED_NAMESPACE_DECL
diff --git a/TAO/tao/CSD_ThreadPool/CSD_TP_Dispatchable_Visitor.h b/TAO/tao/CSD_ThreadPool/CSD_TP_Dispatchable_Visitor.h
new file mode 100644
index 00000000000..01aea59828a
--- /dev/null
+++ b/TAO/tao/CSD_ThreadPool/CSD_TP_Dispatchable_Visitor.h
@@ -0,0 +1,94 @@
+// -*- C++ -*-
+
+//=============================================================================
+/**
+ * @file CSD_TP_Dispatchable_Visitor.h
+ *
+ * $Id$
+ *
+ * @author Tim Bradley <bradley_t@ociweb.com>
+ */
+//=============================================================================
+
+#ifndef TAO_CSD_TP_DISPATCHABLE_VISITOR_H
+#define TAO_CSD_TP_DISPATCHABLE_VISITOR_H
+
+#include /**/ "ace/pre.h"
+
+#include "tao/CSD_ThreadPool/CSD_TP_Export.h"
+
+#if !defined (ACE_LACKS_PRAGMA_ONCE)
+# pragma once
+#endif /* ACE_LACKS_PRAGMA_ONCE */
+
+#include "tao/CSD_ThreadPool/CSD_TP_Queue_Visitor.h"
+#include "tao/CSD_ThreadPool/CSD_TP_Request.h"
+
+TAO_BEGIN_VERSIONED_NAMESPACE_DECL
+
+namespace TAO
+{
+ namespace CSD
+ {
+
+ /**
+ * @class TP_Dispatchable_Visitor
+ *
+ * @brief Used to extract the first "dispatchable" request from the queue.
+ *
+ * An instance of this visitor class is used by one of the worker
+ * threads to locate the first "dispatchable" request in the queue. If
+ * such a request is visited, then this visitor will save a "copy" of
+ * the request, indicate that the request should be removed from the
+ * queue, and indicate that visitation should stop.
+ *
+ * An method is provided to retrieve a "copy" of the "dispatchable"
+ * request that was saved off during visitation. A nil reference
+ * (ie, a NULL pointer) will be returned if no dispatchable request
+ * was found.
+ *
+ */
+ class TAO_CSD_TP_Export TP_Dispatchable_Visitor : public TP_Queue_Visitor
+ {
+ public:
+
+ /// Default Constructor.
+ TP_Dispatchable_Visitor();
+
+ /// Virtual Destructor.
+ virtual ~TP_Dispatchable_Visitor();
+
+ /// Reset this visitor object in order to re-use it for another
+ /// visitation of the request queue. This sets the vistor's "result"
+ /// (the TP_Request* data member) to its default value (a nil handle).
+ void reset();
+
+ /// Returns true to continue visitation. Returns false to stop
+ /// visitation. Sets the remove_flag to true if the request should
+ /// be removed from the queue as a result of the visit. Leaves the
+ /// remove_flag alone otherwise.
+ virtual bool visit_request(TP_Request* request, bool& remove_flag);
+
+ /// This returns a "copy" of the located request, or 0 if no request
+ /// was located.
+ TP_Request* request();
+
+
+ private:
+
+ /// A handle to the located request.
+ TP_Request_Handle request_;
+ };
+
+ }
+}
+
+TAO_END_VERSIONED_NAMESPACE_DECL
+
+#if defined (__ACE_INLINE__)
+# include "tao/CSD_ThreadPool/CSD_TP_Dispatchable_Visitor.inl"
+#endif /* __ACE_INLINE__ */
+
+#include /**/ "ace/post.h"
+
+#endif /* TAO_CSD_TP_DISPATCHABLE_VISITOR_H */
diff --git a/TAO/tao/CSD_ThreadPool/CSD_TP_Dispatchable_Visitor.inl b/TAO/tao/CSD_ThreadPool/CSD_TP_Dispatchable_Visitor.inl
new file mode 100644
index 00000000000..c2c16d34e26
--- /dev/null
+++ b/TAO/tao/CSD_ThreadPool/CSD_TP_Dispatchable_Visitor.inl
@@ -0,0 +1,31 @@
+// -*- C++ -*-
+//
+// $Id$
+
+TAO_BEGIN_VERSIONED_NAMESPACE_DECL
+
+ACE_INLINE
+TAO::CSD::TP_Dispatchable_Visitor::TP_Dispatchable_Visitor()
+{
+}
+
+
+ACE_INLINE
+void
+TAO::CSD::TP_Dispatchable_Visitor::reset()
+{
+ // Set the handle to 0 to have it release any request it may currently
+ // be referencing.
+ this->request_ = 0;
+}
+
+
+ACE_INLINE
+TAO::CSD::TP_Request*
+TAO::CSD::TP_Dispatchable_Visitor::request()
+{
+ TP_Request_Handle handle(this->request_.in(), false);
+ return handle._retn();
+}
+
+TAO_END_VERSIONED_NAMESPACE_DECL
diff --git a/TAO/tao/CSD_ThreadPool/CSD_TP_Queue.cpp b/TAO/tao/CSD_ThreadPool/CSD_TP_Queue.cpp
new file mode 100644
index 00000000000..cb7b0ecf8e1
--- /dev/null
+++ b/TAO/tao/CSD_ThreadPool/CSD_TP_Queue.cpp
@@ -0,0 +1,127 @@
+// $Id$
+
+#include "tao/CSD_ThreadPool/CSD_TP_Queue.h"
+#include "tao/CSD_ThreadPool/CSD_TP_Request.h"
+#include "tao/CSD_ThreadPool/CSD_TP_Queue_Visitor.h"
+
+ACE_RCSID (CSD_ThreadPool,
+ TP_Queue,
+ "$Id$")
+
+#if !defined (__ACE_INLINE__)
+# include "tao/CSD_ThreadPool/CSD_TP_Queue.inl"
+#endif /* ! __ACE_INLINE__ */
+
+TAO_BEGIN_VERSIONED_NAMESPACE_DECL
+
+void
+TAO::CSD::TP_Queue::put(TP_Request* request)
+{
+ // The request is passed in as an "in" argument, and we would like to
+ // hold on to a "copy" within the queue (the linked list). We will
+ // perform an _add_ref() on the request now to make the queue's "copy".
+ request->_add_ref();
+
+ if (this->tail_ == 0)
+ {
+ // The tail_ is a NULL pointer only when the queue is empty.
+ // Make the request be the only element in the queue.
+ this->head_ = this->tail_ = request;
+
+ // Make sure the request's prev_ and next_ pointers are set to NULL.
+ request->prev_ = request->next_ = 0;
+ }
+ else
+ {
+ // There is at least one request already in the queue. "Append" the
+ // supplied request object to the end of the queue.
+ request->prev_ = this->tail_;
+ request->next_ = 0;
+ this->tail_->next_ = request;
+ this->tail_ = request;
+ }
+}
+
+
+void
+TAO::CSD::TP_Queue::accept_visitor(TP_Queue_Visitor& visitor)
+{
+ TP_Request* cur = this->head_;
+
+ while (cur != 0)
+ {
+ TP_Request* prev = cur->prev_;
+ TP_Request* next = cur->next_;
+
+ // Pass the current request to the visitor. Also pass-in a reference
+ // to the remove_from_queue flag. The visitor may decide that it
+ // wants to keep the current request for itself, and desires that the
+ // request be (surgically) removed from the queue. The visitor also
+ // gets to decide, via its return value, whether or not visitation
+ // should continue (or cease to continue).
+ bool remove_from_queue = false;
+
+ bool continue_visitation = visitor.visit_request(cur,remove_from_queue);
+
+ if (remove_from_queue)
+ {
+ // Create a local handle to release the current request once
+ // the handle falls out of scope. We need to do this because the
+ // queue "owns" a "copy" of each request in the queue.
+ TP_Request_Handle handle = cur;
+
+ if (this->head_ == cur)
+ {
+ // The current request is at the front (the head_) of the queue.
+
+ // Move the head_ to the next request in the queue.
+ this->head_ = next;
+
+ if (this->head_ == 0)
+ {
+ // Not only was the current request at the front of the
+ // queue - it was the *only* request in the queue.
+ // Update the tail_ pointer now that the queue is empty.
+ this->tail_ = 0;
+ }
+ else
+ {
+ // Set the (new) head_ request's prev_ pointer to be NULL.
+ this->head_->prev_ = 0;
+ }
+ }
+ else if (this->tail_ == cur)
+ {
+ // The current request is not at the front of the queue,
+ // but it is at the back of the queue. This implies that
+ // the queue currently contains at least two requests -
+ // the current request (cur), and the previous request (prev).
+ // The point is that we can now assume that the 'prev' pointer
+ // is never NULL in this case.
+ this->tail_ = prev;
+ this->tail_->next_ = 0;
+ }
+ else
+ {
+ // The current request is not at the front or at the back.
+ // This implies that there are at least three requests in
+ // the queue. We can assume that the 'next' and 'prev'
+ // pointers are never NULL in this case.
+ prev->next_ = next;
+ next->prev_ = prev;
+ }
+ }
+
+ if (!continue_visitation)
+ {
+ // The visitor doesn't want to procede with any further visitation.
+ // Break out of the visitation loop now.
+ break;
+ }
+
+ // Move on to the next request in the queue.
+ cur = next;
+ }
+}
+
+TAO_END_VERSIONED_NAMESPACE_DECL
diff --git a/TAO/tao/CSD_ThreadPool/CSD_TP_Queue.h b/TAO/tao/CSD_ThreadPool/CSD_TP_Queue.h
new file mode 100644
index 00000000000..9912c0e613a
--- /dev/null
+++ b/TAO/tao/CSD_ThreadPool/CSD_TP_Queue.h
@@ -0,0 +1,101 @@
+// -*- C++ -*-
+
+//=============================================================================
+/**
+ * @file CSD_TP_Queue.h
+ *
+ * $Id$
+ *
+ * @author Tim Bradley <bradley_t@ociweb.com>
+ */
+//=============================================================================
+
+#ifndef TAO_CSD_TP_QUEUE_H
+#define TAO_CSD_TP_QUEUE_H
+
+#include /**/ "ace/pre.h"
+
+#include "tao/CSD_ThreadPool/CSD_TP_Export.h"
+
+#if !defined (ACE_LACKS_PRAGMA_ONCE)
+# pragma once
+#endif /* ACE_LACKS_PRAGMA_ONCE */
+
+#include "tao/Versioned_Namespace.h"
+
+TAO_BEGIN_VERSIONED_NAMESPACE_DECL
+
+namespace TAO
+{
+ namespace CSD
+ {
+
+ class TP_Request;
+ class TP_Queue_Visitor;
+
+ /**
+ * @class TP_Queue
+ *
+ * @brief Queue of servant requests that need to be dispatched.
+ *
+ * This is the queue of pending servant requests that is "owned"
+ * by a TP_Strategy object. When an ORB thread dispatches
+ * a servant request to the strategy object, it will create the
+ * appropriate (subclass of) TP_Request object to "wrap"
+ * the servant request in a "queue-friendly" wrapper. The ORB thread
+ * will then place the TP_Request object on to the queue. Note that
+ * this scenario pertains to what are being called "remote requests".
+ * There are other scenarios in which other types of requests can
+ * get added to this queue.
+ *
+ * The strategy object will employ a set of worker threads that are
+ * responsible for "servicing" the servant requests in the queue.
+ *
+ * Note: In the future, support will be added to allow the client
+ * application inject "custom" TP_Request objects into
+ * a TP_Strategy object, causing them to be placed in
+ * the queue.
+ */
+ class TAO_CSD_TP_Export TP_Queue
+ {
+ public:
+
+ /// Default Constructor.
+ TP_Queue();
+
+ /// Destructor.
+ ~TP_Queue();
+
+ /// Place a request at the end of the queue.
+ void put(TP_Request* request);
+
+ /// Returns true if the queue is empty. Returns false otherwise.
+ bool is_empty() const;
+
+ /// Visitors will visit each request in the queue, from front to back,
+ /// and have the ability to stop visiting at any time (ie, before
+ /// visiting every request).
+ void accept_visitor(TP_Queue_Visitor& visitor);
+
+
+ private:
+
+ /// The request at the front of the queue.
+ TP_Request* head_;
+
+ /// The request at the end of the queue.
+ TP_Request* tail_;
+ };
+
+ }
+}
+
+TAO_END_VERSIONED_NAMESPACE_DECL
+
+#if defined (__ACE_INLINE__)
+# include "tao/CSD_ThreadPool/CSD_TP_Queue.inl"
+#endif /* __ACE_INLINE__ */
+
+#include /**/ "ace/post.h"
+
+#endif /* TAO_CSD_TP_QUEUE_H */
diff --git a/TAO/tao/CSD_ThreadPool/CSD_TP_Queue.inl b/TAO/tao/CSD_ThreadPool/CSD_TP_Queue.inl
new file mode 100644
index 00000000000..9e26d265f10
--- /dev/null
+++ b/TAO/tao/CSD_ThreadPool/CSD_TP_Queue.inl
@@ -0,0 +1,29 @@
+// -*- C++ -*-
+//
+// $Id$
+
+
+TAO_BEGIN_VERSIONED_NAMESPACE_DECL
+
+ACE_INLINE
+TAO::CSD::TP_Queue::TP_Queue()
+ : head_(0),
+ tail_(0)
+{
+}
+
+
+ACE_INLINE
+TAO::CSD::TP_Queue::~TP_Queue()
+{
+}
+
+
+ACE_INLINE
+bool
+TAO::CSD::TP_Queue::is_empty() const
+{
+ return (this->head_ == 0);
+}
+
+TAO_END_VERSIONED_NAMESPACE_DECL
diff --git a/TAO/tao/CSD_ThreadPool/CSD_TP_Queue_Visitor.cpp b/TAO/tao/CSD_ThreadPool/CSD_TP_Queue_Visitor.cpp
new file mode 100644
index 00000000000..3ede8818521
--- /dev/null
+++ b/TAO/tao/CSD_ThreadPool/CSD_TP_Queue_Visitor.cpp
@@ -0,0 +1,19 @@
+// $Id$
+
+#include "tao/CSD_ThreadPool/CSD_TP_Queue_Visitor.h"
+
+ACE_RCSID (CSD_ThreadPool,
+ TP_Queue_Visitor,
+ "$Id$")
+
+#if !defined (__ACE_INLINE__)
+# include "tao/CSD_ThreadPool/CSD_TP_Queue_Visitor.inl"
+#endif /* ! __ACE_INLINE__ */
+
+TAO_BEGIN_VERSIONED_NAMESPACE_DECL
+
+TAO::CSD::TP_Queue_Visitor::~TP_Queue_Visitor()
+{
+}
+
+TAO_END_VERSIONED_NAMESPACE_DECL
diff --git a/TAO/tao/CSD_ThreadPool/CSD_TP_Queue_Visitor.h b/TAO/tao/CSD_ThreadPool/CSD_TP_Queue_Visitor.h
new file mode 100644
index 00000000000..f86467ae64d
--- /dev/null
+++ b/TAO/tao/CSD_ThreadPool/CSD_TP_Queue_Visitor.h
@@ -0,0 +1,79 @@
+// -*- C++ -*-
+
+//=============================================================================
+/**
+ * @file CSD_TP_Queue_Visitor.h
+ *
+ * $Id$
+ *
+ * @author Tim Bradley <bradley_t@ociweb.com>
+ */
+//=============================================================================
+
+#ifndef TAO_CSD_TP_QUEUE_VISITOR_H
+#define TAO_CSD_TP_QUEUE_VISITOR_H
+
+#include /**/ "ace/pre.h"
+
+#include "tao/CSD_ThreadPool/CSD_TP_Export.h"
+
+#if !defined (ACE_LACKS_PRAGMA_ONCE)
+# pragma once
+#endif /* ACE_LACKS_PRAGMA_ONCE */
+
+#include "tao/Versioned_Namespace.h"
+
+TAO_BEGIN_VERSIONED_NAMESPACE_DECL
+
+namespace TAO
+{
+ namespace CSD
+ {
+
+ class TP_Request;
+
+
+ /**
+ * @class TP_Queue_Visitor
+ *
+ * @brief Base class for vistors of the elements in the TP_Queue.
+ *
+ * Provides a way to perform thread-safe iteration over the
+ * TP_Request objects contained within a TP_Queue object.
+ *
+ * This also provides a means to encapsulate each distinct algorithm
+ * within a distinct subclass of TP_Queue_Visitor.
+ *
+ */
+ class TAO_CSD_TP_Export TP_Queue_Visitor
+ {
+ public:
+
+ /// Virtual Destructor.
+ virtual ~TP_Queue_Visitor();
+
+ /// Returns true to continue visitation. Return false to stop
+ /// visitation. Sets the remove_flag to true if the request should
+ /// be removed from the queue as a result of the visit. Leaves the
+ /// remove_flag alone otherwise.
+ virtual bool visit_request(TP_Request* request, bool& remove_flag) = 0;
+
+
+ protected:
+
+ /// Default Constructor.
+ TP_Queue_Visitor();
+ };
+
+ }
+}
+
+TAO_END_VERSIONED_NAMESPACE_DECL
+
+#if defined (__ACE_INLINE__)
+# include "tao/CSD_ThreadPool/CSD_TP_Queue_Visitor.inl"
+#endif /* __ACE_INLINE__ */
+
+#include /**/ "ace/post.h"
+
+#endif /* TAO_CSD_TP_QUEUE_VISITOR_H */
diff --git a/TAO/tao/CSD_ThreadPool/CSD_TP_Queue_Visitor.inl b/TAO/tao/CSD_ThreadPool/CSD_TP_Queue_Visitor.inl
new file mode 100644
index 00000000000..36bd9fc5608
--- /dev/null
+++ b/TAO/tao/CSD_ThreadPool/CSD_TP_Queue_Visitor.inl
@@ -0,0 +1,12 @@
+// -*- C++ -*-
+//
+// $Id$
+
+TAO_BEGIN_VERSIONED_NAMESPACE_DECL
+
+ACE_INLINE
+TAO::CSD::TP_Queue_Visitor::TP_Queue_Visitor()
+{
+}
+
+TAO_END_VERSIONED_NAMESPACE_DECL
diff --git a/TAO/tao/CSD_ThreadPool/CSD_TP_Remote_Request.cpp b/TAO/tao/CSD_ThreadPool/CSD_TP_Remote_Request.cpp
new file mode 100644
index 00000000000..45529af5802
--- /dev/null
+++ b/TAO/tao/CSD_ThreadPool/CSD_TP_Remote_Request.cpp
@@ -0,0 +1,60 @@
+// $Id$
+
+#include "tao/CSD_ThreadPool/CSD_TP_Remote_Request.h"
+
+ACE_RCSID (CSD_ThreadPool,
+ TP_Remote_Request,
+ "$Id$")
+
+#if !defined (__ACE_INLINE__)
+# include "tao/CSD_ThreadPool/CSD_TP_Remote_Request.inl"
+#endif /* ! __ACE_INLINE__ */
+
+TAO_BEGIN_VERSIONED_NAMESPACE_DECL
+
+TAO::CSD::TP_Remote_Request::~TP_Remote_Request()
+{
+}
+
+
+void
+TAO::CSD::TP_Remote_Request::prepare_for_queue_i()
+{
+ this->do_clone();
+}
+
+
+void
+TAO::CSD::TP_Remote_Request::dispatch_i()
+{
+ ACE_DECLARE_NEW_CORBA_ENV;
+ ACE_TRY
+ {
+ this->do_dispatch(ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+ }
+ ACE_CATCHANY
+ {
+ // Eat these. We probably should log these, but since we have already
+ // unblocked the requesting thread there is no point in saving it or
+ // doing anything with it.
+ }
+#if defined (TAO_HAS_EXCEPTIONS)
+ ACE_CATCHALL
+ {
+ // Eat these. We probably should log these, but since we have already
+ // unblocked the requesting thread there is no point in saving it or
+ // doing anything with it.
+ }
+#endif
+ ACE_ENDTRY;
+}
+
+
+void
+TAO::CSD::TP_Remote_Request::cancel_i()
+{
+ this->do_cancel();
+}
+
+TAO_END_VERSIONED_NAMESPACE_DECL
diff --git a/TAO/tao/CSD_ThreadPool/CSD_TP_Remote_Request.h b/TAO/tao/CSD_ThreadPool/CSD_TP_Remote_Request.h
new file mode 100644
index 00000000000..57303e81e91
--- /dev/null
+++ b/TAO/tao/CSD_ThreadPool/CSD_TP_Remote_Request.h
@@ -0,0 +1,102 @@
+// -*- C++ -*-
+
+//=============================================================================
+/**
+ * @file CSD_TP_Remote_Request.h
+ *
+ * $Id$
+ *
+ * @author Tim Bradley <bradley_t@ociweb.com>
+ */
+//=============================================================================
+
+#ifndef TAO_CSD_TP_REMOTE_REQUEST_H
+#define TAO_CSD_TP_REMOTE_REQUEST_H
+
+#include /**/ "ace/pre.h"
+
+#include "tao/CSD_ThreadPool/CSD_TP_Export.h"
+
+#if !defined (ACE_LACKS_PRAGMA_ONCE)
+# pragma once
+#endif /* ACE_LACKS_PRAGMA_ONCE */
+
+#include "tao/CSD_ThreadPool/CSD_TP_Corba_Request.h"
+
+TAO_BEGIN_VERSIONED_NAMESPACE_DECL
+
+namespace TAO
+{
+ namespace CSD
+ {
+
+ class TP_Remote_Request;
+ typedef TAO_Intrusive_Ref_Count_Handle<TP_Remote_Request>
+ TP_Remote_Request_Handle;
+
+ /**
+ * @class TP_Remote_Request
+ *
+ * @brief Represents a "queue-able", remote, CORBA request.
+ * Both syncronous and asynchronous remote CORBA requests
+ * are represented by the class.
+ *
+ * TBD - Go over the following comments and clean up.
+ *
+ * Since this class derives from the TP_Request class, it can be
+ * added to a TP_Queue (ie, it is a "queueable" request). It
+ * represents a servant request that has been made by a remote
+ * CORBA client (as opposed to a collocated CORBA client). The
+ * term "CORBA client" is being used here to distinguish CORBA
+ * servant requests (those made thru a CORBA object reference), and
+ * "Custom" servant requests that can be "dispatched" to the strategy
+ * directly by the client application code (ie, not thru a CORBA
+ * object reference). Thus, there are "CORBA clients" and
+ * "Direct clients".
+ *
+ * In summary, this class represents a servant request made when a
+ * remote client invokes a method on a CORBA object reference.
+ *
+ */
+ class TAO_CSD_TP_Export TP_Remote_Request : public TP_Corba_Request
+ {
+ public:
+
+ /// Constructor.
+ TP_Remote_Request(TAO_ServerRequest& server_request,
+ const PortableServer::ObjectId& object_id,
+ PortableServer::POA_ptr poa,
+ const char* operation,
+ PortableServer::Servant servant,
+ TP_Servant_State* servant_state);
+
+ /// Virtual Destructor.
+ virtual ~TP_Remote_Request();
+
+
+ protected:
+
+ /// Prepare this TP_Remote_Request object to be placed into the
+ /// request queue. This will cause the underlying TAO_ServerRequest
+ /// object to be cloned.
+ virtual void prepare_for_queue_i();
+
+ /// Dispatch the request to the servant.
+ virtual void dispatch_i();
+
+ /// Cancel the request.
+ virtual void cancel_i();
+ };
+
+ }
+}
+
+TAO_END_VERSIONED_NAMESPACE_DECL
+
+#if defined (__ACE_INLINE__)
+# include "tao/CSD_ThreadPool/CSD_TP_Remote_Request.inl"
+#endif /* __ACE_INLINE__ */
+
+#include /**/ "ace/post.h"
+
+#endif /* TAO_CSD_TP_REMOTE_REQUEST_H */
diff --git a/TAO/tao/CSD_ThreadPool/CSD_TP_Remote_Request.inl b/TAO/tao/CSD_ThreadPool/CSD_TP_Remote_Request.inl
new file mode 100644
index 00000000000..14a37aa44a9
--- /dev/null
+++ b/TAO/tao/CSD_ThreadPool/CSD_TP_Remote_Request.inl
@@ -0,0 +1,24 @@
+// -*- C++ -*-
+//
+// $Id$
+
+TAO_BEGIN_VERSIONED_NAMESPACE_DECL
+
+ACE_INLINE
+TAO::CSD::TP_Remote_Request::TP_Remote_Request
+ (TAO_ServerRequest& server_request,
+ const PortableServer::ObjectId& object_id,
+ PortableServer::POA_ptr poa,
+ const char* operation,
+ PortableServer::Servant servant,
+ TP_Servant_State* servant_state)
+ : TP_Corba_Request(object_id,
+ poa,
+ operation,
+ servant,
+ servant_state,
+ server_request)
+{
+}
+
+TAO_END_VERSIONED_NAMESPACE_DECL
diff --git a/TAO/tao/CSD_ThreadPool/CSD_TP_Request.cpp b/TAO/tao/CSD_ThreadPool/CSD_TP_Request.cpp
new file mode 100644
index 00000000000..e1926f93e8b
--- /dev/null
+++ b/TAO/tao/CSD_ThreadPool/CSD_TP_Request.cpp
@@ -0,0 +1,27 @@
+// $Id$
+
+#include "tao/CSD_ThreadPool/CSD_TP_Request.h"
+
+ACE_RCSID (CSD_ThreadPool,
+ TP_Request,
+ "$Id$")
+
+#if !defined (__ACE_INLINE__)
+# include "tao/CSD_ThreadPool/CSD_TP_Request.inl"
+#endif /* ! __ACE_INLINE__ */
+
+TAO_BEGIN_VERSIONED_NAMESPACE_DECL
+
+TAO::CSD::TP_Request::~TP_Request()
+{
+}
+
+
+void
+TAO::CSD::TP_Request::prepare_for_queue_i()
+{
+ // Default implementation is to do nothing. Subclasses can provide
+ // their own implementation if needed.
+}
+
+TAO_END_VERSIONED_NAMESPACE_DECL
diff --git a/TAO/tao/CSD_ThreadPool/CSD_TP_Request.h b/TAO/tao/CSD_ThreadPool/CSD_TP_Request.h
new file mode 100644
index 00000000000..104d741d3b9
--- /dev/null
+++ b/TAO/tao/CSD_ThreadPool/CSD_TP_Request.h
@@ -0,0 +1,136 @@
+// -*- C++ -*-
+
+//=============================================================================
+/**
+ * @file CSD_TP_Request.h
+ *
+ * $Id$
+ *
+ * @author Tim Bradley <bradley_t@ociweb.com>
+ */
+//=============================================================================
+
+#ifndef TAO_CSD_TP_REQUEST_H
+#define TAO_CSD_TP_REQUEST_H
+
+#include /**/ "ace/pre.h"
+
+#include "tao/CSD_ThreadPool/CSD_TP_Export.h"
+
+#if !defined (ACE_LACKS_PRAGMA_ONCE)
+# pragma once
+#endif /* ACE_LACKS_PRAGMA_ONCE */
+
+#include "tao/CSD_ThreadPool/CSD_TP_Servant_State.h"
+#include "tao/PortableServer/Servant_Base.h"
+#include "tao/Intrusive_Ref_Count_Base_T.h"
+#include "tao/Intrusive_Ref_Count_Handle_T.h"
+
+TAO_BEGIN_VERSIONED_NAMESPACE_DECL
+
+namespace TAO
+{
+ namespace CSD
+ {
+
+ class TP_Request;
+ typedef TAO_Intrusive_Ref_Count_Handle<TP_Request> TP_Request_Handle;
+
+ class TP_Queue;
+
+
+ /**
+ * @class TP_Request
+ *
+ * @brief Base class for "queue-able" requests.
+ *
+ * This class serves as the abstract base class for all types of
+ * "servant requests" that can be inserted into a TP_Queue
+ * object.
+ */
+ class TAO_CSD_TP_Export TP_Request
+ : public TAO_Intrusive_Ref_Count_Base<ACE_SYNCH_MUTEX>
+ {
+ public:
+
+ /// Virtual Destructor.
+ virtual ~TP_Request();
+
+ /// Prepare the request to be placed into the request queue.
+ void prepare_for_queue();
+
+ /// Invoked to dispatch the request to the servant.
+ void dispatch();
+
+ /// Invoked to cancel the request.
+ void cancel();
+
+ /// Is the target servant ready to accept a request?
+ bool is_ready() const;
+
+ /// Mark the target servant as being busy.
+ void mark_as_busy();
+
+ /// Mark the target servant as being ready (ie, not busy).
+ void mark_as_ready();
+
+ /// This method returns true if this request targets the supplied
+ /// servant object.
+ bool is_target(PortableServer::Servant servant);
+
+
+ protected:
+
+ /// Constructor.
+ TP_Request(PortableServer::Servant servant,
+ TP_Servant_State* servant_state);
+
+ /// Accessor for the servant. Does not return a new (ref counted)
+ /// reference! This is used for chaining.
+ PortableServer::Servant servant();
+
+ /// The subclass knows if it needs to do anything in preparation
+ /// of being placed into the request queue. The default implementation
+ /// does nothing, so only subclasses that have something to do
+ /// need to provide their own implementation.
+ virtual void prepare_for_queue_i();
+
+ /// The subclass knows how to carry out its own way of dispatching
+ /// the request to the servant.
+ virtual void dispatch_i() = 0;
+
+ /// Ask the subclass to perform its duties to carry out the cancellation.
+ virtual void cancel_i() = 0;
+
+
+ private:
+
+ /// The TP_Queue class is our friend since it needs access to
+ /// the prev_ and next_ (private) data members.
+ friend class TP_Queue;
+
+ /// The previous TP_Request object (in the queue).
+ TP_Request* prev_;
+
+ /// The next TP_Request object (in the queue).
+ TP_Request* next_;
+
+ /// Reference to the servant object.
+ PortableServer::ServantBase_var servant_;
+
+ /// Reference to the servant "state" object (contains the busy flag).
+ TP_Servant_State::HandleType servant_state_;
+ };
+
+ }
+}
+
+TAO_END_VERSIONED_NAMESPACE_DECL
+
+#if defined (__ACE_INLINE__)
+# include "tao/CSD_ThreadPool/CSD_TP_Request.inl"
+#endif /* __ACE_INLINE__ */
+
+#include /**/ "ace/post.h"
+
+#endif /* TAO_CSD_TP_REQUEST_H */
diff --git a/TAO/tao/CSD_ThreadPool/CSD_TP_Request.inl b/TAO/tao/CSD_ThreadPool/CSD_TP_Request.inl
new file mode 100644
index 00000000000..341a449091e
--- /dev/null
+++ b/TAO/tao/CSD_ThreadPool/CSD_TP_Request.inl
@@ -0,0 +1,111 @@
+// -*- C++ -*-
+//
+// $Id$
+
+TAO_BEGIN_VERSIONED_NAMESPACE_DECL
+
+ACE_INLINE
+TAO::CSD::TP_Request::TP_Request(PortableServer::Servant servant,
+ TP_Servant_State* servant_state)
+ : prev_(0),
+ next_(0),
+ servant_ (servant),
+ servant_state_(servant_state, false)
+{
+ // This try-catch block is not really necessary for current implementation
+ // since the _add_ref does not throw exception, but we have to add it to
+ // satisfy the non-exception builds. If _add_ref really throws an exception
+ // then this constructor needs deal with the exception.
+ ACE_TRY_NEW_ENV
+ {
+ this->servant_->_add_ref (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+ }
+ ACE_CATCHALL
+ {
+ }
+ ACE_ENDTRY;
+}
+
+
+ACE_INLINE
+void
+TAO::CSD::TP_Request::prepare_for_queue()
+{
+ this->prepare_for_queue_i();
+}
+
+
+ACE_INLINE
+PortableServer::Servant
+TAO::CSD::TP_Request::servant()
+{
+ // Used for chaining so we do not return a new "copy".
+ return this->servant_.in();
+}
+
+
+ACE_INLINE
+bool
+TAO::CSD::TP_Request::is_ready() const
+{
+ if (this->servant_state_.is_nil())
+ {
+ // This means that the serialization of servants is off.
+ // We always answer true here to indicate that the servant is
+ // never busy.
+ return true;
+ }
+
+ return !this->servant_state_->busy_flag();
+}
+
+
+ACE_INLINE
+void
+TAO::CSD::TP_Request::mark_as_busy()
+{
+ if (!this->servant_state_.is_nil())
+ {
+ this->servant_state_->busy_flag(true);
+ }
+}
+
+
+ACE_INLINE
+void
+TAO::CSD::TP_Request::mark_as_ready()
+{
+ if (!this->servant_state_.is_nil())
+ {
+ this->servant_state_->busy_flag(false);
+ }
+}
+
+
+ACE_INLINE
+bool
+TAO::CSD::TP_Request::is_target(PortableServer::Servant servant)
+{
+ // Compare pointers. Return true only if these are the exact same object.
+ return (servant == this->servant_.in());
+}
+
+
+ACE_INLINE
+void
+TAO::CSD::TP_Request::dispatch()
+{
+ this->dispatch_i();
+
+}
+
+
+ACE_INLINE
+void
+TAO::CSD::TP_Request::cancel()
+{
+ this->cancel_i();
+}
+
+TAO_END_VERSIONED_NAMESPACE_DECL
diff --git a/TAO/tao/CSD_ThreadPool/CSD_TP_Servant_State.cpp b/TAO/tao/CSD_ThreadPool/CSD_TP_Servant_State.cpp
new file mode 100644
index 00000000000..28fbc8da7ba
--- /dev/null
+++ b/TAO/tao/CSD_ThreadPool/CSD_TP_Servant_State.cpp
@@ -0,0 +1,19 @@
+// $Id$
+
+#include "tao/CSD_ThreadPool/CSD_TP_Servant_State.h"
+
+ACE_RCSID (CSD_TP,
+ Servant_State,
+ "$Id$")
+
+#if !defined (__ACE_INLINE__)
+# include "tao/CSD_ThreadPool/CSD_TP_Servant_State.inl"
+#endif /* ! __ACE_INLINE__ */
+
+TAO_BEGIN_VERSIONED_NAMESPACE_DECL
+
+TAO::CSD::TP_Servant_State::~TP_Servant_State()
+{
+}
+
+TAO_END_VERSIONED_NAMESPACE_DECL
diff --git a/TAO/tao/CSD_ThreadPool/CSD_TP_Servant_State.h b/TAO/tao/CSD_ThreadPool/CSD_TP_Servant_State.h
new file mode 100644
index 00000000000..dbfebedb64c
--- /dev/null
+++ b/TAO/tao/CSD_ThreadPool/CSD_TP_Servant_State.h
@@ -0,0 +1,92 @@
+// -*- C++ -*-
+
+//=============================================================================
+/**
+ * @file CSD_TP_Servant_State.h
+ *
+ * $Id$
+ *
+ * @author Tim Bradley <bradley_t@ociweb.com>
+ */
+//=============================================================================
+
+#ifndef TAO_CSD_TP_SERVANT_STATE_H
+#define TAO_CSD_TP_SERVANT_STATE_H
+
+#include /**/ "ace/pre.h"
+
+#include "tao/CSD_ThreadPool/CSD_TP_Export.h"
+
+#if !defined (ACE_LACKS_PRAGMA_ONCE)
+# pragma once
+#endif /* ACE_LACKS_PRAGMA_ONCE */
+
+#include "tao/Intrusive_Ref_Count_Base_T.h"
+#include "tao/Intrusive_Ref_Count_Handle_T.h"
+#include "ace/Synch.h"
+
+TAO_BEGIN_VERSIONED_NAMESPACE_DECL
+
+namespace TAO
+{
+ namespace CSD
+ {
+
+ /**
+ * @class TP_Servant_State
+ *
+ * @brief Maintains state information for a particular servant.
+ *
+ * This TP_Servant_State class is an intrusively reference-counted
+ * class. This allows it to be held in a "smart pointer" (aka, handle)
+ * object that will manage the reference-counting automagically.
+ *
+ * One TP_Servant_State object is created for each servant object for
+ * which a request is to be dispatched. The servant state objects are
+ * held (via smart pointers) in a TP_Servant_State_Map object. In turn,
+ * the TP_Servant_State_Map object is a data member of the TP_Stategy
+ * class. Each request placed on to the request queue will hold a
+ * reference (via a smart pointer) to the servant state object.
+ *
+ * Currently, the only "state" info held in this TP_Servant_State class
+ * is the servant's busy flag.
+ *
+ */
+ class TAO_CSD_TP_Export TP_Servant_State
+ : public TAO_Intrusive_Ref_Count_Base<ACE_SYNCH_MUTEX>
+ {
+ public:
+
+ /// Handle Type (aka, Smart Pointer Type).
+ typedef TAO_Intrusive_Ref_Count_Handle<TP_Servant_State> HandleType;
+
+ /// Default Constructor.
+ TP_Servant_State();
+
+ /// Virtual Destructor.
+ virtual ~TP_Servant_State();
+
+ /// Accessor for the servant busy flag.
+ bool busy_flag() const;
+
+ /// Mutator for the servant busy flag.
+ void busy_flag(bool new_value);
+
+ private:
+
+ /// The servant's current "busy" state (true == busy, false == not busy)
+ bool busy_flag_;
+ };
+
+ }
+}
+
+TAO_END_VERSIONED_NAMESPACE_DECL
+
+#if defined (__ACE_INLINE__)
+# include "tao/CSD_ThreadPool/CSD_TP_Servant_State.inl"
+#endif /* __ACE_INLINE__ */
+
+#include /**/ "ace/post.h"
+
+#endif /* TAO_CSD_TP_SERVANT_STATE_H */
diff --git a/TAO/tao/CSD_ThreadPool/CSD_TP_Servant_State.inl b/TAO/tao/CSD_ThreadPool/CSD_TP_Servant_State.inl
new file mode 100644
index 00000000000..5ef996bcb6e
--- /dev/null
+++ b/TAO/tao/CSD_ThreadPool/CSD_TP_Servant_State.inl
@@ -0,0 +1,29 @@
+// -*- C++ -*-
+//
+// $Id$
+
+TAO_BEGIN_VERSIONED_NAMESPACE_DECL
+
+ACE_INLINE
+TAO::CSD::TP_Servant_State::TP_Servant_State()
+ : busy_flag_(false)
+{
+}
+
+
+ACE_INLINE
+bool
+TAO::CSD::TP_Servant_State::busy_flag() const
+{
+ return this->busy_flag_;
+}
+
+
+ACE_INLINE
+void
+TAO::CSD::TP_Servant_State::busy_flag(bool new_value)
+{
+ this->busy_flag_ = new_value;
+}
+
+TAO_END_VERSIONED_NAMESPACE_DECL
diff --git a/TAO/tao/CSD_ThreadPool/CSD_TP_Servant_State_Map.cpp b/TAO/tao/CSD_ThreadPool/CSD_TP_Servant_State_Map.cpp
new file mode 100644
index 00000000000..846f3a6e723
--- /dev/null
+++ b/TAO/tao/CSD_ThreadPool/CSD_TP_Servant_State_Map.cpp
@@ -0,0 +1,11 @@
+// $Id$
+
+#include "tao/CSD_ThreadPool/CSD_TP_Servant_State_Map.h"
+
+ACE_RCSID (CSD_TP,
+ Servant_State_Map,
+ "$Id$")
+
+#if !defined (__ACE_INLINE__)
+# include "tao/CSD_ThreadPool/CSD_TP_Servant_State_Map.inl"
+#endif /* ! __ACE_INLINE__ */
diff --git a/TAO/tao/CSD_ThreadPool/CSD_TP_Servant_State_Map.h b/TAO/tao/CSD_ThreadPool/CSD_TP_Servant_State_Map.h
new file mode 100644
index 00000000000..e6726098b72
--- /dev/null
+++ b/TAO/tao/CSD_ThreadPool/CSD_TP_Servant_State_Map.h
@@ -0,0 +1,95 @@
+// -*- C++ -*-
+
+//=============================================================================
+/**
+ * @file CSD_TP_Servant_State_Map.h
+ *
+ * $Id$
+ *
+ * @author Tim Bradley <bradley_t@ociweb.com>
+ */
+//=============================================================================
+
+#ifndef TAO_CSD_TP_SERVANT_STATE_MAP_H
+#define TAO_CSD_TP_SERVANT_STATE_MAP_H
+
+#include /**/ "ace/pre.h"
+
+#include "tao/CSD_ThreadPool/CSD_TP_Export.h"
+
+#if !defined (ACE_LACKS_PRAGMA_ONCE)
+# pragma once
+#endif /* ACE_LACKS_PRAGMA_ONCE */
+
+#include "tao/CSD_ThreadPool/CSD_TP_Servant_State.h"
+#include "tao/PortableServer/PortableServer.h"
+#include "ace/Hash_Map_Manager.h"
+#include "ace/Synch.h"
+
+TAO_BEGIN_VERSIONED_NAMESPACE_DECL
+
+namespace TAO
+{
+ namespace CSD
+ {
+
+ /**
+ * @class TP_Servant_State_Map
+ *
+ * @brief Map of Servant_State objects - one per servant.
+ *
+ * A TP_Stategy object holds an instance of a TP_Servant_State_Map object
+ * as a (held-by-value) data member. The strategy uses this map to
+ * find or create the TP_Servant_State object for a particular servant
+ * object.
+ *
+ */
+ class TAO_CSD_TP_Export TP_Servant_State_Map
+ {
+ public:
+
+ /// Default Constructor.
+ TP_Servant_State_Map();
+
+ /// Destructor.
+ ~TP_Servant_State_Map();
+
+ /// Accessor for the servant busy flag.
+ TP_Servant_State* find(PortableServer::Servant servant
+ ACE_ENV_ARG_DECL);
+
+ /// Insert the servant to map.
+ void insert(PortableServer::Servant servant
+ ACE_ENV_ARG_DECL);
+
+ /// Remove the servant from map.
+ void remove(PortableServer::Servant servant
+ ACE_ENV_ARG_DECL);
+
+
+ private:
+
+ /// Underlying Map Type - Hash-Based -
+ /// Key Type: void*, Value Type: TP_Servant_State::HandleType
+ typedef ACE_Hash_Map_Manager_Ex<void*,
+ TP_Servant_State::HandleType,
+ ACE_Hash<void*>,
+ ACE_Equal_To<void*>,
+ ACE_SYNCH_MUTEX> MapType;
+
+ /// The underlying map of servant state objects.
+ MapType map_;
+ };
+
+ }
+}
+
+TAO_END_VERSIONED_NAMESPACE_DECL
+
+#if defined (__ACE_INLINE__)
+# include "tao/CSD_ThreadPool/CSD_TP_Servant_State_Map.inl"
+#endif /* __ACE_INLINE__ */
+
+#include /**/ "ace/post.h"
+
+#endif /* TAO_CSD_TP_SERVANT_STATE_MAP_H */
diff --git a/TAO/tao/CSD_ThreadPool/CSD_TP_Servant_State_Map.inl b/TAO/tao/CSD_ThreadPool/CSD_TP_Servant_State_Map.inl
new file mode 100644
index 00000000000..1faeb7ad536
--- /dev/null
+++ b/TAO/tao/CSD_ThreadPool/CSD_TP_Servant_State_Map.inl
@@ -0,0 +1,70 @@
+// -*- C++ -*-
+//
+// $Id$
+
+TAO_BEGIN_VERSIONED_NAMESPACE_DECL
+
+ACE_INLINE
+TAO::CSD::TP_Servant_State_Map::TP_Servant_State_Map()
+{
+}
+
+
+ACE_INLINE
+TAO::CSD::TP_Servant_State_Map::~TP_Servant_State_Map()
+{
+}
+
+
+ACE_INLINE
+TAO::CSD::TP_Servant_State*
+TAO::CSD::TP_Servant_State_Map::find(PortableServer::Servant servant
+ ACE_ENV_ARG_DECL)
+{
+ void* key = servant;
+
+ TP_Servant_State::HandleType value;
+
+ if (this->map_.find(key, value) != 0)
+ {
+ ACE_THROW_RETURN (PortableServer::POA::ServantNotActive (), 0);
+ }
+
+ return value._retn();
+}
+
+
+ACE_INLINE
+void
+TAO::CSD::TP_Servant_State_Map::insert(PortableServer::Servant servant
+ ACE_ENV_ARG_DECL)
+{
+ void* key = servant;
+
+ TP_Servant_State::HandleType value = new TP_Servant_State ();
+
+ int result = this->map_.bind(key, value);
+
+ if (result == 1)
+ {
+ ACE_THROW (PortableServer::POA::ServantAlreadyActive ());
+ }
+
+ ACE_ASSERT (result == 0);
+}
+
+
+ACE_INLINE
+void
+TAO::CSD::TP_Servant_State_Map::remove(PortableServer::Servant servant
+ ACE_ENV_ARG_DECL)
+{
+ void* key = servant;
+
+ if (this->map_.unbind(key) == -1)
+ {
+ ACE_THROW (PortableServer::POA::ServantNotActive ());
+ }
+}
+
+TAO_END_VERSIONED_NAMESPACE_DECL
diff --git a/TAO/tao/CSD_ThreadPool/CSD_TP_Strategy.cpp b/TAO/tao/CSD_ThreadPool/CSD_TP_Strategy.cpp
new file mode 100644
index 00000000000..1a9c86ec8da
--- /dev/null
+++ b/TAO/tao/CSD_ThreadPool/CSD_TP_Strategy.cpp
@@ -0,0 +1,289 @@
+// $Id$
+
+#include "tao/CSD_ThreadPool/CSD_TP_Strategy.h"
+#include "tao/CSD_ThreadPool/CSD_TP_Remote_Request.h"
+#include "tao/CSD_ThreadPool/CSD_TP_Collocated_Synch_Request.h"
+#include "tao/CSD_ThreadPool/CSD_TP_Collocated_Asynch_Request.h"
+#include "tao/CSD_ThreadPool/CSD_TP_Custom_Synch_Request.h"
+#include "tao/CSD_ThreadPool/CSD_TP_Custom_Asynch_Request.h"
+#include "tao/CSD_ThreadPool/CSD_TP_Collocated_Synch_With_Server_Request.h"
+#include "ace/Trace.h"
+
+ACE_RCSID (CSD_ThreadPool,
+ TP_Strategy,
+ "$Id$")
+
+#if !defined (__ACE_INLINE__)
+# include "tao/CSD_ThreadPool/CSD_TP_Strategy.inl"
+#endif /* ! __ACE_INLINE__ */
+
+TAO_BEGIN_VERSIONED_NAMESPACE_DECL
+
+TAO::CSD::TP_Strategy::~TP_Strategy()
+{
+}
+
+
+
+TAO::CSD::TP_Strategy::CustomRequestOutcome
+TAO::CSD::TP_Strategy::custom_synch_request(TP_Custom_Request_Operation* op
+ ACE_ENV_ARG_DECL)
+{
+ TP_Servant_State::HandleType servant_state =
+ this->get_servant_state(op->servant()
+ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK_RETURN (REQUEST_REJECTED);
+
+ TP_Custom_Synch_Request_Handle request = new
+ TP_Custom_Synch_Request(op, servant_state.in());
+
+ if (!this->task_.add_request(request.in()))
+ {
+ // The request was rejected by the task.
+ return REQUEST_REJECTED;
+ }
+
+ // Now we wait until the request is handled (executed or cancelled).
+ return (request->wait()) ? REQUEST_EXECUTED : REQUEST_CANCELLED;
+}
+
+
+TAO::CSD::TP_Strategy::CustomRequestOutcome
+TAO::CSD::TP_Strategy::custom_asynch_request(TP_Custom_Request_Operation* op
+ ACE_ENV_ARG_DECL)
+{
+ TP_Servant_State::HandleType servant_state =
+ this->get_servant_state(op->servant()
+ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK_RETURN (REQUEST_REJECTED);
+
+ TP_Custom_Asynch_Request_Handle request = new
+ TP_Custom_Asynch_Request(op, servant_state.in());
+
+ return (this->task_.add_request(request.in()))
+ ? REQUEST_DISPATCHED : REQUEST_REJECTED;
+}
+
+
+bool
+TAO::CSD::TP_Strategy::poa_activated_event_i()
+{
+ // Activates the worker threads, and waits until all have been started.
+ return (this->task_.open(&(this->num_threads_)) == 0);
+}
+
+
+void
+TAO::CSD::TP_Strategy::poa_deactivated_event_i()
+{
+ // Passing in a value of 1 means that we want to shutdown the task, which
+ // equates to causing all worker threads to shutdown. The worker threads
+ // themselves will also invoke the close() method, but the passed-in value
+ // will be 0. So, a 1 means "shutdown", and a 0 means "a single worker
+ // thread is going away".
+ this->task_.close(1);
+}
+
+
+TAO::CSD::Strategy_Base::DispatchResult
+TAO::CSD::TP_Strategy::dispatch_remote_request_i
+ (TAO_ServerRequest& server_request,
+ const PortableServer::ObjectId& object_id,
+ PortableServer::POA_ptr poa,
+ const char* operation,
+ PortableServer::Servant servant
+ ACE_ENV_ARG_DECL)
+{
+ TP_Servant_State::HandleType servant_state =
+ this->get_servant_state(servant
+ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK_RETURN (DISPATCH_REJECTED);
+
+ // Now we can create the TP_Remote_Request object, and then add it to our
+ // task_'s "request queue".
+ //
+ // TBD-CSD: Need to use a Cached Allocator to "create" the
+ // TP_Remote_Request objects. For now, use the heap.
+ TP_Remote_Request_Handle request =
+ new TP_Remote_Request(server_request,
+ object_id,
+ poa,
+ operation,
+ servant,
+ servant_state.in());
+
+ // Hand the request object to our task so that it can add the request
+ // to its "request queue".
+ if (!this->task_.add_request(request.in()))
+ {
+ // Return the DISPATCH_REJECTED return code so that the caller (our
+ // base class' dispatch_request() method) knows that we did
+ // not handle the request, and that it should be rejected.
+ return TAO::CSD::Strategy_Base::DISPATCH_REJECTED;
+ }
+
+ return TAO::CSD::Strategy_Base::DISPATCH_HANDLED;
+}
+
+
+TAO::CSD::Strategy_Base::DispatchResult
+TAO::CSD::TP_Strategy::dispatch_collocated_request_i
+ (TAO_ServerRequest& server_request,
+ const PortableServer::ObjectId& object_id,
+ PortableServer::POA_ptr poa,
+ const char* operation,
+ PortableServer::Servant servant
+ ACE_ENV_ARG_DECL)
+{
+ TP_Servant_State::HandleType servant_state =
+ this->get_servant_state(servant
+ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK_RETURN (DISPATCH_REJECTED);
+
+ bool is_sync_with_server = server_request.sync_with_server();
+ bool is_synchronous = server_request.response_expected();
+
+ TP_Collocated_Synch_Request_Handle synch_request;
+ TP_Collocated_Synch_With_Server_Request_Handle synch_with_server_request;
+ TP_Request_Handle request;
+
+ // Create the request object using the appropriate concrete type.
+ if (is_sync_with_server)
+ {
+ synch_with_server_request =
+ new TP_Collocated_Synch_With_Server_Request
+ (server_request,
+ object_id,
+ poa,
+ operation,
+ servant,
+ servant_state.in());
+
+ // Give the request handle its own "copy".
+ synch_with_server_request->_add_ref();
+ request = synch_with_server_request.in();
+ }
+ else if (is_synchronous)
+ {
+ synch_request = new TP_Collocated_Synch_Request(server_request,
+ object_id,
+ poa,
+ operation,
+ servant,
+ servant_state.in());
+
+ // Give the request handle its own "copy".
+ synch_request->_add_ref();
+ request = synch_request.in();
+ }
+ else
+ {
+ // Just use the (base) request handle to hold the request object.
+ request = new TP_Collocated_Asynch_Request(server_request,
+ object_id,
+ poa,
+ operation,
+ servant,
+ servant_state.in());
+ }
+
+ // Hand the request object to our task so that it can add the request
+ // to its "request queue".
+ if (!this->task_.add_request(request.in()))
+ {
+ // Return the DISPATCH_REJECTED return code so that the caller (our
+ // base class' dispatch_request() method) knows that we did
+ // not handle the request, and that it should be rejected.
+ return DISPATCH_REJECTED;
+ }
+
+ // We need to wait on the request object if the request type is a
+ // synchronous request.
+ if (!synch_request.is_nil())
+ {
+ int srw = synch_request->wait(ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK_RETURN (DISPATCH_REJECTED);
+ if (srw == false)
+ {
+ // Raise exception when request was cancelled.
+ ACE_THROW_RETURN(CORBA::NO_IMPLEMENT(), DISPATCH_REJECTED);
+ }
+ }
+ else if (!synch_with_server_request.is_nil())
+ {
+ bool swsr = synch_with_server_request->wait(ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK_RETURN (DISPATCH_REJECTED);
+ if (swsr == false)
+ {
+ // Raise exception when request was cancelled.
+ ACE_THROW_RETURN(CORBA::NO_IMPLEMENT(), DISPATCH_REJECTED);
+ }
+ }
+
+ return DISPATCH_HANDLED;
+}
+
+
+void
+TAO::CSD::TP_Strategy::servant_activated_event_i
+ (PortableServer::Servant servant,
+ const PortableServer::ObjectId& oid
+ ACE_ENV_ARG_DECL)
+{
+ ACE_UNUSED_ARG(oid);
+
+ if (this->serialize_servants_)
+ {
+ // Add the servant to the servant state map.
+ this->servant_state_map_.insert(servant ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK;
+ }
+}
+
+
+void
+TAO::CSD::TP_Strategy::servant_deactivated_event_i
+ (PortableServer::Servant servant,
+ const PortableServer::ObjectId& oid
+ ACE_ENV_ARG_DECL)
+{
+ ACE_UNUSED_ARG(oid);
+
+ // Cancel all requests stuck in the queue for the specified servant.
+ this->task_.cancel_servant(servant ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK;
+
+ if (this->serialize_servants_)
+ {
+ // Remove the servant from the servant state map.
+ this->servant_state_map_.remove(servant ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK;
+ }
+}
+
+
+void
+TAO::CSD::TP_Strategy::cancel_requests(PortableServer::Servant servant
+ ACE_ENV_ARG_DECL)
+{
+ // Cancel all requests stuck in the queue for the specified servant.
+ this->task_.cancel_servant(servant ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK;
+}
+
+
+TAO::CSD::TP_Servant_State::HandleType
+TAO::CSD::TP_Strategy::get_servant_state(PortableServer::Servant servant
+ ACE_ENV_ARG_DECL)
+{
+ TP_Servant_State::HandleType servant_state;
+
+ if (this->serialize_servants_)
+ {
+ servant_state = this->servant_state_map_.find(servant
+ ACE_ENV_ARG_PARAMETER);
+ }
+
+ return servant_state;
+}
+TAO_END_VERSIONED_NAMESPACE_DECL
diff --git a/TAO/tao/CSD_ThreadPool/CSD_TP_Strategy.h b/TAO/tao/CSD_ThreadPool/CSD_TP_Strategy.h
new file mode 100644
index 00000000000..2e069caeb6d
--- /dev/null
+++ b/TAO/tao/CSD_ThreadPool/CSD_TP_Strategy.h
@@ -0,0 +1,210 @@
+// -*- C++ -*-
+
+//=============================================================================
+/**
+ * @file CSD_TP_Strategy.h
+ *
+ * $Id$
+ *
+ * @author Tim Bradley <bradley_t@ociweb.com>
+ */
+//=============================================================================
+
+#ifndef TAO_CSD_TP_STRATEGY_H
+#define TAO_CSD_TP_STRATEGY_H
+
+#include /**/ "ace/pre.h"
+
+#include "tao/CSD_ThreadPool/CSD_TP_Export.h"
+
+#include "tao/CSD_ThreadPool/CSD_TP_Task.h"
+#include "tao/CSD_ThreadPool/CSD_TP_Servant_State_Map.h"
+
+#if !defined (ACE_LACKS_PRAGMA_ONCE)
+# pragma once
+#endif /* ACE_LACKS_PRAGMA_ONCE */
+
+#include "tao/CSD_Framework/CSD_Strategy_Base.h"
+#include "tao/Intrusive_Ref_Count_Handle_T.h"
+
+
+TAO_BEGIN_VERSIONED_NAMESPACE_DECL
+
+namespace TAO
+{
+ namespace CSD
+ {
+
+ class TP_Strategy;
+ typedef TAO_Intrusive_Ref_Count_Handle<TP_Strategy> TP_Strategy_Handle;
+
+ class TP_Custom_Request_Operation;
+
+ /**
+ * @class TP_Strategy
+ *
+ * @brief A simple custom Thread-Pool servant dispatching strategy class.
+ *
+ * This class represents a concrete implementation of a "Custom
+ * Servant Dispatching Strategy". This implementation is being called
+ * the "Thread Pool Strategy" reference implementation.
+ *
+ * A custom servant dispatching strategy object can be applied to a
+ * POA object in order to carry out the servant dispatching duties
+ * for that POA.
+ *
+ */
+ class TAO_CSD_TP_Export TP_Strategy
+ : public Strategy_Base
+ {
+ public:
+
+ /// Constructor.
+ TP_Strategy(Thread_Counter num_threads = 1,
+ bool serialize_servants = true);
+
+ /// Virtual Destructor.
+ virtual ~TP_Strategy();
+
+ /// Set the number of threads in the pool (must be > 0).
+ void set_num_threads(Thread_Counter num_threads);
+
+ /// Turn on/off serialization of servants.
+ void set_servant_serialization(bool serialize_servants);
+
+ /// Return codes for the custom dispatch_request() methods.
+ enum CustomRequestOutcome
+ {
+ /// The request was successfully put on the request queue.
+ REQUEST_DISPATCHED,
+ /// The request has been executed/completed by a worker thread.
+ REQUEST_EXECUTED,
+ /// The request was removed from the queue and cancelled.
+ REQUEST_CANCELLED,
+ /// The request queue rejected the request
+ REQUEST_REJECTED
+ };
+
+ /// Inject a synchronous, custom request into the request queue.
+ /// This will block the calling thread until the request is handled
+ /// (dispatched or cancelled) or rejected.
+ /// Will return REQUEST_EXECUTED, REQUEST_CANCELLED, or REQUEST_REJECTED.
+ CustomRequestOutcome custom_synch_request
+ (TP_Custom_Request_Operation* op
+ ACE_ENV_ARG_DECL);
+
+ /// Inject an asynchronous, custom request into the request queue.
+ /// This will return control to the calling thread once the request
+ /// has been placed into the queue (or rejected).
+ /// Will return REQUEST_DISPATCHED or REQUEST_REJECTED.
+ CustomRequestOutcome custom_asynch_request
+ (TP_Custom_Request_Operation* op
+ ACE_ENV_ARG_DECL);
+
+ /// Cancel all requests that are targeted for the provided servant.
+ /// This is requested on the user application level.
+ void cancel_requests(PortableServer::Servant servant
+ ACE_ENV_ARG_DECL);
+
+ protected:
+
+ /// Handle the dispatching of a remote request.
+ ///
+ /// This will cause a new "request" object to be created and pushed
+ /// on to a "request queue". The worker threads are responsible for
+ /// servicing the queue, and performing the actual dispatch logic.
+ virtual Strategy_Base::DispatchResult dispatch_remote_request_i
+ (TAO_ServerRequest& server_request,
+ const PortableServer::ObjectId& object_id,
+ PortableServer::POA_ptr poa,
+ const char* operation,
+ PortableServer::Servant servant
+ ACE_ENV_ARG_DECL);
+
+ /// Handle the dispatching of a collocated request.
+ ///
+ /// This will cause a new "request" object to be created and pushed
+ /// on to a "request queue". The worker threads are responsible for
+ /// servicing the queue, and performing the actual dispatch logic.
+ virtual Strategy_Base::DispatchResult dispatch_collocated_request_i
+ (TAO_ServerRequest& server_request,
+ const PortableServer::ObjectId& object_id,
+ PortableServer::POA_ptr poa,
+ const char* operation,
+ PortableServer::Servant servant
+ ACE_ENV_ARG_DECL);
+
+ /// Event - The POA has been activated.
+ /// This will activate the worker thread(s).
+ /// Returns true if the worker threads were activated successfully.
+ /// Otherwise, returns false.
+ virtual bool poa_activated_event_i();
+
+ /// Event - The POA has been deactivated.
+ /// This will shutdown the worker thread(s).
+ virtual void poa_deactivated_event_i();
+
+ /// Event - A servant has been activated
+ virtual void servant_activated_event_i
+ (PortableServer::Servant servant,
+ const PortableServer::ObjectId& oid
+ ACE_ENV_ARG_DECL);
+
+ /// Event - A servant has been deactivated
+ virtual void servant_deactivated_event_i
+ (PortableServer::Servant servant,
+ const PortableServer::ObjectId& oid
+ ACE_ENV_ARG_DECL);
+
+
+ private:
+
+ /**
+ * Helper method that is responsible for looking up the servant
+ * state object in the servant state map *if* the "serialize
+ * servants" flag is set to true. In the case where the
+ * "serialize servants" flag is set to false, then a "nil"
+ * servant state handle object is returned.
+ *
+ * @param servant - input - a pointer to the servant object.
+ *
+ * @returns a handle to a servant state object.
+ *
+ * @throw PortableServer::POA::ServantNotActive if the servant
+ * state cannot be determined.
+ */
+ TP_Servant_State::HandleType get_servant_state
+ (PortableServer::Servant servant
+ ACE_ENV_ARG_DECL);
+
+
+ /// This is the active object used by the worker threads.
+ /// The request queue is owned/managed by the task object.
+ /// The strategy object puts requests into the task's request
+ /// queue, and the worker threads service the queued requests
+ /// by performing the actual servant request dispatching logic.
+ TP_Task task_;
+
+ /// The number of worker threads to use for the task.
+ Thread_Counter num_threads_;
+
+ /// The "serialize servants" flag.
+ bool serialize_servants_;
+
+ /// The map of servant state objects - only used when the
+ /// "serialize servants" flag is set to true.
+ TP_Servant_State_Map servant_state_map_;
+ };
+
+ }
+}
+
+TAO_END_VERSIONED_NAMESPACE_DECL
+
+#if defined (__ACE_INLINE__)
+# include "tao/CSD_ThreadPool/CSD_TP_Strategy.inl"
+#endif /* __ACE_INLINE__ */
+
+#include /**/ "ace/post.h"
+
+#endif /* TAO_CSD_TP_STRATEGY_H */
diff --git a/TAO/tao/CSD_ThreadPool/CSD_TP_Strategy.inl b/TAO/tao/CSD_ThreadPool/CSD_TP_Strategy.inl
new file mode 100644
index 00000000000..312484f5c8c
--- /dev/null
+++ b/TAO/tao/CSD_ThreadPool/CSD_TP_Strategy.inl
@@ -0,0 +1,35 @@
+// -*- C++ -*-
+//
+// $Id$
+
+TAO_BEGIN_VERSIONED_NAMESPACE_DECL
+
+ACE_INLINE
+TAO::CSD::TP_Strategy::TP_Strategy(Thread_Counter num_threads,
+ bool serialize_servants)
+ : num_threads_(num_threads),
+ serialize_servants_(serialize_servants)
+{
+ // Assumes that num_threads > 0.
+}
+
+
+ACE_INLINE
+void
+TAO::CSD::TP_Strategy::set_num_threads(Thread_Counter num_threads)
+{
+ // Simple Mutator. Assumes that num_threads > 0.
+ this->num_threads_ = num_threads;
+}
+
+
+ACE_INLINE
+void
+TAO::CSD::TP_Strategy::set_servant_serialization(bool serialize_servants)
+{
+ // Simple Mutator.
+ this->serialize_servants_ = serialize_servants;
+}
+
+
+TAO_END_VERSIONED_NAMESPACE_DECL
diff --git a/TAO/tao/CSD_ThreadPool/CSD_TP_Strategy_Factory.cpp b/TAO/tao/CSD_ThreadPool/CSD_TP_Strategy_Factory.cpp
new file mode 100644
index 00000000000..71aa9aa9b8c
--- /dev/null
+++ b/TAO/tao/CSD_ThreadPool/CSD_TP_Strategy_Factory.cpp
@@ -0,0 +1,154 @@
+// $Id$
+
+#include "tao/CSD_ThreadPool/CSD_TP_Strategy_Factory.h"
+#include "tao/CSD_ThreadPool/CSD_TP_Strategy.h"
+#include "tao/CSD_ThreadPool/CSD_ThreadPool.h"
+#include "tao/CSD_Framework/CSD_Strategy_Repository.h"
+#include "tao/debug.h"
+#include "ace/Dynamic_Service.h"
+#include "ace/OS_NS_strings.h"
+
+ACE_RCSID (CSD_ThreadPool,
+ TP_Strategy_Factory,
+ "$Id$")
+
+TAO_BEGIN_VERSIONED_NAMESPACE_DECL
+
+TAO::CSD::TP_Strategy_Factory::TP_Strategy_Factory()
+{
+}
+
+
+TAO::CSD::TP_Strategy_Factory::~TP_Strategy_Factory()
+{
+}
+
+
+int
+TAO::CSD::TP_Strategy_Factory::init (int argc,
+ ACE_TCHAR* argv[])
+{
+ ACE_TRACE ("TAO::CSD::TP_Strategy_Factory::init");
+
+ static int initialized = 0;
+
+ // Only allow initialization once.
+ if (initialized)
+ return 0;
+
+ initialized = 1;
+ TAO_CSD_Strategy_Repository *repo =
+ ACE_Dynamic_Service<TAO_CSD_Strategy_Repository>::instance ("TAO_CSD_Strategy_Repository");
+
+ if (repo != 0)
+ repo->init(0,0);
+
+ // Parse any service configurator parameters.
+ for (int curarg = 0; curarg < argc; curarg++)
+ if (ACE_OS::strcasecmp (argv[curarg],
+ ACE_TEXT("-CSDtp")) == 0)
+ {
+ ACE_CString poa_name;
+ unsigned long num_threads = 1;
+ bool serialize_servants = true;
+
+ curarg++;
+ if (curarg < argc)
+ {
+ // Parse the parameter
+ ACE_CString arg ((const char *)argv[curarg]);
+ ssize_t pos = arg.find (':');
+
+ if (pos == ACE_CString::npos)
+ {
+ poa_name = arg;
+ }
+ else
+ {
+ poa_name = arg.substr (0, pos);
+
+ ACE_CString arg_remainder =
+ arg.substr (pos + 1, arg.length () - pos);
+
+ ACE_CString num_thread_str;
+
+ pos = arg_remainder.find (':');
+
+ if (pos == ACE_CString::npos)
+ {
+ num_thread_str = arg_remainder;
+ }
+ else
+ {
+ num_thread_str = arg_remainder.substr (0, pos);
+
+ ACE_CString off_str =
+ arg_remainder.substr (pos + 1, arg.length () - pos);
+
+ // Case-insensitive string comparison.
+ if (ACE_OS::strcasecmp (off_str.c_str(),
+ ACE_TEXT("OFF")) == 0)
+ {
+ serialize_servants = false;
+ }
+ }
+
+ num_threads = ACE_OS::strtoul (num_thread_str.c_str (), 0, 10);
+
+ if (num_threads == 0)
+ {
+ // Minimum of 1 thread required.
+ num_threads = 1;
+ }
+ }
+
+ // Create the ThreadPool strategy for each named poa.
+ TP_Strategy* strategy = 0;
+ ACE_NEW_RETURN (strategy,
+ TP_Strategy (num_threads, serialize_servants),
+ -1);
+ CSD_Framework::Strategy_var objref = strategy;
+
+ TAO_CSD_Strategy_Repository *repo =
+ ACE_Dynamic_Service<TAO_CSD_Strategy_Repository>::instance
+ ("TAO_CSD_Strategy_Repository");
+
+ if (repo == 0)
+ {
+ TAO_CSD_ThreadPool::init ();
+ repo = ACE_Dynamic_Service<TAO_CSD_Strategy_Repository>::instance (
+ "TAO_CSD_Strategy_Repository"
+ );
+ }
+
+
+ repo->add_strategy (poa_name, strategy);
+ }
+ }
+ else
+ {
+ if (TAO_debug_level > 0)
+ {
+ ACE_DEBUG ((LM_ERROR,
+ ACE_TEXT("CSD_ORB_Loader: Unknown option ")
+ ACE_TEXT("<%s>.\n"),
+ argv[curarg]));
+ }
+ }
+
+
+ return 0;
+}
+
+TAO_END_VERSIONED_NAMESPACE_DECL
+
+ACE_FACTORY_NAMESPACE_DEFINE(TAO_CSD_TP,
+ TAO_CSD_TP_Strategy_Factory,
+ TAO::CSD::TP_Strategy_Factory)
+
+ACE_STATIC_SVC_DEFINE(TAO_CSD_TP_Strategy_Factory,
+ ACE_TEXT("TAO_CSD_TP_Strategy_Factory"),
+ ACE_SVC_OBJ_T,
+ &ACE_SVC_NAME(TAO_CSD_TP_Strategy_Factory),
+ ACE_Service_Type::DELETE_THIS | ACE_Service_Type::DELETE_OBJ,
+ 0)
diff --git a/TAO/tao/CSD_ThreadPool/CSD_TP_Strategy_Factory.h b/TAO/tao/CSD_ThreadPool/CSD_TP_Strategy_Factory.h
new file mode 100644
index 00000000000..abc3da5b005
--- /dev/null
+++ b/TAO/tao/CSD_ThreadPool/CSD_TP_Strategy_Factory.h
@@ -0,0 +1,65 @@
+// -*- C++ -*-
+
+//=============================================================================
+/**
+ * @file CSD_TP_Strategy_Factory.h
+ *
+ * $Id$
+ *
+ * @author Tim Bradley <bradley_t@ociweb.com>
+ */
+//=============================================================================
+
+#ifndef TAO_CSD_TP_STRATEGY_FACTORY_H
+#define TAO_CSD_TP_STRATEGY_FACTORY_H
+
+#include /**/ "ace/pre.h"
+
+#include "tao/CSD_ThreadPool/CSD_TP_Export.h"
+#include "tao/Versioned_Namespace.h"
+#include "ace/Service_Object.h"
+#include "ace/Service_Config.h"
+
+
+#if !defined (ACE_LACKS_PRAGMA_ONCE)
+# pragma once
+#endif /* ACE_LACKS_PRAGMA_ONCE */
+
+TAO_BEGIN_VERSIONED_NAMESPACE_DECL
+
+namespace TAO
+{
+ namespace CSD
+ {
+
+ /**
+ * @class TP_Strategy_Factory
+ *
+ * @brief An ACE_Service_Object capable of creating TP_Strategy objects.
+ *
+ * TBD - Explain in more detail.
+ *
+ */
+ class TAO_CSD_TP_Export TP_Strategy_Factory : public ACE_Service_Object
+ {
+ public:
+
+ /// Constructor.
+ TP_Strategy_Factory();
+
+ /// Virtual Destructor.
+ virtual ~TP_Strategy_Factory();
+
+ int init (int argc, ACE_TCHAR* argv[]);
+ };
+ }
+}
+
+TAO_END_VERSIONED_NAMESPACE_DECL
+
+ACE_STATIC_SVC_DECLARE_EXPORT(TAO_CSD_TP, TAO_CSD_TP_Strategy_Factory)
+ACE_FACTORY_DECLARE(TAO_CSD_TP, TAO_CSD_TP_Strategy_Factory)
+
+#include /**/ "ace/post.h"
+
+#endif /* TAO_CSD_TP_STRATEGY_FACTORY_H */
diff --git a/TAO/tao/CSD_ThreadPool/CSD_TP_Synch_Helper.cpp b/TAO/tao/CSD_ThreadPool/CSD_TP_Synch_Helper.cpp
new file mode 100644
index 00000000000..79a0a195097
--- /dev/null
+++ b/TAO/tao/CSD_ThreadPool/CSD_TP_Synch_Helper.cpp
@@ -0,0 +1,11 @@
+// $Id$
+
+#include "tao/CSD_ThreadPool/CSD_TP_Synch_Helper.h"
+
+ACE_RCSID (CSD_ThreadPool,
+ TP_Synch_Helper,
+ "$Id$")
+
+#if !defined (__ACE_INLINE__)
+# include "tao/CSD_ThreadPool/CSD_TP_Synch_Helper.inl"
+#endif /* ! __ACE_INLINE__ */
diff --git a/TAO/tao/CSD_ThreadPool/CSD_TP_Synch_Helper.h b/TAO/tao/CSD_ThreadPool/CSD_TP_Synch_Helper.h
new file mode 100644
index 00000000000..2056f1ab032
--- /dev/null
+++ b/TAO/tao/CSD_ThreadPool/CSD_TP_Synch_Helper.h
@@ -0,0 +1,110 @@
+// -*- C++ -*-
+
+//=============================================================================
+/**
+ * @file CSD_TP_Synch_Helper.h
+ *
+ * $Id$
+ *
+ * @author Tim Bradley <bradley_t@ociweb.com>
+ */
+//=============================================================================
+
+#ifndef TAO_CSD_TP_SYNCH_HELPER_H
+#define TAO_CSD_TP_SYNCH_HELPER_H
+
+#include /**/ "ace/pre.h"
+
+#include "tao/CSD_ThreadPool/CSD_TP_Export.h"
+#include "tao/Condition.h"
+
+#if !defined (ACE_LACKS_PRAGMA_ONCE)
+# pragma once
+#endif /* ACE_LACKS_PRAGMA_ONCE */
+
+#include "ace/Synch.h"
+
+TAO_BEGIN_VERSIONED_NAMESPACE_DECL
+
+namespace TAO
+{
+ namespace CSD
+ {
+
+ /**
+ * @class TP_Synch_Helper
+ *
+ * @brief Helper class for synchronous requests to block the requesting
+ * thread until the appropriate time (when it will be un-blocked).
+ *
+ * TBD - Description here
+ *
+ */
+ class TAO_CSD_TP_Export TP_Synch_Helper
+ {
+ public:
+
+ /// Constructor. Sets initial state to PENDING.
+ TP_Synch_Helper();
+
+ /// Destructor.
+ ~TP_Synch_Helper();
+
+ /// Returns true if the helper state is DISPATCHED, and false if
+ /// the helper state is CANCELLED. However, if the helper state
+ /// is PENDING, then this method will block the calling thread
+ /// until the state changes to something other than PENDING
+ /// (ie, DISPATCHED or CANCELLED).
+ bool wait_while_pending();
+
+ /// Change the state of this helper to DISPATCHED, which will cause
+ /// wait_while_pending() to unblock.
+ void dispatched();
+
+ /// Change the state of this helper to CANCELLED, which will cause
+ /// wait_while_pending() to unblock.
+ void cancelled();
+
+
+ private:
+
+ /// Enumeration Type for all possible states of this helper object.
+ enum HelperState
+ {
+ PENDING,
+ DISPATCHED,
+ CANCELLED
+ };
+
+ /// Thread lock type
+ typedef ACE_SYNCH_MUTEX LockType;
+
+ /// Thread guard type
+ typedef ACE_Guard<LockType> GuardType;
+
+ /// Thread condition type
+ typedef TAO_Condition<LockType> ConditionType;
+
+ /// Lock used to protect the state and condition.
+ LockType lock_;
+
+ /// Used to denote the state of the request dispatching.
+ HelperState state_;
+
+ /// The condition used to block the calling thread until the
+ /// state is something other than the PENDING state.
+ ConditionType condition_;
+ };
+
+ }
+}
+
+TAO_END_VERSIONED_NAMESPACE_DECL
+
+#if defined (__ACE_INLINE__)
+# include "tao/CSD_ThreadPool/CSD_TP_Synch_Helper.inl"
+#endif /* __ACE_INLINE__ */
+
+#include /**/ "ace/post.h"
+
+#endif /* TAO_CSD_TP_SYNCH_HELPER_H */
diff --git a/TAO/tao/CSD_ThreadPool/CSD_TP_Synch_Helper.inl b/TAO/tao/CSD_ThreadPool/CSD_TP_Synch_Helper.inl
new file mode 100644
index 00000000000..f4c5a1380c1
--- /dev/null
+++ b/TAO/tao/CSD_ThreadPool/CSD_TP_Synch_Helper.inl
@@ -0,0 +1,55 @@
+// -*- C++ -*-
+//
+// $Id$
+
+TAO_BEGIN_VERSIONED_NAMESPACE_DECL
+
+ACE_INLINE
+TAO::CSD::TP_Synch_Helper::TP_Synch_Helper()
+ : state_(PENDING),
+ condition_(this->lock_)
+{
+}
+
+
+ACE_INLINE
+TAO::CSD::TP_Synch_Helper::~TP_Synch_Helper()
+{
+}
+
+
+ACE_INLINE
+bool
+TAO::CSD::TP_Synch_Helper::wait_while_pending()
+{
+ GuardType guard(this->lock_);
+
+ while (this->state_ == PENDING)
+ {
+ this->condition_.wait();
+ }
+
+ return (this->state_ == DISPATCHED);
+}
+
+
+ACE_INLINE
+void
+TAO::CSD::TP_Synch_Helper::dispatched()
+{
+ GuardType guard(this->lock_);
+ this->state_ = DISPATCHED;
+ this->condition_.signal();
+}
+
+
+ACE_INLINE
+void
+TAO::CSD::TP_Synch_Helper::cancelled()
+{
+ GuardType guard(this->lock_);
+ this->state_ = CANCELLED;
+ this->condition_.signal();
+}
+
+TAO_END_VERSIONED_NAMESPACE_DECL
diff --git a/TAO/tao/CSD_ThreadPool/CSD_TP_Task.cpp b/TAO/tao/CSD_ThreadPool/CSD_TP_Task.cpp
new file mode 100644
index 00000000000..adc18ab7c7f
--- /dev/null
+++ b/TAO/tao/CSD_ThreadPool/CSD_TP_Task.cpp
@@ -0,0 +1,313 @@
+// $Id$
+
+#include "tao/CSD_ThreadPool/CSD_TP_Task.h"
+#include "tao/CSD_ThreadPool/CSD_TP_Request.h"
+#include "tao/CSD_ThreadPool/CSD_TP_Dispatchable_Visitor.h"
+#include "tao/CSD_ThreadPool/CSD_TP_Cancel_Visitor.h"
+
+ACE_RCSID (CSD_ThreadPool,
+ TP_Task,
+ "$Id$")
+
+#if !defined (__ACE_INLINE__)
+# include "tao/CSD_ThreadPool/CSD_TP_Task.inl"
+#endif /* ! __ACE_INLINE__ */
+
+TAO_BEGIN_VERSIONED_NAMESPACE_DECL
+
+TAO::CSD::TP_Task::~TP_Task()
+{
+}
+
+
+bool
+TAO::CSD::TP_Task::add_request(TP_Request* request)
+{
+ GuardType guard(this->lock_);
+
+ if (!this->accepting_requests_)
+ {
+ ACE_DEBUG((LM_DEBUG,"(%P|%t) TP_Task::add_request() - "
+ "not accepting requests\n"));
+ return false;
+ }
+
+ // We have made the decision that the request is going to be placed upon
+ // the queue_. Inform the request that it is about to be placed into
+ // a request queue. Some requests may not need to do anything in
+ // preparation of being placed into a queue. Others, however, may need
+ // to perfom a "clone" operation on some underlying request data before
+ // the request can be properly placed into a queue.
+ request->prepare_for_queue();
+
+ this->queue_.put(request);
+
+ this->work_available_.signal();
+
+ return true;
+}
+
+
+int
+TAO::CSD::TP_Task::open(void* num_threads_ptr)
+{
+ Thread_Counter num = 1;
+
+ if (num_threads_ptr != 0)
+ {
+ Thread_Counter* tmp = static_cast<Thread_Counter*> (num_threads_ptr);
+
+ if (tmp == 0)
+ {
+ ACE_ERROR_RETURN((LM_ERROR,
+ "(%P|%t) TP_Task failed to open. "
+ "Invalid argument type passed to open().\n"),
+ -1);
+ }
+
+ num = *tmp;
+ }
+
+ // We can't activate 0 threads. Make sure this isn't the case.
+ if (num < 1)
+ {
+ ACE_ERROR_RETURN((LM_ERROR,
+ "(%P|%t) TP_Task failed to open. "
+ "num_threads (%u) is less-than 1.\n",
+ num),
+ -1);
+ }
+
+ // Likewise, we can't activate too many. Make sure this isn't the case.
+ if (num > MAX_THREADPOOL_TASK_WORKER_THREADS)
+ {
+ ACE_ERROR_RETURN((LM_ERROR,
+ "(%P|%t) TP_Task failed to open. "
+ "num_threads (%u) is too large. Max is %d.\n",
+ num, MAX_THREADPOOL_TASK_WORKER_THREADS),
+ -1);
+ }
+
+ // We need the lock acquired from here on out.
+ GuardType guard(this->lock_);
+
+ // We can assume that we are in the proper state to handle this open()
+ // call as long as we haven't been open()'ed before.
+ if (this->opened_)
+ {
+ ACE_ERROR_RETURN((LM_ERROR,
+ "(%P|%t) TP_Task failed to open. "
+ "Task has previously been open()'ed.\n"),
+ -1);
+ }
+
+ // Activate this task object with 'num' worker threads.
+ if (this->activate(THR_NEW_LWP | THR_JOINABLE, num) != 0)
+ {
+ // Assumes that when activate returns non-zero return code that
+ // no threads were activated.
+ ACE_ERROR_RETURN((LM_ERROR,
+ "(%P|%t) TP_Task failed to activate "
+ "(%d) worker threads.\n",
+ num),
+ -1);
+ }
+
+ // Now we have past the point where we can say we've been open()'ed before.
+ this->opened_ = true;
+
+ // Now we wait until all of the threads have started.
+ while (this->num_threads_ != num)
+ {
+ this->active_workers_.wait();
+ }
+
+ // We can now accept requests (via our add_request() method).
+ this->accepting_requests_ = true;
+
+ return 0;
+}
+
+
+int
+TAO::CSD::TP_Task::svc()
+{
+ // Account for this current worker thread having started the
+ // execution of this svc() method.
+ {
+ GuardType guard(this->lock_);
+ // Put the thread id into a collection which is used to check whether
+ // the orb shutdown is called by one of the threads in the pool.
+ ACE_thread_t thr_id = ACE_OS::thr_self ();
+ if (this->activated_threads_.set(thr_id, this->num_threads_) == -1)
+ {
+ ACE_ERROR_RETURN((LM_ERROR,
+ ACE_TEXT("(%P|%t)TP_Task::svc: number of threads is out of range \n")),
+ 0);
+ }
+ ++this->num_threads_;
+ this->active_workers_.signal();
+ }
+
+ // This visitor object will be re-used over and over again as part of
+ // the "GetWork" logic below.
+ TP_Dispatchable_Visitor dispatchable_visitor;
+
+ // Start the "GetWork-And-PerformWork" loop for the current worker thread.
+ while (1)
+ {
+ TP_Request_Handle request;
+
+ // Do the "GetWork" step.
+ {
+ // Acquire the lock until just before we decide to "PerformWork".
+ GuardType guard(this->lock_);
+
+ // Start the "GetWork" loop.
+ while (request.is_nil())
+ {
+ if (this->shutdown_initiated_)
+ {
+ // This breaks us out of all loops with one fell swoop.
+ return 0;
+ }
+
+ // There is no need to visit the queue if it is empty.
+ if (!this->queue_.is_empty())
+ {
+ // Reset the visitor since we use it over and over. This
+ // will cause the visitor to drop any reference to
+ // a request that it may still be holding from a prior
+ // call to accept_visitor().
+ dispatchable_visitor.reset();
+
+ // Visit the requests in the queue in hopes of
+ // locating the first "dispatchable" (ie, not busy) request.
+ // If a dispatchable request is located, it is extracted
+ // from the queue and saved in a handle data member in the
+ // visitor object.
+ this->queue_.accept_visitor(dispatchable_visitor);
+
+ // If a dispatchable request is located, it is extracted
+ // from the queue and saved in a handle data member in the
+ // visitor object. Let's get a "copy" (or a NULL pointer
+ // if the visitor didn't locate/extract one).
+ request = dispatchable_visitor.request();
+ }
+
+ // Either the queue is empty or we couldn't find any dispatchable
+ // requests in the queue at this time.
+ if (request.is_nil())
+ {
+ // Let's wait until we hear about the possibility of
+ // work before we go look again.
+ this->work_available_.wait();
+ }
+ }
+
+ // We have dropped out of the "while (request.is_nil())" loop.
+ // We only get here is we located/extracted a dispatchable request
+ // from the queue. Note that the visitor will have already
+ // marked the target servant as now being busy (because of us).
+ // We can now safely release the lock.
+ }
+
+ // Do the "PerformWork" step. We don't need the lock_ to do this.
+ request->dispatch();
+
+ // Now that the request has been dispatched, we need to mark the target
+ // servant as no longer being busy, and we need to signal any wait()'ing
+ // worker threads that there may be some dispatchable requests in the
+ // queue now for this not-busy servant. We need the lock_ to do this.
+ {
+ GuardType guard(this->lock_);
+ request->mark_as_ready();
+ this->work_available_.signal();
+ }
+
+ // Note that the request will be "released" here when the request
+ // handle falls out of scope and its destructor performs the
+ // _remove_ref() call on the underlying TP_Request object.
+ }
+
+ // This will never get executed.
+ return 0;
+}
+
+
+int
+TAO::CSD::TP_Task::close(u_long flag)
+{
+ GuardType guard(this->lock_);
+
+ if (flag == 0)
+ {
+ // Worker thread is closing.
+ --this->num_threads_;
+ this->active_workers_.signal();
+ }
+ else
+ {
+ // Strategy object is shutting down the task.
+
+ // Do nothing if this task has never been open()'ed.
+ if (!this->opened_)
+ {
+ return 0;
+ }
+
+ // Set the shutdown flag to true.
+ this->shutdown_initiated_ = true;
+
+ // Stop accepting requests.
+ this->accepting_requests_ = false;
+
+ // Signal all worker threads waiting on the work_available_ condition.
+ this->work_available_.broadcast();
+
+ size_t num_waiting_threads = 0;
+
+ ACE_thread_t my_thr_id = ACE_OS::thr_self ();
+
+ // Check whether the calling thread(calling orb shutdown) is one of the
+ // threads in the pool. If it is then it should not wait itself.
+ size_t size = this->activated_threads_.size ();
+
+ for (size_t i = 0; i < size; i ++)
+ {
+ ACE_thread_t thr_id = 0;
+ if (activated_threads_.get (thr_id, i) == 0 && thr_id == my_thr_id)
+ {
+ num_waiting_threads = 1;
+ break;
+ }
+ }
+
+ // Wait until all worker threads have shutdown.
+ while (this->num_threads_ != num_waiting_threads)
+ {
+ this->active_workers_.wait();
+ }
+
+ // Cancel all requests.
+ TP_Cancel_Visitor cancel_visitor;
+ this->queue_.accept_visitor(cancel_visitor);
+ }
+
+ return 0;
+}
+
+
+
+void
+TAO::CSD::TP_Task::cancel_servant (PortableServer::Servant servant
+ ACE_ENV_ARG_DECL)
+{
+ GuardType guard(this->lock_);
+
+ // Cancel the requests targeted for the provided servant.
+ TP_Cancel_Visitor cancel_visitor(servant);
+ this->queue_.accept_visitor(cancel_visitor);
+}
+
+TAO_END_VERSIONED_NAMESPACE_DECL
diff --git a/TAO/tao/CSD_ThreadPool/CSD_TP_Task.h b/TAO/tao/CSD_ThreadPool/CSD_TP_Task.h
new file mode 100644
index 00000000000..65839aeb3b7
--- /dev/null
+++ b/TAO/tao/CSD_ThreadPool/CSD_TP_Task.h
@@ -0,0 +1,164 @@
+// -*- C++ -*-
+
+//=============================================================================
+/**
+ * @file CSD_TP_Task.h
+ *
+ * $Id$
+ *
+ * @author Tim Bradley <bradley_t@ociweb.com>
+ */
+//=============================================================================
+
+#ifndef TAO_CSD_TP_TASK_H
+#define TAO_CSD_TP_TASK_H
+
+#include /**/ "ace/pre.h"
+
+#include "tao/CSD_ThreadPool/CSD_TP_Export.h"
+
+#include "tao/CSD_ThreadPool/CSD_TP_Queue.h"
+#include "tao/PortableServer/PortableServer.h"
+#include "tao/Condition.h"
+
+#if !defined (ACE_LACKS_PRAGMA_ONCE)
+# pragma once
+#endif /* ACE_LACKS_PRAGMA_ONCE */
+
+#include "ace/Task.h"
+#include "ace/Synch.h"
+#include "ace/Containers_T.h"
+
+TAO_BEGIN_VERSIONED_NAMESPACE_DECL
+
+namespace TAO
+{
+ namespace CSD
+ {
+ /// Typedef for the number of threads.
+ typedef unsigned long Thread_Counter;
+
+ /**
+ * @class TP_Task
+ *
+ * @brief Active Object managing a queue of request objects.
+ *
+ * There are two types of "users" of a TP_Task object:
+ *
+ * 1) The TP_Strategy object that "owns" this task object.
+ * 2) The worker threads that "run" this task object as an
+ * "active object".
+ *
+ * The TP_Strategy object that "owns" this task object dictates
+ * when the worker threads are activated and when they are shutdown. It
+ * also injects requests into this task's queue via calls to the
+ * add_request() method. It is also the TP_Strategy object that
+ * dictates the number of worker threads to be activated via a call to
+ * the set_num_threads() method.
+ *
+ * The active object pattern is implemented via the use of the
+ * the ACE_Task_Base base class, and each worker thread will
+ * invoke this task's svc() method, and when the svc() returns, the
+ * worker thread will invoke this task's close() method (with the
+ * flag argument equal to 0).
+ *
+ * @note I just wanted to document an idea... When the pool consists
+ * of only one worker thread, we could care less about checking
+ * if target servant objects are busy or not. The simple fact
+ * that only one thread will be dispatching all requests means
+ * that servant objects will never be busy when the thread
+ * tests to see if a request is "ready_for_dispatch()". I'm
+ * just wondering if this knowledge can be applied to the
+ * implementation such that the "pool with one worker thread" case
+ * performs more efficiently. This is STP vs SSTP.
+ *
+ */
+ class TAO_CSD_TP_Export TP_Task : public ACE_Task_Base
+ {
+ public:
+
+ /// Default Constructor.
+ TP_Task();
+
+ /// Virtual Destructor.
+ virtual ~TP_Task();
+
+ /// Put a request object on to the request queue.
+ /// Returns true if successful, false otherwise (it has been "rejected").
+ bool add_request(TP_Request* request);
+
+ /// Activate the worker threads
+ virtual int open(void* num_threads_ptr = 0);
+
+ /// The "mainline" executed by each worker thread.
+ virtual int svc();
+
+ /// Multi-purpose: argument value is used to differentiate purpose.
+ ///
+ /// 0) Invoked by each worker thread after its invocation of the
+ /// svc() method has completed (ie, returned).
+ /// 1) Invoked by the strategy object to shutdown all worker threads.
+ virtual int close(u_long flag = 0);
+
+ /// Cancel all requests that are targeted for the provided servant.
+ void cancel_servant (PortableServer::Servant servant
+ ACE_ENV_ARG_DECL);
+
+
+ private:
+
+ typedef TAO_SYNCH_MUTEX LockType;
+ typedef ACE_Guard<LockType> GuardType;
+ typedef TAO_Condition<LockType> ConditionType;
+
+
+ /// Lock to protect the "state" (all of the data members) of this object.
+ LockType lock_;
+
+ /// Condition used to signal worker threads that they may be able to
+ /// find a request in the queue_ that needs to be dispatched to a
+ /// servant that is currently "not busy".
+ /// This condition will be signal()'ed each time a new request is
+ /// added to the queue_, and also when a servant has become "not busy".
+ ConditionType work_available_;
+
+ /// This condition will be signal()'ed each time the num_threads_
+ /// data member has its value changed. This is used to keep the
+ /// close(1) invocation (ie, a shutdown request) blocked until all
+ /// of the worker threads have stopped running.
+ ConditionType active_workers_;
+
+ /// Flag used to indicate when this task will (or will not) accept
+ /// requests via the the add_request() method.
+ bool accepting_requests_;
+
+ /// Flag used to initiate a shutdown request to all worker threads.
+ bool shutdown_initiated_;
+
+ /// Flag used to avoid multiple open() calls.
+ bool opened_;
+
+ /// The number of currently active worker threads.
+ Thread_Counter num_threads_;
+
+ /// The queue of pending servant requests (a.k.a. the "request queue").
+ TP_Queue queue_;
+
+ typedef ACE_Array <ACE_thread_t> Thread_Ids;
+
+ /// The list of ids for the threads launched by this task.
+ Thread_Ids activated_threads_;
+ };
+
+ }
+}
+
+TAO_END_VERSIONED_NAMESPACE_DECL
+
+#if defined (__ACE_INLINE__)
+# include "tao/CSD_ThreadPool/CSD_TP_Task.inl"
+#endif /* __ACE_INLINE__ */
+
+#include /**/ "ace/post.h"
+
+#endif /* TAO_CSD_TP_TASK_H */
diff --git a/TAO/tao/CSD_ThreadPool/CSD_TP_Task.inl b/TAO/tao/CSD_ThreadPool/CSD_TP_Task.inl
new file mode 100644
index 00000000000..d9c203f45ce
--- /dev/null
+++ b/TAO/tao/CSD_ThreadPool/CSD_TP_Task.inl
@@ -0,0 +1,22 @@
+// -*- C++ -*-
+//
+// $Id$
+
+namespace { enum { MAX_THREADPOOL_TASK_WORKER_THREADS = 50 }; }
+namespace { const ACE_thread_t default_thread_id = 0; }
+
+TAO_BEGIN_VERSIONED_NAMESPACE_DECL
+
+ACE_INLINE
+TAO::CSD::TP_Task::TP_Task()
+ : work_available_(this->lock_),
+ active_workers_(this->lock_),
+ accepting_requests_(false),
+ shutdown_initiated_(false),
+ opened_(false),
+ num_threads_(0),
+ activated_threads_ ((size_t)MAX_THREADPOOL_TASK_WORKER_THREADS, default_thread_id)
+{
+}
+
+TAO_END_VERSIONED_NAMESPACE_DECL
diff --git a/TAO/tao/CSD_ThreadPool/CSD_ThreadPool.cpp b/TAO/tao/CSD_ThreadPool/CSD_ThreadPool.cpp
new file mode 100644
index 00000000000..2ae022711f5
--- /dev/null
+++ b/TAO/tao/CSD_ThreadPool/CSD_ThreadPool.cpp
@@ -0,0 +1,23 @@
+// $Id$
+
+#include "tao/CSD_ThreadPool/CSD_ThreadPool.h"
+#include "tao/CSD_ThreadPool/CSD_TP_Strategy_Factory.h"
+#include "tao/CSD_Framework/CSD_Framework_Loader.h"
+#include "tao/debug.h"
+#include "ace/Dynamic_Service.h"
+
+TAO_BEGIN_VERSIONED_NAMESPACE_DECL
+
+int
+TAO_CSD_ThreadPool::init (void)
+{
+ static int initialized = 0;
+ if (initialized == 1)
+ return 0;
+ initialized = 1;
+
+ TAO_CSD_Framework_Loader::init();
+ return ACE_Service_Config::process_directive (ace_svc_desc_TAO_CSD_TP_Strategy_Factory);
+}
+
+TAO_END_VERSIONED_NAMESPACE_DECL
diff --git a/TAO/tao/CSD_ThreadPool/CSD_ThreadPool.h b/TAO/tao/CSD_ThreadPool/CSD_ThreadPool.h
new file mode 100644
index 00000000000..bb1bd448284
--- /dev/null
+++ b/TAO/tao/CSD_ThreadPool/CSD_ThreadPool.h
@@ -0,0 +1,65 @@
+// -*- C++ -*-
+
+//=============================================================================
+/**
+ * @file CSD_ThreadPool.h
+ *
+ * $Id$
+ *
+ * @author Tim Bradley <bradley_t@ociweb.com>
+ */
+//=============================================================================
+
+#ifndef TAO_CSD_THREADPOOL_H
+#define TAO_CSD_THREADPOOL_H
+
+#include /**/ "ace/pre.h"
+
+#include "tao/CSD_ThreadPool/CSD_TP_Export.h"
+#include "tao/Versioned_Namespace.h"
+#include "ace/Service_Object.h"
+#include "ace/Service_Config.h"
+
+
+#if !defined (ACE_LACKS_PRAGMA_ONCE)
+# pragma once
+#endif /* ACE_LACKS_PRAGMA_ONCE */
+
+TAO_BEGIN_VERSIONED_NAMESPACE_DECL
+
+/**
+ * @class TP_Strategy_Factory
+ *
+ * @brief An ACE_Service_Object capable of creating TP_Strategy objects.
+ *
+ * TBD - Explain in more detail.
+ *
+ */
+class TAO_CSD_TP_Export TAO_CSD_ThreadPool
+{
+ public:
+ /// Used to force the initialization of the ORB code.
+ static int init (void);
+};
+
+#if defined(ACE_HAS_BROKEN_STATIC_CONSTRUCTORS)
+
+typedef int (*TAO_CSD_Threadpool) (void);
+
+static TAO_CSD_Threadpool
+TAO_Requires_CSD_Threadpool =
+ &TAO_CSD_ThreadPool::init;
+
+#else
+
+static int
+TAO_Requires_CSD_Threadpool =
+ TAO_CSD_ThreadPool::init ();
+
+#endif /* ACE_HAS_BROKEN_STATIC_CONSTRUCTORS */
+
+TAO_END_VERSIONED_NAMESPACE_DECL
+
+#include /**/ "ace/post.h"
+
+#endif /* TAO_CSD_THREADPOOL_H */
diff --git a/TAO/tao/CodecFactory/IOP_Codec_includeA.h b/TAO/tao/CodecFactory/IOP_Codec_includeA.h
new file mode 100644
index 00000000000..77742d1e1be
--- /dev/null
+++ b/TAO/tao/CodecFactory/IOP_Codec_includeA.h
@@ -0,0 +1,44 @@
+// -*- C++ -*-
+//
+// $Id$
+
+// **** Code generated by the The ACE ORB (TAO) IDL Compiler ****
+// TAO and the TAO IDL Compiler have been developed by:
+// Center for Distributed Object Computing
+// Washington University
+// St. Louis, MO
+// USA
+// http://www.cs.wustl.edu/~schmidt/doc-center.html
+// and
+// Distributed Object Computing Laboratory
+// University of California at Irvine
+// Irvine, CA
+// USA
+// http://doc.ece.uci.edu/
+// and
+// Institute for Software Integrated Systems
+// Vanderbilt University
+// Nashville, TN
+// USA
+// http://www.isis.vanderbilt.edu/
+//
+// Information about TAO is available at:
+// http://www.cs.wustl.edu/~schmidt/TAO.html
+
+// TAO_IDL - Generated from
+// be\be_codegen.cpp:390
+
+#ifndef _TAO_IDL_ORIG_IOPCODEC_INCLUDEA_H_
+#define _TAO_IDL_ORIG_IOPCODEC_INCLUDEA_H_
+
+#include /**/ "ace/pre.h"
+
+#include "tao/CodecFactory/IOP_Codec_includeC.h"
+
+#if !defined (ACE_LACKS_PRAGMA_ONCE)
+# pragma once
+#endif /* ACE_LACKS_PRAGMA_ONCE */
+
+#include /**/ "ace/post.h"
+#endif /* ifndef */
+
diff --git a/TAO/tao/IORInterceptor/IORInterceptor_Details.cpp b/TAO/tao/IORInterceptor/IORInterceptor_Details.cpp
new file mode 100644
index 00000000000..77835d4cfd0
--- /dev/null
+++ b/TAO/tao/IORInterceptor/IORInterceptor_Details.cpp
@@ -0,0 +1,23 @@
+#include "tao/IORInterceptor/IORInterceptor_Details.h"
+
+ACE_RCSID (IORInterceptor,
+ IORInterceptor_Details,
+ "$Id$")
+
+#include "tao/SystemException.h"
+
+TAO_BEGIN_VERSIONED_NAMESPACE_DECL
+
+namespace TAO
+{
+ void
+ IORInterceptor_Details::apply_policies (
+ const CORBA::PolicyList &/*policies*/
+ ACE_ENV_ARG_DECL)
+ {
+ // There are currently no policies that apply to IOR Interceptors.
+ ACE_THROW (CORBA::INV_POLICY ());
+ }
+}
+
+TAO_END_VERSIONED_NAMESPACE_DECL
diff --git a/TAO/tao/IORInterceptor/IORInterceptor_Details.h b/TAO/tao/IORInterceptor/IORInterceptor_Details.h
new file mode 100644
index 00000000000..bb2ce8b0fa8
--- /dev/null
+++ b/TAO/tao/IORInterceptor/IORInterceptor_Details.h
@@ -0,0 +1,63 @@
+// -*- C++ -*-
+
+//=============================================================================
+/**
+ * @file IORInterceptor_Details.h
+ *
+ * $Id$
+ *
+ * This file declares a class that manages the details
+ * about a registered client request interceptor. Policies can be
+ * used when interceptors are registered, and the policy values
+ * will be processed and used to modify the values of the
+ * IORInterceptor_Details object associated with the registered
+ * client request interceptor.
+ *
+ * @author Tim Bradley <bradley_t@ociweb.com>
+ */
+//=============================================================================
+
+#ifndef TAO_IOR_INTERCEPTOR_DETAILS_H
+#define TAO_IOR_INTERCEPTOR_DETAILS_H
+
+#include /**/ "ace/pre.h"
+
+#include "tao/orbconf.h"
+
+#if !defined (ACE_LACKS_PRAGMA_ONCE)
+# pragma once
+#endif /* ACE_LACKS_PRAGMA_ONCE */
+
+#include "tao/Policy_ForwardC.h"
+
+TAO_BEGIN_VERSIONED_NAMESPACE_DECL
+
+namespace TAO
+{
+ /**
+ * @class IORInterceptor_Details
+ *
+ * @brief The policy-driven details for a registered IOR interceptor
+ *
+ * Each time an IOR interceptor is registered with an ORB, an
+ * IORInterceptor_Details object will be created and associated with
+ * the registered IOR interceptor. If the interceptor is
+ * registered with policies, the policies will be used to adjust the
+ * values in the IORInterceptor_Details appropriately.
+ *
+ * Currently, there are no policies that are applicable to
+ * IOR Interceptors.
+ */
+ class IORInterceptor_Details
+ {
+ public:
+ void apply_policies (const CORBA::PolicyList& policies
+ ACE_ENV_ARG_DECL);
+ };
+}
+
+TAO_END_VERSIONED_NAMESPACE_DECL
+
+#include /**/ "ace/post.h"
+
+#endif /* TAO_IOR_INTERCEPTOR_DETAILS_H */
diff --git a/TAO/tao/Incoming_Message_Stack.h b/TAO/tao/Incoming_Message_Stack.h
new file mode 100755
index 00000000000..81f268aa2cb
--- /dev/null
+++ b/TAO/tao/Incoming_Message_Stack.h
@@ -0,0 +1,89 @@
+// -*- C++ -*-
+
+//=============================================================================
+/**
+ * @file Incoming_Message_Stack.h
+ *
+ * $Id$
+ *
+ * @author Frank Rehberger <frehberg@prismtech.com>
+ */
+//=============================================================================
+
+#ifndef TAO_INCOMING_MESSAGE_STACK_H
+#define TAO_INCOMING_MESSAGE_STACK_H
+
+#include /**/ "ace/pre.h"
+
+#include "tao/Incoming_Message_Queue.h"
+
+#if !defined (ACE_LACKS_PRAGMA_ONCE)
+# pragma once
+#endif /* ACE_LACKS_PRAGMA_ONCE */
+
+#if defined (__BORLANDC__) && (__BORLANDC__ <= 0x582)
+#include "tao/TAO_Export.h"
+#endif
+
+ACE_BEGIN_VERSIONED_NAMESPACE_DECL
+class ACE_Allocator;
+ACE_END_VERSIONED_NAMESPACE_DECL
+
+TAO_BEGIN_VERSIONED_NAMESPACE_DECL
+
+namespace TAO
+{
+/**
+ * @class Incoming_Message_Stack
+ *
+ * @brief Implements stack for TAO_Queued_Data.
+ *
+ * Internal class, providing stack functionality for TAO_Queued_Data
+ * objects. Stack operations don't require memory allocation.
+*/
+#if defined (__BORLANDC__) && (__BORLANDC__ <= 0x582)
+class TAO_Export Incoming_Message_Stack
+#else
+class Incoming_Message_Stack
+#endif
+{
+public:
+ /// default constructor, intiliazes empty stack.
+ Incoming_Message_Stack();
+
+ /// destructor, releases all elements on stack
+ ~Incoming_Message_Stack() ;
+
+ /// pushing a new element onto stack,
+ /// @a data must be a valid pointer, not NULL
+ void push(TAO_Queued_Data *data);
+
+ /// removing top element of stack,
+ /// @return 0 for Ok and @a data is defined, -1 for error
+ int pop (TAO_Queued_Data* &data);
+
+ /// peeking top element of stack
+ /// @return 0 for Ok, -1 for error
+ int top (TAO_Queued_Data* &data);
+
+private:
+ /// top element of stack
+ TAO_Queued_Data *top_;
+
+private:
+ /// Default Copy-Constructor - not for public usage.
+ Incoming_Message_Stack (const Incoming_Message_Stack&);
+
+ /// Assignment operator - not for public usage
+ Incoming_Message_Stack& operator= (Incoming_Message_Stack& other);
+};
+}
+
+TAO_END_VERSIONED_NAMESPACE_DECL
+
+#if defined (__ACE_INLINE__)
+# include "tao/Incoming_Message_Stack.inl"
+#endif /* __ACE_INLINE__ */
+
+#include /**/ "ace/post.h"
+#endif /*TAO_INCOMING_MESSAGE_STACK_H*/
diff --git a/TAO/tao/Intrusive_Ref_Count_Base_T.cpp b/TAO/tao/Intrusive_Ref_Count_Base_T.cpp
new file mode 100644
index 00000000000..2e25bad2b53
--- /dev/null
+++ b/TAO/tao/Intrusive_Ref_Count_Base_T.cpp
@@ -0,0 +1,21 @@
+// $Id$
+
+#ifndef TAO_INTRUSIVE_REF_COUNT_BASE_T_CPP
+#define TAO_INTRUSIVE_REF_COUNT_BASE_T_CPP
+
+#include "tao/Intrusive_Ref_Count_Base_T.h"
+
+#if !defined (__ACE_INLINE__)
+#include "tao/Intrusive_Ref_Count_Base_T.inl"
+#endif /* __ACE_INLINE__ */
+
+TAO_BEGIN_VERSIONED_NAMESPACE_DECL
+
+template <typename T>
+TAO_Intrusive_Ref_Count_Base<T>::~TAO_Intrusive_Ref_Count_Base()
+{
+}
+
+TAO_END_VERSIONED_NAMESPACE_DECL
+
+#endif /* TAO_INTRUSIVE_REF_COUNT_BASE_T_CPP */
diff --git a/TAO/tao/Intrusive_Ref_Count_Base_T.h b/TAO/tao/Intrusive_Ref_Count_Base_T.h
new file mode 100644
index 00000000000..6c596d8f0f8
--- /dev/null
+++ b/TAO/tao/Intrusive_Ref_Count_Base_T.h
@@ -0,0 +1,80 @@
+// -*- C++ -*-
+
+//=============================================================================
+/**
+ * @file Intrusive_Ref_Count_Base_T.h
+ *
+ * $Id$
+ *
+ * @authors Tim Bradley <bradley_t@ociweb.com>
+ */
+//=============================================================================
+
+#ifndef TAO_INTRUSIVE_REF_COUNT_BASE_T_H
+#define TAO_INTRUSIVE_REF_COUNT_BASE_T_H
+
+#include /**/ "ace/pre.h"
+
+#if !defined (ACE_LACKS_PRAGMA_ONCE)
+# pragma once
+#endif /* ACE_LACKS_PRAGMA_ONCE */
+
+#include "tao/Versioned_Namespace.h"
+
+#include "ace/Atomic_Op.h"
+
+TAO_BEGIN_VERSIONED_NAMESPACE_DECL
+
+/**
+ * @class TAO_Intrusive_Ref_Count_Base<ACE_LOCK>
+ *
+ * @brief Template base class to provide intrusive reference-counting
+ * to subclasses. This makes the subclass capable of using a
+ * TAO_Intrusive_Ref_Count_Handle<X> class as a smart-pointer
+ * to an X object. In this case, X is a sub-class of this class,
+ * TAO_Intrusive_Ref_Count_Base<ACE_LOCK>. The ACE_LOCK type is
+ * used to protect the atomic reference count data member.
+ *
+ */
+template <class ACE_LOCK>
+class TAO_Intrusive_Ref_Count_Base
+{
+public:
+
+ virtual ~TAO_Intrusive_Ref_Count_Base (void);
+
+ void _add_ref (void);
+ void _remove_ref (void);
+
+
+protected:
+
+ TAO_Intrusive_Ref_Count_Base (void);
+
+
+private:
+
+ ACE_Atomic_Op<ACE_LOCK, long> ref_count_;
+
+ // Prevent copying/assignment.
+ TAO_Intrusive_Ref_Count_Base (const TAO_Intrusive_Ref_Count_Base&);
+ TAO_Intrusive_Ref_Count_Base& operator= (const TAO_Intrusive_Ref_Count_Base&);
+};
+
+TAO_END_VERSIONED_NAMESPACE_DECL
+
+#if defined (__ACE_INLINE__)
+#include "tao/Intrusive_Ref_Count_Base_T.inl"
+#endif /* __ACE_INLINE__ */
+
+#if defined (ACE_TEMPLATES_REQUIRE_SOURCE)
+#include "tao/Intrusive_Ref_Count_Base_T.cpp"
+#endif /* ACE_TEMPLATES_REQUIRE_SOURCE */
+
+#if defined (ACE_TEMPLATES_REQUIRE_PRAGMA)
+#pragma implementation ("Intrusive_Ref_Count_Base_T.cpp")
+#endif /* ACE_TEMPLATES_REQUIRE_PRAGMA */
+
+#include /**/ "ace/post.h"
+
+#endif /* TAO_INTRUSIVE_REF_COUNT_BASE_T_H */
diff --git a/TAO/tao/Intrusive_Ref_Count_Base_T.inl b/TAO/tao/Intrusive_Ref_Count_Base_T.inl
new file mode 100644
index 00000000000..26e5026c413
--- /dev/null
+++ b/TAO/tao/Intrusive_Ref_Count_Base_T.inl
@@ -0,0 +1,38 @@
+// -*- C++ -*-
+//
+// $Id$
+
+TAO_BEGIN_VERSIONED_NAMESPACE_DECL
+
+template <typename T>
+ACE_INLINE
+TAO_Intrusive_Ref_Count_Base<T>::TAO_Intrusive_Ref_Count_Base (void)
+ : ref_count_(1)
+{}
+
+
+template <typename T>
+ACE_INLINE
+void
+TAO_Intrusive_Ref_Count_Base<T>::_add_ref (void)
+{
+ ++this->ref_count_;
+}
+
+
+template <typename T>
+ACE_INLINE
+void
+TAO_Intrusive_Ref_Count_Base<T>::_remove_ref (void)
+{
+ long const new_count = --this->ref_count_;
+
+ if (new_count != 0)
+ {
+ return;
+ }
+
+ delete this;
+}
+
+TAO_END_VERSIONED_NAMESPACE_DECL
diff --git a/TAO/tao/Intrusive_Ref_Count_Handle_T.cpp b/TAO/tao/Intrusive_Ref_Count_Handle_T.cpp
new file mode 100644
index 00000000000..5c8d02b76ba
--- /dev/null
+++ b/TAO/tao/Intrusive_Ref_Count_Handle_T.cpp
@@ -0,0 +1,12 @@
+// $Id$
+
+#ifndef TAO_INTRUSIVE_REF_COUNT_HANDLE_T_CPP
+#define TAO_INTRUSIVE_REF_COUNT_HANDLE_T_CPP
+
+#include "tao/Intrusive_Ref_Count_Handle_T.h"
+
+#if !defined (__ACE_INLINE__)
+#include "tao/Intrusive_Ref_Count_Handle_T.inl"
+#endif /* __ACE_INLINE__ */
+
+#endif /* TAO_INTRUSIVE_REF_COUNT_HANDLE_T_CPP */
diff --git a/TAO/tao/Intrusive_Ref_Count_Handle_T.h b/TAO/tao/Intrusive_Ref_Count_Handle_T.h
new file mode 100644
index 00000000000..5138d3ad281
--- /dev/null
+++ b/TAO/tao/Intrusive_Ref_Count_Handle_T.h
@@ -0,0 +1,159 @@
+// -*- C++ -*-
+
+//=============================================================================
+/**
+ * @file Intrusive_Ref_Count_Handle_T.h
+ *
+ * $Id$
+ *
+ * @authors Tim Bradley <bradley_t@ociweb.com>
+ */
+//=============================================================================
+
+#ifndef TAO_INTRUSIVE_REF_COUNT_HANDLE_T_H
+#define TAO_INTRUSIVE_REF_COUNT_HANDLE_T_H
+
+#include /**/ "ace/pre.h"
+
+#include "ace/config-all.h"
+
+#if !defined (ACE_LACKS_PRAGMA_ONCE)
+# pragma once
+#endif /* ACE_LACKS_PRAGMA_ONCE */
+
+#include "tao/Versioned_Namespace.h"
+
+TAO_BEGIN_VERSIONED_NAMESPACE_DECL
+
+/**
+ * @class TAO_Intrusive_Ref_Count_Handle<T>
+ *
+ * @brief Template class for smart-pointer to (intrusively) ref-counted object.
+ *
+ * This class behaves just like a xxx_var type behaves. The only significant
+ * difference is that this class provides a "bool is_nil() const" method,
+ * and xxx_var types don't (they use the "bool CORBA::is_nil(xxx_ptr ptr)"
+ * method instead). For example,
+ *
+ * typedef TAO_Intrusive_Ref_Count_Handle<PortableServer::ServantBase>
+ * MyServantBase_var;
+ *
+ * The MyServantBase_var and the PortableServer::ServantBase_var are
+ * nearly idenitical. The only difference is that the MyServantBase_var
+ * has a "isNil()" method that indicates whether or not the smart pointer
+ * is in the 'nil' state or not.
+ *
+ * This class can be used to "safely" deal with an instance of a servant.
+ * For example, we can use a single variable
+ * TAO_Intrusive_Ref_Count_Handle<Foo_i>
+ *
+ * typedef TAO_Intrusive_Ref_Count_Handle<Foo_i> Foo_i_var;
+ * Foo_i_var servant_;
+ *
+ * instead of using two variables
+ *
+ * PortableServer::ServantBase_var servant_holder_;
+ * Foo_i* servant_;
+
+ * to deal with the servant memory.
+ *
+ * The Foo_i_var type does everything that the PortableServer::ServantBase_var
+ * type does. In addition, the Foo_i_var type can provide access to the servant
+ * as derived class via the arrow operator.
+ */
+template <typename T>
+class TAO_Intrusive_Ref_Count_Handle
+{
+public:
+
+ /// Default Constructor - enters the "nil" state.
+ TAO_Intrusive_Ref_Count_Handle (void);
+
+ /// Ctor - By default, takes ownership of passed-in "copy" of reference
+ /// to T. But the second argument (bool) can be changed from
+ /// the default value of 'true' to the non-default value of 'false'.
+ /// The second argument dictates whether or not this handle object
+ /// should take ownership of the passed-in pointer to the T object.
+ /// By default, it takes ownership, leaving the reference counter
+ /// of the T object unchanged. When it is instructed to not take
+ /// ownership (false value for second arg), then the reference
+ /// counter of the T object will be incremented so that this
+ /// handle object has its own "copy".
+ TAO_Intrusive_Ref_Count_Handle (T* p, bool take_ownership = true);
+
+ /// Copy Constructor - claims a "copy" of rhs object's reference to T.
+ TAO_Intrusive_Ref_Count_Handle (const TAO_Intrusive_Ref_Count_Handle& b);
+
+ /// Destructor
+ ~TAO_Intrusive_Ref_Count_Handle (void);
+
+ /// Assignment Operator with T* argument.
+ /// Takes ownership of passed-in "copy" of reference to T.
+ TAO_Intrusive_Ref_Count_Handle& operator= (T* p);
+
+ /// Assignment Operator with const TAO_Smart_Ptr<T>& argument.
+ /// Claims a "copy" of rhs object's reference to T.
+ TAO_Intrusive_Ref_Count_Handle& operator=
+ (const TAO_Intrusive_Ref_Count_Handle& b);
+
+ /// Const Accessor to underlying pointer (T*) using arrow (->) operator.
+ T* operator->() const;
+
+ /// Returns true if underlying pointer is NULL (0).
+ /// Returns false otherwise.
+ bool is_nil (void) const;
+
+ /// Used to pass the underlying pointer as an "IN" argument to a method.
+ T* in (void) const;
+
+ /// Used to pass the underlying pointer as an "IN/OUT" argument to a method.
+ T*& inout (void);
+
+ /// Used to pass the underlying pointer as an "OUT" argument to a method.
+ T*& out (void);
+
+ /// Used to take-away the underlying pointer from this smart pointer object.
+ /// Caller becomes responsibe for the returned "copy" to the reference.
+ /// Always leaves the smart pointer in the "nil" state upon return.
+ T* _retn (void);
+
+
+private:
+
+ /// Claim a "copy" of the reference-counted object by adding
+ /// one to its reference counter. Do nothing if this smart pointer
+ /// object is currently in the "nil" state.
+ void claim (void);
+
+ /// Drop our "copy" of the reference-counted object by removing
+ /// one from its reference counter. Do nothing if this smart pointer
+ /// object is currently in the "nil" state.
+ /// Note that this method will always leave this smart pointer
+ /// in the "nil" state upon its return.
+ void drop (void);
+
+
+ /// The underlying pointer to the (intrusively) reference-counted object.
+ /// Set to 0 when this smart pointer is in the "nil" state. Otherwise,
+ /// this smart pointer always owns a (reference-counted) "copy" of the
+ /// object pointed to by the ptr_ data member.
+ T* ptr_;
+};
+
+TAO_END_VERSIONED_NAMESPACE_DECL
+
+#if defined (__ACE_INLINE__)
+#include "tao/Intrusive_Ref_Count_Handle_T.inl"
+#endif /* __ACE_INLINE__ */
+
+#if defined (ACE_TEMPLATES_REQUIRE_SOURCE)
+#include "tao/Intrusive_Ref_Count_Handle_T.cpp"
+#endif /* ACE_TEMPLATES_REQUIRE_SOURCE */
+
+#if defined (ACE_TEMPLATES_REQUIRE_PRAGMA)
+#pragma implementation ("Intrusive_Ref_Count_Handle_T.cpp")
+#endif /* ACE_TEMPLATES_REQUIRE_PRAGMA */
+
+#include /**/ "ace/post.h"
+
+#endif /* TAO_INTRUSIVE_REF_COUNT_HANDLE_T_H */
diff --git a/TAO/tao/Intrusive_Ref_Count_Handle_T.inl b/TAO/tao/Intrusive_Ref_Count_Handle_T.inl
new file mode 100644
index 00000000000..1ca7c2767bb
--- /dev/null
+++ b/TAO/tao/Intrusive_Ref_Count_Handle_T.inl
@@ -0,0 +1,162 @@
+// -*- C++ -*-
+//
+// $Id$
+
+TAO_BEGIN_VERSIONED_NAMESPACE_DECL
+
+template <typename T>
+ACE_INLINE
+TAO_Intrusive_Ref_Count_Handle<T>::TAO_Intrusive_Ref_Count_Handle (void)
+ : ptr_(0)
+{
+}
+
+
+template <typename T>
+ACE_INLINE
+TAO_Intrusive_Ref_Count_Handle<T>::TAO_Intrusive_Ref_Count_Handle (
+ T* p,
+ bool take_ownership)
+ : ptr_(p)
+{
+ if (!take_ownership)
+ {
+ this->claim ();
+ }
+}
+
+
+template <typename T>
+ACE_INLINE
+TAO_Intrusive_Ref_Count_Handle<T>::TAO_Intrusive_Ref_Count_Handle (
+ const TAO_Intrusive_Ref_Count_Handle<T>& b)
+ : ptr_(b.ptr_)
+{
+ this->claim();
+}
+
+
+template <typename T>
+ACE_INLINE
+TAO_Intrusive_Ref_Count_Handle<T>::~TAO_Intrusive_Ref_Count_Handle()
+{
+ this->drop();
+}
+
+
+template <typename T>
+ACE_INLINE
+TAO_Intrusive_Ref_Count_Handle<T>&
+TAO_Intrusive_Ref_Count_Handle<T>::operator=(T* p)
+{
+ if (this->ptr_ != p)
+ {
+ this->drop();
+ this->ptr_ = p;
+ }
+
+ return *this;
+}
+
+
+template <typename T>
+ACE_INLINE
+TAO_Intrusive_Ref_Count_Handle<T>&
+TAO_Intrusive_Ref_Count_Handle<T>::operator=
+ (const TAO_Intrusive_Ref_Count_Handle<T>& b)
+{
+ // Strongly exception-safe assignment through the usual copy and
+ // swap technique.
+
+ TAO_Intrusive_Ref_Count_Handle<T> tmp (b);
+
+ T * old_ptr = this->ptr_;
+ this->ptr_ = tmp.ptr_;
+ tmp.ptr_ = old_ptr;
+
+ return *this;
+}
+
+
+template <typename T>
+ACE_INLINE
+T*
+TAO_Intrusive_Ref_Count_Handle<T>::operator->() const
+{
+ return this->ptr_;
+}
+
+
+template <typename T>
+ACE_INLINE
+bool
+TAO_Intrusive_Ref_Count_Handle<T>::is_nil() const
+{
+ return this->ptr_ == 0;
+}
+
+
+template <typename T>
+ACE_INLINE
+T*
+TAO_Intrusive_Ref_Count_Handle<T>::in() const
+{
+ return this->ptr_;
+}
+
+
+template <typename T>
+ACE_INLINE
+T*&
+TAO_Intrusive_Ref_Count_Handle<T>::inout()
+{
+ return this->ptr_;
+}
+
+
+template <typename T>
+ACE_INLINE
+T*&
+TAO_Intrusive_Ref_Count_Handle<T>::out()
+{
+ this->drop();
+ return this->ptr_;
+}
+
+
+template <typename T>
+ACE_INLINE
+T*
+TAO_Intrusive_Ref_Count_Handle<T>::_retn()
+{
+ T* retval = this->ptr_;
+ this->ptr_ = 0;
+ return retval;
+}
+
+
+template <typename T>
+ACE_INLINE
+void
+TAO_Intrusive_Ref_Count_Handle<T>::claim()
+{
+ if (this->ptr_ != 0)
+ {
+ this->ptr_->_add_ref();
+ }
+}
+
+
+template <typename T>
+ACE_INLINE
+void
+TAO_Intrusive_Ref_Count_Handle<T>::drop()
+{
+ if (this->ptr_ != 0)
+ {
+ this->ptr_->_remove_ref();
+ this->ptr_ = 0;
+ }
+}
+
+TAO_END_VERSIONED_NAMESPACE_DECL
diff --git a/TAO/tao/PI/ClientRequestDetails.h b/TAO/tao/PI/ClientRequestDetails.h
new file mode 100644
index 00000000000..ec4666ae047
--- /dev/null
+++ b/TAO/tao/PI/ClientRequestDetails.h
@@ -0,0 +1,84 @@
+// -*- C++ -*-
+
+//=============================================================================
+/**
+ * @file ClientRequestDetails.h
+ *
+ * $Id$
+ *
+ * This file declares a class that manages the details
+ * about a registered client request interceptor. Policies can be
+ * used when interceptors are registered, and the policy values
+ * will be processed and used to modify the values of the
+ * ClientRequestDetails object associated with the registered
+ * client request interceptor.
+ *
+ * @author Tim Bradley <bradley_t@ociweb.com>
+ */
+//=============================================================================
+
+#ifndef TAO_CLIENT_REQUEST_DETAILS_H
+#define TAO_CLIENT_REQUEST_DETAILS_H
+
+#include /**/ "ace/pre.h"
+
+#include "tao/orbconf.h"
+
+#if !defined (ACE_LACKS_PRAGMA_ONCE)
+# pragma once
+#endif /* ACE_LACKS_PRAGMA_ONCE */
+
+#if TAO_HAS_INTERCEPTORS == 1
+
+#include "tao/PI/ProcessingModePolicyC.h"
+
+TAO_BEGIN_VERSIONED_NAMESPACE_DECL
+
+namespace TAO
+{
+ /**
+ * @class ClientRequestDetails
+ *
+ * @brief The policy-driven details for a registered client request
+ * interceptor
+ *
+ * Each time a client request interceptor is registered with an ORB,
+ * a ClientRequestDetails object will be created and associated with
+ * the registered client request interceptor. If the interceptor is
+ * registered with policies, the policies will be used to adjust the
+ * values in the ClientRequestDetails appropriately.
+ */
+ class ClientRequestDetails
+ {
+ public:
+
+ ClientRequestDetails (void);
+
+ void apply_policies (const CORBA::PolicyList& policies
+ ACE_ENV_ARG_DECL);
+
+ /// Returns true if the ProcessingMode setting permits the "firing"
+ /// of the associated client request interceptor based upon the
+ /// remote vs. collocated nature of the current servant request
+ /// that is being dispatched.
+ bool should_be_processed (bool is_remote_request) const;
+
+ private:
+
+ /// The ProcessingMode setting that can be adjusted via the
+ /// PortableInterceptor::ProcessingModePolicy.
+ PortableInterceptor::ProcessingMode processing_mode_;
+ };
+}
+
+TAO_END_VERSIONED_NAMESPACE_DECL
+
+#if defined (__ACE_INLINE__)
+#include "tao/PI/ClientRequestDetails.inl"
+#endif /* __ACE_INLINE__ */
+
+#endif /* TAO_HAS_INTERCEPTORS == 1 */
+
+#include /**/ "ace/post.h"
+
+#endif /* TAO_CLIENT_REQUEST_DETAILS_H */
diff --git a/TAO/tao/PI/ClientRequestDetails.inl b/TAO/tao/PI/ClientRequestDetails.inl
new file mode 100644
index 00000000000..f568bb9fafb
--- /dev/null
+++ b/TAO/tao/PI/ClientRequestDetails.inl
@@ -0,0 +1,27 @@
+// -*- C++ -*-
+//
+// $Id$
+
+TAO_BEGIN_VERSIONED_NAMESPACE_DECL
+
+namespace TAO
+{
+ ACE_INLINE
+ ClientRequestDetails::ClientRequestDetails (void)
+ : processing_mode_(PortableInterceptor::LOCAL_AND_REMOTE)
+ {
+ }
+
+ ACE_INLINE
+ bool
+ ClientRequestDetails::should_be_processed (bool is_remote_request) const
+ {
+ return ((this->processing_mode_ == PortableInterceptor::LOCAL_AND_REMOTE) ||
+ ((this->processing_mode_ == PortableInterceptor::REMOTE_ONLY) &&
+ (is_remote_request)) ||
+ ((this->processing_mode_ == PortableInterceptor::LOCAL_ONLY) &&
+ (!is_remote_request)));
+ }
+}
+
+TAO_END_VERSIONED_NAMESPACE_DECL
diff --git a/TAO/tao/PI/ClientRequestInfoA.h b/TAO/tao/PI/ClientRequestInfoA.h
new file mode 100644
index 00000000000..54fc23da5bd
--- /dev/null
+++ b/TAO/tao/PI/ClientRequestInfoA.h
@@ -0,0 +1,65 @@
+// -*- C++ -*-
+//
+// $Id$
+
+// **** Code generated by the The ACE ORB (TAO) IDL Compiler ****
+// TAO and the TAO IDL Compiler have been developed by:
+// Center for Distributed Object Computing
+// Washington University
+// St. Louis, MO
+// USA
+// http://www.cs.wustl.edu/~schmidt/doc-center.html
+// and
+// Distributed Object Computing Laboratory
+// University of California at Irvine
+// Irvine, CA
+// USA
+// http://doc.ece.uci.edu/
+// and
+// Institute for Software Integrated Systems
+// Vanderbilt University
+// Nashville, TN
+// USA
+// http://www.isis.vanderbilt.edu/
+//
+// Information about TAO is available at:
+// http://www.cs.wustl.edu/~schmidt/TAO.html
+
+// TAO_IDL - Generated from
+// be\be_codegen.cpp:754
+
+#ifndef _TAO_IDL_CLIENTREQUESTINFOA_H_
+#define _TAO_IDL_CLIENTREQUESTINFOA_H_
+
+#include /**/ "ace/pre.h"
+
+#include "tao/PI/pi_export.h"
+#include "tao/PI/ClientRequestInfoC.h"
+#include "tao/PI/RequestInfoA.h"
+#include "tao/AnyTypeCode/orb_typesA.h"
+#include "tao/AnyTypeCode/Policy_ForwardA.h"
+
+
+// TAO_IDL - Generated from
+// be\be_visitor_module/module_ch.cpp:59
+
+TAO_BEGIN_VERSIONED_NAMESPACE_DECL
+
+namespace PortableInterceptor
+{
+
+ // TAO_IDL - Generated from
+ // be\be_visitor_typecode/typecode_decl.cpp:49
+
+ extern TAO_PI_Export ::CORBA::TypeCode_ptr const _tc_ClientRequestInfo;
+
+// TAO_IDL - Generated from
+// be\be_visitor_module/module_ch.cpp:86
+
+} // module PortableInterceptor
+
+TAO_END_VERSIONED_NAMESPACE_DECL
+
+#include /**/ "ace/post.h"
+
+#endif /* ifndef */
diff --git a/TAO/tao/PI/ClientRequestInterceptorA.h b/TAO/tao/PI/ClientRequestInterceptorA.h
new file mode 100644
index 00000000000..3f99475e2fe
--- /dev/null
+++ b/TAO/tao/PI/ClientRequestInterceptorA.h
@@ -0,0 +1,64 @@
+// -*- C++ -*-
+//
+// $Id$
+
+// **** Code generated by the The ACE ORB (TAO) IDL Compiler ****
+// TAO and the TAO IDL Compiler have been developed by:
+// Center for Distributed Object Computing
+// Washington University
+// St. Louis, MO
+// USA
+// http://www.cs.wustl.edu/~schmidt/doc-center.html
+// and
+// Distributed Object Computing Laboratory
+// University of California at Irvine
+// Irvine, CA
+// USA
+// http://doc.ece.uci.edu/
+// and
+// Institute for Software Integrated Systems
+// Vanderbilt University
+// Nashville, TN
+// USA
+// http://www.isis.vanderbilt.edu/
+//
+// Information about TAO is available at:
+// http://www.cs.wustl.edu/~schmidt/TAO.html
+
+// TAO_IDL - Generated from
+// be\be_codegen.cpp:754
+
+#ifndef _TAO_IDL_CLIENTREQUESTINTERCEPTORA_H_
+#define _TAO_IDL_CLIENTREQUESTINTERCEPTORA_H_
+
+#include /**/ "ace/pre.h"
+
+#include "tao/PI/pi_export.h"
+#include "tao/PI/ClientRequestInterceptorC.h"
+#include "tao/PI/InterceptorA.h"
+#include "tao/PI/PIForwardRequestA.h"
+
+
+// TAO_IDL - Generated from
+// be\be_visitor_module/module_ch.cpp:59
+
+TAO_BEGIN_VERSIONED_NAMESPACE_DECL
+
+namespace PortableInterceptor
+{
+
+ // TAO_IDL - Generated from
+ // be\be_visitor_typecode/typecode_decl.cpp:49
+
+ extern TAO_PI_Export ::CORBA::TypeCode_ptr const _tc_ClientRequestInterceptor;
+
+// TAO_IDL - Generated from
+// be\be_visitor_module/module_ch.cpp:86
+
+} // module PortableInterceptor
+
+TAO_END_VERSIONED_NAMESPACE_DECL
+
+#include /**/ "ace/post.h"
+
+#endif /* ifndef */
diff --git a/TAO/tao/PI/InterceptorA.h b/TAO/tao/PI/InterceptorA.h
new file mode 100644
index 00000000000..f749d91e8a1
--- /dev/null
+++ b/TAO/tao/PI/InterceptorA.h
@@ -0,0 +1,62 @@
+// -*- C++ -*-
+//
+// $Id$
+
+// **** Code generated by the The ACE ORB (TAO) IDL Compiler ****
+// TAO and the TAO IDL Compiler have been developed by:
+// Center for Distributed Object Computing
+// Washington University
+// St. Louis, MO
+// USA
+// http://www.cs.wustl.edu/~schmidt/doc-center.html
+// and
+// Distributed Object Computing Laboratory
+// University of California at Irvine
+// Irvine, CA
+// USA
+// http://doc.ece.uci.edu/
+// and
+// Institute for Software Integrated Systems
+// Vanderbilt University
+// Nashville, TN
+// USA
+// http://www.isis.vanderbilt.edu/
+//
+// Information about TAO is available at:
+// http://www.cs.wustl.edu/~schmidt/TAO.html
+
+// TAO_IDL - Generated from
+// be\be_codegen.cpp:754
+
+#ifndef _TAO_IDL_INTERCEPTORA_H_
+#define _TAO_IDL_INTERCEPTORA_H_
+
+#include /**/ "ace/pre.h"
+
+#include "tao/PI/pi_export.h"
+#include "tao/PI/InterceptorC.h"
+
+
+// TAO_IDL - Generated from
+// be\be_visitor_module/module_ch.cpp:59
+
+TAO_BEGIN_VERSIONED_NAMESPACE_DECL
+
+namespace PortableInterceptor
+{
+
+ // TAO_IDL - Generated from
+ // be\be_visitor_typecode/typecode_decl.cpp:49
+
+ extern TAO_PI_Export ::CORBA::TypeCode_ptr const _tc_Interceptor;
+
+// TAO_IDL - Generated from
+// be\be_visitor_module/module_ch.cpp:86
+
+} // module PortableInterceptor
+
+TAO_END_VERSIONED_NAMESPACE_DECL
+
+#include /**/ "ace/post.h"
+
+#endif /* ifndef */
diff --git a/TAO/tao/PI/ORBInitializerA.h b/TAO/tao/PI/ORBInitializerA.h
new file mode 100644
index 00000000000..fa6f6273d1e
--- /dev/null
+++ b/TAO/tao/PI/ORBInitializerA.h
@@ -0,0 +1,62 @@
+// -*- C++ -*-
+//
+// $Id$
+
+// **** Code generated by the The ACE ORB (TAO) IDL Compiler ****
+// TAO and the TAO IDL Compiler have been developed by:
+// Center for Distributed Object Computing
+// Washington University
+// St. Louis, MO
+// USA
+// http://www.cs.wustl.edu/~schmidt/doc-center.html
+// and
+// Distributed Object Computing Laboratory
+// University of California at Irvine
+// Irvine, CA
+// USA
+// http://doc.ece.uci.edu/
+// and
+// Institute for Software Integrated Systems
+// Vanderbilt University
+// Nashville, TN
+// USA
+// http://www.isis.vanderbilt.edu/
+//
+// Information about TAO is available at:
+// http://www.cs.wustl.edu/~schmidt/TAO.html
+
+// TAO_IDL - Generated from
+// be\be_codegen.cpp:754
+
+#ifndef _TAO_IDL_ORBINITIALIZERA_H_
+#define _TAO_IDL_ORBINITIALIZERA_H_
+
+#include /**/ "ace/pre.h"
+
+#include "tao/PI/pi_export.h"
+#include "tao/PI/ORBInitializerC.h"
+
+
+// TAO_IDL - Generated from
+// be\be_visitor_module/module_ch.cpp:59
+
+TAO_BEGIN_VERSIONED_NAMESPACE_DECL
+
+namespace PortableInterceptor
+{
+
+ // TAO_IDL - Generated from
+ // be\be_visitor_typecode/typecode_decl.cpp:49
+
+ extern TAO_PI_Export ::CORBA::TypeCode_ptr const _tc_ORBInitializer;
+
+// TAO_IDL - Generated from
+// be\be_visitor_module/module_ch.cpp:86
+
+} // module PortableInterceptor
+
+TAO_END_VERSIONED_NAMESPACE_DECL
+
+#include /**/ "ace/post.h"
+
+#endif /* ifndef */
diff --git a/TAO/tao/PI/PIForwardRequestA.h b/TAO/tao/PI/PIForwardRequestA.h
new file mode 100644
index 00000000000..56ccfdaa1ba
--- /dev/null
+++ b/TAO/tao/PI/PIForwardRequestA.h
@@ -0,0 +1,70 @@
+// -*- C++ -*-
+//
+// $Id$
+
+// **** Code generated by the The ACE ORB (TAO) IDL Compiler ****
+// TAO and the TAO IDL Compiler have been developed by:
+// Center for Distributed Object Computing
+// Washington University
+// St. Louis, MO
+// USA
+// http://www.cs.wustl.edu/~schmidt/doc-center.html
+// and
+// Distributed Object Computing Laboratory
+// University of California at Irvine
+// Irvine, CA
+// USA
+// http://doc.ece.uci.edu/
+// and
+// Institute for Software Integrated Systems
+// Vanderbilt University
+// Nashville, TN
+// USA
+// http://www.isis.vanderbilt.edu/
+//
+// Information about TAO is available at:
+// http://www.cs.wustl.edu/~schmidt/TAO.html
+
+// TAO_IDL - Generated from
+// be\be_codegen.cpp:754
+
+#ifndef _TAO_IDL_PIFORWARDREQUESTA_H_
+#define _TAO_IDL_PIFORWARDREQUESTA_H_
+
+#include /**/ "ace/pre.h"
+
+#include "tao/PI/pi_export.h"
+#include "tao/PI/PIForwardRequestC.h"
+
+
+// TAO_IDL - Generated from
+// be\be_visitor_module/module_ch.cpp:59
+
+TAO_BEGIN_VERSIONED_NAMESPACE_DECL
+
+namespace PortableInterceptor
+{
+
+ // TAO_IDL - Generated from
+ // be\be_visitor_typecode/typecode_decl.cpp:49
+
+ extern TAO_PI_Export ::CORBA::TypeCode_ptr const _tc_ForwardRequest;
+
+// TAO_IDL - Generated from
+// be\be_visitor_module/module_ch.cpp:86
+
+} // module PortableInterceptor
+
+// TAO_IDL - Generated from
+// be\be_visitor_exception/any_op_ch.cpp:53
+
+TAO_PI_Export void operator<<= (::CORBA::Any &, const PortableInterceptor::ForwardRequest &); // copying version
+TAO_PI_Export void operator<<= (::CORBA::Any &, PortableInterceptor::ForwardRequest*); // noncopying version
+TAO_PI_Export ::CORBA::Boolean operator>>= (const ::CORBA::Any &, PortableInterceptor::ForwardRequest *&); // deprecated
+TAO_PI_Export ::CORBA::Boolean operator>>= (const ::CORBA::Any &, const PortableInterceptor::ForwardRequest *&);
+
+TAO_END_VERSIONED_NAMESPACE_DECL
+
+#include /**/ "ace/post.h"
+
+#endif /* ifndef */
diff --git a/TAO/tao/PI/PI_ORBInitializer.cpp b/TAO/tao/PI/PI_ORBInitializer.cpp
new file mode 100644
index 00000000000..c138481d1ee
--- /dev/null
+++ b/TAO/tao/PI/PI_ORBInitializer.cpp
@@ -0,0 +1,107 @@
+// -*- C++ -*-
+
+#include "tao/PI/PI_ORBInitializer.h"
+
+#if TAO_HAS_INTERCEPTORS == 1
+
+#include "tao/PI/PI_PolicyFactory.h"
+#include "tao/PI/ProcessingModePolicyC.h"
+#include "tao/ORB_Core.h"
+#include "tao/PI/ORBInitInfoC.h"
+
+TAO_BEGIN_VERSIONED_NAMESPACE_DECL
+
+ACE_RCSID (tao,
+ PI_ORBInitializer,
+ "$Id$")
+
+void
+TAO_PI_ORBInitializer::pre_init (PortableInterceptor::ORBInitInfo_ptr info
+ ACE_ENV_ARG_DECL_NOT_USED)
+ ACE_THROW_SPEC ((CORBA::SystemException))
+{
+ ACE_UNUSED_ARG (info);
+}
+
+
+void
+TAO_PI_ORBInitializer::post_init (
+ PortableInterceptor::ORBInitInfo_ptr info
+ ACE_ENV_ARG_DECL)
+ ACE_THROW_SPEC ((CORBA::SystemException))
+{
+ // The PI policy factory is stateless and reentrant, so share a
+ // single instance between all ORBs.
+ if (CORBA::is_nil (this->policy_factory_.in ()))
+ {
+ PortableInterceptor::PolicyFactory_ptr policy_factory;
+ ACE_NEW_THROW_EX (policy_factory,
+ TAO_PI_PolicyFactory,
+ CORBA::NO_MEMORY (
+ CORBA::SystemException::_tao_minor_code (
+ TAO::VMCID,
+ ENOMEM),
+ CORBA::COMPLETED_NO));
+ ACE_CHECK;
+
+ this->policy_factory_ = policy_factory;
+ }
+
+
+ this->register_policy_factories (info
+ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK;
+}
+
+
+void
+TAO_PI_ORBInitializer::register_policy_factories (
+ PortableInterceptor::ORBInitInfo_ptr info
+ ACE_ENV_ARG_DECL)
+{
+ // Register the PI policy factory.
+
+ // Bind the same policy factory to all PortableInterceptor related policy
+ // types since a single policy factory is used to create each of the
+ // different types of PortableInterceptor policies.
+ CORBA::PolicyType type[] = {
+ PortableInterceptor::PROCESSING_MODE_POLICY_TYPE
+ };
+
+ const CORBA::PolicyType *end = type + sizeof (type) / sizeof (type[0]);
+
+ for (CORBA::PolicyType *i = type; i != end; ++i)
+ {
+ ACE_TRY
+ {
+ info->register_policy_factory (*i,
+ this->policy_factory_.in ()
+ ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+ }
+ ACE_CATCH (CORBA::BAD_INV_ORDER, ex)
+ {
+ if (ex.minor () == (CORBA::OMGVMCID | 16))
+ {
+ // The factory is already there, it happens because the
+ // magic initializer in PI_Initializer.cpp registers
+ // with the ORB multiple times. This is an indication
+ // that we should do no more work in this
+ // ORBInitializer.
+ return;
+ }
+ ACE_RE_THROW;
+ }
+ ACE_CATCHANY
+ {
+ // Rethrow any other exceptions...
+ ACE_RE_THROW;
+ }
+ ACE_ENDTRY;
+ ACE_CHECK;
+ }
+}
+
+TAO_END_VERSIONED_NAMESPACE_DECL
+
+#endif /* TAO_HAS_INTERCEPTORS == 1 */
diff --git a/TAO/tao/PI/PI_ORBInitializer.h b/TAO/tao/PI/PI_ORBInitializer.h
new file mode 100644
index 00000000000..92d62abfef6
--- /dev/null
+++ b/TAO/tao/PI/PI_ORBInitializer.h
@@ -0,0 +1,84 @@
+// -*- C++ -*-
+
+//=============================================================================
+/**
+ * @file PI_ORBInitializer.h
+ *
+ * $Id$
+ *
+ * @author Tim Bradley <bradley_t@ociweb.com>
+ */
+//=============================================================================
+
+#ifndef TAO_PI_ORB_INITIALIZER_H
+#define TAO_PI_ORB_INITIALIZER_H
+
+#include /**/ "ace/pre.h"
+
+#include "tao/orbconf.h"
+
+#if TAO_HAS_INTERCEPTORS == 1
+
+#include "tao/PI/pi_export.h"
+
+#if !defined (ACE_LACKS_PRAGMA_ONCE)
+# pragma once
+#endif /* ACE_LACKS_PRAGMA_ONCE */
+
+#include "tao/LocalObject.h"
+#include "tao/PI/ORBInitializerC.h"
+#include "tao/PI/PolicyFactoryC.h"
+
+TAO_BEGIN_VERSIONED_NAMESPACE_DECL
+
+/// Forward Declarations
+class TAO_PI_PolicyFactory;
+
+/// PortableServer ORB initializer.
+class TAO_PI_Export TAO_PI_ORBInitializer
+ : public virtual PortableInterceptor::ORBInitializer,
+ public virtual TAO_Local_RefCounted_Object
+{
+public:
+
+ /**
+ * @name PortableInterceptor::ORBInitializer methods
+ *
+ * The following methods are required by the
+ * PortableInterceptor::ORBInitializer interface.
+ */
+ //@{
+
+ void pre_init (PortableInterceptor::ORBInitInfo_ptr info
+ ACE_ENV_ARG_DECL)
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+ void post_init (PortableInterceptor::ORBInitInfo_ptr info
+ ACE_ENV_ARG_DECL)
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+ //@}
+
+
+private:
+
+ /// Register PortableInterceptor policy factories.
+ void register_policy_factories (PortableInterceptor::ORBInitInfo_ptr info
+ ACE_ENV_ARG_DECL);
+
+
+ /// Instance of the PI policy factory.
+ /**
+ * The PI policy factory is stateless and reentrant, so share
+ * a single instance between all ORBs.
+ */
+ PortableInterceptor::PolicyFactory_var policy_factory_;
+};
+
+TAO_END_VERSIONED_NAMESPACE_DECL
+
+#endif /* TAO_HAS_INTERCEPTORS == 1 */
+
+#include /**/ "ace/post.h"
+
+#endif /* TAO_PI_ORB_INITIALIZER_H */
diff --git a/TAO/tao/PI/PI_PolicyFactory.cpp b/TAO/tao/PI/PI_PolicyFactory.cpp
new file mode 100644
index 00000000000..3f82ffff341
--- /dev/null
+++ b/TAO/tao/PI/PI_PolicyFactory.cpp
@@ -0,0 +1,48 @@
+#include "tao/PI/PI_PolicyFactory.h"
+
+#if TAO_HAS_INTERCEPTORS == 1
+
+#include "tao/PI/ProcessingModePolicy.h"
+#include "tao/ORB_Constants.h"
+
+TAO_BEGIN_VERSIONED_NAMESPACE_DECL
+
+ACE_RCSID (tao,
+ PI_PolicyFactory,
+ "$Id$")
+
+CORBA::Policy_ptr
+TAO_PI_PolicyFactory::create_policy (
+ CORBA::PolicyType type,
+ const CORBA::Any &value
+ ACE_ENV_ARG_DECL)
+ ACE_THROW_SPEC ((CORBA::SystemException,
+ CORBA::PolicyError))
+{
+ if (type == PortableInterceptor::PROCESSING_MODE_POLICY_TYPE)
+ {
+ TAO_ProcessingModePolicy *processing_mode_policy = 0;
+ PortableInterceptor::ProcessingMode policy_value;
+
+ if ((value >>= policy_value) == 0)
+ {
+ ACE_THROW_RETURN (CORBA::PolicyError (CORBA::BAD_POLICY_VALUE),
+ CORBA::Policy::_nil ());
+ }
+
+ ACE_NEW_THROW_EX (processing_mode_policy,
+ TAO_ProcessingModePolicy (policy_value),
+ CORBA::NO_MEMORY (TAO::VMCID,
+ CORBA::COMPLETED_NO));
+ ACE_CHECK_RETURN (CORBA::Policy::_nil ());
+
+ return processing_mode_policy;
+ }
+
+ ACE_THROW_RETURN (CORBA::PolicyError (CORBA::BAD_POLICY_TYPE),
+ CORBA::Policy::_nil ());
+}
+
+TAO_END_VERSIONED_NAMESPACE_DECL
+
+#endif /* TAO_HAS_INTERCEPTORS == 1 */
diff --git a/TAO/tao/PI/PI_PolicyFactory.h b/TAO/tao/PI/PI_PolicyFactory.h
new file mode 100644
index 00000000000..eb7e4968015
--- /dev/null
+++ b/TAO/tao/PI/PI_PolicyFactory.h
@@ -0,0 +1,52 @@
+// -*- C++ -*-
+
+//=============================================================================
+/**
+ * @file PI_PolicyFactory.h
+ *
+ * $Id$
+ *
+ * @author Tim Bradley <bradley_t@ociweb.com>
+ */
+//=============================================================================
+
+#ifndef TAO_PI_POLICY_FACTORY_H
+#define TAO_PI_POLICY_FACTORY_H
+
+#include /**/ "ace/pre.h"
+
+#include "tao/orbconf.h"
+
+#if TAO_HAS_INTERCEPTORS == 1
+
+#include "tao/PI/pi_export.h"
+
+#if !defined (ACE_LACKS_PRAGMA_ONCE)
+# pragma once
+#endif /* ACE_LACKS_PRAGMA_ONCE */
+
+#include "tao/LocalObject.h"
+#include "tao/PI/PolicyFactoryC.h"
+
+TAO_BEGIN_VERSIONED_NAMESPACE_DECL
+
+/// Policy factory for all PortableInterceptor related policies.
+class TAO_PI_Export TAO_PI_PolicyFactory
+ : public virtual PortableInterceptor::PolicyFactory,
+ public virtual TAO_Local_RefCounted_Object
+{
+public:
+ CORBA::Policy_ptr create_policy (CORBA::PolicyType type,
+ const CORBA::Any & value
+ ACE_ENV_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC ((CORBA::SystemException,
+ CORBA::PolicyError));
+};
+
+TAO_END_VERSIONED_NAMESPACE_DECL
+
+#endif /* TAO_HAS_INTERCEPTORS == 1 */
+
+#include /**/ "ace/post.h"
+
+#endif /* TAO_PI_POLICY_FACTORY_H */
diff --git a/TAO/tao/PI/PolicyFactoryA.h b/TAO/tao/PI/PolicyFactoryA.h
new file mode 100644
index 00000000000..2bbd578a36e
--- /dev/null
+++ b/TAO/tao/PI/PolicyFactoryA.h
@@ -0,0 +1,62 @@
+// -*- C++ -*-
+//
+// $Id$
+
+// **** Code generated by the The ACE ORB (TAO) IDL Compiler ****
+// TAO and the TAO IDL Compiler have been developed by:
+// Center for Distributed Object Computing
+// Washington University
+// St. Louis, MO
+// USA
+// http://www.cs.wustl.edu/~schmidt/doc-center.html
+// and
+// Distributed Object Computing Laboratory
+// University of California at Irvine
+// Irvine, CA
+// USA
+// http://doc.ece.uci.edu/
+// and
+// Institute for Software Integrated Systems
+// Vanderbilt University
+// Nashville, TN
+// USA
+// http://www.isis.vanderbilt.edu/
+//
+// Information about TAO is available at:
+// http://www.cs.wustl.edu/~schmidt/TAO.html
+
+// TAO_IDL - Generated from
+// be\be_codegen.cpp:754
+
+#ifndef _TAO_IDL_POLICYFACTORYA_H_
+#define _TAO_IDL_POLICYFACTORYA_H_
+
+#include /**/ "ace/pre.h"
+
+#include "tao/PI/pi_export.h"
+#include "tao/PI/PolicyFactoryC.h"
+#include "tao/AnyTypeCode/PolicyA.h"
+
+TAO_BEGIN_VERSIONED_NAMESPACE_DECL
+
+// TAO_IDL - Generated from
+// be\be_visitor_module/module_ch.cpp:59
+
+namespace PortableInterceptor
+{
+
+ // TAO_IDL - Generated from
+ // be\be_visitor_typecode/typecode_decl.cpp:49
+
+ extern TAO_PI_Export ::CORBA::TypeCode_ptr const _tc_PolicyFactory;
+
+// TAO_IDL - Generated from
+// be\be_visitor_module/module_ch.cpp:86
+
+} // module PortableInterceptor
+
+TAO_END_VERSIONED_NAMESPACE_DECL
+
+#include /**/ "ace/post.h"
+
+#endif /* ifndef */
diff --git a/TAO/tao/PI/ProcessingModePolicy.cpp b/TAO/tao/PI/ProcessingModePolicy.cpp
new file mode 100644
index 00000000000..9f2feccfe82
--- /dev/null
+++ b/TAO/tao/PI/ProcessingModePolicy.cpp
@@ -0,0 +1,59 @@
+// $Id$
+
+#include "tao/PI/ProcessingModePolicy.h"
+
+#if TAO_HAS_INTERCEPTORS == 1
+
+#include "tao/PortableInterceptorC.h"
+
+TAO_BEGIN_VERSIONED_NAMESPACE_DECL
+
+ACE_RCSID (tao,
+ ProcessingModePolicy,
+ "$Id$")
+
+// Should this all be wrapped in #if (TAO_HAS_MINIMUM_POA == 0)?
+
+TAO_ProcessingModePolicy::TAO_ProcessingModePolicy
+ (PortableInterceptor::ProcessingMode mode)
+ : processing_mode_ (mode)
+{
+}
+
+CORBA::Policy_ptr
+TAO_ProcessingModePolicy::copy (ACE_ENV_SINGLE_ARG_DECL)
+ ACE_THROW_SPEC ((CORBA::SystemException))
+{
+ TAO_ProcessingModePolicy *copy = 0;
+ ACE_NEW_THROW_EX (copy,
+ TAO_ProcessingModePolicy (this->processing_mode_),
+ CORBA::NO_MEMORY ());
+ ACE_CHECK_RETURN (CORBA::Policy::_nil ());
+
+ return copy;
+}
+
+void
+TAO_ProcessingModePolicy::destroy (ACE_ENV_SINGLE_ARG_DECL_NOT_USED)
+ ACE_THROW_SPEC ((CORBA::SystemException))
+{
+}
+
+PortableInterceptor::ProcessingMode
+TAO_ProcessingModePolicy::processing_mode (ACE_ENV_SINGLE_ARG_DECL_NOT_USED)
+ ACE_THROW_SPEC ((CORBA::SystemException))
+{
+ return processing_mode_;
+}
+
+CORBA::PolicyType
+TAO_ProcessingModePolicy::policy_type (ACE_ENV_SINGLE_ARG_DECL_NOT_USED)
+ ACE_THROW_SPEC ((CORBA::SystemException))
+{
+ return PortableInterceptor::PROCESSING_MODE_POLICY_TYPE;
+}
+
+TAO_END_VERSIONED_NAMESPACE_DECL
+
+#endif /* TAO_HAS_INTERCEPTORS == 1 */
+
diff --git a/TAO/tao/PI/ProcessingModePolicy.h b/TAO/tao/PI/ProcessingModePolicy.h
new file mode 100644
index 00000000000..fe2c82462bf
--- /dev/null
+++ b/TAO/tao/PI/ProcessingModePolicy.h
@@ -0,0 +1,72 @@
+/* -*- C++ -*- */
+//=============================================================================
+/**
+ * @file ProcessingModePolicy.h
+ *
+ * $Id$
+ *
+ * @author Tim Bradley (bradley_t@ociweb.com)
+ */
+//=============================================================================
+
+#ifndef TAO_PROCESSING_MODE_POLICY_H
+#define TAO_PROCESSING_MODE_POLICY_H
+
+#include /**/ "ace/pre.h"
+
+#include "tao/orbconf.h"
+
+#if TAO_HAS_INTERCEPTORS == 1
+
+#include "tao/PI/pi_export.h"
+
+#if !defined (ACE_LACKS_PRAGMA_ONCE)
+# pragma once
+#endif /* ACE_LACKS_PRAGMA_ONCE */
+
+#include "tao/LocalObject.h"
+#include "tao/PI/ProcessingModePolicyC.h"
+
+TAO_BEGIN_VERSIONED_NAMESPACE_DECL
+
+/**
+ * @class TAO_ProcessingModePolicy
+ *
+ * @brief Implementation class for Portable Interceptor ProcessingModePolicy.
+ *
+ * This policy is used to specify which kinds of requests (collocated vs.
+ * remote) should (or should not) cause a Portable Interceptor to be used.
+ */
+
+class TAO_PI_Export TAO_ProcessingModePolicy
+ : public PortableInterceptor::ProcessingModePolicy,
+ public TAO_Local_RefCounted_Object
+{
+public:
+ /// Constructor.
+ TAO_ProcessingModePolicy (PortableInterceptor::ProcessingMode mode);
+
+ virtual PortableInterceptor::ProcessingMode processing_mode
+ (ACE_ENV_SINGLE_ARG_DECL)
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+ virtual CORBA::PolicyType policy_type (ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+ virtual CORBA::Policy_ptr copy (ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+ virtual void destroy (ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+private:
+ /// The attribute
+ PortableInterceptor::ProcessingMode processing_mode_;
+};
+
+TAO_END_VERSIONED_NAMESPACE_DECL
+
+#endif /* TAO_HAS_INTERCEPTORS == 1 */
+
+#include /**/ "ace/post.h"
+#endif /* TAO_PROCESSING_MODE_POLICY_H */
diff --git a/TAO/tao/PI/ProcessingModePolicy.pidl b/TAO/tao/PI/ProcessingModePolicy.pidl
new file mode 100644
index 00000000000..4b8a6bac91e
--- /dev/null
+++ b/TAO/tao/PI/ProcessingModePolicy.pidl
@@ -0,0 +1,42 @@
+/**
+ * @file ProcessingModePolicy.pidl
+ *
+ * $Id$
+ *
+ * @brief Pre-compiled IDL source for the ProcessingModePolicy within
+ * the PortableInterceptor module.
+ *
+ * tao_idl \
+ * -o orig -Gp -Gd -Ge 1 -GT -Sc -GA \
+ * -Wb,export_include="tao/TAO_Export.h" \
+ * -Wb,export_macro=TAO_Export \
+ * -Wb,pre_include="ace/pre.h" \
+ * -Wb,post_include="ace/post.h" \
+ * ProcessingModePolicy.pidl
+ */
+
+#ifndef _PROCESSING_MODE_POLICY_PIDL_
+#define _PROCESSING_MODE_POLICY_PIDL_
+
+#include "tao/Policy.pidl"
+
+module PortableInterceptor
+{
+
+ // ProcessingMode Policy (default = LOCAL_AND_REMOTE)
+ typedef short ProcessingMode;
+ const ProcessingMode LOCAL_AND_REMOTE = 0;
+ const ProcessingMode REMOTE_ONLY = 1;
+ const ProcessingMode LOCAL_ONLY = 2;
+
+ /// @todo - Need to get the proper Policy Type code from OMG
+ const CORBA::PolicyType PROCESSING_MODE_POLICY_TYPE = 100;
+
+ local interface ProcessingModePolicy : CORBA::Policy
+ {
+ readonly attribute ProcessingMode processing_mode;
+ };
+
+};
+
+#endif /* _PROCESSING_MODE_POLICY_PIDL_ */
diff --git a/TAO/tao/PI/ProcessingModePolicyC.h b/TAO/tao/PI/ProcessingModePolicyC.h
new file mode 100644
index 00000000000..88662f3f7f2
--- /dev/null
+++ b/TAO/tao/PI/ProcessingModePolicyC.h
@@ -0,0 +1,263 @@
+// -*- C++ -*-
+//
+// $Id$
+
+// **** Code generated by the The ACE ORB (TAO) IDL Compiler ****
+// TAO and the TAO IDL Compiler have been developed by:
+// Center for Distributed Object Computing
+// Washington University
+// St. Louis, MO
+// USA
+// http://www.cs.wustl.edu/~schmidt/doc-center.html
+// and
+// Distributed Object Computing Laboratory
+// University of California at Irvine
+// Irvine, CA
+// USA
+// http://doc.ece.uci.edu/
+// and
+// Institute for Software Integrated Systems
+// Vanderbilt University
+// Nashville, TN
+// USA
+// http://www.isis.vanderbilt.edu/
+//
+// Information about TAO is available at:
+// http://www.cs.wustl.edu/~schmidt/TAO.html
+
+// TAO_IDL - Generated from
+// be/be_codegen.cpp:164
+
+#ifndef _TAO_IDL_ORIG_PROCESSINGMODEPOLICYC_H_
+#define _TAO_IDL_ORIG_PROCESSINGMODEPOLICYC_H_
+
+#include /**/ "ace/pre.h"
+
+
+#include "ace/config-all.h"
+
+#if !defined (ACE_LACKS_PRAGMA_ONCE)
+# pragma once
+#endif /* ACE_LACKS_PRAGMA_ONCE */
+
+#include "tao/PI/pi_export.h"
+#include "tao/AnyTypeCode/AnyTypeCode_methods.h"
+#include "tao/ORB.h"
+#include "tao/SystemException.h"
+#include "tao/Environment.h"
+#include "tao/Object.h"
+#include "tao/AnyTypeCode/PolicyA.h"
+#include "tao/Objref_VarOut_T.h"
+#include "tao/Versioned_Namespace.h"
+
+#include "tao/PolicyC.h"
+
+#if defined (TAO_EXPORT_MACRO)
+#undef TAO_EXPORT_MACRO
+#endif
+#define TAO_EXPORT_MACRO TAO_PI_Export
+
+TAO_BEGIN_VERSIONED_NAMESPACE_DECL
+
+
+
+// TAO_IDL - Generated from
+// be/be_visitor_module/module_ch.cpp:49
+
+namespace PortableInterceptor
+{
+
+ // TAO_IDL - Generated from
+ // be/be_visitor_typedef/typedef_ch.cpp:379
+
+ typedef CORBA::Short ProcessingMode;
+ typedef CORBA::Short_out ProcessingMode_out;
+
+ // TAO_IDL - Generated from
+ // be/be_visitor_typecode/typecode_decl.cpp:49
+
+ extern TAO_PI_Export ::CORBA::TypeCode_ptr const _tc_ProcessingMode;
+
+ // TAO_IDL - Generated from
+ // be/be_visitor_constant/constant_ch.cpp:52
+
+ const PortableInterceptor::ProcessingMode LOCAL_AND_REMOTE = 0;
+
+ // TAO_IDL - Generated from
+ // be/be_visitor_constant/constant_ch.cpp:52
+
+ const PortableInterceptor::ProcessingMode REMOTE_ONLY = 1;
+
+ // TAO_IDL - Generated from
+ // be/be_visitor_constant/constant_ch.cpp:52
+
+ const PortableInterceptor::ProcessingMode LOCAL_ONLY = 2;
+
+ // TAO_IDL - Generated from
+ // be/be_visitor_constant/constant_ch.cpp:52
+
+ const CORBA::PolicyType PROCESSING_MODE_POLICY_TYPE = 100U;
+
+ // TAO_IDL - Generated from
+ // be/be_interface.cpp:646
+
+#if !defined (_PORTABLEINTERCEPTOR_PROCESSINGMODEPOLICY__VAR_OUT_CH_)
+#define _PORTABLEINTERCEPTOR_PROCESSINGMODEPOLICY__VAR_OUT_CH_
+
+ class ProcessingModePolicy;
+ typedef ProcessingModePolicy *ProcessingModePolicy_ptr;
+
+ typedef
+ TAO_Objref_Var_T<
+ ProcessingModePolicy
+ >
+ ProcessingModePolicy_var;
+
+ typedef
+ TAO_Objref_Out_T<
+ ProcessingModePolicy
+ >
+ ProcessingModePolicy_out;
+
+#endif /* end #if !defined */
+
+ // TAO_IDL - Generated from
+ // be/be_visitor_interface/interface_ch.cpp:54
+
+#if !defined (_PORTABLEINTERCEPTOR_PROCESSINGMODEPOLICY_CH_)
+#define _PORTABLEINTERCEPTOR_PROCESSINGMODEPOLICY_CH_
+
+ class TAO_PI_Export ProcessingModePolicy
+ : public virtual ::CORBA::Policy
+ {
+ public:
+ typedef ProcessingModePolicy_ptr _ptr_type;
+ typedef ProcessingModePolicy_var _var_type;
+
+ // The static operations.
+ static ProcessingModePolicy_ptr _duplicate (ProcessingModePolicy_ptr obj);
+
+ static void _tao_release (ProcessingModePolicy_ptr obj);
+
+ static ProcessingModePolicy_ptr _narrow (
+ ::CORBA::Object_ptr obj
+ ACE_ENV_ARG_DECL_WITH_DEFAULTS
+ );
+
+ static ProcessingModePolicy_ptr _unchecked_narrow (
+ ::CORBA::Object_ptr obj
+ ACE_ENV_ARG_DECL_WITH_DEFAULTS
+ );
+
+ static ProcessingModePolicy_ptr _nil (void)
+ {
+ return static_cast<ProcessingModePolicy_ptr> (0);
+ }
+
+
+
+ // TAO_IDL - Generated from
+ // be/be_visitor_operation/operation_ch.cpp:46
+
+ virtual ::PortableInterceptor::ProcessingMode processing_mode (
+ 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
+
+ virtual ::CORBA::Policy_ptr copy (
+ 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
+
+ virtual void destroy (
+ 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
+
+ virtual ::CORBA::Boolean _is_a (
+ const char *type_id
+ ACE_ENV_ARG_DECL_WITH_DEFAULTS
+ );
+
+ virtual const char* _interface_repository_id (void) const;
+ virtual ::CORBA::Boolean marshal (TAO_OutputCDR &cdr);
+
+ protected:
+ // Abstract or local interface only.
+ ProcessingModePolicy (void);
+
+ virtual ~ProcessingModePolicy (void);
+
+ private:
+ // Private and unimplemented for concrete interfaces.
+ ProcessingModePolicy (const ProcessingModePolicy &);
+
+ void operator= (const ProcessingModePolicy &);
+ };
+
+#endif /* end #if !defined */
+
+ // TAO_IDL - Generated from
+ // be/be_visitor_typecode/typecode_decl.cpp:49
+
+ extern TAO_PI_Export ::CORBA::TypeCode_ptr const _tc_ProcessingModePolicy;
+
+// TAO_IDL - Generated from
+// be/be_visitor_module/module_ch.cpp:78
+
+} // module PortableInterceptor
+
+// TAO_IDL - Generated from
+// be/be_visitor_traits.cpp:62
+
+// Traits specializations.
+namespace TAO
+{
+
+#if !defined (_PORTABLEINTERCEPTOR_PROCESSINGMODEPOLICY__TRAITS_)
+#define _PORTABLEINTERCEPTOR_PROCESSINGMODEPOLICY__TRAITS_
+
+ template<>
+ struct TAO_PI_Export Objref_Traits< ::PortableInterceptor::ProcessingModePolicy>
+ {
+ static ::PortableInterceptor::ProcessingModePolicy_ptr duplicate (
+ ::PortableInterceptor::ProcessingModePolicy_ptr
+ );
+ static void release (
+ ::PortableInterceptor::ProcessingModePolicy_ptr
+ );
+ static ::PortableInterceptor::ProcessingModePolicy_ptr nil (void);
+ static ::CORBA::Boolean marshal (
+ const ::PortableInterceptor::ProcessingModePolicy_ptr p,
+ TAO_OutputCDR & cdr
+ );
+ };
+
+#endif /* end #if !defined */
+}
+
+// TAO_IDL - Generated from
+// be/be_codegen.cpp:1101
+
+TAO_END_VERSIONED_NAMESPACE_DECL
+
+#include /**/ "ace/post.h"
+
+#endif /* ifndef */
+
+
diff --git a/TAO/tao/PI/ProcessingModePolicyS.h b/TAO/tao/PI/ProcessingModePolicyS.h
new file mode 100644
index 00000000000..17b1360599e
--- /dev/null
+++ b/TAO/tao/PI/ProcessingModePolicyS.h
@@ -0,0 +1,28 @@
+// -*- C++ -*-
+//
+// $Id$
+
+// **** Code generated by the The ACE ORB (TAO) IDL Compiler ****
+// TAO and the TAO IDL Compiler have been developed by:
+// Center for Distributed Object Computing
+// Washington University
+// St. Louis, MO
+// USA
+// http://www.cs.wustl.edu/~schmidt/doc-center.html
+// and
+// Distributed Object Computing Laboratory
+// University of California at Irvine
+// Irvine, CA
+// USA
+// http://doc.ece.uci.edu/
+// and
+// Institute for Software Integrated Systems
+// Vanderbilt University
+// Nashville, TN
+// USA
+// http://www.isis.vanderbilt.edu/
+//
+// Information about TAO is available at:
+// http://www.cs.wustl.edu/~schmidt/TAO.html
+
+// Skeleton file generation suppressed with command line option -SS
diff --git a/TAO/tao/PI/RequestInfoA.h b/TAO/tao/PI/RequestInfoA.h
new file mode 100644
index 00000000000..e1290cb2124
--- /dev/null
+++ b/TAO/tao/PI/RequestInfoA.h
@@ -0,0 +1,67 @@
+// -*- C++ -*-
+//
+// $Id$
+
+// **** Code generated by the The ACE ORB (TAO) IDL Compiler ****
+// TAO and the TAO IDL Compiler have been developed by:
+// Center for Distributed Object Computing
+// Washington University
+// St. Louis, MO
+// USA
+// http://www.cs.wustl.edu/~schmidt/doc-center.html
+// and
+// Distributed Object Computing Laboratory
+// University of California at Irvine
+// Irvine, CA
+// USA
+// http://doc.ece.uci.edu/
+// and
+// Institute for Software Integrated Systems
+// Vanderbilt University
+// Nashville, TN
+// USA
+// http://www.isis.vanderbilt.edu/
+//
+// Information about TAO is available at:
+// http://www.cs.wustl.edu/~schmidt/TAO.html
+
+// TAO_IDL - Generated from
+// be\be_codegen.cpp:754
+
+#ifndef _TAO_IDL_REQUESTINFOA_H_
+#define _TAO_IDL_REQUESTINFOA_H_
+
+#include /**/ "ace/pre.h"
+
+#include "tao/PI/pi_export.h"
+#include "tao/PI/RequestInfoC.h"
+#include "tao/AnyTypeCode/PI_ForwardA.h"
+#include "tao/AnyTypeCode/DynamicA.h"
+#include "tao/AnyTypeCode/Messaging_SyncScopeA.h"
+#include "tao/PI/InvalidSlotA.h"
+#include "tao/AnyTypeCode/IOP_IORA.h"
+
+
+// TAO_IDL - Generated from
+// be\be_visitor_module/module_ch.cpp:59
+
+TAO_BEGIN_VERSIONED_NAMESPACE_DECL
+
+namespace PortableInterceptor
+{
+
+ // TAO_IDL - Generated from
+ // be\be_visitor_typecode/typecode_decl.cpp:49
+
+ extern TAO_PI_Export ::CORBA::TypeCode_ptr const _tc_RequestInfo;
+
+// TAO_IDL - Generated from
+// be\be_visitor_module/module_ch.cpp:86
+
+} // module PortableInterceptor
+
+TAO_END_VERSIONED_NAMESPACE_DECL
+
+#include /**/ "ace/post.h"
+
+#endif /* ifndef */
diff --git a/TAO/tao/PI_Server/ServerRequestDetails.h b/TAO/tao/PI_Server/ServerRequestDetails.h
new file mode 100644
index 00000000000..fc34a6a66f5
--- /dev/null
+++ b/TAO/tao/PI_Server/ServerRequestDetails.h
@@ -0,0 +1,83 @@
+// -*- C++ -*-
+
+//=============================================================================
+/**
+ * @file ServerRequestDetails.h
+ *
+ * $Id$
+ *
+ * This file declares a class that manages the details
+ * about a registered server request interceptor. Policies can be
+ * used when interceptors are registered, and the policy values
+ * will be processed and used to modify the values of the
+ * ServerRequestDetails object associated with the registered
+ * server request interceptor.
+ *
+ * @author Tim Bradley <bradley_t@ociweb.com>
+ */
+//=============================================================================
+
+#ifndef TAO_SERVER_REQUEST_DETAILS_H
+#define TAO_SERVER_REQUEST_DETAILS_H
+
+#include /**/ "ace/pre.h"
+
+#include "tao/orbconf.h"
+
+#if !defined (ACE_LACKS_PRAGMA_ONCE)
+# pragma once
+#endif /* ACE_LACKS_PRAGMA_ONCE */
+
+#if TAO_HAS_INTERCEPTORS == 1
+
+#include "tao/PI/ProcessingModePolicyC.h"
+
+TAO_BEGIN_VERSIONED_NAMESPACE_DECL
+
+namespace TAO
+{
+ /**
+ * @class ServerRequestDetails
+ *
+ * @brief The policy-driven details for a registered server request
+ * interceptor
+ *
+ * Each time a server request interceptor is registered with an ORB,
+ * a ServerRequestDetails object will be created and associated with
+ * the registered server request interceptor. If the interceptor is
+ * registered with policies, the policies will be used to adjust the
+ * values in the ServerRequestDetails appropriately.
+ */
+ class ServerRequestDetails
+ {
+ public:
+ ServerRequestDetails (void);
+
+ void apply_policies (const CORBA::PolicyList& policies
+ ACE_ENV_ARG_DECL);
+
+ /// Returns true if the ProcessingMode setting permits the "firing"
+ /// of the associated server request interceptor based upon the
+ /// remote vs. collocated nature of the current servant request
+ /// that is being dispatched.
+ bool should_be_processed (bool is_remote_request) const;
+
+ private:
+
+ /// The ProcessingMode setting that can be adjusted via the
+ /// PortableInterceptor::ProcessingModePolicy.
+ PortableInterceptor::ProcessingMode processing_mode_;
+ };
+}
+
+TAO_END_VERSIONED_NAMESPACE_DECL
+
+#if defined (__ACE_INLINE__)
+#include "tao/PI_Server/ServerRequestDetails.inl"
+#endif /* __ACE_INLINE__ */
+
+#endif /* TAO_HAS_INTERCEPTORS == 1 */
+
+#include /**/ "ace/post.h"
+
+#endif /* TAO_SERVER_REQUEST_DETAILS_H */
diff --git a/TAO/tao/PI_Server/ServerRequestDetails.inl b/TAO/tao/PI_Server/ServerRequestDetails.inl
new file mode 100644
index 00000000000..f653264bdac
--- /dev/null
+++ b/TAO/tao/PI_Server/ServerRequestDetails.inl
@@ -0,0 +1,27 @@
+// -*- C++ -*-
+//
+// $Id$
+
+TAO_BEGIN_VERSIONED_NAMESPACE_DECL
+
+namespace TAO
+{
+ ACE_INLINE
+ ServerRequestDetails::ServerRequestDetails (void)
+ : processing_mode_(PortableInterceptor::LOCAL_AND_REMOTE)
+ {
+ }
+
+ ACE_INLINE
+ bool
+ ServerRequestDetails::should_be_processed (bool is_remote_request) const
+ {
+ return ((this->processing_mode_ == PortableInterceptor::LOCAL_AND_REMOTE) ||
+ ((this->processing_mode_ == PortableInterceptor::REMOTE_ONLY) &&
+ (is_remote_request)) ||
+ ((this->processing_mode_ == PortableInterceptor::LOCAL_ONLY) &&
+ (!is_remote_request)));
+ }
+}
+
+TAO_END_VERSIONED_NAMESPACE_DECL
diff --git a/TAO/tao/PI_Server/ServerRequestInfoA.h b/TAO/tao/PI_Server/ServerRequestInfoA.h
new file mode 100644
index 00000000000..1766f29ea93
--- /dev/null
+++ b/TAO/tao/PI_Server/ServerRequestInfoA.h
@@ -0,0 +1,65 @@
+// -*- C++ -*-
+//
+// $Id$
+
+// **** Code generated by the The ACE ORB (TAO) IDL Compiler ****
+// TAO and the TAO IDL Compiler have been developed by:
+// Center for Distributed Object Computing
+// Washington University
+// St. Louis, MO
+// USA
+// http://www.cs.wustl.edu/~schmidt/doc-center.html
+// and
+// Distributed Object Computing Laboratory
+// University of California at Irvine
+// Irvine, CA
+// USA
+// http://doc.ece.uci.edu/
+// and
+// Institute for Software Integrated Systems
+// Vanderbilt University
+// Nashville, TN
+// USA
+// http://www.isis.vanderbilt.edu/
+//
+// Information about TAO is available at:
+// http://www.cs.wustl.edu/~schmidt/TAO.html
+
+// TAO_IDL - Generated from
+// be\be_codegen.cpp:754
+
+#ifndef _TAO_IDL_SERVERREQUESTINFOA_H_
+#define _TAO_IDL_SERVERREQUESTINFOA_H_
+
+#include /**/ "ace/pre.h"
+
+#include "tao/PI_Server/pi_server_export.h"
+#include "tao/PI_Server/ServerRequestInfoC.h"
+#include "tao/PI/RequestInfoA.h"
+#include "tao/AnyTypeCode/orb_typesA.h"
+#include "tao/AnyTypeCode/Policy_ForwardA.h"
+
+
+// TAO_IDL - Generated from
+// be\be_visitor_module/module_ch.cpp:59
+
+TAO_BEGIN_VERSIONED_NAMESPACE_DECL
+
+namespace PortableInterceptor
+{
+
+ // TAO_IDL - Generated from
+ // be\be_visitor_typecode/typecode_decl.cpp:49
+
+ extern TAO_PI_Server_Export ::CORBA::TypeCode_ptr const _tc_ServerRequestInfo;
+
+// TAO_IDL - Generated from
+// be\be_visitor_module/module_ch.cpp:86
+
+} // module PortableInterceptor
+
+TAO_END_VERSIONED_NAMESPACE_DECL
+
+#include /**/ "ace/post.h"
+
+#endif /* ifndef */
diff --git a/TAO/tao/PI_Server/ServerRequestInterceptorA.h b/TAO/tao/PI_Server/ServerRequestInterceptorA.h
new file mode 100644
index 00000000000..6ed94797f14
--- /dev/null
+++ b/TAO/tao/PI_Server/ServerRequestInterceptorA.h
@@ -0,0 +1,65 @@
+// -*- C++ -*-
+//
+// $Id$
+
+// **** Code generated by the The ACE ORB (TAO) IDL Compiler ****
+// TAO and the TAO IDL Compiler have been developed by:
+// Center for Distributed Object Computing
+// Washington University
+// St. Louis, MO
+// USA
+// http://www.cs.wustl.edu/~schmidt/doc-center.html
+// and
+// Distributed Object Computing Laboratory
+// University of California at Irvine
+// Irvine, CA
+// USA
+// http://doc.ece.uci.edu/
+// and
+// Institute for Software Integrated Systems
+// Vanderbilt University
+// Nashville, TN
+// USA
+// http://www.isis.vanderbilt.edu/
+//
+// Information about TAO is available at:
+// http://www.cs.wustl.edu/~schmidt/TAO.html
+
+// TAO_IDL - Generated from
+// be\be_codegen.cpp:754
+
+#ifndef _TAO_IDL_SERVERREQUESTINTERCEPTORA_H_
+#define _TAO_IDL_SERVERREQUESTINTERCEPTORA_H_
+
+#include /**/ "ace/pre.h"
+
+#include "tao/PI_Server/pi_server_export.h"
+#include "tao/PI_Server/ServerRequestInterceptorC.h"
+#include "tao/PI/InterceptorA.h"
+#include "tao/PI/PIForwardRequestA.h"
+#include "tao/AnyTypeCode/OctetSeqA.h"
+
+
+// TAO_IDL - Generated from
+// be\be_visitor_module/module_ch.cpp:59
+
+TAO_BEGIN_VERSIONED_NAMESPACE_DECL
+
+namespace PortableInterceptor
+{
+
+ // TAO_IDL - Generated from
+ // be\be_visitor_typecode/typecode_decl.cpp:49
+
+ extern TAO_PI_Server_Export ::CORBA::TypeCode_ptr const _tc_ServerRequestInterceptor;
+
+// TAO_IDL - Generated from
+// be\be_visitor_module/module_ch.cpp:86
+
+} // module PortableInterceptor
+
+TAO_END_VERSIONED_NAMESPACE_DECL
+
+#include /**/ "ace/post.h"
+
+#endif /* ifndef */
diff --git a/TAO/tao/PI_Server/diffs/ServerRequestInterceptor.diff b/TAO/tao/PI_Server/diffs/ServerRequestInterceptor.diff
new file mode 100644
index 00000000000..f3fc423c81a
--- /dev/null
+++ b/TAO/tao/PI_Server/diffs/ServerRequestInterceptor.diff
@@ -0,0 +1,24 @@
+--- orig/ServerRequestInterceptorC.h 2005-05-17 13:50:41.646918400 +0200
++++ ServerRequestInterceptorC.h 2005-05-17 14:00:40.237649600 +0200
+@@ -155,15 +155,19 @@
+ // TAO_IDL - Generated from
+ // be\be_visitor_operation/operation_ch.cpp:46
+
++#if TAO_HAS_EXTENDED_FT_INTERCEPTORS == 1
++
+ virtual void tao_ft_interception_point (
+ ::PortableInterceptor::ServerRequestInfo_ptr ri,
+ ::CORBA::OctetSeq_out os
+- ACE_ENV_ARG_DECL_WITH_DEFAULTS
++ ACE_ENV_ARG_DECL_NOT_USED
+ )
+ ACE_THROW_SPEC ((
+ CORBA::SystemException,
+ ::PortableInterceptor::ForwardRequest
+- )) = 0;
++ )) {}
++
++#endif /* TAO_HAS_EXTENDED_FT_INTERCEPTORS */
+
+ // TAO_IDL - Generated from
+ // be\be_visitor_operation/operation_ch.cpp:46
diff --git a/TAO/tao/RTScheduling/RTScheduler_includeS.h b/TAO/tao/RTScheduling/RTScheduler_includeS.h
new file mode 100644
index 00000000000..17b1360599e
--- /dev/null
+++ b/TAO/tao/RTScheduling/RTScheduler_includeS.h
@@ -0,0 +1,28 @@
+// -*- C++ -*-
+//
+// $Id$
+
+// **** Code generated by the The ACE ORB (TAO) IDL Compiler ****
+// TAO and the TAO IDL Compiler have been developed by:
+// Center for Distributed Object Computing
+// Washington University
+// St. Louis, MO
+// USA
+// http://www.cs.wustl.edu/~schmidt/doc-center.html
+// and
+// Distributed Object Computing Laboratory
+// University of California at Irvine
+// Irvine, CA
+// USA
+// http://doc.ece.uci.edu/
+// and
+// Institute for Software Integrated Systems
+// Vanderbilt University
+// Nashville, TN
+// USA
+// http://www.isis.vanderbilt.edu/
+//
+// Information about TAO is available at:
+// http://www.cs.wustl.edu/~schmidt/TAO.html
+
+// Skeleton file generation suppressed with command line option -SS
diff --git a/TAO/tao/Strategies/OC_Endpoint_Selector_Factory.cpp b/TAO/tao/Strategies/OC_Endpoint_Selector_Factory.cpp
new file mode 100644
index 00000000000..96c1cf8c8b2
--- /dev/null
+++ b/TAO/tao/Strategies/OC_Endpoint_Selector_Factory.cpp
@@ -0,0 +1,67 @@
+// $Id$
+
+#include "tao/Strategies/OC_Endpoint_Selector_Factory.h"
+#include "tao/Strategies/Optimized_Connection_Endpoint_Selector.h"
+#include "ace/Log_Msg.h"
+#include "tao/ORB_Core.h"
+#include "ace/OS.h"
+
+ACE_RCSID (tao,
+ OC_Endpoint_Selector_Factory,
+ "$Id$")
+
+TAO_BEGIN_VERSIONED_NAMESPACE_DECL
+
+TAO_OC_Endpoint_Selector_Factory::TAO_OC_Endpoint_Selector_Factory (void)
+ : oc_endpoint_selector_(0)
+{
+}
+
+TAO_OC_Endpoint_Selector_Factory::~TAO_OC_Endpoint_Selector_Factory (void)
+{
+ delete this->oc_endpoint_selector_;
+}
+
+int
+TAO_OC_Endpoint_Selector_Factory::init (int argc, ACE_TCHAR *argv[])
+{
+ ACE_Time_Value timeout(0,0);
+
+ TAO_ORB_Core::set_endpoint_selector_factory ("OC_Endpoint_Selector_Factory");
+ for (int count = 0; count < argc; count++)
+ {
+ if ((ACE_OS::strcasecmp (argv[count],
+ ACE_TEXT ("-connect_timeout")) == 0) &&
+ count < argc-1)
+ {
+ count++;
+ long ms = ACE_OS::strtol(argv[count],0,10);
+ timeout.msec (ms);
+ }
+ }
+
+ ACE_NEW_RETURN (this->oc_endpoint_selector_,
+ TAO_Optimized_Connection_Endpoint_Selector(timeout),
+ -1);
+ return 0;
+}
+
+
+TAO_Invocation_Endpoint_Selector *
+TAO_OC_Endpoint_Selector_Factory::get_selector ( ACE_ENV_SINGLE_ARG_DECL_NOT_USED )
+{
+ // Trivial endpoint selector. Just return the default selector.
+ return this->oc_endpoint_selector_;
+}
+
+TAO_END_VERSIONED_NAMESPACE_DECL
+
+// ****************************************************************
+
+ACE_STATIC_SVC_DEFINE (TAO_OC_Endpoint_Selector_Factory,
+ ACE_TEXT ("OC_Endpoint_Selector_Factory"),
+ ACE_SVC_OBJ_T,
+ &ACE_SVC_NAME (TAO_OC_Endpoint_Selector_Factory),
+ ACE_Service_Type::DELETE_THIS | ACE_Service_Type::DELETE_OBJ,
+ 0)
+ACE_FACTORY_DEFINE (TAO_Strategies, TAO_OC_Endpoint_Selector_Factory)
diff --git a/TAO/tao/Strategies/OC_Endpoint_Selector_Factory.h b/TAO/tao/Strategies/OC_Endpoint_Selector_Factory.h
new file mode 100644
index 00000000000..c1cae879efb
--- /dev/null
+++ b/TAO/tao/Strategies/OC_Endpoint_Selector_Factory.h
@@ -0,0 +1,87 @@
+// This may look like C, but it's really -*- C++ -*-
+
+//=============================================================================
+/**
+ * @file OC_Endpoint_Selector_Factory.h
+ *
+ * $Id$
+ *
+ * Strategies for selecting profile/endpoint from an IOR for making an
+ * invocation.
+ *
+ * @author Phil Mesnier <mesnier_p@ociweb.com>
+ */
+//=============================================================================
+
+
+#ifndef TAO_OC_ENDPOINT_SELECTOR_FACTORY_H
+#define TAO_OC_ENDPOINT_SELECTOR_FACTORY_H
+#include /**/ "ace/pre.h"
+
+
+#include "tao/Strategies/strategies_export.h"
+
+#include "tao/Endpoint_Selector_Factory.h"
+#include "ace/Service_Config.h"
+
+#if !defined (ACE_LACKS_PRAGMA_ONCE)
+# pragma once
+#endif /* ACE_LACKS_PRAGMA_ONCE */
+
+TAO_BEGIN_VERSIONED_NAMESPACE_DECL
+
+// Forward references
+class TAO_Optimized_Connection_Endpoint_Selector;
+
+// ****************************************************************
+
+/**
+ * @class TAO_OC_Endpoint_Selector_Factory
+ *
+ * @brief Factory for initializing <Endpoint_Selection_State> and
+ * obtaining appropriate <Invocation_Endpoint_Selector>.
+ *
+ * Used by Invocation classes to intialize its endpoint selection
+ * strategy and state based on the effective policies.
+ * Endpoint selection strategies are stateless objects - all the
+ * state they need is contained by Invocation in
+ * <Endpoint_Selection_State>. Thus, rather than allocating an
+ * endpoint selection strategy object for each Invocation, the
+ * factory simply returns the appropriate one from the
+ * set preallocated in the ORB_Core. One endpoint selection
+ * strategy object can be used by many invocations concurrently.
+ */
+class TAO_Strategies_Export TAO_OC_Endpoint_Selector_Factory
+ : public TAO_Endpoint_Selector_Factory
+{
+public:
+ /// Constructor.
+ TAO_OC_Endpoint_Selector_Factory (void);
+
+ /// Destructor.
+ virtual ~TAO_OC_Endpoint_Selector_Factory (void);
+
+
+ virtual int init (int argc, ACE_TCHAR *argv[]);
+
+ /// Get an Invocation's endpoint selection strategy and
+ /// initialize the endpoint selection state instance.
+ virtual TAO_Invocation_Endpoint_Selector *get_selector (
+ ACE_ENV_SINGLE_ARG_DECL);
+
+protected:
+ /// The possible endpoint selector strategies that can be
+ /// returned by this factory
+
+ TAO_Optimized_Connection_Endpoint_Selector *oc_endpoint_selector_;
+};
+
+
+TAO_END_VERSIONED_NAMESPACE_DECL
+
+
+ACE_STATIC_SVC_DECLARE_EXPORT (TAO_Strategies, TAO_OC_Endpoint_Selector_Factory)
+ACE_FACTORY_DECLARE (TAO_Strategies, TAO_OC_Endpoint_Selector_Factory)
+
+#include /**/ "ace/post.h"
+#endif /* TAO_OC_ENDPOINT_SELECTOR_FACTORY_H */
diff --git a/TAO/tao/Strategies/Optimized_Connection_Endpoint_Selector.h b/TAO/tao/Strategies/Optimized_Connection_Endpoint_Selector.h
new file mode 100644
index 00000000000..818541916c6
--- /dev/null
+++ b/TAO/tao/Strategies/Optimized_Connection_Endpoint_Selector.h
@@ -0,0 +1,80 @@
+// This may look like C, but it's really -*- C++ -*-
+
+//=============================================================================
+/**
+ * @file Optimized_Connection_Endpoint_Selector.h
+ *
+ * $Id$
+ *
+ * Strategies for selecting profile/endpoint from an IOR for making an
+ * invocation.
+ *
+ * @author Phil Mesnier <mesnier_p@ociweb.com>
+ */
+//=============================================================================
+
+
+#ifndef TAO_OPTIMIZED_CONNECTION_ENDPOINT_SELECTOR_H
+#define TAO_OPTIMIZED_ENDPOINT_SELECTOR_H
+
+#include /**/ "ace/pre.h"
+
+#include "tao/corbafwd.h"
+
+#if !defined (ACE_LACKS_PRAGMA_ONCE)
+# pragma once
+#endif /* ACE_LACKS_PRAGMA_ONCE */
+
+#include "tao/Strategies/strategies_export.h"
+
+#include "tao/Invocation_Endpoint_Selectors.h"
+#include "ace/Time_Value.h"
+
+
+TAO_BEGIN_VERSIONED_NAMESPACE_DECL
+
+class TAO_GIOP_Invocation;
+class TAO_ORB_Core;
+class TAO_Stub;
+class TAO_Profile;
+
+/**
+ * @class TAO_Optimized_Connection_Endpoint_Selector
+ *
+ * @brief More efficient connection strategy for endpoint selection.
+ *
+ * This strategy builds on the default by first querying the connection
+ * cache for all potential endpoints before iterating over the list to
+ * attempt to create new connections.
+ */
+
+class TAO_Strategies_Export TAO_Optimized_Connection_Endpoint_Selector :
+public TAO_Default_Endpoint_Selector
+{
+public:
+ /// Constructor.
+ TAO_Optimized_Connection_Endpoint_Selector (const ACE_Time_Value& tv);
+
+ /// Destructor.
+ virtual ~TAO_Optimized_Connection_Endpoint_Selector (void);
+
+ static void hook (TAO_ORB_Core *,
+ TAO_Stub *,
+ bool &has_timeout,
+ ACE_Time_Value &tv);
+
+ virtual void select_endpoint (TAO::Profile_Transport_Resolver *,
+ ACE_Time_Value *max_wait_time
+ ACE_ENV_ARG_DECL);
+private:
+
+ int check_profile (TAO_Profile *,
+ TAO::Profile_Transport_Resolver *);
+
+ static ACE_Time_Value timeout_;
+};
+
+TAO_END_VERSIONED_NAMESPACE_DECL
+
+#include /**/ "ace/post.h"
+#endif /* TAO_OPTIMIZED_CONNECTION_ENDPOINT_SELECTOR_H */
diff --git a/TAO/tests/AlternateIIOP/svc.conf b/TAO/tests/AlternateIIOP/svc.conf
new file mode 100644
index 00000000000..03c69cdb546
--- /dev/null
+++ b/TAO/tests/AlternateIIOP/svc.conf
@@ -0,0 +1 @@
+dynamic OC_Endpoint_Selector_Factory Service_Object * TAO_Strategies:_make_TAO_OC_Endpoint_Selector_Factory () "-connect_timeout 1300"
diff --git a/TAO/tests/BiDirectional_DelayedUpcall/BiDir_DelayedUpcall.mpc b/TAO/tests/BiDirectional_DelayedUpcall/BiDir_DelayedUpcall.mpc
new file mode 100644
index 00000000000..abcf650df1b
--- /dev/null
+++ b/TAO/tests/BiDirectional_DelayedUpcall/BiDir_DelayedUpcall.mpc
@@ -0,0 +1,18 @@
+// -*- MPC -*-
+// $Id$
+
+project(*Server): taoserver, minimum_corba, bidir_giop {
+ Source_Files {
+ test_i.cpp
+ server.cpp
+ }
+}
+
+project(*Client): taoexe, portableserver, minimum_corba, bidir_giop {
+ after += *Server
+ Source_Files {
+ test_i.cpp
+ client.cpp
+ }
+}
+
diff --git a/TAO/tests/BiDirectional_DelayedUpcall/README b/TAO/tests/BiDirectional_DelayedUpcall/README
new file mode 100644
index 00000000000..60497253309
--- /dev/null
+++ b/TAO/tests/BiDirectional_DelayedUpcall/README
@@ -0,0 +1,6 @@
+# $Id$
+
+This test is similar to the $TAO_ROOT/tests/BiDirectional test. The
+only difference being that the server after it has received the upcall
+it does a bit delayed a bunch of remote calls do the client again
+
diff --git a/TAO/tests/BiDirectional_DelayedUpcall/client.cpp b/TAO/tests/BiDirectional_DelayedUpcall/client.cpp
new file mode 100644
index 00000000000..a6b00269d1b
--- /dev/null
+++ b/TAO/tests/BiDirectional_DelayedUpcall/client.cpp
@@ -0,0 +1,173 @@
+// $Id$
+
+#include "ace/Get_Opt.h"
+#include "test_i.h"
+#include "ace/High_Res_Timer.h"
+#include "tao/BiDir_GIOP/BiDirGIOP.h"
+#include "tao/AnyTypeCode/Any.h"
+
+ACE_RCSID(BiDirectional, client, "$Id$")
+
+const char *ior = "file://test.ior";
+
+void do_nothing (void)
+{
+}
+
+int
+parse_args (int argc, char *argv[])
+{
+ ACE_Get_Opt get_opts (argc, argv, "k:");
+ int c;
+
+ while ((c = get_opts ()) != -1)
+ switch (c)
+ {
+ case 'k':
+ ior = get_opts.opt_arg ();
+ break;
+
+ case '?':
+ default:
+ ACE_ERROR_RETURN ((LM_ERROR,
+ "usage: %s "
+ "-k <ior> "
+ "\n",
+ argv [0]),
+ -1);
+ }
+ // Indicates sucessful parsing of the command line
+ return 0;
+}
+
+int
+main (int argc, char *argv[])
+{
+ 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;
+
+ // Policies for the childPOA to be created.
+ CORBA::PolicyList policies (1);
+ policies.length (1);
+
+ CORBA::Any pol;
+ pol <<= BiDirPolicy::BOTH;
+ policies[0] =
+ orb->create_policy (BiDirPolicy::BIDIRECTIONAL_POLICY_TYPE,
+ pol
+ ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ // Create POA as child of RootPOA with the above policies. This POA
+ // will receive request in the same connection in which it sent
+ // the request
+ PortableServer::POA_var child_poa =
+ root_poa->create_POA ("childPOA",
+ poa_manager.in (),
+ policies
+ ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ // Creation of childPOA is over. Destroy the Policy objects.
+ for (CORBA::ULong i = 0;
+ i < policies.length ();
+ ++i)
+ {
+ policies[i]->destroy (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+ }
+
+ poa_manager->activate (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;
+
+ Simple_Server_var server =
+ Simple_Server::_narrow (object.in () ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ if (CORBA::is_nil (server.in ()))
+ {
+ ACE_ERROR_RETURN ((LM_ERROR,
+ "Object reference <%s> is nil\n",
+ ior),
+ 1);
+ }
+
+ Callback_i *callback_impl = 0;
+ ACE_NEW_THROW_EX (callback_impl,
+ Callback_i (orb.in ()),
+ CORBA::NO_MEMORY ());
+
+ PortableServer::ServantBase_var owner_transfer(callback_impl);
+
+ Callback_var callback =
+ callback_impl->_this (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ // Send the calback object to the server
+ server->callback_object (callback.in ()
+ ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ // Call the client that will make remote calls to us again, but
+ // not directly, but delayed for a second or so.
+ CORBA::Long r =
+ server->test_method (1 ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ if (r != 0)
+ {
+ ACE_DEBUG ((LM_DEBUG,
+ "(%P|%t) unexpected result = %d ",
+ r));
+ }
+
+ // Run now the ORB for 5 seconds
+ ACE_Time_Value run_time (5);
+ orb->run (run_time ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ // Shutdown the server
+ server->shutdown (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ root_poa->destroy (1, 1 ACE_ENV_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/tests/BiDirectional_DelayedUpcall/run_test.pl b/TAO/tests/BiDirectional_DelayedUpcall/run_test.pl
new file mode 100755
index 00000000000..ee4c91cce64
--- /dev/null
+++ b/TAO/tests/BiDirectional_DelayedUpcall/run_test.pl
@@ -0,0 +1,48 @@
+eval '(exit $?0)' && eval 'exec perl -S $0 ${1+"$@"}'
+ & eval 'exec perl -S $0 $argv:q'
+ if 0;
+
+# $Id$
+# -*- perl -*-
+
+use lib '../../../bin';
+use PerlACE::Run_Test;
+
+$status = 0;
+$iorfile = PerlACE::LocalFile ("test.ior");
+
+unlink $iorfile;
+
+if (PerlACE::is_vxworks_test()) {
+ $SV = new PerlACE::ProcessVX ("server", "-o test.ior -i 100");
+}
+else {
+ $SV = new PerlACE::Process ("server", "-o $iorfile -i 100");
+}
+$CL = new PerlACE::Process ("client", "-k file://$iorfile");
+
+$SV->Spawn ();
+
+if (PerlACE::waitforfile_timed ($iorfile, $PerlACE::wait_interval_for_process_creation) == -1) {
+ print STDERR "ERROR: cannot find file <$iorfile>\n";
+ $SV->Kill ();
+ exit 1;
+}
+
+$client = $CL->SpawnWaitKill (20);
+
+if ($client != 0) {
+ print STDERR "ERROR: client returned $client\n";
+ $status = 1;
+}
+
+$server = $SV->WaitKill (20);
+
+if ($server != 0) {
+ print STDERR "ERROR: server returned $server\n";
+ $status = 1;
+}
+
+unlink $iorfile;
+
+exit $status;
diff --git a/TAO/tests/BiDirectional_DelayedUpcall/server.cpp b/TAO/tests/BiDirectional_DelayedUpcall/server.cpp
new file mode 100644
index 00000000000..ef4c284f576
--- /dev/null
+++ b/TAO/tests/BiDirectional_DelayedUpcall/server.cpp
@@ -0,0 +1,164 @@
+// $Id$
+
+#include "ace/Get_Opt.h"
+#include "test_i.h"
+#include "tao/BiDir_GIOP/BiDirGIOP.h"
+#include "tao/AnyTypeCode/Any.h"
+#include "ace/OS_NS_stdio.h"
+
+ACE_RCSID(BiDirectional, server, "$Id$")
+
+const char *ior_output_file = 0;
+int no_iterations = 10;
+
+int
+parse_args (int argc, char *argv[])
+{
+ ACE_Get_Opt get_opts (argc, argv, "o:i:");
+ int c;
+
+ while ((c = get_opts ()) != -1)
+ switch (c)
+ {
+ case 'o':
+ ior_output_file = get_opts.opt_arg ();
+ break;
+ case 'i':
+ no_iterations = ACE_OS::atoi (get_opts.opt_arg ());
+ break;
+ case '?':
+ default:
+ ACE_ERROR_RETURN ((LM_ERROR,
+ "usage: %s "
+ "-o <iorfile>"
+ "-i <no_iterations>"
+ "\n",
+ argv [0]),
+ -1);
+ }
+ // Indicates sucessful parsing of the command line
+ return 0;
+}
+
+int
+main (int argc, char *argv[])
+{
+ 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;
+
+ // Policies for the childPOA to be created.
+ CORBA::PolicyList policies (1);
+ policies.length (1);
+
+ CORBA::Any pol;
+ pol <<= BiDirPolicy::BOTH;
+ policies[0] =
+ orb->create_policy (BiDirPolicy::BIDIRECTIONAL_POLICY_TYPE,
+ pol
+ ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ // Create POA as child of RootPOA with the above policies. This POA
+ // will receive request in the same connection in which it sent
+ // the request
+ PortableServer::POA_var child_poa =
+ root_poa->create_POA ("childPOA",
+ poa_manager.in (),
+ policies
+ ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ // Creation of childPOA is over. Destroy the Policy objects.
+ for (CORBA::ULong i = 0;
+ i < policies.length ();
+ ++i)
+ {
+ policies[i]->destroy (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+ }
+
+ poa_manager->activate (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ if (parse_args (argc, argv) != 0)
+ return 1;
+
+ Simple_Server_i *server_impl = 0;
+
+ ACE_NEW_THROW_EX (server_impl,
+ Simple_Server_i (orb.in (),
+ no_iterations),
+ CORBA::NO_MEMORY ());
+
+ PortableServer::ServantBase_var owner_transfer (server_impl);
+ PortableServer::ObjectId_var id =
+ PortableServer::string_to_ObjectId ("simple_server");
+
+ child_poa->activate_object_with_id (id.in (),
+ server_impl
+ ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ CORBA::Object_var obj =
+ child_poa->id_to_reference (id.in ()
+ ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ CORBA::String_var ior =
+ orb->object_to_string (obj.in () ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ ACE_DEBUG ((LM_DEBUG, "Activated as <%s>\n", ior.in ()));
+
+ // If the ior_output_file exists, output the ior to it
+ if (ior_output_file != 0)
+ {
+ 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);
+ }
+
+ // Run the event loop
+ orb->run (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ ACE_DEBUG ((LM_DEBUG, "event loop finished\n"));
+
+ root_poa->destroy (1, 1 ACE_ENV_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/tests/BiDirectional_DelayedUpcall/test.idl b/TAO/tests/BiDirectional_DelayedUpcall/test.idl
new file mode 100644
index 00000000000..47ede657b9a
--- /dev/null
+++ b/TAO/tests/BiDirectional_DelayedUpcall/test.idl
@@ -0,0 +1,27 @@
+//
+// $Id$
+//
+
+interface Callback
+{
+ oneway void shutdown ();
+ // A safe way to shutdown the client, using either clean shutdowns
+ // or "catastrophic failures".
+
+ void callback_method ();
+ // A simple remote call
+
+};
+
+interface Simple_Server
+{
+ long test_method (in boolean do_callback);
+ // Just call a method on the server,
+
+ void callback_object (in Callback cb);
+ // send the callback object to the server
+
+ oneway void shutdown ();
+ // A safe way to shutdown the server, it is a oneway function so we
+ // will never get a COMM_FAILURE error
+};
diff --git a/TAO/tests/BiDirectional_DelayedUpcall/test_i.cpp b/TAO/tests/BiDirectional_DelayedUpcall/test_i.cpp
new file mode 100644
index 00000000000..fceb705f1cc
--- /dev/null
+++ b/TAO/tests/BiDirectional_DelayedUpcall/test_i.cpp
@@ -0,0 +1,106 @@
+// $Id$
+
+#include "test_i.h"
+#include "tao/ORB_Core.h"
+#include "tao/debug.h"
+#include "tao/Transport_Cache_Manager.h"
+#include "tao/Thread_Lane_Resources.h"
+#include "ace/Reactor.h"
+
+#if !defined(__ACE_INLINE__)
+#include "test_i.i"
+#endif /* __ACE_INLINE__ */
+
+ACE_RCSID(BiDirectional_NestedUpcall, test_i, "$Id$")
+
+void
+Callback_i::shutdown (ACE_ENV_SINGLE_ARG_DECL)
+ ACE_THROW_SPEC ((CORBA::SystemException))
+{
+ ACE_DEBUG ((LM_DEBUG, "Performing clean shutdown\n"));
+ this->orb_->shutdown (0 ACE_ENV_ARG_PARAMETER);
+}
+
+void
+Callback_i::callback_method (ACE_ENV_SINGLE_ARG_DECL_NOT_USED)
+ ACE_THROW_SPEC ((CORBA::SystemException))
+{
+ if (TAO_debug_level > 0)
+ ACE_DEBUG ((LM_DEBUG, "Callback method called \n"));
+}
+
+
+// ****************************************************************
+
+int
+Simple_Server_i::handle_timeout (const ACE_Time_Value &,
+ const void *)
+{
+ if (TAO_debug_level > 0)
+ ACE_DEBUG ((LM_DEBUG,
+ ACE_TEXT ("About to make a remote call in the Upcall \n")));
+
+ for (int times = 0;
+ times < this->no_iterations_;
+ ++times)
+ {
+ this->callback_->callback_method (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK_RETURN (0);
+
+ if (this->orb_->orb_core ()->lane_resources ().transport_cache ().current_size () > 1)
+ {
+ ACE_ERROR ((LM_ERROR,
+ "(%P|%t) The cache has grown, aborting ..\n"));
+
+ ACE_OS::abort ();
+ }
+ }
+
+ this->callback_->shutdown (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK_RETURN (0);
+
+ return 0;
+}
+
+CORBA::Long
+Simple_Server_i::test_method (CORBA::Boolean do_callback
+ ACE_ENV_ARG_DECL)
+ ACE_THROW_SPEC ((CORBA::SystemException))
+{
+ if (do_callback)
+ {
+ // Scheduling ourselves for doing the callbacks
+ if (TAO_debug_level > 0)
+ ACE_DEBUG ((LM_DEBUG,
+ ACE_TEXT ("Scheduling for callback\n")));
+
+ if (this->orb_->orb_core ()->reactor ()->schedule_timer (this,
+ 0,
+ ACE_Time_Value (1)) == -1)
+ {
+ ACE_ERROR ((LM_ERROR,
+ "(%P|%t) Can't schedule timers, aborting ..\n"));
+
+ ACE_OS::abort ();
+ }
+ }
+
+ return 0;
+}
+
+void
+Simple_Server_i::callback_object (Callback_ptr callback
+ ACE_ENV_ARG_DECL_NOT_USED )
+ ACE_THROW_SPEC ((CORBA::SystemException))
+{
+ // Store the callback object
+ this->callback_ = Callback::_duplicate (callback);
+}
+
+
+void
+Simple_Server_i::shutdown (ACE_ENV_SINGLE_ARG_DECL)
+ ACE_THROW_SPEC ((CORBA::SystemException))
+{
+ this->orb_->shutdown (false ACE_ENV_ARG_PARAMETER);
+}
diff --git a/TAO/tests/BiDirectional_DelayedUpcall/test_i.h b/TAO/tests/BiDirectional_DelayedUpcall/test_i.h
new file mode 100644
index 00000000000..c09b83fe688
--- /dev/null
+++ b/TAO/tests/BiDirectional_DelayedUpcall/test_i.h
@@ -0,0 +1,93 @@
+// $Id$
+
+// ============================================================================
+//
+// = LIBRARY
+// TAO/tests/BiDirectional
+//
+// = FILENAME
+// test_i.h
+//
+// = AUTHOR
+// Balachandran Natarajan <bala@cs.wustl.edu>
+//
+// ============================================================================
+
+#ifndef TAO_BIDIRECTIONAL_TEST_I_H
+#define TAO_BIDIRECTIONAL_TEST_I_H
+
+#include "testS.h"
+#include "ace/Event_Handler.h"
+
+class Callback_i : public virtual POA_Callback
+{
+ // = TITLE
+ // A callback object to the "client"
+ //
+ // = DESCRIPTION
+ // To test that the server can call the client on the same
+ // connection that was established by the client
+ //
+public:
+ Callback_i (CORBA::ORB_ptr orb);
+ // ctor
+
+ void shutdown (ACE_ENV_SINGLE_ARG_DECL)
+ ACE_THROW_SPEC ((CORBA::SystemException));
+ // Safe way to shutdown
+
+ void callback_method (ACE_ENV_SINGLE_ARG_DECL)
+ ACE_THROW_SPEC ((CORBA::SystemException));
+ // The callback method
+
+private:
+ CORBA::ORB_var orb_;
+ // The orb
+};
+
+class Simple_Server_i : public virtual POA_Simple_Server, ACE_Event_Handler
+{
+ // = TITLE
+ // Simpler Server implementation
+ //
+ // = DESCRIPTION
+ // Implements the Simple_Server interface in test.idl
+ //
+public:
+ Simple_Server_i (CORBA::ORB_ptr orb, int no_iterations);
+ // ctor
+
+ // = The Simple_Server methods.
+ CORBA::Long test_method (CORBA::Boolean do_callback
+ ACE_ENV_ARG_DECL_NOT_USED)
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+ void callback_object (Callback_ptr callback
+ ACE_ENV_ARG_DECL_NOT_USED)
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+ void shutdown (ACE_ENV_SINGLE_ARG_DECL_NOT_USED)
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+ virtual int handle_timeout (const ACE_Time_Value &current_time,
+ const void *act = 0);
+
+private:
+ CORBA::ORB_var orb_;
+ // The ORB
+
+ int flag_;
+ // Flag to indicate, whether we are ready for a remote call.
+
+ Callback_var callback_;
+ // Callback Object
+
+ int no_iterations_;
+ // Number of times the callback needs to be called
+};
+
+#if defined(__ACE_INLINE__)
+#include "test_i.i"
+#endif /* __ACE_INLINE__ */
+
+#endif /* TAO_BIDIRECTIONAL_TEST_I_H */
diff --git a/TAO/tests/BiDirectional_DelayedUpcall/test_i.i b/TAO/tests/BiDirectional_DelayedUpcall/test_i.i
new file mode 100644
index 00000000000..799be9fdcbe
--- /dev/null
+++ b/TAO/tests/BiDirectional_DelayedUpcall/test_i.i
@@ -0,0 +1,17 @@
+// $Id$
+
+ACE_INLINE
+Callback_i::Callback_i (CORBA::ORB_ptr orb)
+ : orb_ (CORBA::ORB::_duplicate (orb))
+{
+}
+
+ACE_INLINE
+Simple_Server_i::Simple_Server_i (CORBA::ORB_ptr orb,
+ int no_iterations)
+ : orb_ (CORBA::ORB::_duplicate (orb)),
+ flag_ (0),
+ callback_ (0),
+ no_iterations_ (no_iterations)
+{
+}
diff --git a/TAO/tests/Bug_1482_Regression/Bug_1482_Regression.mpc b/TAO/tests/Bug_1482_Regression/Bug_1482_Regression.mpc
new file mode 100644
index 00000000000..26363b5c9bc
--- /dev/null
+++ b/TAO/tests/Bug_1482_Regression/Bug_1482_Regression.mpc
@@ -0,0 +1,20 @@
+// -*- MPC -*-
+// $Id$
+
+project(*Server): taoserver, amh, ami, iortable, portableserver {
+ Source_Files {
+ Hello.cpp
+ Server_Task.cpp
+ server.cpp
+ }
+}
+
+project(*Client): taoserver, amh, ami {
+ exename = client
+ after += *Server
+ Source_Files {
+ Client_Task.cpp
+ Reply_Handler.cpp
+ client.cpp
+ }
+}
diff --git a/TAO/tests/Bug_1551_Regression/Bug_1551_Regression.mpc b/TAO/tests/Bug_1551_Regression/Bug_1551_Regression.mpc
new file mode 100644
index 00000000000..96a4dfabd63
--- /dev/null
+++ b/TAO/tests/Bug_1551_Regression/Bug_1551_Regression.mpc
@@ -0,0 +1,20 @@
+// -*- MPC -*-
+// $Id$
+
+project(*Server): taoserver, ami, iortable {
+ Source_Files {
+ Hello.cpp
+ Server_Task.cpp
+ server.cpp
+ }
+}
+
+project(*Client): taoserver, ami {
+ exename = client
+ after += *Server
+ Source_Files {
+ Client_Task.cpp
+ Reply_Handler.cpp
+ client.cpp
+ }
+}
diff --git a/TAO/tests/Bug_1627_Regression/Bug_1627_Regression.mpc b/TAO/tests/Bug_1627_Regression/Bug_1627_Regression.mpc
new file mode 100644
index 00000000000..93a6bb0d168
--- /dev/null
+++ b/TAO/tests/Bug_1627_Regression/Bug_1627_Regression.mpc
@@ -0,0 +1,17 @@
+// -*- MPC -*-
+// $Id$
+
+project(*Server): taoserver, iortable {
+ Source_Files {
+ Test_i.cpp
+ server.cpp
+ }
+}
+
+project(*Client): taoclient, anytypecode {
+ after += *Server
+ Source_Files {
+ TestC.cpp
+ client.cpp
+ }
+}
diff --git a/TAO/tests/Bug_1869_Regression/AMI.idl b/TAO/tests/Bug_1869_Regression/AMI.idl
new file mode 100644
index 00000000000..d0c2a9eb238
--- /dev/null
+++ b/TAO/tests/Bug_1869_Regression/AMI.idl
@@ -0,0 +1,7 @@
+// $Id$
+
+module AMI_test {
+ interface adder {
+ long add(in long a, in long b);
+ };
+};
diff --git a/TAO/tests/Bug_1869_Regression/Bug_1869_Regression.mpc b/TAO/tests/Bug_1869_Regression/Bug_1869_Regression.mpc
new file mode 100644
index 00000000000..15f79878b23
--- /dev/null
+++ b/TAO/tests/Bug_1869_Regression/Bug_1869_Regression.mpc
@@ -0,0 +1,14 @@
+// -*- MPC -*-
+// $Id$
+
+project(*Server): taoserver, iortable, ami, exceptions {
+ Source_Files {
+ server.cpp
+ }
+}
+
+project(*Client): taoclient, ami, exceptions {
+ Source_Files {
+ client.cpp
+ }
+}
diff --git a/TAO/tests/Bug_1869_Regression/client.cpp b/TAO/tests/Bug_1869_Regression/client.cpp
new file mode 100644
index 00000000000..b34fc2fa70c
--- /dev/null
+++ b/TAO/tests/Bug_1869_Regression/client.cpp
@@ -0,0 +1,93 @@
+// $Id$
+
+#include "AMIS.h"
+#include "ace/Task.h"
+#include "ace/OS_NS_unistd.h"
+
+class AdderCallback
+ : public POA_AMI_test::AMI_adderHandler,
+ public ACE_Task_Base {
+
+ public:
+ AdderCallback(CORBA::ORB_ptr orb)
+ : orb(CORBA::ORB::_duplicate(orb)) {
+ activate();
+ }
+
+ virtual void add (
+ CORBA::Long ami_return_val
+ )
+ ACE_THROW_SPEC ((
+ CORBA::SystemException
+ ))
+ {
+ ACE_DEBUG ((LM_DEBUG, "Return value: %d\n", ami_return_val));
+ }
+
+ virtual void add_excep (
+ ::Messaging::ExceptionHolder *
+ )
+ ACE_THROW_SPEC ((
+ CORBA::SystemException
+ ))
+ {
+ ACE_DEBUG ((LM_DEBUG, "Caught exception in _excep\n"));
+ }
+
+ virtual int svc() {
+ orb->run();
+
+ return 0;
+ }
+
+ CORBA::ORB_var orb;
+
+};
+
+int main (int argc, char* argv[]) {
+
+ try {
+
+ CORBA::ORB_var orb = CORBA::ORB_init (argc, argv);
+
+ // Get reference to Root POA
+ CORBA::Object_var obj
+ = orb->resolve_initial_references ("RootPOA");
+
+ PortableServer::POA_var rootPOA = PortableServer::POA::_narrow (obj.in ());
+
+ // Activate POA manager
+ PortableServer::POAManager_var mgr
+ = rootPOA->the_POAManager ();
+
+ mgr->activate();
+
+ // Resolve Adder Reference
+ obj = orb->string_to_object("corbaloc:iiop:127.0.0.1:4711/Adder");
+ AMI_test::adder_var adder = AMI_test::adder::_narrow(obj.in ());
+
+ AdderCallback cb_servant(orb.in ());
+
+ while(true) {
+ try
+ {
+ adder->sendc_add(cb_servant._this(), 3, 2);
+ }
+ catch(...)
+ {
+ ACE_ERROR ((LM_ERROR, "ERROR: Caught exception after sendc_add\n"));
+ }
+ ACE_OS::sleep (1);
+ }
+ }
+ catch(...)
+ {
+ ACE_ERROR ((LM_ERROR, "ERROR: Caught exception in main\n"));
+ return 1;
+ }
+
+ return 0;
+}
+
+
+
diff --git a/TAO/tests/Bug_1869_Regression/run_test.pl b/TAO/tests/Bug_1869_Regression/run_test.pl
new file mode 100644
index 00000000000..2a6eb183455
--- /dev/null
+++ b/TAO/tests/Bug_1869_Regression/run_test.pl
@@ -0,0 +1,40 @@
+eval '(exit $?0)' && eval 'exec perl -S $0 ${1+"$@"}'
+ & eval 'exec perl -S $0 $argv:q'
+ if 0;
+
+# $Id$
+# -*- perl -*-
+
+use lib '../../../bin';
+use PerlACE::Run_Test;
+
+if (PerlACE::is_vxworks_test()) {
+ $SV = new PerlACE::ProcessVX ("server", "-ORBEndpoint iiop://127.0.0.1:4711");
+}
+else {
+ $SV = new PerlACE::Process ("server", "-ORBEndpoint iiop://127.0.0.1:4711");
+}
+$CL = new PerlACE::Process ("client", "");
+
+$SV->Spawn ();
+
+$client = $CL->Spawn (300);
+
+if ($client != 0) {
+ print STDERR "ERROR: client returned $client\n";
+ $status = 1;
+}
+
+sleep (5);
+
+print STDERR "Kill server\n";
+$server = $SV->Kill ();
+
+sleep (5);
+
+print STDERR "Restart server\n";
+$SV->Spawn ();
+
+sleep (30);
+
+exit $status;
diff --git a/TAO/tests/Bug_1869_Regression/server.cpp b/TAO/tests/Bug_1869_Regression/server.cpp
new file mode 100644
index 00000000000..6b741d07984
--- /dev/null
+++ b/TAO/tests/Bug_1869_Regression/server.cpp
@@ -0,0 +1,87 @@
+// $Id$
+
+#include "AMIS.h"
+#include "tao/IORTable/IORTable.h"
+
+class AdderServant :
+ public POA_AMI_test::adder {
+
+public:
+ AdderServant (void) {}
+
+ virtual ~AdderServant (void) {}
+
+ virtual
+ CORBA::Long add (
+ CORBA::Long a,
+ CORBA::Long b
+ )
+ ACE_THROW_SPEC ((
+ CORBA::SystemException
+ )) {
+ return a + b;
+ }
+};
+
+
+int main (int argc, char* argv[]) {
+
+ try {
+ CORBA::ORB_var orb = CORBA::ORB_init (argc, argv);
+
+ // Get reference to Root POA
+ CORBA::Object_var obj
+ = orb->resolve_initial_references ("RootPOA");
+
+ PortableServer::POA_var rootPOA = PortableServer::POA::_narrow (obj.in ());
+
+ // Activate POA manager
+ PortableServer::POAManager_var mgr
+ = rootPOA->the_POAManager ();
+
+ mgr->activate();
+
+ // Create Persistent Lifespan Policy and User Id Policy
+ PortableServer::LifespanPolicy_var lifespan =
+ rootPOA->create_lifespan_policy(PortableServer::PERSISTENT);
+ PortableServer::IdAssignmentPolicy_var idassignment =
+ rootPOA->create_id_assignment_policy(PortableServer::USER_ID);
+
+ // Stuff them into a policy list
+ CORBA::PolicyList policies(2);
+ policies.length(2);
+ policies[0] = PortableServer::IdAssignmentPolicy::_duplicate(idassignment.in());
+ policies[1] = PortableServer::LifespanPolicy::_duplicate(lifespan.in());
+
+ // Create the Child POA
+ PortableServer::POA_var persistentPOA =
+ rootPOA->create_POA("persistentPOA", mgr.in(), policies);
+
+ // Policies are no longer needed
+ idassignment->destroy();
+ lifespan->destroy();
+
+ AdderServant servant;
+
+ // Create an id
+ PortableServer::ObjectId_var oid =
+ PortableServer::string_to_ObjectId("Adder");
+
+ // Activate the object (with id)
+ persistentPOA->activate_object_with_id(oid.in(), & servant);
+
+ CORBA::Object_var ref = persistentPOA->id_to_reference(oid.in());
+ CORBA::String_var iors = orb->object_to_string(ref.in());
+
+ CORBA::Object_var tobj = orb->resolve_initial_references("IORTable");
+ IORTable::Table_var table = IORTable::Table::_narrow(tobj.in());
+ table->bind("Adder", iors.in ());
+
+ orb->run();
+ } catch (...) {
+ ACE_ERROR ((LM_ERROR, "ERROR: Caught exception in server"));
+ return 1;
+ }
+ return 0;
+}
+
diff --git a/TAO/tests/Bug_2084_Regression/Bug_2084_Regression.mpc b/TAO/tests/Bug_2084_Regression/Bug_2084_Regression.mpc
new file mode 100644
index 00000000000..b4263adaa64
--- /dev/null
+++ b/TAO/tests/Bug_2084_Regression/Bug_2084_Regression.mpc
@@ -0,0 +1,6 @@
+// -*- MPC -*-
+// $Id$
+
+project(*Server): taoserver {
+ exename = server
+}
diff --git a/TAO/tests/Bug_2084_Regression/Client_Task.cpp b/TAO/tests/Bug_2084_Regression/Client_Task.cpp
new file mode 100644
index 00000000000..1bf4dbf8ace
--- /dev/null
+++ b/TAO/tests/Bug_2084_Regression/Client_Task.cpp
@@ -0,0 +1,100 @@
+//
+// $Id$
+//
+
+#include "Client_Task.h"
+#include "TestC.h"
+#include "Hello.h"
+#include "tao/ORB_Core.h"
+#include "tao/PortableServer/PortableServer.h"
+
+ACE_RCSID(Bug_2084_Regression,
+ Client_Task,
+ "$Id$")
+
+Client_Task::Client_Task (const char *ior,
+ CORBA::ORB_ptr corb,
+ ACE_Thread_Manager *thr_mgr)
+ : ACE_Task_Base (thr_mgr)
+ , input_ (ior)
+ , corb_ (CORBA::ORB::_duplicate (corb))
+
+{
+}
+
+int
+Client_Task::svc (void)
+{
+ ACE_TRY_NEW_ENV
+ {
+ CORBA::Object_var poa_object =
+ this->corb_->resolve_initial_references("RootPOA"
+ ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ PortableServer::POA_var root_poa =
+ PortableServer::POA::_narrow (poa_object.in ()
+ ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ if (CORBA::is_nil (root_poa.in ()))
+ ACE_ERROR_RETURN ((LM_ERROR,
+ " (%P|%t) Panic: nil RootPOA\n"),
+ 1);
+
+ PortableServer::POAManager_var poa_manager =
+ root_poa->the_POAManager (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ Hello *hello_impl = 0;
+ ACE_NEW_RETURN (hello_impl,
+ Hello (this->corb_.in (),
+ ACE_Thread::self ()),
+ 1);
+
+ PortableServer::ServantBase_var owner_transfer(hello_impl);
+
+ Test::Hello_var hello_servant = hello_impl->_this (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+ poa_manager->activate (ACE_ENV_SINGLE_ARG_PARAMETER);
+
+ ACE_DEBUG((LM_DEBUG,"Client (%t) optimize_collocation_objects=%d use_global_collocation=%d\n",
+ corb_->orb_core()->optimize_collocation_objects(),
+ corb_->orb_core()->use_global_collocation ()));
+
+ CORBA::Object_var tmp =
+ this->corb_->string_to_object (input_
+ ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ Test::EventNode_var evNode=
+ Test::EventNode::_narrow(tmp.in () ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ if (CORBA::is_nil (evNode.in ()))
+ {
+ ACE_ERROR_RETURN ((LM_DEBUG,
+ "Nil Test::EventNode reference <%s>\n",
+ input_),
+ 1);
+ }
+
+ ACE_DEBUG ((LM_DEBUG, "(%P|%t) - Client starting\n"));
+
+ evNode->registerHello( hello_servant.in() ACE_ENV_ARG_PARAMETER );
+ ACE_TRY_CHECK;
+
+ evNode->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/tests/Bug_2084_Regression/Client_Task.h b/TAO/tests/Bug_2084_Regression/Client_Task.h
new file mode 100644
index 00000000000..98ea06eca46
--- /dev/null
+++ b/TAO/tests/Bug_2084_Regression/Client_Task.h
@@ -0,0 +1,37 @@
+//
+// $Id$
+//
+
+#ifndef COLLOCATED_TEST_CLIENT_TASK_H
+#define COLLOCATED_TEST_CLIENT_TASK_H
+#include /**/ "ace/pre.h"
+#include "ace/Task.h"
+
+#if !defined (ACE_LACKS_PRAGMA_ONCE)
+# pragma once
+#endif /* ACE_LACKS_PRAGMA_ONCE */
+#include "tao/ORB.h"
+
+
+/// Implement a Task to run the client as a thread
+class Client_Task : public ACE_Task_Base
+{
+public:
+
+ /// Constructor
+ Client_Task (const char *input,
+ CORBA::ORB_ptr corb,
+ ACE_Thread_Manager *thr_mgr);
+
+ /// Thread entry point
+ int svc (void);
+
+private:
+ const char *input_;
+
+ CORBA::ORB_var corb_;
+
+};
+
+#include /**/ "ace/post.h"
+#endif /* COLLOCATED_TEST_CLIENT_TASK_H */
diff --git a/TAO/tests/Bug_2084_Regression/Collocated_Test.cpp b/TAO/tests/Bug_2084_Regression/Collocated_Test.cpp
new file mode 100644
index 00000000000..a16745c918a
--- /dev/null
+++ b/TAO/tests/Bug_2084_Regression/Collocated_Test.cpp
@@ -0,0 +1,127 @@
+//$Id$
+#include "Server_Task.h"
+#include "Client_Task.h"
+#include "ace/Get_Opt.h"
+#include "ace/Argv_Type_Converter.h"
+#include "ace/SString.h"
+#include "ace/Manual_Event.h"
+#include <ace/ARGV.h>
+#include <iostream>
+
+const char *output = "test.ior";
+const char *input = "file://test.ior";
+// static int named_orbs = 0;
+ACE_CString server_orb;
+ACE_CString client_orb;
+int
+parse_args (int argc, char *argv[])
+{
+ ACE_Get_Opt get_opts (argc, argv, "k:o:n");
+ int c;
+
+ while ((c = get_opts ()) != -1)
+ switch (c)
+ {
+ case 'o':
+ output = get_opts.opt_arg ();
+ break;
+ case 'k':
+ input = get_opts.opt_arg ();
+ break;
+ case 'n':
+ // named_orbs = 1;
+ server_orb.set ("server_orb");
+ client_orb.set ("client_orb");
+ break;
+ case '?':
+ default:
+ // This is a hack but that is okay!
+ return 0;
+ }
+ // Indicates sucessful parsing of the command line
+ return 0;
+}
+
+int
+main (int argc, char *argv[])
+{
+ if (parse_args (argc,
+ argv) == -1)
+ return -1;
+
+ ACE_DECLARE_NEW_CORBA_ENV;
+ ACE_TRY
+ {
+
+ // Keep a copy of the ORB options args
+ ACE_ARGV orb_args;
+ for (int i = 1; i < argc; ++i)
+ {
+ if (orb_args.add (argv[i]) == -1)
+ return -1;
+ }
+
+ ACE_Argv_Type_Converter satc (argc, argv);
+
+ CORBA::ORB_var sorb =
+ CORBA::ORB_init (satc.get_argc (),
+ satc.get_TCHAR_argv (),
+ server_orb.c_str ()
+ ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ ACE_Manual_Event me;
+ Server_Task server_task (output,
+ sorb.in (),
+ me,
+ ACE_Thread_Manager::instance ());
+
+ if (server_task.activate (THR_NEW_LWP | THR_JOINABLE,
+ 1,
+ 1) == -1)
+ {
+ ACE_ERROR ((LM_ERROR, "Error activating server task\n"));
+ }
+
+ // Wait for the server thread to do some processing
+ me.wait ();
+
+ // This eats all orb-specific options!
+ ACE_Argv_Type_Converter catc (argc, argv);
+ CORBA::ORB_var corb =
+ CORBA::ORB_init (catc.get_argc(),
+ catc.get_TCHAR_argv(),
+ client_orb.c_str ()
+ ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ Client_Task client_task (input,
+ corb.in (),
+ ACE_Thread_Manager::instance ());
+
+ if (client_task.activate (THR_NEW_LWP | THR_JOINABLE,
+ 1,
+ 1) == -1)
+ {
+ ACE_ERROR ((LM_ERROR, "Error activating client task\n"));
+ }
+
+ // Wait for the client and server to finish
+ ACE_Thread_Manager::instance ()->wait ();
+
+ // Now that all threads have completed we can destroy the ORB
+ sorb->destroy (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+ if (server_orb != client_orb)
+ {
+ corb->destroy (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+ }
+ }
+ ACE_CATCHANY
+ {
+ // Ignore exceptions..
+ }
+ ACE_ENDTRY;
+ return 0;
+}
diff --git a/TAO/tests/Bug_2084_Regression/EventNode.cpp b/TAO/tests/Bug_2084_Regression/EventNode.cpp
new file mode 100644
index 00000000000..3ce3f1bf30e
--- /dev/null
+++ b/TAO/tests/Bug_2084_Regression/EventNode.cpp
@@ -0,0 +1,60 @@
+//
+// $Id$
+//
+#include "EventNode.h"
+#include "tao/ORB_Core.h"
+#include "tao/ORB_Table.h"
+
+ACE_RCSID(EventNode, EventNode, "$Id$")
+
+EventNode::EventNode (CORBA::ORB_ptr orb,
+ ACE_thread_t thrid)
+ : orb_ (CORBA::ORB::_duplicate (orb))
+ , thr_id_ (thrid)
+{
+}
+
+void EventNode::registerHello ( ::Test::Hello_ptr h ACE_ENV_ARG_DECL )
+ ACE_THROW_SPEC ((CORBA::SystemException))
+{
+ ACE_DEBUG ((LM_DEBUG,
+ "(%P|%t) EventNode: registerHello will call get_string...\n"));
+
+ if (ACE_Thread::self () == this->thr_id_)
+ {
+ if (this->orb_->orb_core ()->optimize_collocation_objects () &&
+ this->orb_->orb_core ()->use_global_collocation ())
+ {
+ ACE_ERROR ((LM_ERROR,
+ "(%P|%t) ERROR: A remote call has been made "
+ " exiting ..\n"));
+ ACE_OS::abort ();
+ }
+ else if (this->orb_->orb_core ()->optimize_collocation_objects () &&
+ this->orb_->orb_core ()->use_global_collocation () == 0)
+ {
+ TAO::ORB_Table * const orb_table =
+ TAO::ORB_Table::instance ();
+
+ if (orb_table->find ("server_orb") == 0)
+ {
+ // We are running on a single ORB and this is an error.
+ ACE_ERROR ((LM_ERROR,
+ "(%P|%t) ERROR: A remote call has been made "
+ " with a single ORB "
+ " exiting ..\n"));
+ ACE_OS::abort ();
+ }
+ }
+ }
+
+ CORBA::String_var str = h->get_string( (::CORBA::Long) ACE_Thread::self() );
+ ACE_DEBUG ((LM_DEBUG, "(%P|%t) - EventNode: string returned <%s>\n", str.in ()));
+}
+
+void
+EventNode::shutdown (ACE_ENV_SINGLE_ARG_DECL)
+ ACE_THROW_SPEC ((CORBA::SystemException))
+{
+ this->orb_->shutdown (0 ACE_ENV_ARG_PARAMETER);
+}
diff --git a/TAO/tests/Bug_2084_Regression/EventNode.h b/TAO/tests/Bug_2084_Regression/EventNode.h
new file mode 100644
index 00000000000..e2209a632ac
--- /dev/null
+++ b/TAO/tests/Bug_2084_Regression/EventNode.h
@@ -0,0 +1,38 @@
+//
+// $Id$
+//
+
+#ifndef EVENT_NODE_H
+#define EVENT_NODE_H
+#include /**/ "ace/pre.h"
+
+#include "TestS.h"
+
+#include "ace/OS.h"
+
+/// Implement the Test::EventNode interface
+class EventNode
+ : public virtual POA_Test::EventNode
+{
+public:
+ /// Constructor
+ EventNode (CORBA::ORB_ptr orb,
+ ACE_thread_t thr_id);
+
+ // = The skeleton methods
+ virtual void registerHello ( ::Test::Hello_ptr h 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_;
+
+ ACE_thread_t thr_id_;
+};
+
+#include /**/ "ace/post.h"
+#endif /* HELLO_H */
diff --git a/TAO/tests/Bug_2084_Regression/Hello.cpp b/TAO/tests/Bug_2084_Regression/Hello.cpp
new file mode 100644
index 00000000000..e19ff455c09
--- /dev/null
+++ b/TAO/tests/Bug_2084_Regression/Hello.cpp
@@ -0,0 +1,68 @@
+//
+// $Id$
+//
+#include "Hello.h"
+#include "tao/ORB_Core.h"
+#include "tao/ORB_Table.h"
+
+ACE_RCSID(Hello, Hello, "$Id$")
+
+ Hello::Hello (CORBA::ORB_ptr orb,
+ ACE_thread_t thrid)
+ : orb_ (CORBA::ORB::_duplicate (orb))
+ , thr_id_ (thrid)
+{
+}
+
+char *
+Hello::get_string (::CORBA::Long caller_threadid ACE_ENV_ARG_DECL)
+ ACE_THROW_SPEC ((CORBA::SystemException))
+{
+ ACE_DEBUG ((LM_DEBUG,
+ "(%P|%t) Upcall in process ..\n"));
+
+ // Use portable thread IDs
+ ACE_Thread_ID this_ID;
+ this_ID.id(this->thr_id_);
+
+ if ((::CORBA::Long)ACE_Thread::self () != caller_threadid) // this means a remote call was made
+ {
+ if (this->orb_->orb_core ()->optimize_collocation_objects () &&
+ this->orb_->orb_core ()->use_global_collocation ())
+ {
+ ACE_ERROR ((LM_ERROR,
+ "(%P|%t) ERROR: A remote call has been made "
+ " exiting ..\n"));
+ ACE_OS::abort ();
+ }
+ else if (this->orb_->orb_core ()->optimize_collocation_objects () &&
+ this->orb_->orb_core ()->use_global_collocation () == 0)
+ {
+ TAO::ORB_Table * const orb_table =
+ TAO::ORB_Table::instance ();
+
+ if (orb_table->find ("server_orb") == 0)
+ {
+ // We are running on a single ORB and this is an error.
+ ACE_ERROR ((LM_ERROR,
+ "(%P|%t) ERROR: A remote call has been made "
+ " with a single ORB "
+ " exiting ..\n"));
+ ACE_OS::abort ();
+ }
+ }
+ }
+
+ return CORBA::string_dup ("Hello there!");
+}
+
+void
+Hello::shutdown (ACE_ENV_SINGLE_ARG_DECL)
+ ACE_THROW_SPEC ((CORBA::SystemException))
+{
+ // Give the client thread time to return from the collocated
+ // call to this method before shutting down the ORB. We sleep
+ // to avoid BAD_INV_ORDER exceptions on fast dual processor machines.
+ ACE_OS::sleep (1);
+ this->orb_->shutdown (0 ACE_ENV_ARG_PARAMETER);
+}
diff --git a/TAO/tests/Bug_2084_Regression/Hello.h b/TAO/tests/Bug_2084_Regression/Hello.h
new file mode 100644
index 00000000000..30e9552d68c
--- /dev/null
+++ b/TAO/tests/Bug_2084_Regression/Hello.h
@@ -0,0 +1,38 @@
+//
+// $Id$
+//
+
+#ifndef HELLO_H
+#define HELLO_H
+#include /**/ "ace/pre.h"
+
+#include "TestS.h"
+
+#include "ace/OS.h"
+
+/// Implement the Test::Hello interface
+class Hello
+ : public virtual POA_Test::Hello
+{
+public:
+ /// Constructor
+ Hello (CORBA::ORB_ptr orb,
+ ACE_thread_t thr_id);
+
+ // = The skeleton methods
+ virtual char * get_string ( ::CORBA::Long caller_threadid 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_;
+
+ ACE_thread_t thr_id_;
+};
+
+#include /**/ "ace/post.h"
+#endif /* HELLO_H */
diff --git a/TAO/tests/Bug_2084_Regression/Server_Task.cpp b/TAO/tests/Bug_2084_Regression/Server_Task.cpp
new file mode 100644
index 00000000000..b5e9fb0ffce
--- /dev/null
+++ b/TAO/tests/Bug_2084_Regression/Server_Task.cpp
@@ -0,0 +1,102 @@
+//
+// $Id$
+//
+#include "Server_Task.h"
+#include "TestS.h"
+#include "EventNode.h"
+
+#include "ace/Manual_Event.h"
+#include "tao/ORB_Core.h"
+
+ACE_RCSID(Collocated_Test,
+ Server_Task,
+ "$Id$")
+
+
+Server_Task::Server_Task (const char *output,
+ CORBA::ORB_ptr sorb,
+ ACE_Manual_Event &me,
+ ACE_Thread_Manager *thr_mgr)
+ : ACE_Task_Base (thr_mgr)
+ , output_ (output)
+ , me_ (me)
+ , sorb_ (CORBA::ORB::_duplicate (sorb))
+{
+}
+
+int
+Server_Task::svc (void)
+{
+ ACE_TRY_NEW_ENV
+ {
+ CORBA::Object_var poa_object =
+ this->sorb_->resolve_initial_references("RootPOA"
+ ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ PortableServer::POA_var root_poa =
+ PortableServer::POA::_narrow (poa_object.in ()
+ ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ if (CORBA::is_nil (root_poa.in ()))
+ ACE_ERROR_RETURN ((LM_ERROR,
+ " (%P|%t) Panic: nil RootPOA\n"),
+ 1);
+
+ PortableServer::POAManager_var poa_manager =
+ root_poa->the_POAManager (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ EventNode *evnode_impl = new EventNode(this->sorb_.in(),ACE_Thread::self());
+ PortableServer::ServantBase_var owner_transfer(evnode_impl);
+ Test::EventNode_var evNode = evnode_impl->_this(ACE_ENV_SINGLE_ARG_PARAMETER);
+
+ ACE_DEBUG((LM_DEBUG,"Server (%t) optimize_collocation_objects=%d use_global_collocation=%d\n",
+ sorb_->orb_core()->optimize_collocation_objects(),
+ sorb_->orb_core()->use_global_collocation ()));
+
+ CORBA::String_var ior =
+ this->sorb_->object_to_string (evNode.in ()
+ ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ // Output the IOR to the <this->output_>
+ FILE *output_file= ACE_OS::fopen (this->output_,
+ "w");
+ if (output_file == 0)
+ ACE_ERROR_RETURN ((LM_ERROR,
+ "Cannot open output file for writing IOR: %s",
+ this->output_),
+ 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;
+
+ // Signal the main thread before we call orb->run ();
+ this->me_.signal ();
+
+ this->sorb_->run (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ ACE_DEBUG ((LM_DEBUG, "(%P|%t) server - event loop finished\n"));
+ }
+ ACE_CATCH (CORBA::BAD_INV_ORDER, ex)
+ {
+ // Periodically we get a bad inv order on fast machines.
+ // It's a false negative and is safe to ignore.
+ ACE_UNUSED_ARG (ex);
+ }
+ ACE_CATCHANY
+ {
+ ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION,
+ "Exception caught:");
+ return 1;
+ }
+ ACE_ENDTRY;
+
+ return 0;
+}
diff --git a/TAO/tests/Bug_2084_Regression/Server_Task.h b/TAO/tests/Bug_2084_Regression/Server_Task.h
new file mode 100644
index 00000000000..60006aae0ba
--- /dev/null
+++ b/TAO/tests/Bug_2084_Regression/Server_Task.h
@@ -0,0 +1,48 @@
+// -*- C++ -*-
+//
+// $Id$
+
+#ifndef COLLOCATED_SERVER_TASK_H
+#define COLLOCATED_SERVER_TASK_H
+
+#include /**/ "ace/pre.h"
+
+#include "ace/Task.h"
+
+#if !defined (ACE_LACKS_PRAGMA_ONCE)
+# pragma once
+#endif /* ACE_LACKS_PRAGMA_ONCE */
+
+#include "tao/ORB.h"
+
+ACE_BEGIN_VERSIONED_NAMESPACE_DECL
+class ACE_Manual_Event;
+ACE_END_VERSIONED_NAMESPACE_DECL
+
+/// Implement a Task to run the server in a single thread
+class Server_Task : public ACE_Task_Base
+{
+public:
+ /// Constructor
+ Server_Task (const char *output,
+ CORBA::ORB_ptr sorb,
+ ACE_Manual_Event &me,
+ ACE_Thread_Manager *thr_mgr);
+
+ /// Thread entry point
+ int svc (void);
+
+private:
+ /// Output file for IOR
+ const char *output_;
+
+ /// Manual event to wake up the main thread to create a client
+ /// thread.
+ ACE_Manual_Event &me_;
+
+ CORBA::ORB_var sorb_;
+};
+
+#include /**/ "ace/post.h"
+
+#endif /* COLLOCATED_SERVER_TASK_H */
diff --git a/TAO/tests/Bug_2084_Regression/Test.idl b/TAO/tests/Bug_2084_Regression/Test.idl
new file mode 100644
index 00000000000..37a1ca19b7d
--- /dev/null
+++ b/TAO/tests/Bug_2084_Regression/Test.idl
@@ -0,0 +1,27 @@
+//
+// $Id$
+//
+
+/// Put the interfaces in a module, to avoid global namespace pollution
+module Test
+{
+ /// A very simple interface
+ interface Hello
+ {
+ /// Return a simple string
+ string get_string ( in long caller_threadid );
+
+ /// A method to shutdown the ORB
+ /**
+ * This method is used to simplify the test shutdown process
+ */
+ oneway void shutdown ();
+ };
+
+ /// The server side
+ interface EventNode
+ {
+ void registerHello( in Hello h );
+ oneway void shutdown ();
+ };
+};
diff --git a/TAO/tests/Bug_2084_Regression/run_test.pl b/TAO/tests/Bug_2084_Regression/run_test.pl
new file mode 100755
index 00000000000..df9a75e42d4
--- /dev/null
+++ b/TAO/tests/Bug_2084_Regression/run_test.pl
@@ -0,0 +1,82 @@
+eval '(exit $?0)' && eval 'exec perl -S $0 ${1+"$@"}'
+ & eval 'exec perl -S $0 $argv:q'
+ if 0;
+
+# $Id$
+# -*- perl -*-
+
+use lib '../../../bin';
+use PerlACE::Run_Test;
+
+$iorfile = PerlACE::LocalFile ("test.ior");
+unlink $iorfile;
+$status = 0;
+
+if (PerlACE::is_vxworks_test()) {
+ $SV = new PerlACE::ProcessVX ("server");
+}
+else {
+ $SV = new PerlACE::Process ("server");
+}
+
+print STDERR "======== Running in Default Mode \n";
+$SV->Arguments ("-o $iorfile -k file://$iorfile");
+$sv = $SV->SpawnWaitKill (30);
+
+if ($sv != 0) {
+ print STDERR "ERROR in Collocated_Test\n";
+ $status = 1;
+}
+unlink $iorfile;
+
+print STDERR "======== Running with per-orb \n";
+$SV->Arguments ("-o $iorfile -k file://$iorfile -ORBCollocation per-orb");
+$sv = $SV->SpawnWaitKill (30);
+
+if ($sv != 0) {
+ print STDERR "ERROR in server\n";
+ $status = 1;
+}
+unlink $iorfile;
+
+print STDERR "======== Running with no collocation \n";
+$SV->Arguments ("-o $iorfile -k file://$iorfile -ORBCollocation no");
+$sv = $SV->SpawnWaitKill (30);
+
+if ($sv != 0) {
+ print STDERR "ERROR in server\n";
+ $status = 1;
+}
+unlink $iorfile;
+
+print STDERR "======== Running in default mode and two ORBS \n";
+$SV->Arguments ("-o $iorfile -k file://$iorfile -n ");
+$sv = $SV->SpawnWaitKill (30);
+
+if ($sv != 0) {
+ print STDERR "ERROR in server\n";
+ $status = 1;
+}
+unlink $iorfile;
+
+print STDERR "======== Running in per-orb mode and two ORBS \n";
+$SV->Arguments ("-o $iorfile -k file://$iorfile -n -ORBCollocation per-orb");
+$sv = $SV->SpawnWaitKill (30);
+
+if ($sv != 0) {
+ print STDERR "ERROR in server\n";
+ $status = 1;
+}
+unlink $iorfile;
+
+print STDERR "======== Running in no collocation mode and two ORBS \n";
+$SV->Arguments ("-o $iorfile -k file://$iorfile -n -ORBCollocation per-orb");
+$sv = $SV->SpawnWaitKill (30);
+
+if ($sv != 0) {
+ print STDERR "ERROR in server\n";
+ $status = 1;
+}
+unlink $iorfile;
+
+exit $status;
diff --git a/TAO/tests/Bug_2134_Regression/Bug_2134_Regression.mpc b/TAO/tests/Bug_2134_Regression/Bug_2134_Regression.mpc
new file mode 100644
index 00000000000..ed86746eeca
--- /dev/null
+++ b/TAO/tests/Bug_2134_Regression/Bug_2134_Regression.mpc
@@ -0,0 +1,10 @@
+// -*- MPC -*-
+// $Id$
+
+project (*Test) : taoserver, iortable {
+ exename = server
+ avoids += minimum_corba
+ Source_Files {
+ Hello.cpp
+ }
+}
diff --git a/TAO/tests/Bug_2134_Regression/Hello.cpp b/TAO/tests/Bug_2134_Regression/Hello.cpp
new file mode 100644
index 00000000000..53eb63216e5
--- /dev/null
+++ b/TAO/tests/Bug_2134_Regression/Hello.cpp
@@ -0,0 +1,105 @@
+// $Id$
+
+#include "tao/corba.h"
+#include "tao/IORTable/IORTable.h"
+#include "ace/OS_NS_string.h"
+#include "ace/SString.h"
+
+#include "HelloS.h"
+
+namespace Test
+{
+class Hello_impl: virtual public POA_Test::Hello
+{
+public:
+ void say_hello() ACE_THROW_SPEC ((CORBA::SystemException)) { };
+
+};
+}
+
+int main(int argc, char* argv[])
+{
+ CORBA::ORB_var orb = CORBA::ORB::_nil();
+
+ ACE_TRY_NEW_ENV
+ {
+ // Initialize the ORB
+ orb =
+ CORBA::ORB_init (argc, argv, "" ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ // create Hello object
+ Test::Hello_impl hello_i;
+ ACE_TRY_CHECK;
+
+ Test::Hello_var hello = hello_i._this ();
+ ACE_TRY_CHECK;
+
+ // give our object a friendly name
+ CORBA::Object_var iorTableObj =
+ orb->resolve_initial_references ("IORTable");
+ ACE_TRY_CHECK;
+
+ IORTable::Table_var iorTable
+ = IORTable::Table::_narrow (iorTableObj.in ());
+ ACE_TRY_CHECK;
+
+ CORBA::String_var ior_string = orb->object_to_string (hello.in ());
+ ACE_TRY_CHECK;
+
+ iorTable->bind("hello", ior_string.in ());
+ ACE_TRY_CHECK;
+
+ ACE_DEBUG ((LM_DEBUG, "Created binding of name 'hello' in IOR table for IOR:\n%s\n", ior_string.in ()));
+
+ // Get the root POA
+ CORBA::Object_var obj_root = orb->resolve_initial_references ("RootPOA");
+ ACE_TRY_CHECK;
+
+ PortableServer::POA_var rootPOA = PortableServer::POA::_narrow (obj_root.in ());
+ ACE_TRY_CHECK;
+
+ // Activate the POA manager
+ PortableServer::POAManager_var poaManager = rootPOA->the_POAManager ();
+ ACE_TRY_CHECK;
+
+ poaManager->activate ();
+ ACE_TRY_CHECK;
+
+ // try and access the object with its friendly name
+ ACE_CString full_corbaloc (ior_string.in (), 0, 1);
+
+ CORBA::ULong first_slash = full_corbaloc.find ("/", 0);
+
+ ACE_CString friendly_corbaloc =
+ full_corbaloc.substring (0,
+ first_slash);
+
+ friendly_corbaloc += "/hello";
+
+ ACE_DEBUG ((LM_DEBUG, "Trying to access object with object ref:\n%s\n", friendly_corbaloc.c_str ()));
+
+ CORBA::Object_var obj = orb->string_to_object (friendly_corbaloc.c_str ());
+ ACE_TRY_CHECK;
+
+ Test::Hello_var hello2 = Test::Hello::_narrow (obj.in ());
+ ACE_TRY_CHECK;
+
+ hello2->say_hello ();
+ ACE_TRY_CHECK;
+
+ ACE_DEBUG ((LM_DEBUG, "Test succeeded !!!\n"));
+
+ orb->destroy();
+ ACE_TRY_CHECK;
+ }
+ ACE_CATCHANY
+ {
+ ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION,
+ "Error - test failed - exception caught:");
+ return 1;
+ }
+ ACE_ENDTRY;
+
+ return 0;
+}
diff --git a/TAO/tests/Bug_2134_Regression/Hello.idl b/TAO/tests/Bug_2134_Regression/Hello.idl
new file mode 100644
index 00000000000..44f72bfbfbe
--- /dev/null
+++ b/TAO/tests/Bug_2134_Regression/Hello.idl
@@ -0,0 +1,7 @@
+// $Id$
+
+module Test {
+ interface Hello {
+ void say_hello();
+ };
+};
diff --git a/TAO/tests/Bug_2134_Regression/README b/TAO/tests/Bug_2134_Regression/README
new file mode 100644
index 00000000000..e8164d894ef
--- /dev/null
+++ b/TAO/tests/Bug_2134_Regression/README
@@ -0,0 +1,5 @@
+# $Id$
+
+This test checks that a collocated object ref bound into the local IOR table can be used.
+
+
diff --git a/TAO/tests/Bug_2134_Regression/run_test.pl b/TAO/tests/Bug_2134_Regression/run_test.pl
new file mode 100755
index 00000000000..a5aca85b1b0
--- /dev/null
+++ b/TAO/tests/Bug_2134_Regression/run_test.pl
@@ -0,0 +1,22 @@
+eval '(exit $?0)' && eval 'exec perl -S $0 ${1+"$@"}'
+ & eval 'exec perl -S $0 $argv:q'
+ if 0;
+
+# $Id$
+# -*- perl -*-
+
+use lib '../../../bin';
+use PerlACE::Run_Test;
+
+$status = 0;
+
+$CL = new PerlACE::Process ("server", "-ORBObjRefStyle URL");
+
+$client = $CL->SpawnWaitKill (300);
+
+if ($client != 0) {
+ print STDERR "ERROR: client returned $client\n";
+ $status = 1;
+}
+
+exit $status;
diff --git a/TAO/tests/Bug_2186_Regression/Bug_2186_Regression.mpc b/TAO/tests/Bug_2186_Regression/Bug_2186_Regression.mpc
new file mode 100644
index 00000000000..0f6d8164108
--- /dev/null
+++ b/TAO/tests/Bug_2186_Regression/Bug_2186_Regression.mpc
@@ -0,0 +1,18 @@
+// -*- MPC -*-
+// $Id$
+
+project(*Server): taoserver, strategies {
+ Source_Files {
+ Hello.cpp
+ server.cpp
+ }
+}
+
+project(*Client): taoserver, strategies {
+ exename = client
+ Source_Files {
+ Hello.cpp
+ client.cpp
+ }
+}
+
diff --git a/TAO/tests/Bug_2186_Regression/Hello.cpp b/TAO/tests/Bug_2186_Regression/Hello.cpp
new file mode 100644
index 00000000000..c45f7947354
--- /dev/null
+++ b/TAO/tests/Bug_2186_Regression/Hello.cpp
@@ -0,0 +1,45 @@
+//
+// $Id$
+//
+#include "Hello.h"
+
+ACE_RCSID(Hello, Hello, "$Id$")
+
+Hello::Hello (CORBA::ORB_ptr orb)
+ : orb_ (CORBA::ORB::_duplicate (orb))
+{
+}
+
+char *
+Hello::get_string (ACE_ENV_SINGLE_ARG_DECL_NOT_USED)
+ ACE_THROW_SPEC ((CORBA::SystemException))
+{
+ ACE_DEBUG ((LM_DEBUG, "(%P|%t) - Received call back !!!\n"));
+ return CORBA::string_dup ("Hello there!");
+}
+
+void
+Hello::shutdown (ACE_ENV_SINGLE_ARG_DECL)
+ ACE_THROW_SPEC ((CORBA::SystemException))
+{
+ this->orb_->shutdown (0 ACE_ENV_ARG_PARAMETER);
+}
+
+void
+Hello::request_callback (Test::Hello_ptr call_me ACE_ENV_ARG_DECL)
+ ACE_THROW_SPEC ((CORBA::SystemException))
+{
+ ACE_DEBUG ((LM_DEBUG, "(%P|%t) - Making call back !!!\n"));
+ ACE_TRY
+ {
+ CORBA::String_var result = call_me->get_string ();
+ }
+ ACE_CATCHANY
+ {
+ ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION,
+ "Exception attempting to callback client obj ref: \n");
+ ACE_RE_THROW;
+ }
+ ACE_ENDTRY;
+ ACE_DEBUG ((LM_DEBUG, "(%P|%t) - Call back succeeded !!!\n"));
+}
diff --git a/TAO/tests/Bug_2186_Regression/Hello.h b/TAO/tests/Bug_2186_Regression/Hello.h
new file mode 100644
index 00000000000..cf49f8dc3de
--- /dev/null
+++ b/TAO/tests/Bug_2186_Regression/Hello.h
@@ -0,0 +1,36 @@
+//
+// $Id$
+//
+
+#ifndef HELLO_H
+#define HELLO_H
+#include /**/ "ace/pre.h"
+
+#include "TestS.h"
+
+/// Implement the Test::Hello interface
+class Hello
+ : public virtual POA_Test::Hello
+{
+public:
+ /// Constructor
+ Hello (CORBA::ORB_ptr orb);
+
+ // = The skeleton methods
+ virtual char * get_string (ACE_ENV_SINGLE_ARG_DECL)
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+ virtual void shutdown (ACE_ENV_SINGLE_ARG_DECL)
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+ virtual void request_callback (Test::Hello_ptr call_me ACE_ENV_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_;
+};
+
+#include /**/ "ace/post.h"
+#endif /* HELLO_H */
diff --git a/TAO/tests/Bug_2186_Regression/README b/TAO/tests/Bug_2186_Regression/README
new file mode 100644
index 00000000000..3cd6316fe16
--- /dev/null
+++ b/TAO/tests/Bug_2186_Regression/README
@@ -0,0 +1,60 @@
+// $Id$
+
+This test is the old fave TAO/tests/Hello with some minor(ish) differences.
+
+1/ A ::request_callback method has been added that takes a Hello ref and which prompts a callback to the ::get_string method on that ref.
+2/ The server (only) uses a server.conf file which specifies the wait on read client policy (RW).
+3/ The client now hosts a transient Hello servant too.
+4/ The client calls the servers ::request_callback method passing the reference to the client servant.
+5/ The server will call the client back.
+6/ The client will exit when its ::request_callback call returns.
+
+The script runs the server as:
+
+server -ORBSvcConf server.conf
+
+And then runs the client *TWICE* as:
+
+client -ORBEndpoint iiop://:23232
+
+The regression error output looks like:
+
+[sm@beatrice Bug_2186_Regression]$ ./run_test.pl
+(1310|3077687968) - Sending client obj ref to the server and requesting a callback.
+(1309|3077687968) - Making call back !!!
+(1310|3077687968) - Received call back !!!
+(1309|3077687968) - Call back succeeded !!!
+(1310|3077687968) - Test (client) Succeeded !!!
+(1315|3077687968) - Sending client obj ref to the server and requesting a callback.
+(1309|3077687968) - Making call back !!!
+(1309|3077687968) EXCEPTION, Exception attempting to callback client obj ref:
+
+system exception, ID 'IDL:omg.org/CORBA/COMM_FAILURE:1.0'
+TAO exception, minor code = 6 (failed to recv request response; ENOENT), completed = MAYBE
+
+(1315|3077687968) - Test (client) Failed !!!
+(1315|3077687968) EXCEPTION, Exception caught:
+system exception, ID 'IDL:omg.org/CORBA/COMM_FAILURE:1.0'
+TAO exception, minor code = 6 (failed to recv request response; ENOENT), completed = MAYBE
+
+ERROR: REGRESSION - Second client spawn returned 1
+INFO: server being killed.
+
+This demonstrates that dropped connections are written to blindly even after the peer has gone when the RW policy is in effect. If the 'server' is started without the -ORBSvcConf argument then the default client connection handler is used and the test runs suceesfully.
+
+This successful output looks like:
+
+[sm@beatrice Bug_2186_Regression]$ ./run_test.pl
+(1906|3077687968) - Sending client obj ref to the server and requesting a callback.
+(1901|3077687968) - Making call back !!!
+(1906|3077687968) - Received call back !!!
+(1901|3077687968) - Call back succeeded !!!
+(1906|3077687968) - Test (client) Succeeded !!!
+(1911|3077687968) - Sending client obj ref to the server and requesting a callback.
+(1901|3077687968) - Making call back !!!
+(1911|3077687968) - Received call back !!!
+(1901|3077687968) - Call back succeeded !!!
+(1911|3077687968) - Test (client) Succeeded !!!
+INFO: server being killed.
+
+
diff --git a/TAO/tests/Bug_2186_Regression/Test.idl b/TAO/tests/Bug_2186_Regression/Test.idl
new file mode 100644
index 00000000000..0f5412c0210
--- /dev/null
+++ b/TAO/tests/Bug_2186_Regression/Test.idl
@@ -0,0 +1,22 @@
+//
+// $Id$
+//
+
+/// Put the interfaces in a module, to avoid global namespace pollution
+module Test
+{
+ /// A very simple interface
+ interface Hello
+ {
+ /// Return a simple string
+ string get_string ();
+
+ /// A method to shutdown the ORB
+ /**
+ * This method is used to simplify the test shutdown process
+ */
+ oneway void shutdown ();
+
+ void request_callback (in Hello call_me);
+ };
+};
diff --git a/TAO/tests/Bug_2186_Regression/client.cpp b/TAO/tests/Bug_2186_Regression/client.cpp
new file mode 100644
index 00000000000..ca65ab90e14
--- /dev/null
+++ b/TAO/tests/Bug_2186_Regression/client.cpp
@@ -0,0 +1,132 @@
+// $Id$
+
+#include "Hello.h"
+#include "ace/Get_Opt.h"
+#include "ace/OS_NS_stdio.h"
+
+ACE_RCSID(Hello, client, "$Id$")
+
+const char *server_ior = "file://server.ior";
+const char *ior_output_file = "client.ior";
+
+int
+parse_args (int argc, char *argv[])
+{
+ ACE_Get_Opt get_opts (argc, argv, "k:o:");
+ int c;
+
+ while ((c = get_opts ()) != -1)
+ switch (c)
+ {
+ case 'k':
+ server_ior = get_opts.opt_arg ();
+ break;
+ case 'o':
+ ior_output_file = get_opts.opt_arg ();
+ break;
+ case '?':
+ default:
+ ACE_ERROR_RETURN ((LM_ERROR,
+ "usage: %s "
+ "-k <ior> "
+ "\n",
+ argv [0]),
+ -1);
+ }
+ // Indicates sucessful parsing of the command line
+ return 0;
+}
+
+int
+main (int argc, char *argv[])
+{
+ 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 poa_object =
+ orb->resolve_initial_references("RootPOA" ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ PortableServer::POA_var root_poa =
+ PortableServer::POA::_narrow (poa_object.in () ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ if (CORBA::is_nil (root_poa.in ()))
+ ACE_ERROR_RETURN ((LM_ERROR,
+ " (%P|%t) Panic: nil RootPOA\n"),
+ 1);
+
+ PortableServer::POAManager_var poa_manager =
+ root_poa->the_POAManager (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ Hello *hello_impl;
+ ACE_NEW_RETURN (hello_impl,
+ Hello (orb.in ()),
+ 1);
+ PortableServer::ServantBase_var owner_transfer(hello_impl);
+
+ Test::Hello_var hello =
+ hello_impl->_this (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ CORBA::String_var ior =
+ orb->object_to_string (hello.in () ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ // Output the IOR to the <ior_output_file>
+ 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;
+
+ CORBA::Object_var tmp =
+ orb->string_to_object(server_ior ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ Test::Hello_var server =
+ Test::Hello::_narrow(tmp.in () ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ if (CORBA::is_nil (server.in ()))
+ {
+ ACE_ERROR_RETURN ((LM_DEBUG,
+ "Nil Test::Hello reference <%s>\n",
+ ior.in ()),
+ 1);
+ }
+
+ ACE_DEBUG ((LM_DEBUG, "(%P|%t) - Sending client obj ref to the server and requesting a callback.\n"));
+
+ server->request_callback (hello.in () ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ ACE_DEBUG ((LM_DEBUG, "(%P|%t) - Test (client) Succeeded !!!\n"));
+
+ orb->destroy (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+ }
+ ACE_CATCHANY
+ {
+ ACE_DEBUG ((LM_ERROR, "(%P|%t) - Test (client) Failed !!!\n"));
+ ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION,
+ "Exception caught:");
+ return 1;
+ }
+ ACE_ENDTRY;
+
+ return 0;
+}
diff --git a/TAO/tests/Bug_2186_Regression/run_test.pl b/TAO/tests/Bug_2186_Regression/run_test.pl
new file mode 100755
index 00000000000..e1790866584
--- /dev/null
+++ b/TAO/tests/Bug_2186_Regression/run_test.pl
@@ -0,0 +1,63 @@
+eval '(exit $?0)' && eval 'exec perl -S $0 ${1+"$@"}'
+ & eval 'exec perl -S $0 $argv:q'
+ if 0;
+
+# $Id$
+# -*- perl -*-
+
+use lib '../../../bin';
+use PerlACE::Run_Test;
+
+$status = 0;
+
+$port = PerlACE::uniqueid () + 10001;
+
+$serveriorfile = PerlACE::LocalFile ("server.ior");
+unlink $serveriorfile;
+$clientiorfile = PerlACE::LocalFile ("client.ior");
+unlink $clientiorfile;
+
+if (PerlACE::is_vxworks_test()) {
+ $SV = new PerlACE::ProcessVX ("server", "-ORBSvcConf server.conf");
+}
+else {
+ $SV = new PerlACE::Process ("server", "-ORBSvcConf server.conf");
+}
+$CL = new PerlACE::Process ("client", "-ORBEndpoint iiop://:$port");
+
+$SV->Spawn ();
+
+if (PerlACE::waitforfile_timed ($serveriorfile,
+ $PerlACE::wait_interval_for_process_creation) == -1) {
+ print STDERR "ERROR: cannot find file <$serveriorfile>\n";
+ $SV->Kill (); $SV->TimedWait (1);
+ exit 1;
+}
+
+$client = $CL->SpawnWaitKill (300);
+
+if ($client != 0) {
+ print STDERR "ERROR: First client spawn returned $client. Indicates a problem other than a regression.\n";
+ $status = 1;
+}
+
+if ($client == 0) {
+ $client = $CL->SpawnWaitKill (300);
+
+ if ($client != 0) {
+ print STDERR "ERROR: REGRESSION - Second client spawn returned $client\n";
+ $status = 1;
+ }
+}
+
+$server = $SV->TerminateWaitKill (10);
+
+if ($server != 0) {
+ print STDERR "ERROR: server returned $server\n";
+ $status = 1;
+}
+
+unlink $serveriorfile;
+unlink $clientiorfile;
+
+exit $status;
diff --git a/TAO/tests/Bug_2186_Regression/server.conf b/TAO/tests/Bug_2186_Regression/server.conf
new file mode 100644
index 00000000000..cbb2962f41d
--- /dev/null
+++ b/TAO/tests/Bug_2186_Regression/server.conf
@@ -0,0 +1,2 @@
+static Client_Strategy_Factory "-ORBClientConnectionHandler RW -ORBConnectionHandlerCleanup 1"
+
diff --git a/TAO/tests/Bug_2186_Regression/server.cpp b/TAO/tests/Bug_2186_Regression/server.cpp
new file mode 100644
index 00000000000..5c7e9180f09
--- /dev/null
+++ b/TAO/tests/Bug_2186_Regression/server.cpp
@@ -0,0 +1,115 @@
+// $Id$
+
+#include "Hello.h"
+#include "ace/Get_Opt.h"
+#include "ace/OS_NS_stdio.h"
+
+ACE_RCSID (Hello,
+ server,
+ "$Id$")
+
+const char *ior_output_file = "server.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[])
+{
+ 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;
+
+ PortableServer::POA_var root_poa =
+ PortableServer::POA::_narrow (poa_object.in () ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ if (CORBA::is_nil (root_poa.in ()))
+ ACE_ERROR_RETURN ((LM_ERROR,
+ " (%P|%t) Panic: nil RootPOA\n"),
+ 1);
+
+ 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;
+
+ Hello *hello_impl;
+ ACE_NEW_RETURN (hello_impl,
+ Hello (orb.in ()),
+ 1);
+ PortableServer::ServantBase_var owner_transfer(hello_impl);
+
+ Test::Hello_var hello =
+ hello_impl->_this (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ CORBA::String_var ior =
+ orb->object_to_string (hello.in () ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ // Output the IOR to the <ior_output_file>
+ 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/tests/Bug_2201_Regression/Bug_2201_Regression.mpc b/TAO/tests/Bug_2201_Regression/Bug_2201_Regression.mpc
new file mode 100644
index 00000000000..9130c21b40a
--- /dev/null
+++ b/TAO/tests/Bug_2201_Regression/Bug_2201_Regression.mpc
@@ -0,0 +1,9 @@
+// -*- MPC -*-
+// $Id$
+
+project(*Test): taoclient {
+ exename = test
+ Source_Files {
+ test.cpp
+ }
+}
diff --git a/TAO/tests/Bug_2201_Regression/TestData.idl b/TAO/tests/Bug_2201_Regression/TestData.idl
new file mode 100644
index 00000000000..9c205e1df77
--- /dev/null
+++ b/TAO/tests/Bug_2201_Regression/TestData.idl
@@ -0,0 +1,11 @@
+// $Id$
+
+module SeqTest {
+ typedef sequence<long> LongSeq;
+
+ struct Node {
+ LongSeq ls;
+ };
+
+ typedef sequence<Node> NodeSeq;
+};
diff --git a/TAO/tests/Bug_2201_Regression/run_test.pl b/TAO/tests/Bug_2201_Regression/run_test.pl
new file mode 100755
index 00000000000..fc3d16c5bbf
--- /dev/null
+++ b/TAO/tests/Bug_2201_Regression/run_test.pl
@@ -0,0 +1,27 @@
+eval '(exit $?0)' && eval 'exec perl -S $0 ${1+"$@"}'
+ & eval 'exec perl -S $0 $argv:q'
+ if 0;
+
+# $Id$
+# -*- perl -*-
+
+use lib '../../../bin';
+use PerlACE::Run_Test;
+
+if (PerlACE::is_vxworks_test()) {
+ $SV = new PerlACE::ProcessVX ("test", "");
+}
+else {
+ $SV = new PerlACE::Process ("test", "");
+}
+
+$SV->Spawn ();
+
+$server = $SV->WaitKill (10);
+
+if ($server != 0) {
+ print STDERR "ERROR: server returned $server\n";
+ $status = 1;
+}
+
+exit $status;
diff --git a/TAO/tests/Bug_2201_Regression/test.cpp b/TAO/tests/Bug_2201_Regression/test.cpp
new file mode 100644
index 00000000000..1508d989950
--- /dev/null
+++ b/TAO/tests/Bug_2201_Regression/test.cpp
@@ -0,0 +1,32 @@
+// $Id$
+
+#include "ace/Log_Msg.h"
+#include "TestDataC.h"
+
+int
+main (int argc, char *argv[])
+{
+ int retval = 0;
+
+ CORBA::ORB_var orb = CORBA::ORB_init (argc, argv);
+
+ SeqTest::NodeSeq ns;
+ ns.length (1);
+ ns[0].ls.length (1);
+ ns[0].ls[0] = 42;
+
+ ns.length (0); // Shrink sequence
+ ns.length (1); // Re-grow sequence; should re-initialize meber sequence
+ // "as if" default constructed. I.e., the "ls" member
+ // should have a length of zero.
+
+ if (ns[0].ls.length() == 0) {
+ ACE_DEBUG ((LM_DEBUG, "Test passed\n"));
+ }
+ else {
+ ACE_ERROR ((LM_ERROR, "Test failed\n"));
+ retval = 1;
+ }
+
+ return retval;
+}
diff --git a/TAO/tests/Bug_2289_Regression/Bug_2289_Regression.mpc b/TAO/tests/Bug_2289_Regression/Bug_2289_Regression.mpc
new file mode 100644
index 00000000000..bf8946a0384
--- /dev/null
+++ b/TAO/tests/Bug_2289_Regression/Bug_2289_Regression.mpc
@@ -0,0 +1,21 @@
+// -*- MPC -*-
+// $Id$
+
+project(*Server): taoserver, iortable {
+ exename = server
+ idlflags += -Gp -Gd -Sa -St
+ Source_Files {
+ server.cpp
+ MyInterfaceImpl.cpp
+ }
+}
+
+project(*Client): taoserver, iortable {
+ exename = client
+ idlflags += -Gp -Gd -Sa -St
+ after += *Server
+ Source_Files {
+ client.cpp
+ MyInterfaceImpl.cpp
+ }
+}
diff --git a/TAO/tests/Bug_2289_Regression/MyInterfaceImpl.cpp b/TAO/tests/Bug_2289_Regression/MyInterfaceImpl.cpp
new file mode 100644
index 00000000000..da5c2832189
--- /dev/null
+++ b/TAO/tests/Bug_2289_Regression/MyInterfaceImpl.cpp
@@ -0,0 +1,20 @@
+//
+// $Id$
+//
+
+#include "MyInterfaceImpl.h"
+
+const char*
+MyInterfaceImpl::my_string = "a string";
+
+MyInterfaceImpl::MyInterfaceImpl (CORBA::ORB_ptr orb)
+ : orb_ (CORBA::ORB::_duplicate (orb))
+{
+}
+CORBA::Boolean
+MyInterfaceImpl::myMethod (const char* mystring ACE_ENV_ARG_DECL)
+ ACE_THROW_SPEC ((CORBA::SystemException))
+{
+ return mystring == my_string;
+}
+
diff --git a/TAO/tests/Bug_2289_Regression/MyInterfaceImpl.h b/TAO/tests/Bug_2289_Regression/MyInterfaceImpl.h
new file mode 100644
index 00000000000..a7f76261396
--- /dev/null
+++ b/TAO/tests/Bug_2289_Regression/MyInterfaceImpl.h
@@ -0,0 +1,21 @@
+//
+// $Id$
+//
+
+#include "TestS.h"
+
+class MyInterfaceImpl
+ : public virtual POA_MyInterface
+{
+ public:
+ MyInterfaceImpl (CORBA::ORB_ptr orb);
+
+ static const char* my_string;
+
+ // = The skeleton methods
+ virtual CORBA::Boolean myMethod (const char* stringParam ACE_ENV_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+private:
+ CORBA::ORB_var orb_;
+};
diff --git a/TAO/tests/Bug_2289_Regression/README b/TAO/tests/Bug_2289_Regression/README
new file mode 100644
index 00000000000..0e4df56f029
--- /dev/null
+++ b/TAO/tests/Bug_2289_Regression/README
@@ -0,0 +1,26 @@
+// $Id$
+
+This test checks that collocation optimisation takes effect after a location forward is received to an in process servant.
+
+It comprises:
+1/ A trivial IDL interface (Test.idl) with a single method that passes a string and returns a boolean, this interface is implemented with a servant (MyInterfaceImpl) that returns true if the address of the string passed matches the address of a static string defined as a public member of the servant.
+2/ A server which initialises a listener and binds a file:// type IOR for the client's servant into its IORTable against a name.
+4/ A client which initialises an in process MyInterfaceImpl servant.
+
+The client uses a corbaloc based on the server's endpoint and the name that its (the client's) reference is bound against in the server IORTable.
+
+Narrowing this results in a remote is_a which causes the server ORB to send a locate_forward to the client directing it to the 'in process' servant.
+
+If the fix is present the client ORB will pass the string by reference and the addresses will be equal in the servant - if the fix is not present it will attempt to marshal and demarshal the string, the addresses will differ, causing the test to fail.
+
+__Regression Output__
+
+[sm@beatrice Bug_2289_Regression]$ ./run_test.pl
+Test failed
+ERROR: Bug #TAO135 Regression failed. Non zero result from client.
+
+__Successful Output__
+
+[sm@beatrice Bug_2289_Regression]$ ./run_test.pl
+Test succeeded
+INFO: /home/sm/doc_cvs/ACE_wrappers/TAO/tests/Bug_2289_Regression/server being killed.
diff --git a/TAO/tests/Bug_2289_Regression/Test.idl b/TAO/tests/Bug_2289_Regression/Test.idl
new file mode 100644
index 00000000000..0a599c8fbd3
--- /dev/null
+++ b/TAO/tests/Bug_2289_Regression/Test.idl
@@ -0,0 +1,8 @@
+// $Id$
+
+typedef string MyString;
+
+interface MyInterface
+{
+ boolean myMethod (in MyString stringParam);
+};
diff --git a/TAO/tests/Bug_2289_Regression/client.cpp b/TAO/tests/Bug_2289_Regression/client.cpp
new file mode 100644
index 00000000000..cb82452c574
--- /dev/null
+++ b/TAO/tests/Bug_2289_Regression/client.cpp
@@ -0,0 +1,145 @@
+//
+// $Id$
+//
+#include "TestS.h"
+#include "MyInterfaceImpl.h"
+#include "ace/Get_Opt.h"
+#include "ace/OS_NS_stdio.h"
+
+const char *server_ior = "";
+
+const char *ior_output_file = "client.ior";
+
+int
+parse_args (int argc, char *argv[])
+{
+ ACE_Get_Opt get_opts (argc, argv, "k:");
+ int c;
+
+ while ((c = get_opts ()) != -1)
+ switch (c)
+ {
+ case 'k':
+ server_ior = get_opts.opt_arg ();
+ break;
+ case 'o':
+ ior_output_file = get_opts.opt_arg ();
+ break;
+ case '?':
+ default:
+ ACE_ERROR_RETURN ((LM_ERROR,
+ "usage: %s "
+ "-k <ior> "
+ "\n",
+ argv [0]),
+ -1);
+ }
+ // Indicates sucessful parsing of the command line
+ return 0;
+}
+
+int
+main (int argc, char *argv[])
+{
+ int result = 0;
+ 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 poa_object =
+ orb->resolve_initial_references("RootPOA" ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ PortableServer::POA_var root_poa =
+ PortableServer::POA::_narrow (poa_object.in () ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ if (CORBA::is_nil (root_poa.in ()))
+ ACE_ERROR_RETURN ((LM_ERROR,
+ " (%P|%t) Panic: nil RootPOA\n"),
+ 1);
+
+ 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;
+
+ MyInterfaceImpl *test_impl;
+ ACE_NEW_RETURN (test_impl,
+ MyInterfaceImpl (orb.in ()),
+ 1);
+
+ PortableServer::ServantBase_var owner_transfer(test_impl);
+
+ MyInterface_var test_ref =
+ test_impl->_this (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ CORBA::String_var ior =
+ orb->object_to_string (test_ref.in () ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ // Output the IOR to the <ior_output_file>
+ FILE *output_file= ACE_OS::fopen (ior_output_file, "w");
+ if (output_file != 0)
+ {
+ ACE_OS::fprintf (output_file, "%s", ior.in ());
+ ACE_OS::fclose (output_file);
+ }
+
+ poa_manager->activate (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_TRY_CHECK
+
+ CORBA::Object_var tmp =
+ orb->string_to_object(server_ior ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ MyInterface_var server =
+ MyInterface::_narrow(tmp.in () ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ if (CORBA::is_nil (server.in ()))
+ {
+ ACE_ERROR_RETURN ((LM_DEBUG,
+ "Nil server reference <%s>\n",
+ ior.in()),
+ 1);
+ }
+
+
+ CORBA::Boolean temp = server->myMethod (MyInterfaceImpl::my_string ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ if (temp)
+ {
+ ACE_DEBUG ((LM_DEBUG, "Test succeeded\n"));
+ }
+ else
+ {
+ ACE_DEBUG ((LM_ERROR, "Test failed\n"));
+ result = 1;
+ }
+
+ //hello->shutdown (ACE_ENV_SINGLE_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 result;
+}
diff --git a/TAO/tests/Bug_2289_Regression/run_test.pl b/TAO/tests/Bug_2289_Regression/run_test.pl
new file mode 100755
index 00000000000..f25f0ae4f60
--- /dev/null
+++ b/TAO/tests/Bug_2289_Regression/run_test.pl
@@ -0,0 +1,60 @@
+eval '(exit $?0)' && eval 'exec perl -S $0 ${1+"$@"}'
+ & eval 'exec perl -S $0 $argv:q'
+ if 0;
+
+# $Id$
+
+# -*- perl -*-
+
+use lib '../../../bin';
+use PerlACE::Run_Test;
+
+# The server IOR file
+$server_ior_file = PerlACE::LocalFile ("server.ior");
+$client_ior_file = PerlACE::LocalFile ("client.ior");
+unlink $server_ior_file;
+unlink $client_ior_file;
+
+# The client and server processes
+if (PerlACE::is_vxworks_test()) {
+ $SERVER = new PerlACE::ProcessVX(PerlACE::LocalFile("server"));
+}
+else {
+ $SERVER = new PerlACE::Process(PerlACE::LocalFile("server"));
+}
+$CLIENT = new PerlACE::Process(PerlACE::LocalFile("client"));
+
+# We want the server to run on a fixed port
+$port = PerlACE::uniqueid () + 10001; # This can't be 10000 for Chorus 4.0
+
+$SERVER->Arguments("-ORBEndpoint iiop://:$port -ORBDottedDecimalAddresses 1");
+
+# Fire up the server
+$sv = $SERVER->Spawn();
+
+if ($sv != 0) {
+ print STDERR "ERROR: server returned $sv\n";
+ exit 1;
+}
+
+# We can wait on the IOR file
+if (PerlACE::waitforfile_timed ($server_ior_file, 10) == -1)
+{
+ print STDERR "ERROR: cannot find $server_ior_file\n";
+ $SERVER->Kill();
+ exit 1;
+}
+
+$CLIENT->Arguments("-k corbaloc::127.0.0.1:$port/collocated_ior_bound_in_remote_iortable -ORBDottedDecimalAddresses 1 -ORBCollocationStrategy thru_poa");
+if ($CLIENT->SpawnWaitKill (60) != 0)
+{
+ print STDERR "ERROR: Bug 2289 Regression failed. Non zero result from client.\n";
+ $SERVER->Kill();
+ exit 1;
+}
+
+# Clean up and return
+$SERVER->TerminateWaitKill (5);
+unlink $server_ior_file;
+unlink $client_ior_file;
+exit 0;
diff --git a/TAO/tests/Bug_2289_Regression/server.cpp b/TAO/tests/Bug_2289_Regression/server.cpp
new file mode 100644
index 00000000000..47f749d99bd
--- /dev/null
+++ b/TAO/tests/Bug_2289_Regression/server.cpp
@@ -0,0 +1,142 @@
+//
+// $Id$
+//
+
+#include "MyInterfaceImpl.h"
+#include "TestS.h"
+#include "ace/Get_Opt.h"
+#include "ace/OS_NS_stdio.h"
+#include "tao/IORTable/IORTable.h"
+
+ACE_RCSID (Hello,
+ server,
+ "server.cpp,v 1.6 2003/11/01 11:15:11 dhinton Exp")
+
+const char *ior_output_file = "server.ior";
+
+const char *client_ior = "file://client.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 'k':
+ client_ior = get_opts.opt_arg ();
+ break;
+ 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[])
+{
+ 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;
+
+ PortableServer::POA_var root_poa =
+ PortableServer::POA::_narrow (poa_object.in () ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ if (CORBA::is_nil (root_poa.in ()))
+ ACE_ERROR_RETURN ((LM_ERROR,
+ " (%P|%t) Panic: nil RootPOA\n"),
+ 1);
+
+ 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;
+
+ MyInterfaceImpl *test_impl;
+ ACE_NEW_RETURN (test_impl,
+ MyInterfaceImpl (orb.in ()),
+ 1);
+
+ PortableServer::ServantBase_var owner_transfer(test_impl);
+
+ MyInterface_var test_ref =
+ test_impl->_this (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ CORBA::String_var ior =
+ orb->object_to_string (test_ref.in () ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ // Output the IOR to the <ior_output_file>
+ FILE *output_file= ACE_OS::fopen (ior_output_file, "w");
+ if (output_file != 0)
+ {
+ ACE_OS::fprintf (output_file, "%s", ior.in ());
+ ACE_OS::fclose (output_file);
+ }
+
+ poa_manager->activate (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ CORBA::Object_var table_object =
+ orb->resolve_initial_references ("IORTable"
+ ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ IORTable::Table_var adapter =
+ IORTable::Table::_narrow (table_object.in () ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ if (CORBA::is_nil (adapter.in ()))
+ {
+ ACE_ERROR ((LM_ERROR, "Nil IORTable\n"));
+ }
+ else
+ {
+ adapter->bind ("collocated_ior_bound_in_remote_iortable", client_ior ACE_ENV_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/tests/Bug_2319_Regression/Bug_2319_Regression.mpc b/TAO/tests/Bug_2319_Regression/Bug_2319_Regression.mpc
new file mode 100644
index 00000000000..f362da7ae93
--- /dev/null
+++ b/TAO/tests/Bug_2319_Regression/Bug_2319_Regression.mpc
@@ -0,0 +1,8 @@
+// -*- MPC -*-
+// $Id$
+
+project(*server) : taoserver, amh {
+ source_files {
+ server.cpp
+ }
+}
diff --git a/TAO/tests/Bug_2319_Regression/Test.idl b/TAO/tests/Bug_2319_Regression/Test.idl
new file mode 100644
index 00000000000..ef304de303a
--- /dev/null
+++ b/TAO/tests/Bug_2319_Regression/Test.idl
@@ -0,0 +1,17 @@
+//
+// $Id$
+//
+
+/// A simple module to avoid namespace pollution
+module Test
+{
+
+ /// Use a timestamp to measure the roundtrip delay
+ typedef unsigned long long Timestamp;
+
+ /// Measure roundtrip Delay
+ interface Roundtrip
+ {
+ oneway void test_method (in Timestamp send_time);
+ };
+};
diff --git a/TAO/tests/Bug_2319_Regression/run_test.pl b/TAO/tests/Bug_2319_Regression/run_test.pl
new file mode 100755
index 00000000000..1c118935b70
--- /dev/null
+++ b/TAO/tests/Bug_2319_Regression/run_test.pl
@@ -0,0 +1,24 @@
+eval '(exit $?0)' && eval 'exec perl -S $0 ${1+"$@"}'
+ & eval 'exec perl -S $0 $argv:q'
+ if 0;
+
+# $Id$
+# -*- perl -*-
+
+# This is a Perl script that tests AMH exceptions
+
+use lib "../../../bin";
+use PerlACE::Run_Test;
+
+$AMH = new PerlACE::Process ("server", "");
+
+# Run the AMH server.
+$AMH->Spawn ();
+
+$amhserver= $AMH->WaitKill (60);
+if ($amhserver != 0) {
+ print STDERR "ERROR: AMH Server returned $amhserver\n";
+ $status = 1;
+}
+
+exit $status;
diff --git a/TAO/tests/Bug_2328_Regression/Bug_2328_Regression.mpc b/TAO/tests/Bug_2328_Regression/Bug_2328_Regression.mpc
new file mode 100644
index 00000000000..5fce9b69306
--- /dev/null
+++ b/TAO/tests/Bug_2328_Regression/Bug_2328_Regression.mpc
@@ -0,0 +1,19 @@
+// -*- MPC -*-
+// $Id$
+
+project(*Server): taoserver, codeset {
+ idlflags += -Sa -St
+ Source_Files {
+ Hello.cpp
+ server.cpp
+ }
+}
+
+project(*Client): taoclient {
+ after += *Server
+ Source_Files {
+ TestC.cpp
+ client.cpp
+ }
+}
+
diff --git a/TAO/tests/Bug_2328_Regression/Hello.cpp b/TAO/tests/Bug_2328_Regression/Hello.cpp
new file mode 100644
index 00000000000..ac4c1c6fe85
--- /dev/null
+++ b/TAO/tests/Bug_2328_Regression/Hello.cpp
@@ -0,0 +1,26 @@
+//
+// $Id$
+//
+#include "Hello.h"
+
+ACE_RCSID(Hello, Hello, "$Id$")
+
+Hello::Hello (CORBA::ORB_ptr orb)
+ : orb_ (CORBA::ORB::_duplicate (orb))
+{
+}
+
+char *
+Hello::get_string (const char * A, const char * B, const char * C)
+ ACE_THROW_SPEC ((CORBA::SystemException))
+{
+ ACE_DEBUG ((LM_DEBUG, "Received: <%s>, <%s>, <%s>\n", A, B, C));
+ return CORBA::string_dup ("Hello there!");
+}
+
+void
+Hello::shutdown (ACE_ENV_SINGLE_ARG_DECL)
+ ACE_THROW_SPEC ((CORBA::SystemException))
+{
+ this->orb_->shutdown (0 ACE_ENV_ARG_PARAMETER);
+}
diff --git a/TAO/tests/Bug_2328_Regression/Hello.h b/TAO/tests/Bug_2328_Regression/Hello.h
new file mode 100644
index 00000000000..4ef97cd1b6c
--- /dev/null
+++ b/TAO/tests/Bug_2328_Regression/Hello.h
@@ -0,0 +1,33 @@
+//
+// $Id$
+//
+
+#ifndef HELLO_H
+#define HELLO_H
+#include /**/ "ace/pre.h"
+
+#include "TestS.h"
+
+/// Implement the Test::Hello interface
+class Hello
+ : public virtual POA_Test::Hello
+{
+public:
+ /// Constructor
+ Hello (CORBA::ORB_ptr orb);
+
+ // = The skeleton methods
+ virtual char * get_string (const char * A, const char * B, const char * C 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_;
+};
+
+#include /**/ "ace/post.h"
+#endif /* HELLO_H */
diff --git a/TAO/tests/Bug_2328_Regression/README b/TAO/tests/Bug_2328_Regression/README
new file mode 100644
index 00000000000..53f14a09bed
--- /dev/null
+++ b/TAO/tests/Bug_2328_Regression/README
@@ -0,0 +1,16 @@
+/**
+
+@page Bug_2328_Regression README File
+
+This test sends 3 strings to the server. The server is using the codeset
+library, the client is configured that it doesn't use it. This gives a marshal
+exception in TAO 1.4.7 because it uses UTF8 Latin1 to demarshal the strings
+which then causes things to go wrong in the stream.
+
+ To run the test use the run_test.pl script:
+
+$ ./run_test.pl
+
+ the script returns 0 if the test was successful.
+
+*/
diff --git a/TAO/tests/Bug_2328_Regression/Test.idl b/TAO/tests/Bug_2328_Regression/Test.idl
new file mode 100644
index 00000000000..528f0c5485c
--- /dev/null
+++ b/TAO/tests/Bug_2328_Regression/Test.idl
@@ -0,0 +1,20 @@
+//
+// $Id$
+//
+
+/// Put the interfaces in a module, to avoid global namespace pollution
+module Test
+{
+ /// A very simple interface
+ interface Hello
+ {
+ /// Return a simple string
+ string get_string (in string A, in string B, in string C);
+
+ /// A method to shutdown the ORB
+ /**
+ * This method is used to simplify the test shutdown process
+ */
+ oneway void shutdown ();
+ };
+};
diff --git a/TAO/tests/Bug_2328_Regression/client.cpp b/TAO/tests/Bug_2328_Regression/client.cpp
new file mode 100644
index 00000000000..d39919e7d85
--- /dev/null
+++ b/TAO/tests/Bug_2328_Regression/client.cpp
@@ -0,0 +1,89 @@
+// $Id$
+
+#include "TestC.h"
+#include "ace/Get_Opt.h"
+
+ACE_RCSID(Hello, client, "$Id$")
+
+const char *ior = "file://test.ior";
+
+int
+parse_args (int argc, char *argv[])
+{
+ ACE_Get_Opt get_opts (argc, argv, "k:");
+ int c;
+
+ while ((c = get_opts ()) != -1)
+ switch (c)
+ {
+ case 'k':
+ ior = get_opts.opt_arg ();
+ break;
+
+ case '?':
+ default:
+ ACE_ERROR_RETURN ((LM_ERROR,
+ "usage: %s "
+ "-k <ior> "
+ "\n",
+ argv [0]),
+ -1);
+ }
+ // Indicates sucessful parsing of the command line
+ return 0;
+}
+
+int
+main (int argc, char *argv[])
+{
+ 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 tmp =
+ orb->string_to_object(ior ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ Test::Hello_var hello =
+ Test::Hello::_narrow(tmp.in () ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ if (CORBA::is_nil (hello.in ()))
+ {
+ ACE_ERROR_RETURN ((LM_DEBUG,
+ "Nil Test::Hello reference <%s>\n",
+ ior),
+ 1);
+ }
+
+ CORBA::String_var A = CORBA::string_dup ("DKWC");
+ CORBA::String_var B = CORBA::string_dup ("kwc");
+ CORBA::String_var C = CORBA::string_dup ("MV-files");
+ CORBA::String_var the_string =
+ hello->get_string (A.in (), B.in (), C.in () ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ ACE_DEBUG ((LM_DEBUG, "(%P|%t) - string returned <%s>\n",
+ the_string.in ()));
+
+ hello->shutdown (ACE_ENV_SINGLE_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/tests/Bug_2328_Regression/run_test.pl b/TAO/tests/Bug_2328_Regression/run_test.pl
new file mode 100755
index 00000000000..f5831bdb8e9
--- /dev/null
+++ b/TAO/tests/Bug_2328_Regression/run_test.pl
@@ -0,0 +1,49 @@
+eval '(exit $?0)' && eval 'exec perl -S $0 ${1+"$@"}'
+ & eval 'exec perl -S $0 $argv:q'
+ if 0;
+
+# $Id$
+# -*- perl -*-
+
+use lib '../../../bin';
+use PerlACE::Run_Test;
+
+$status = 0;
+
+$iorfile = PerlACE::LocalFile ("server.ior");
+unlink $iorfile;
+
+if (PerlACE::is_vxworks_test()) {
+ $SV = new PerlACE::ProcessVX ("server", "-o server.ior");
+}
+else {
+ $SV = new PerlACE::Process ("server", "-o $iorfile");
+}
+$CL = new PerlACE::Process ("client", " -k file://$iorfile -ORBNegotiateCodesets 0");
+
+$SV->Spawn ();
+
+if (PerlACE::waitforfile_timed ($iorfile,
+ $PerlACE::wait_interval_for_process_creation) == -1) {
+ print STDERR "ERROR: cannot find file <$iorfile>\n";
+ $SV->Kill (); $SV->TimedWait (1);
+ exit 1;
+}
+
+$client = $CL->SpawnWaitKill (300);
+
+if ($client != 0) {
+ print STDERR "ERROR: client returned $client\n";
+ $status = 1;
+}
+
+$server = $SV->WaitKill (10);
+
+if ($server != 0) {
+ print STDERR "ERROR: server returned $server\n";
+ $status = 1;
+}
+
+unlink $iorfile;
+
+exit $status;
diff --git a/TAO/tests/Bug_2328_Regression/server.cpp b/TAO/tests/Bug_2328_Regression/server.cpp
new file mode 100644
index 00000000000..69fe7692d76
--- /dev/null
+++ b/TAO/tests/Bug_2328_Regression/server.cpp
@@ -0,0 +1,116 @@
+// $Id$
+
+#include "Hello.h"
+#include "ace/Get_Opt.h"
+#include "ace/OS_NS_stdio.h"
+#include "tao/Codeset/Codeset.h"
+
+ACE_RCSID (Hello,
+ 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[])
+{
+ 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;
+
+ PortableServer::POA_var root_poa =
+ PortableServer::POA::_narrow (poa_object.in () ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ if (CORBA::is_nil (root_poa.in ()))
+ ACE_ERROR_RETURN ((LM_ERROR,
+ " (%P|%t) Panic: nil RootPOA\n"),
+ 1);
+
+ 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;
+
+ Hello *hello_impl;
+ ACE_NEW_RETURN (hello_impl,
+ Hello (orb.in ()),
+ 1);
+ PortableServer::ServantBase_var owner_transfer(hello_impl);
+
+ Test::Hello_var hello =
+ hello_impl->_this (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ CORBA::String_var ior =
+ orb->object_to_string (hello.in () ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ // Output the IOR to the <ior_output_file>
+ 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/tests/Bug_2345_Regression/Bug_2345_Regression.mpc b/TAO/tests/Bug_2345_Regression/Bug_2345_Regression.mpc
new file mode 100644
index 00000000000..7223fb9069c
--- /dev/null
+++ b/TAO/tests/Bug_2345_Regression/Bug_2345_Regression.mpc
@@ -0,0 +1,8 @@
+// -*- MPC -*-
+// $Id$
+
+project(*Server) : taoserver, imr_client, exceptions {
+ Source_Files {
+ server.cpp
+ }
+}
diff --git a/TAO/tests/Bug_2345_Regression/run_test.pl b/TAO/tests/Bug_2345_Regression/run_test.pl
new file mode 100755
index 00000000000..fa8e977afd2
--- /dev/null
+++ b/TAO/tests/Bug_2345_Regression/run_test.pl
@@ -0,0 +1,22 @@
+eval '(exit $?0)' && eval 'exec perl -S $0 ${1+"$@"}'
+ & eval 'exec perl -S $0 $argv:q'
+ if 0;
+
+# $Id$
+# -*- perl -*-
+
+use lib '../../../bin';
+use PerlACE::Run_Test;
+
+$status = 0;
+
+$SV = new PerlACE::Process ("server", "-ORBUseIMR 1 -ORBDefaultInitRef corbaloc:iiop:localhost:12345");
+
+$server = $SV->SpawnWaitKill (30);
+
+if ($server != 0) {
+ print STDERR "ERROR: server returned $server\n";
+ $status = 1;
+}
+
+exit $status;
diff --git a/TAO/tests/Bug_2345_Regression/server.cpp b/TAO/tests/Bug_2345_Regression/server.cpp
new file mode 100644
index 00000000000..f134a745d3b
--- /dev/null
+++ b/TAO/tests/Bug_2345_Regression/server.cpp
@@ -0,0 +1,41 @@
+// $Id$
+
+#include "tao/PortableServer/PortableServer.h"
+#include "tao/ImR_Client/ImR_Client.h"
+
+int main(int argc, char* argv[])
+{
+ try
+ {
+ CORBA::ORB_var orb = CORBA::ORB::_nil();
+
+ // Initialize the ORB.
+ //
+ orb = CORBA::ORB_init(argc, argv);
+ CORBA::Object_var poa_obj = orb->resolve_initial_references("RootPOA");
+ PortableServer::POA_var root_poa = PortableServer::POA::_narrow(poa_obj.in ());
+
+ // Create a PERSISTENT POA
+ //
+ // Create the policy list
+ CORBA::PolicyList policies(2);
+ policies.length(2);
+ policies[0] = root_poa->create_lifespan_policy(PortableServer::PERSISTENT);
+ policies[1] = root_poa->create_id_assignment_policy(PortableServer::USER_ID);
+
+ // create the poa.
+ // for ORBUseIMR=1 -ORBDefaultInitRef corbaloc:iiop:<HOST>:<PORT>
+ // this will cause an access violation if no IMR server is found.
+ // The access violation WILL NOT HAPPEN if a POAManager is created and
+ // given as a parameter to create_POA (instead of a nil POAManager)
+ PortableServer::POA_var persistent_poa =
+ root_poa->create_POA("myPoa", PortableServer::POAManager::_nil(), policies);
+
+ return 0;
+ }
+ catch (CORBA::Exception&)
+ {
+ // ... normally print an error here
+ }
+ return 0;
+}
diff --git a/TAO/tests/Bug_2349_Regression/Bug_2349_Regression.mpc b/TAO/tests/Bug_2349_Regression/Bug_2349_Regression.mpc
new file mode 100644
index 00000000000..3d5cf5b5deb
--- /dev/null
+++ b/TAO/tests/Bug_2349_Regression/Bug_2349_Regression.mpc
@@ -0,0 +1,17 @@
+// -*- MPC -*-
+// $Id$
+
+project(*server): taoserver, exceptions {
+ idlflags += -Sa -St
+ Source_Files {
+ server.cpp
+ }
+}
+
+project(*client): taoclient, exceptions {
+ after += *Server
+ Source_Files {
+ fooC.cpp
+ client.cpp
+ }
+}
diff --git a/TAO/tests/Bug_2349_Regression/run_test.pl b/TAO/tests/Bug_2349_Regression/run_test.pl
new file mode 100755
index 00000000000..356e2015525
--- /dev/null
+++ b/TAO/tests/Bug_2349_Regression/run_test.pl
@@ -0,0 +1,49 @@
+eval '(exit $?0)' && eval 'exec perl -S $0 ${1+"$@"}'
+ & eval 'exec perl -S $0 $argv:q'
+ if 0;
+
+# $Id$
+# -*- perl -*-
+
+use lib "$ENV{ACE_ROOT}/bin";
+use PerlACE::Run_Test;
+
+$status = 0;
+
+$iorfile = PerlACE::LocalFile ("server.ior");
+unlink $iorfile;
+
+if (PerlACE::is_vxworks_test()) {
+ $SV = new PerlACE::ProcessVX ("server");
+}
+else {
+ $SV = new PerlACE::Process ("server");
+}
+$CL = new PerlACE::Process ("client");
+
+$SV->Spawn ();
+
+if (PerlACE::waitforfile_timed ($iorfile,
+ $PerlACE::wait_interval_for_process_creation) == -1) {
+ print STDERR "ERROR: cannot find file <$iorfile>\n";
+ $SV->Kill (); $SV->TimedWait (1);
+ exit 1;
+}
+
+$client = $CL->SpawnWaitKill (10);
+
+if ($client != 0) {
+ print STDERR "ERROR: client returned $client\n";
+ $status = 1;
+}
+
+$server = $SV->WaitKill (5);
+
+if ($server != 0) {
+ print STDERR "ERROR: server returned $server\n";
+ $status = 1;
+}
+
+unlink $iorfile;
+
+exit $status;
diff --git a/TAO/tests/Bug_2375_Regression/Bug_2375_Regression.mpc b/TAO/tests/Bug_2375_Regression/Bug_2375_Regression.mpc
new file mode 100755
index 00000000000..d428b0fce50
--- /dev/null
+++ b/TAO/tests/Bug_2375_Regression/Bug_2375_Regression.mpc
@@ -0,0 +1,8 @@
+// -*- MPC -*-
+// $Id$
+project (*Test) : taoserver, valuetype {
+ exename = test
+ Source_Files {
+ test.cpp
+ }
+}
diff --git a/TAO/tests/Bug_2375_Regression/README b/TAO/tests/Bug_2375_Regression/README
new file mode 100755
index 00000000000..97b642530a1
--- /dev/null
+++ b/TAO/tests/Bug_2375_Regression/README
@@ -0,0 +1,5 @@
+// $Id$
+
+A build only test to check that the c++ source produced from an IDL file with a valuetype factory in it compiles OK.
+
+If it builds it's passed.
diff --git a/TAO/tests/Bug_2375_Regression/test.cpp b/TAO/tests/Bug_2375_Regression/test.cpp
new file mode 100755
index 00000000000..2a2d57db0e7
--- /dev/null
+++ b/TAO/tests/Bug_2375_Regression/test.cpp
@@ -0,0 +1,11 @@
+// $Id$
+#include "testC.h"
+class MyTestValuetypeFactory : public TestValuetype_init {
+public:
+ virtual TestValuetype* create (::CORBA::Boolean, ::CORBA::Short) {return 0;};
+ virtual TAO_OBV_CREATE_RETURN_TYPE (TestValuetype) create_for_unmarshal (void) {return 0;};
+};
+int main (int , char *[]) {
+ MyTestValuetypeFactory myFactory;
+ return 0;
+}
diff --git a/TAO/tests/Bug_2375_Regression/test.idl b/TAO/tests/Bug_2375_Regression/test.idl
new file mode 100755
index 00000000000..a6ee7413825
--- /dev/null
+++ b/TAO/tests/Bug_2375_Regression/test.idl
@@ -0,0 +1,5 @@
+// $Id$
+valuetype TestValuetype {
+ factory create(in boolean b, in short s);
+};
+
diff --git a/TAO/tests/Bug_2399_Regression/Bug_2399_Regression.mpc b/TAO/tests/Bug_2399_Regression/Bug_2399_Regression.mpc
new file mode 100644
index 00000000000..6397809c1be
--- /dev/null
+++ b/TAO/tests/Bug_2399_Regression/Bug_2399_Regression.mpc
@@ -0,0 +1,11 @@
+// -*- MPC -*-
+// $Id$
+project (*Test) : taoserver {
+ exename = test
+ idlflags += -t ./mytmp
+
+ Source_Files {
+ test.cpp
+ }
+}
+
diff --git a/TAO/tests/Bug_2399_Regression/README b/TAO/tests/Bug_2399_Regression/README
new file mode 100644
index 00000000000..a4c048250b6
--- /dev/null
+++ b/TAO/tests/Bug_2399_Regression/README
@@ -0,0 +1,8 @@
+# $Id$
+
+This is a build only test. A failure in the IDL compilation will probably indicate a regression.
+
+The IDL is compiled with a temporary file location specified using the -t parameter. The location is ./mytmp/.
+
+The file included.idl in ./mytmp/. is uncompilable - the test is intended to prove that it is not getting included instead of the correct included.idl (the one in *this* directory).
+
diff --git a/TAO/tests/Bug_2399_Regression/included.idl b/TAO/tests/Bug_2399_Regression/included.idl
new file mode 100644
index 00000000000..ed8e9a102a1
--- /dev/null
+++ b/TAO/tests/Bug_2399_Regression/included.idl
@@ -0,0 +1,5 @@
+// $Id$
+
+interface Parent
+{
+};
diff --git a/TAO/tests/Bug_2399_Regression/mytmp/included.idl b/TAO/tests/Bug_2399_Regression/mytmp/included.idl
new file mode 100644
index 00000000000..df4a6fa7b06
--- /dev/null
+++ b/TAO/tests/Bug_2399_Regression/mytmp/included.idl
@@ -0,0 +1,3 @@
+// $Id$
+
+This file should not be compiled at all.
diff --git a/TAO/tests/Bug_2399_Regression/test.cpp b/TAO/tests/Bug_2399_Regression/test.cpp
new file mode 100644
index 00000000000..1b3f75330f2
--- /dev/null
+++ b/TAO/tests/Bug_2399_Regression/test.cpp
@@ -0,0 +1,10 @@
+// $Id$
+
+#include "testC.h"
+
+int
+main (int , char *[])
+{
+ return 0;
+}
+
diff --git a/TAO/tests/Bug_2399_Regression/test.idl b/TAO/tests/Bug_2399_Regression/test.idl
new file mode 100644
index 00000000000..b0e1cbac672
--- /dev/null
+++ b/TAO/tests/Bug_2399_Regression/test.idl
@@ -0,0 +1,7 @@
+// $Id$
+
+#include "included.idl"
+
+interface Child : Parent
+{
+};
diff --git a/TAO/tests/Bug_2417_Regression/Bug_2417_Regression.mpc b/TAO/tests/Bug_2417_Regression/Bug_2417_Regression.mpc
new file mode 100644
index 00000000000..27d1cc5fd95
--- /dev/null
+++ b/TAO/tests/Bug_2417_Regression/Bug_2417_Regression.mpc
@@ -0,0 +1,19 @@
+// -*- MPC -*-
+// $Id$
+
+project(*Server): taoserver, messaging, threads {
+ Source_Files {
+ publisher_impl.cpp
+ server.cpp
+ }
+}
+
+project(*Client): taoserver, threads {
+ exename = client
+ after += *Server
+ Source_Files {
+ subscriber_impl.cpp
+ client.cpp
+ }
+}
+
diff --git a/TAO/tests/Bug_2417_Regression/client.cpp b/TAO/tests/Bug_2417_Regression/client.cpp
new file mode 100644
index 00000000000..df96fb1565d
--- /dev/null
+++ b/TAO/tests/Bug_2417_Regression/client.cpp
@@ -0,0 +1,77 @@
+// $Id$
+
+#include "subscriber_impl.h"
+#include "publisherC.h"
+#include "ace/Get_Opt.h"
+#include "ace/Task.h"
+
+class ThreadPool : public ACE_Task_Base
+{
+public:
+ ThreadPool (CORBA::ORB_ptr orb);
+ virtual int svc (void);
+private:
+ CORBA::ORB_var orb_;
+};
+
+int
+main (int argc, char *argv[])
+{
+ ACE_TRY_NEW_ENV
+ {
+ CORBA::ORB_var orb = CORBA::ORB_init (argc, argv, "");
+ CORBA::Object_var poa_object = orb->resolve_initial_references("RootPOA");
+
+ 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 ());
+ PortableServer::POAManager_var poa_manager =
+ root_poa->the_POAManager();
+
+ Subscriber_impl subscriber(orb.in ());
+ Subscriber_var subscriber_var = subscriber._this();
+
+ CORBA::Object_var object = orb->string_to_object("file://ior.out");
+ Publisher_var publisher = Publisher::_narrow(object.in());
+
+ publisher->subscribe(subscriber_var.in());
+
+ poa_manager->activate();
+
+ ThreadPool pool (orb.in ());
+ if (pool.activate(THR_NEW_LWP | THR_JOINABLE, 5) != 0)
+ ACE_ERROR_RETURN ((LM_ERROR, "Cannot activate client threads\n"), 1);
+
+ pool.thr_mgr ()->wait ();
+
+ ACE_DEBUG ((LM_DEBUG, "event loop finished\n"));
+ }
+ ACE_CATCHANY
+ {
+ ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION, "Exception caught:");
+ return 1;
+ }
+ ACE_ENDTRY;
+
+ return 0;
+}
+
+// ****************************************************************
+
+ThreadPool::ThreadPool(CORBA::ORB_ptr orb)
+: orb_(CORBA::ORB::_duplicate (orb))
+{
+}
+
+int ThreadPool::svc (void)
+{
+ try
+ {
+ this->orb_->run ();
+ }
+ catch (...)
+ {
+ }
+ return 0;
+}
diff --git a/TAO/tests/Bug_2417_Regression/publisher.idl b/TAO/tests/Bug_2417_Regression/publisher.idl
new file mode 100644
index 00000000000..51fb10a1e23
--- /dev/null
+++ b/TAO/tests/Bug_2417_Regression/publisher.idl
@@ -0,0 +1,10 @@
+// $Id$
+
+#include "subscriber.idl"
+
+interface Publisher
+{
+ void subscribe(in Subscriber _subscriber);
+
+ oneway void shutdown ();
+};
diff --git a/TAO/tests/Bug_2417_Regression/publisher_impl.cpp b/TAO/tests/Bug_2417_Regression/publisher_impl.cpp
new file mode 100644
index 00000000000..e62ad292470
--- /dev/null
+++ b/TAO/tests/Bug_2417_Regression/publisher_impl.cpp
@@ -0,0 +1,165 @@
+// $Id$
+
+#include "publisher_impl.h"
+#include "ace/OS_NS_sys_time.h"
+#include "ace/Task.h"
+#include "ace/Process_Mutex.h"
+#include "ace/OS_NS_unistd.h"
+#include <vector>
+
+using namespace std;
+
+struct _Subscriber
+{
+ Subscriber_var subscriber;
+ bool unsubscribed;
+ unsigned int count;
+};
+
+class Publisher_impl::Worker : public ACE_Task_Base
+{
+public:
+ Worker(Publisher_impl * _owner);
+ ~Worker();
+ void addSubscriber(Subscriber_ptr subscriber);
+ virtual int svc (void);
+ void terminate();
+private:
+ bool terminated;
+ vector<_Subscriber> subscribers;
+ ACE_Thread_Mutex mutex;
+ Publisher_impl * owner;
+};
+
+Publisher_impl::Worker::Worker(Publisher_impl * _owner)
+: owner(_owner)
+{
+ terminated = false;
+}
+
+Publisher_impl::Worker::~Worker()
+{
+ terminated = true;
+}
+
+void Publisher_impl::Worker::addSubscriber(Subscriber_ptr subscriber)
+{
+ ACE_Guard<ACE_Thread_Mutex> guard(mutex, 1, 1);
+ subscribers.push_back(_Subscriber());
+ _Subscriber& s = subscribers.back();
+ s.unsubscribed = false;
+ s.subscriber = Subscriber::_duplicate(subscriber);
+ s.count = 0;
+}
+
+int Publisher_impl::Worker::svc (void)
+{
+ double data = 0.0;
+ bool doShutdown = false;
+ unsigned long iteration = 0;
+ ACE_Time_Value tv;
+ tv.set(0.01);
+ while (!terminated)
+ {
+ data += 0.01;
+ ++iteration;
+ {
+ ACE_Guard<ACE_Thread_Mutex> guard(mutex, 1, 1);
+ doShutdown = subscribers.size() > 0;
+ for (vector<_Subscriber>::iterator iter = subscribers.begin(); iter != subscribers.end(); ++iter)
+ {
+ if (!iter->unsubscribed)
+ {
+ doShutdown = false;
+ try
+ {
+ if (!CORBA::is_nil(iter->subscriber.in ()))
+ iter->subscriber->onData(data);
+ else
+ iter->unsubscribed = true;
+ ++iter->count;
+ }
+ catch (...)
+ {
+ iter->unsubscribed = true;
+ }
+ }
+ }
+ }
+ if (iteration % 1000 == 0)
+ {
+ ACE_Guard<ACE_Thread_Mutex> guard(mutex, 1, 1);
+ for (vector<_Subscriber>::iterator iter = subscribers.begin(); iter != subscribers.end(); ++iter)
+ {
+ if (!iter->unsubscribed)
+ {
+ try
+ {
+ iter->subscriber->isAlive();
+ }
+ catch (...)
+ {
+ iter->unsubscribed = true;
+ }
+ }
+ }
+ }
+ if (doShutdown)
+ owner->shutdown();
+ else
+ ACE_OS::sleep(tv);
+ }
+ return 0;
+}
+
+void Publisher_impl::Worker::terminate()
+{
+ terminated = true;
+}
+
+Publisher_impl::Publisher_impl(CORBA::ORB_ptr orb)
+: orb_ (CORBA::ORB::_duplicate (orb))
+{
+ worker = new Worker(this);
+ worker->activate();
+}
+
+Publisher_impl::~Publisher_impl()
+{
+ worker->terminate();
+ worker->thr_mgr()->wait();
+ delete worker;
+}
+
+void subscribe (
+ ::Subscriber_ptr subscriber
+ ACE_ENV_ARG_DECL_WITH_DEFAULTS
+ )
+ ACE_THROW_SPEC ((
+ ::CORBA::SystemException
+ ));
+
+void
+Publisher_impl::subscribe(
+ ::Subscriber_ptr subscriber
+ ACE_ENV_ARG_DECL_WITH_DEFAULTS
+ )
+ ACE_THROW_SPEC ((
+ ::CORBA::SystemException
+ ))
+{
+ worker->addSubscriber(subscriber);
+}
+
+void
+Publisher_impl::shutdown (
+ ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS
+ )
+ ACE_THROW_SPEC ((
+ ::CORBA::SystemException
+ ))
+{
+ this->orb_->shutdown (0);
+ worker->terminate();
+}
+
diff --git a/TAO/tests/Bug_2417_Regression/publisher_impl.h b/TAO/tests/Bug_2417_Regression/publisher_impl.h
new file mode 100644
index 00000000000..43a62ae54ac
--- /dev/null
+++ b/TAO/tests/Bug_2417_Regression/publisher_impl.h
@@ -0,0 +1,37 @@
+// $Id$
+
+#ifndef EXPLOIT_PUBLISHER_IMPL_H
+#define EXPLOIT_PUBLISHER_IMPL_H
+
+#include "publisherS.h"
+#include "subscriberC.h"
+
+class Publisher_impl : public POA_Publisher
+{
+ public:
+ Publisher_impl(CORBA::ORB_ptr orb);
+ ~Publisher_impl();
+
+ virtual void subscribe (
+ ::Subscriber_ptr subscriber
+ ACE_ENV_ARG_DECL_WITH_DEFAULTS
+ )
+ ACE_THROW_SPEC ((
+ ::CORBA::SystemException
+ ));
+
+ virtual void shutdown (
+ ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS
+ )
+ ACE_THROW_SPEC ((
+ ::CORBA::SystemException
+ ));
+
+ private:
+ CORBA::ORB_var orb_;
+ class Worker;
+ friend class Worker;
+ Worker * worker;
+};
+
+#endif
diff --git a/TAO/tests/Bug_2417_Regression/run_test.pl b/TAO/tests/Bug_2417_Regression/run_test.pl
new file mode 100755
index 00000000000..21cd1ff1714
--- /dev/null
+++ b/TAO/tests/Bug_2417_Regression/run_test.pl
@@ -0,0 +1,54 @@
+eval '(exit $?0)' && eval 'exec perl -S $0 ${1+"$@"}'
+ & eval 'exec perl -S $0 $argv:q'
+ if 0;
+
+# $Id$
+# -*- perl -*-
+
+use lib '../../../bin';
+use PerlACE::Run_Test;
+
+$iorfile = PerlACE::LocalFile ("ior.out");
+unlink $iorfile;
+$status = 0;
+
+if (PerlACE::is_vxworks_test()) {
+ $SV = new PerlACE::ProcessVX ("server", "");
+}
+else {
+ $SV = new PerlACE::Process ("server", "");
+}
+
+$CL1 = new PerlACE::Process ("client", "");
+
+$server = $SV->Spawn ();
+
+if ($server != 0) {
+ print STDERR "ERROR: server returned $server\n";
+ exit 1;
+}
+
+if (PerlACE::waitforfile_timed ($iorfile,
+ $PerlACE::wait_interval_for_process_creation) == -1) {
+ print STDERR "ERROR: cannot find file <$iorfile>\n";
+ $SV->Kill (); $SV->TimedWait (1);
+ exit 1;
+}
+
+$CL1->Spawn ();
+
+$client = $CL1->WaitKill (60);
+
+if ($client != 0) {
+ print STDERR "ERROR: client returned $client\n";
+ $status = 1;
+}
+$server = $SV->WaitKill (35);
+
+if ($server != 0) {
+ print STDERR "ERROR: server returned $server\n";
+ $status = 1;
+}
+unlink $iorfile;
+
+exit $status
diff --git a/TAO/tests/Bug_2417_Regression/server.cpp b/TAO/tests/Bug_2417_Regression/server.cpp
new file mode 100644
index 00000000000..8a8ba4c1a2c
--- /dev/null
+++ b/TAO/tests/Bug_2417_Regression/server.cpp
@@ -0,0 +1,93 @@
+// $Id$
+
+#include "publisher_impl.h"
+#include "tao/Messaging/Messaging.h"
+#include "tao/AnyTypeCode/Any.h"
+#include "ace/Get_Opt.h"
+#include "ace/Task.h"
+
+class ThreadPool : public ACE_Task_Base
+{
+public:
+ ThreadPool (CORBA::ORB_ptr orb);
+ virtual int svc (void);
+private:
+ CORBA::ORB_var orb_;
+};
+
+int
+main (int argc, char *argv[])
+{
+ ACE_TRY_NEW_ENV
+ {
+ CORBA::ORB_var orb = CORBA::ORB_init (argc, argv, "");
+ CORBA::Object_var poa_object = orb->resolve_initial_references("RootPOA");
+
+ 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 ());
+ PortableServer::POAManager_var poa_manager =
+ root_poa->the_POAManager();
+
+ Publisher_impl publisher(orb.in ());
+ Publisher_var publisher_var = publisher._this();
+
+ CORBA::String_var ior = orb->object_to_string(publisher_var.in());
+ ACE_DEBUG ((LM_DEBUG, "Activated as <%s>\n", ior.in()));
+
+ // output the ior
+ FILE *output_file= ACE_OS::fopen ("ior.out", "w");
+ if (output_file == 0)
+ ACE_ERROR_RETURN ((LM_ERROR, "Cannot open output file for writing IOR: ior.out"), 1);
+ ACE_OS::fprintf (output_file, "%s", ior.in ());
+ ACE_OS::fclose (output_file);
+
+ poa_manager->activate();
+
+ const CORBA::Object_var pmobj ( orb->resolve_initial_references( "ORBPolicyManager" ) );
+ CORBA::PolicyManager_var policy_manager = CORBA::PolicyManager::_narrow( pmobj.in() );
+
+ CORBA::Any orb_level;
+ orb_level <<= Messaging::SYNC_NONE;
+ CORBA::PolicyList policy_list;
+ policy_list.length(1);
+ policy_list[0] = orb->create_policy(Messaging::SYNC_SCOPE_POLICY_TYPE, orb_level);
+ policy_manager->set_policy_overrides(policy_list, CORBA::SET_OVERRIDE);
+
+ ThreadPool pool (orb.in ());
+ if (pool.activate(THR_NEW_LWP | THR_JOINABLE, 5) != 0)
+ ACE_ERROR_RETURN ((LM_ERROR, "Cannot activate client threads\n"), 1);
+
+ pool.thr_mgr ()->wait ();
+
+ ACE_DEBUG ((LM_DEBUG, "event loop finished\n"));
+ }
+ ACE_CATCHANY
+ {
+ ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION, "Exception caught:");
+ return 1;
+ }
+ ACE_ENDTRY;
+
+ return 0;
+}
+
+// ****************************************************************
+
+ThreadPool::ThreadPool(CORBA::ORB_ptr orb)
+: orb_(CORBA::ORB::_duplicate (orb))
+{
+}
+
+int ThreadPool::svc (void)
+{
+ try
+ {
+ this->orb_->run ();
+ }
+ catch (...)
+ {
+ }
+ return 0;
+}
diff --git a/TAO/tests/Bug_2417_Regression/subscriber.idl b/TAO/tests/Bug_2417_Regression/subscriber.idl
new file mode 100644
index 00000000000..4bc284d2979
--- /dev/null
+++ b/TAO/tests/Bug_2417_Regression/subscriber.idl
@@ -0,0 +1,7 @@
+// $Id$
+
+interface Subscriber
+{
+ oneway void onData(in double value);
+ boolean isAlive();
+};
diff --git a/TAO/tests/Bug_2417_Regression/subscriber_impl.cpp b/TAO/tests/Bug_2417_Regression/subscriber_impl.cpp
new file mode 100644
index 00000000000..61f25e23349
--- /dev/null
+++ b/TAO/tests/Bug_2417_Regression/subscriber_impl.cpp
@@ -0,0 +1,45 @@
+// $Id$
+
+#include "subscriber_impl.h"
+#include "ace/OS_NS_stdio.h"
+
+Subscriber_impl::Subscriber_impl(CORBA::ORB_ptr orb)
+: orb_ (CORBA::ORB::_duplicate (orb))
+, count(0)
+{
+}
+
+Subscriber_impl::~Subscriber_impl()
+{
+}
+
+void
+Subscriber_impl::onData (
+ ::CORBA::Double
+ ACE_ENV_ARG_DECL_WITH_DEFAULTS
+ )
+ ACE_THROW_SPEC ((
+ ::CORBA::SystemException
+ ))
+{
+ ++count;
+ if (count > 100)
+ shutdown();
+}
+
+::CORBA::Boolean
+Subscriber_impl::isAlive (
+ ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS
+ )
+ ACE_THROW_SPEC ((
+ ::CORBA::SystemException
+ ))
+{
+ return true;
+}
+
+void Subscriber_impl::shutdown()
+{
+ this->orb_->shutdown (0);
+}
+
diff --git a/TAO/tests/Bug_2417_Regression/subscriber_impl.h b/TAO/tests/Bug_2417_Regression/subscriber_impl.h
new file mode 100644
index 00000000000..4b37f8f7529
--- /dev/null
+++ b/TAO/tests/Bug_2417_Regression/subscriber_impl.h
@@ -0,0 +1,34 @@
+// $Id$
+
+#ifndef EXPLOIT_PUBLISHER_IMPL_H
+#define EXPLOIT_PUBLISHER_IMPL_H
+
+#include "subscriberS.h"
+
+class Subscriber_impl : public POA_Subscriber
+{
+ public:
+ Subscriber_impl(CORBA::ORB_ptr orb);
+ ~Subscriber_impl();
+
+ virtual void onData (
+ ::CORBA::Double value
+ ACE_ENV_ARG_DECL_WITH_DEFAULTS
+ )
+ ACE_THROW_SPEC ((
+ ::CORBA::SystemException
+ ));
+ virtual ::CORBA::Boolean isAlive (
+ ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS
+ )
+ ACE_THROW_SPEC ((
+ ::CORBA::SystemException
+ ));
+
+ void shutdown();
+ private:
+ CORBA::ORB_var orb_;
+ unsigned int count;
+};
+
+#endif
diff --git a/TAO/tests/Bug_2419_Regression/Bug_2419_Regression.mpc b/TAO/tests/Bug_2419_Regression/Bug_2419_Regression.mpc
new file mode 100644
index 00000000000..073f1f25679
--- /dev/null
+++ b/TAO/tests/Bug_2419_Regression/Bug_2419_Regression.mpc
@@ -0,0 +1,8 @@
+// -*- MPC -*-
+// $Id$
+project (*Client) : taoserver, messaging {
+ exename = client
+ Source_Files {
+ client.cpp
+ }
+}
diff --git a/TAO/tests/Bug_2419_Regression/README b/TAO/tests/Bug_2419_Regression/README
new file mode 100644
index 00000000000..0adb564c7ae
--- /dev/null
+++ b/TAO/tests/Bug_2419_Regression/README
@@ -0,0 +1,3 @@
+// $Id$
+
+This is a build only test - if it compiles it passes. See the bugzilla ticket for details.
diff --git a/TAO/tests/Bug_2419_Regression/abstract_parent.idl b/TAO/tests/Bug_2419_Regression/abstract_parent.idl
new file mode 100644
index 00000000000..84e5521f296
--- /dev/null
+++ b/TAO/tests/Bug_2419_Regression/abstract_parent.idl
@@ -0,0 +1,6 @@
+// $Id$
+
+abstract interface abstract_parent
+{
+ void method (in abstract_parent aParent);
+};
diff --git a/TAO/tests/Bug_2419_Regression/client.cpp b/TAO/tests/Bug_2419_Regression/client.cpp
new file mode 100644
index 00000000000..326096e87fa
--- /dev/null
+++ b/TAO/tests/Bug_2419_Regression/client.cpp
@@ -0,0 +1,8 @@
+// $Id$
+
+#include "local_childS.h"
+
+int main (int, char*[])
+{
+ return 0;
+}
diff --git a/TAO/tests/Bug_2419_Regression/local_child.idl b/TAO/tests/Bug_2419_Regression/local_child.idl
new file mode 100644
index 00000000000..f993399b138
--- /dev/null
+++ b/TAO/tests/Bug_2419_Regression/local_child.idl
@@ -0,0 +1,6 @@
+// $Id$
+#include "abstract_parent.idl"
+
+local interface local_child : abstract_parent
+{
+};
diff --git a/TAO/tests/Bug_2424_Regression/Bug_2424_Regression.mpc b/TAO/tests/Bug_2424_Regression/Bug_2424_Regression.mpc
new file mode 100644
index 00000000000..72053dc671f
--- /dev/null
+++ b/TAO/tests/Bug_2424_Regression/Bug_2424_Regression.mpc
@@ -0,0 +1,8 @@
+// -*- MPC -*-
+// $Id$
+project (*Client) : taoserver {
+ exename = client
+ Source_Files {
+ client.cpp
+ }
+}
diff --git a/TAO/tests/Bug_2424_Regression/OneLineCosNaming.idl b/TAO/tests/Bug_2424_Regression/OneLineCosNaming.idl
new file mode 100644
index 00000000000..0e5d486d864
--- /dev/null
+++ b/TAO/tests/Bug_2424_Regression/OneLineCosNaming.idl
@@ -0,0 +1,2 @@
+// $Id$
+/** * CORBA Common Object Services: Naming Service. * <p> * The detailed specification is available from the * <a href="http://www.omg.org">Object Management Group</a>. * * @author OMG * @version Version 00-11-01 */ module CosNaming { typedef string Istring; struct NameComponent { Istring id; Istring kind; }; typedef sequence <NameComponent> Name; enum BindingType { nobject, ncontext }; struct Binding { Name binding_name; BindingType binding_type; }; typedef sequence <Binding> BindingList; interface BindingIterator; /** * The NamingContext interface provides operations which support the following: * <ul> * <li> binding objects * <li> name resolution * <li> unbinding * <li> creating naming contexts * <li> deleting contexts * <li> listing a naming context * </ul> */ interface NamingContext { enum NotFoundReason { missing_node, not_context, not_object }; /** * Indicates the name does not identify a binding. */ exception NotFound { NotFoundReason why; Name rest_of_name; }; /** * Indicates that the implementation has given up for some reason. The * client, however, may be able to continue the operation at the returned * naming context. */ exception CannotProceed { NamingContext cxt; Name rest_of_name; }; /** * Indicates the name is invalid. (A name of length 0 is invalid; * implementations may place other restrictions on names.) */ exception InvalidName {}; /** * Indicates an object is already bound to the specified name. Only one * object can be bound to a particular name in a context. */ exception AlreadyBound {}; /** * Indicates that a naming context has bindings. */ exception NotEmpty {}; /** * Creates a binding of a name and an object in the naming * context. Naming contexts that are bound using bind do not * participate in name resolution when compound names are passed to be * resolved. A bind operation that is passed a compound name is * defined as follows: * * <pre> * ctx->bind(< c1 ; c2 ; ... ; cn >, obj) := * (ctx->resolve(< c1 ; c2 ; ... ; cn-1 >))->bind(< cn >, obj) * </pre> * * @parm n - binding name. * @parm obj - object to bind. * @raises AlreadyBound - if the name is bound in the context. */ void bind (in Name n, in Object obj) raises (NotFound, CannotProceed, InvalidName, AlreadyBound); /** * Creates a binding of a name and an object in the naming context * even if the name is already bound in the context. Naming contexts * that are bound using rebind do not participate in name resolution * when compound names are passed to be resolved. * * @parm n - binding name. * @parm obj - object to bind. */ void rebind (in Name n, in Object obj) raises (NotFound, CannotProceed, InvalidName); /** * Names an object that is a naming context. Naming contexts that are * bound using bind_context() participate in name resolution when * compound names are passed to be resolved. A bind_context operation * that is passed a compound name is defined as follows: * <pre> * ctx->bind_context(< c1 ; c2 ; ... ; cn >, nc) := * (ctx->resolve(< c1 ; c2 ; ... ; cn-1 >))->bind_context(< cn >, nc) * </pre> * * @parm n - binding name. * @parm nc - naming context to bind. * @raises AlreadyBound - if the name is bound in the context. */ void bind_context (in Name n, in NamingContext nc) raises (NotFound, CannotProceed, InvalidName, AlreadyBound); /** * Creates a binding of a name and a naming context in the naming * context even if the name is already bound in the context. Naming * contexts that are bound using rebind_context() participate in name * resolution when compound names are passed to be resolved. * * @parm n - binding name. * @parm nc - naming context to bind. */ void rebind_context (in Name n, in NamingContext nc) raises (NotFound, CannotProceed, InvalidName); /** * The resolve operation is the process of retrieving an object bound * to a name in a given context. The given name must exactly match the * bound name. The naming service does not return the type of the * object. Clients are responsible for "narrowing" the object to the * appropriate type. That is, clients typically cast the returned * object from Object to a more specialized interface. Names can have * multiple components; therefore, name resolution can traverse * multiple contexts. * A compound resolve is defined as follows: * <pre> * ctx->resolve(< c1 ; c2 ; ... ; cn >) := * ctx->resolve(< c1 ; c2 ; ... ; cn-1 >)->resolve(< cn >) * </pre> * * @parm n - binding name. * @returns bound object. */ Object resolve (in Name n) raises (NotFound, CannotProceed, InvalidName); /** * The unbind operation removes a name binding from a context. * A unbind operation that is passed a compound name is defined as follows: * <pre> * ctx->unbind(< c1 ; c2 ; ... ; cn >) := * (ctx->resolve(< c1 ; c2 ; ... ; cn-1 >))->unbind(< cn >) * </pre> * * @parm n - binding name. */ void unbind (in Name n) raises (NotFound, CannotProceed, InvalidName); /** * This operation returns a naming context implemented by the same * naming server as the context on which the operation was * invoked. The new context is not bound to any name. * * @returns new binding context. */ NamingContext new_context (); /** * This operation creates a new context and binds it to the name * supplied as an argument. The newly-created context is implemented * by the same naming server as the context in which it was bound * (that is, the naming server that implements the context denoted by * the name argument excluding the last component). A bind_new_context * that is passed a compound name is defined as follows: * * <pre> * ctx->bind_new_context(< c1 ; c2 ; ... ; cn >) := * (ctx->resolve(< c1 ; c2 ; ... ; cn-1 >))->bind_new_context(< cn >) * </pre> * * @parm n - binding name. * @returns new binding context. * @raises AlreadyBound - if the name is bound in the context. */ NamingContext bind_new_context (in Name n) raises (NotFound, CannotProceed, InvalidName, AlreadyBound); /** * The destroy operation deletes a naming context. The list operation * allows a client to iterate through a set of bindings in a naming * context. * * @raises NotEmpty - if the naming context contains bindings. */ void destroy () raises (NotEmpty); /** * The list operation returns at most the requested number of bindings in * BindingList bl. * <ul> * <li> If the naming context contains additional bindings, the list * operation returns a BindingIterator with the additional bindings. * <li> If the naming context does not contain additional bindings, the * binding iterator is a nil object reference. * </ul> * * @parm how_many - maximum number of binding to return in bl. * @parm bl - list of bindings. * @parm bi - iterator over remaining bindings. */ void list (in unsigned long how_many, out BindingList bl, out BindingIterator bi); }; /** * The BindingIterator interface allows a client to iterate through the * bindings using the next_one or next_n operations. */ interface BindingIterator { /** * This operation returns the next binding. If there are no more * bindings, false is returned. * * @parm b - next binding. */ boolean next_one (out Binding b); /** * This operation returns at most the requested number of bindings. * * @parm how_many - maximum number of binding to return in bl. * @parm bl - list of bindings. */ boolean next_n (in unsigned long how_many, out BindingList bl); /** * This operation destroys the iterator. */ void destroy (); }; /** * The NamingContextExt Interface provides the extensions to the * NamingContext Interface as proposed by the Interoperable * Naming Service Extension. */ interface NamingContextExt: NamingContext { typedef string StringName; typedef string Address; typedef string URLString; /** * This operation accepts a Name and returns a stringified Name. * * @param n - Name (a sequence of NameComponents) * @raises InvalidName - if the Name is invalid. */ StringName to_string (in Name n) raises (InvalidName); /** * This operation accepts a StringifiedName and returns a Name. * * @param n - a StringifiedName * @raises InvalidName - if the Name is invalid. */ Name to_name (in StringName sn) raises (InvalidName); /** * Indicates a syntactically invalid address component. */ exception InvalidAddress {}; /** * This operation accepts a URL address component and a stringified * name and returns a URL string. * * @param n - a Stringified name. * @raises addr - URL address component. */ URLString to_url (in Address addr, in StringName sn) raises (InvalidAddress, InvalidName); /** * This is a convenience operation that performs a resolve in the same * manner as NamingContext::resolve. * * @param n - a Stringified name. * @raises NotFound, CannotProceed, InvalidName */ Object resolve_str (in StringName n) raises (NotFound, CannotProceed, InvalidName); }; };
diff --git a/TAO/tests/Bug_2424_Regression/README b/TAO/tests/Bug_2424_Regression/README
new file mode 100644
index 00000000000..a0e0c8a1dad
--- /dev/null
+++ b/TAO/tests/Bug_2424_Regression/README
@@ -0,0 +1,5 @@
+// $Id$
+
+This is a compile only test to check that the IDL compiler can deal with IDL containing unfeasibly long lines. If it builds - it's passed.
+
+The file OneLineCosNaming.idl is the complete IDL for the Naming Service, including comments, with all the newlines removed.
diff --git a/TAO/tests/Bug_2424_Regression/client.cpp b/TAO/tests/Bug_2424_Regression/client.cpp
new file mode 100644
index 00000000000..4bca89b3009
--- /dev/null
+++ b/TAO/tests/Bug_2424_Regression/client.cpp
@@ -0,0 +1,8 @@
+// $Id$
+
+#include "OneLineCosNamingC.h"
+
+int main (int, char*[])
+{
+ return 0;
+}
diff --git a/TAO/tests/Bug_2429_Regression/Bug_2429_Regression.mpc b/TAO/tests/Bug_2429_Regression/Bug_2429_Regression.mpc
new file mode 100644
index 00000000000..27af500c3e6
--- /dev/null
+++ b/TAO/tests/Bug_2429_Regression/Bug_2429_Regression.mpc
@@ -0,0 +1,21 @@
+// -*- MPC -*-
+// $Id$
+
+project(*Server) : taoserver, messaging {
+ exename = server
+ idlflags += -Ge 1 -GC
+
+ Source_Files {
+ server.cpp
+ ChildServant.cpp
+ }
+}
+
+project(*Client) : taoclient, messaging {
+ exename = client
+ idlflags += -Ge 1 -GC
+
+ Source_Files {
+ client.cpp
+ }
+}
diff --git a/TAO/tests/Bug_2429_Regression/Child.idl b/TAO/tests/Bug_2429_Regression/Child.idl
new file mode 100644
index 00000000000..166b36367ce
--- /dev/null
+++ b/TAO/tests/Bug_2429_Regression/Child.idl
@@ -0,0 +1,8 @@
+// $Id$
+
+#include "Parent.idl"
+
+interface Child : Parent
+{
+ void childMethod ();
+};
diff --git a/TAO/tests/Bug_2429_Regression/ChildServant.cpp b/TAO/tests/Bug_2429_Regression/ChildServant.cpp
new file mode 100644
index 00000000000..f6617bc55d9
--- /dev/null
+++ b/TAO/tests/Bug_2429_Regression/ChildServant.cpp
@@ -0,0 +1,30 @@
+// $Id$
+
+#include "ChildServant.h"
+
+ChildServant::ChildServant(CORBA::ORB_ptr orb)
+: orb_(CORBA::ORB::_duplicate(orb))
+{
+}
+
+void
+ChildServant::childMethod ()
+ACE_THROW_SPEC ((CORBA::SystemException))
+{
+ // No-op
+}
+
+void
+ChildServant::parentMethod ()
+ACE_THROW_SPEC((CORBA::SystemException))
+{
+ // Just throw an exception
+ ACE_THROW (CORBA::INTERNAL ());
+}
+
+void
+ChildServant::shutdown ()
+ACE_THROW_SPEC((CORBA::SystemException))
+{
+ this->orb_->shutdown(0 ACE_ENV_ARG_PARAMETER);
+}
diff --git a/TAO/tests/Bug_2429_Regression/ChildServant.h b/TAO/tests/Bug_2429_Regression/ChildServant.h
new file mode 100644
index 00000000000..55d601d3cc0
--- /dev/null
+++ b/TAO/tests/Bug_2429_Regression/ChildServant.h
@@ -0,0 +1,24 @@
+#ifndef CHILDSERVANT_H
+#define CHILDSERVANT_H
+
+// $Id$
+
+#include "ChildS.h"
+
+class ChildServant
+ : public virtual POA_Child
+{
+ public:
+ ChildServant (CORBA::ORB_ptr orb);
+ virtual void parentMethod ()
+ ACE_THROW_SPEC ((CORBA::SystemException));
+ virtual void childMethod ()
+ ACE_THROW_SPEC ((CORBA::SystemException));
+ virtual void shutdown ()
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+ private:
+ CORBA::ORB_var orb_;
+};
+
+#endif
diff --git a/TAO/tests/Bug_2429_Regression/Parent.idl b/TAO/tests/Bug_2429_Regression/Parent.idl
new file mode 100644
index 00000000000..b142f1939e3
--- /dev/null
+++ b/TAO/tests/Bug_2429_Regression/Parent.idl
@@ -0,0 +1,8 @@
+// $Id$
+
+interface Parent
+{
+ void parentMethod ();
+
+ oneway void shutdown ();
+};
diff --git a/TAO/tests/Bug_2429_Regression/README b/TAO/tests/Bug_2429_Regression/README
new file mode 100644
index 00000000000..f5f06b3dffb
--- /dev/null
+++ b/TAO/tests/Bug_2429_Regression/README
@@ -0,0 +1,16 @@
+# $Id$
+
+This test makes a call via AMI and then waits to receive a call back. The server throws an exception so the client expects to receive that. The method called is a method inherited from a parent interface (parentMethod).
+
+_Expected Success Result_
+
+Successfully received an Internal Excep*ion as expected.
+event loop finished
+
+_Regression Result_
+
+_Perfect_Hash_OpTable:find for operation 'parentMethod_excep' (length=18) failed
+ERROR: /home/sm/bugs/tao321/client timedout
+ERROR: Regression - Non zero result from client or client timed out.
+
+
diff --git a/TAO/tests/Bug_2429_Regression/client.cpp b/TAO/tests/Bug_2429_Regression/client.cpp
new file mode 100644
index 00000000000..ded3a38e9d6
--- /dev/null
+++ b/TAO/tests/Bug_2429_Regression/client.cpp
@@ -0,0 +1,185 @@
+// $Id$
+
+#include "ace/Get_Opt.h"
+#include "tao/Messaging/Messaging.h"
+#include "ChildS.h"
+
+class Reply_Handler
+ : public POA_AMI_ChildHandler
+{
+ public:
+ Reply_Handler()
+ : parentMethod_count (0),
+ parentMethod_excep_count (0)
+ {
+ }
+
+ virtual void
+ childMethod (ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC ((CORBA::SystemException))
+ {
+ }
+
+ virtual void
+ childMethod_excep (Messaging::ExceptionHolder *
+ excep_holder ACE_ENV_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC ((CORBA::SystemException))
+ {
+ ACE_TRY
+ {
+ excep_holder->raise_exception (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+ }
+ ACE_CATCH (CORBA::SystemException, ex)
+ {
+ ACE_PRINT_EXCEPTION (ex, "Reply_Handler::childMethod_excep: ");
+ }
+ ACE_ENDTRY;
+ }
+
+ virtual void
+ parentMethod (ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC ((CORBA::SystemException))
+ {
+ ACE_DEBUG ((LM_DEBUG,
+ "client: parentMethod reply %d @ %T\n",
+ ++parentMethod_count));
+
+ }
+
+ virtual void
+ parentMethod_excep (Messaging::ExceptionHolder * excep_holder
+ ACE_ENV_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC ((CORBA::SystemException))
+ {
+ ACE_TRY
+ {
+ ++parentMethod_excep_count;
+ excep_holder->raise_exception (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+ }
+ ACE_CATCH (CORBA::INTERNAL, iex)
+ {
+ ACE_DEBUG ((LM_DEBUG, "Successfully received an Internal Excep*ion as expected.\n"));
+ }
+ ACE_CATCH (CORBA::SystemException, ex)
+ {
+ ACE_PRINT_EXCEPTION (ex, "Reply_Handler::childMethod_excep: ");
+ }
+ ACE_ENDTRY;
+ }
+
+ CORBA::ULong reply_count (void) { return parentMethod_count + parentMethod_excep_count; };
+
+ private:
+ // Count of replies and excep
+ CORBA::ULong parentMethod_count;
+ CORBA::ULong parentMethod_excep_count;
+};
+
+// Server ior.
+static const char * server_ior = "file://server.ior";
+
+static int
+client_parse_args(int argc, char *argv[])
+{
+ ACE_Get_Opt
+ get_opts(argc, argv, "f:");
+ int c;
+
+ while ((c = get_opts()) != -1)
+ {
+ switch (c)
+ {
+ case 'f':
+ server_ior = get_opts.opt_arg();
+ break;
+ case '?':
+ default:
+ ACE_DEBUG((LM_ERROR,
+ "usage: %s "
+ "-f server IOR file\n"));
+ return 1;
+ }
+ }
+
+ // Indicates sucessful parsing of the command line
+ return 0;
+}
+
+int
+main(int argc, char *argv[])
+{
+ ACE_DECLARE_NEW_CORBA_ENV;
+
+ CORBA::ORB_var orb;
+
+ ACE_TRY
+ {
+ // Initialize the ORB.
+ orb = CORBA::ORB_init(argc, argv, 0 ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ // Initialize options based on command-line arguments.
+ int parse_args_result = client_parse_args(argc, argv);
+ if (parse_args_result != 0)
+ {
+ return 1;
+ }
+
+ CORBA::Object_var object =
+ orb->resolve_initial_references ("RootPOA" ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ PortableServer::POA_var root_poa =
+ PortableServer::POA::_narrow (object.in () ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ // Get an object reference from the nominated file
+ object = orb->string_to_object (server_ior);
+
+ ACE_TRY_CHECK;
+
+ PortableServer::POAManager_var poa_manager =
+ root_poa->the_POAManager(ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ poa_manager->activate(ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ Child_var child = Child::_narrow (object.in() ACE_ENV_ARG_PARAMETER);
+
+ Reply_Handler reply_handler_servant;
+
+ AMI_ChildHandler_var reply_handler_object =
+ reply_handler_servant._this (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ // Invoke the AMI parentMethod
+ child->sendc_parentMethod (reply_handler_object.in ()
+ ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ // Loop until all replies have been received.
+ while (reply_handler_servant.reply_count () == 0)
+ {
+ orb->perform_work ();
+ }
+
+ // Shutdown server.
+ child->shutdown ();
+ 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/tests/Bug_2429_Regression/run_test.pl b/TAO/tests/Bug_2429_Regression/run_test.pl
new file mode 100755
index 00000000000..542e46da4ff
--- /dev/null
+++ b/TAO/tests/Bug_2429_Regression/run_test.pl
@@ -0,0 +1,44 @@
+eval '(exit $?0)' && eval 'exec perl -S $0 ${1+"$@"}'
+ & eval 'exec perl -S $0 $argv:q'
+ if 0;
+
+#$Id$
+
+# -*- perl -*-
+
+use lib '../../../bin';
+use PerlACE::Run_Test;
+
+# The server IOR file
+$server_ior_file = PerlACE::LocalFile ("server.ior");
+unlink $server_ior_file;
+
+# The client and server processes
+$SERVER = new PerlACE::Process(PerlACE::LocalFile("server"));
+$CLIENT = new PerlACE::Process(PerlACE::LocalFile("client"));
+
+$SERVER->Arguments("-o $server_ior_file");
+
+# Fire up the server
+$SERVER->Spawn();
+
+# We can wait on the IOR file
+if (PerlACE::waitforfile_timed ($server_ior_file, 10) == -1)
+{
+ print STDERR "ERROR: cannot find $server_ior_file\n";
+ $SERVER->Kill();
+ exit 1;
+}
+
+$CLIENT->Arguments("-f file://$server_ior_file");
+if ($CLIENT->SpawnWaitKill (10) != 0)
+{
+ print STDERR "ERROR: Regression - Non zero result from client or client timed out.\n";
+ $SERVER->Kill();
+ exit 1;
+}
+
+# Clean up and return
+$SERVER->TerminateWaitKill (5);
+unlink $server_ior_file;
+exit 0;
diff --git a/TAO/tests/Bug_2429_Regression/server.cpp b/TAO/tests/Bug_2429_Regression/server.cpp
new file mode 100644
index 00000000000..8059c43febb
--- /dev/null
+++ b/TAO/tests/Bug_2429_Regression/server.cpp
@@ -0,0 +1,105 @@
+// $Id$
+#include "ace/Get_Opt.h"
+#include "ace/OS_NS_stdio.h"
+#include "ChildServant.h"
+
+const char *ior_output_file = "server.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[])
+{
+ 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;
+
+ 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;
+
+ ChildServant servant (orb.in ());
+
+ Child_var server =
+ servant._this (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ CORBA::String_var ior =
+ orb->object_to_string (server.in ()
+ ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ 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, "event loop finished\n"));
+
+ root_poa->destroy (1,
+ 1
+ ACE_ENV_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/tests/Bug_2494_Regression/Bug_2494_Regression.mpc b/TAO/tests/Bug_2494_Regression/Bug_2494_Regression.mpc
new file mode 100644
index 00000000000..ef312844a93
--- /dev/null
+++ b/TAO/tests/Bug_2494_Regression/Bug_2494_Regression.mpc
@@ -0,0 +1,19 @@
+// -*- MPC -*-
+// $Id$
+
+project(*Server): taoexe, portableserver {
+ idlflags += -Sc -St
+ Source_Files {
+ test_i.cpp
+ server.cpp
+ }
+}
+
+project(*Client): taoexe {
+ idlflags += -Sc -St
+ after += *Server
+ Source_Files {
+ testC.cpp
+ client.cpp
+ }
+}
diff --git a/TAO/tests/Bug_2494_Regression/README b/TAO/tests/Bug_2494_Regression/README
new file mode 100644
index 00000000000..726419360b1
--- /dev/null
+++ b/TAO/tests/Bug_2494_Regression/README
@@ -0,0 +1,34 @@
+# $Id$
+
+Description:
+
+ This test a modification of MT_Server. In this case the client is also
+multi-threaded. The client sends very large strings to the server, which it
+echoes back, for the sake of keeping the server busy doing I/O. When the
+client is abruptly killed, the server should close the connection and continue
+running.
+
+Expected output:
+ The server prints out the IOR of the object it serves and the
+results of server shutdown (aborted or shutdown cleanly).
+
+ Regression:
+Activated as
+<IOR:012a2a2a1600000049444c3a53696d706c655f5365727665723a312e30002a2a0100000000000000740000000101022a130000006f6369313332392e6f63697765622e636f6d002a19842a2a1b00000014010f0052535420c93244520b04000000000001000000010000002a020000000000000008000000012a2a2a004f41540100000018000000012a2a2a0100010001000000010001050901010000000000>
+***Client has been killed***
+ACE_ASSERT (32395|3067820976): file Transport.cpp, line 172 assertion
+failed for 'this->head_ == 0'.Aborting...
+ERROR: cannot find file
+</tao_builds/mitza/1.4a/ACE_wrappers/TAO/tests/Bug_2494_Regression/server_terminated>
+-- server has not shut down cleanly.
+(perl script returns 1)
+
+ Correct run:
+Activated as
+<IOR:012a2a2a1600000049444c3a53696d706c655f5365727665723a312e30002a2a0100000000000000740000000101022a130000006f6369313332392e6f63697765622e636f6d002a34842a2a1b00000014010f0052535488d03244438d04000000000001000000010000002a020000000000000008000000012a2a2a004f41540100000018000000012a2a2a0100010001000000010001050901010000000000>
+***Client has been killed***
+event loop finished
+(perl script returns 0)
+
+How to run:
+ Use the run_test.pl script to run it.
diff --git a/TAO/tests/Bug_2494_Regression/client.cpp b/TAO/tests/Bug_2494_Regression/client.cpp
new file mode 100644
index 00000000000..3ec481e7167
--- /dev/null
+++ b/TAO/tests/Bug_2494_Regression/client.cpp
@@ -0,0 +1,137 @@
+// $Id$
+
+#include "ace/Get_Opt.h"
+#include "ace/Task.h"
+#include "ace/OS_NS_string.h"
+#include "testC.h"
+
+ACE_RCSID(Bug_2494_Regression, client, "$Id$")
+
+const char *ior = "file://test.ior";
+int nthreads = 5;
+int do_shutdown = 0;
+
+int
+parse_args (int argc, char *argv[])
+{
+ ACE_Get_Opt get_opts (argc, argv, "xk:n:");
+ int c;
+
+ while ((c = get_opts ()) != -1)
+ switch (c)
+ {
+ case 'x':
+ do_shutdown = 1;
+ break;
+
+ case 'k':
+ ior = 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 "
+ "-k <ior> "
+ "[-n <nthreads> | -x]"
+ "\n",
+ argv [0]),
+ -1);
+ }
+ // Indicates sucessful parsing of the command line
+ return 0;
+}
+
+namespace
+{
+ const char *twohundredbytes =
+ "12345678901234567890123456789012345678901234567890"
+ "12345678901234567890123456789012345678901234567890"
+ "12345678901234567890123456789012345678901234567890"
+ "12345678901234567890123456789012345678901234567890"
+ ;
+}
+
+struct Worker : ACE_Task_Base
+{
+
+ Worker (Simple_Server_ptr srv)
+ : srv_(Simple_Server::_duplicate(srv))
+ {
+ }
+
+ Simple_Server_var srv_;
+
+ int svc ()
+ {
+ char* str = CORBA::string_alloc (200*2000 + 1);
+ if (!str) return 1;
+ str[0] = CORBA::Char('\0');
+ for (int i=0; i < 2000; ++i)
+ {
+ ACE_OS::strcat(str, twohundredbytes);
+ }
+
+ while (1)
+ {
+ try
+ {
+ const char *ret = srv_->test_method (str);
+ ACE_TRY_CHECK;
+ if (0 != ACE_OS::strcmp (str, ret)) return 1;
+ }
+ catch (CORBA::Exception& ex)
+ {
+ ACE_PRINT_EXCEPTION (ex, "Exception caught:");
+ return 1;
+ }
+ }
+ return 0;
+ }
+
+};
+
+int
+main (int argc, char *argv[])
+{
+ try
+ {
+ CORBA::ORB_var orb = CORBA::ORB_init (argc, argv);
+
+ if (parse_args (argc, argv) != 0)
+ return 1;
+
+ CORBA::Object_var object = orb->string_to_object (ior);
+
+ Simple_Server_var server = Simple_Server::_narrow (object.in ());
+
+ if (CORBA::is_nil (server.in ()))
+ {
+ ACE_ERROR_RETURN ((LM_ERROR,
+ "Object reference <%s> is nil\n",
+ ior), 1);
+ }
+
+ if (do_shutdown)
+ {
+ server->shutdown ();
+ }
+ else
+ {
+ Worker wrk (server.in ());
+ wrk.activate (THR_NEW_LWP|THR_JOINABLE|THR_INHERIT_SCHED, nthreads);
+ wrk.thr_mgr ()->wait ();
+ }
+ }
+ catch (CORBA::Exception& ex)
+ {
+ ACE_PRINT_EXCEPTION (ex, "Exception caught:");
+ return 1;
+ }
+
+ return 0;
+}
diff --git a/TAO/tests/Bug_2494_Regression/run_test.pl b/TAO/tests/Bug_2494_Regression/run_test.pl
new file mode 100755
index 00000000000..b622265a7de
--- /dev/null
+++ b/TAO/tests/Bug_2494_Regression/run_test.pl
@@ -0,0 +1,68 @@
+eval '(exit $?0)' && eval 'exec perl -S $0 ${1+"$@"}'
+ & eval 'exec perl -S $0 $argv:q'
+ if 0;
+
+# $Id$
+# -*- perl -*-
+
+use lib '../../../bin';
+use PerlACE::Run_Test;
+
+$status = 0;
+$srv_threads = '4';
+$cli_threads = '30';
+$iorfile = PerlACE::LocalFile ("test.ior");
+$srvdownfile = PerlACE::LocalFile ("server_terminated");
+
+unlink $iorfile;
+unlink $srvdownfile;
+
+$SV = new PerlACE::Process ("server", "-o $iorfile -n $srv_threads");
+$CL = new PerlACE::Process ("client", "-k file://$iorfile -n $cli_threads");
+$CLS = new PerlACE::Process ("client", "-k file://$iorfile -x");
+
+$SV->Spawn ();
+
+if (PerlACE::waitforfile_timed ($iorfile,
+ $PerlACE::wait_interval_for_process_creation) == -1) {
+ print STDERR "ERROR: cannot find file <$iorfile>\n";
+ $SV->Kill ();
+ exit 1;
+}
+
+$CL->Spawn ();
+#Client will not terminate on its own, kill it after 30 seconds
+$CL->TimedWait (30);
+$CL->Kill ();
+
+print "***Client has been killed***\n";
+
+#Server should still be running at this point, now start the client that asks
+#the server to shut itself down
+
+$client = $CLS->SpawnWaitKill (5);
+if ($client != 0) {
+ print STDERR "ERROR: client returned $client\n";
+ $status = 1;
+}
+
+#Server should now be shut down
+if (PerlACE::waitforfile_timed ($srvdownfile,
+ $PerlACE::wait_interval_for_process_creation) == -1) {
+ print STDERR "ERROR: cannot find file <$srvdownfile>".
+ " -- server has not shut down cleanly.\n";
+ $SV->Kill ();
+ exit 1;
+}
+
+$server = $SV->WaitKill (1);
+
+if ($server != 0) {
+ print STDERR "ERROR: server returned $server\n";
+ $status = 1;
+}
+
+unlink $iorfile;
+unlink $srvdownfile;
+
+exit $status
diff --git a/TAO/tests/Bug_2494_Regression/server.cpp b/TAO/tests/Bug_2494_Regression/server.cpp
new file mode 100644
index 00000000000..8a87e86c160
--- /dev/null
+++ b/TAO/tests/Bug_2494_Regression/server.cpp
@@ -0,0 +1,157 @@
+// $Id$
+
+#include "test_i.h"
+#include "ace/Get_Opt.h"
+#include "ace/Task.h"
+
+ACE_RCSID(Bug_2494_Regression, server, "$Id$")
+
+const char *ior_output_file = "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",
+ argv [0]),
+ -1);
+ }
+ // Indicates sucessful parsing of the command line
+ return 0;
+}
+
+class Worker : public ACE_Task_Base
+{
+ // = TITLE
+ // Run a server thread
+ //
+ // = DESCRIPTION
+ // Use the ACE_Task_Base class to run server threads
+ //
+public:
+ Worker (CORBA::ORB_ptr orb);
+ // ctor
+
+ virtual int svc (void);
+ // The thread entry point.
+
+private:
+ CORBA::ORB_var orb_;
+ // The orb
+};
+
+int
+main (int argc, char *argv[])
+{
+ try
+ {
+ CORBA::ORB_var orb = CORBA::ORB_init (argc, argv);
+
+ CORBA::Object_var poa_object =
+ orb->resolve_initial_references("RootPOA");
+
+ 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 ());
+
+ PortableServer::POAManager_var poa_manager = root_poa->the_POAManager ();
+
+ if (parse_args (argc, argv) != 0)
+ return 1;
+
+ Simple_Server_i server_impl (orb.in ());
+
+ Simple_Server_var server = server_impl._this ();
+
+ CORBA::String_var ior = orb->object_to_string (server.in ());
+
+ ACE_DEBUG ((LM_DEBUG, "Activated as <%s>\n", ior.in ()));
+
+ // If the ior_output_file exists, output the ior to it
+ if (ior_output_file != 0)
+ {
+ 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 ();
+
+ Worker worker (orb.in ());
+ if (worker.activate (THR_NEW_LWP | THR_JOINABLE,
+ nthreads) != 0)
+ ACE_ERROR_RETURN ((LM_ERROR,
+ "Cannot activate client threads\n"),
+ 1);
+
+ worker.thr_mgr ()->wait ();
+
+ ACE_DEBUG ((LM_DEBUG, "event loop finished\n"));
+
+ const char *fname = "server_terminated";
+ FILE *output_file= ACE_OS::fopen (fname, "w");
+ if (output_file == 0)
+ ACE_ERROR_RETURN ((LM_ERROR,
+ "Cannot open output file for writing: ",
+ fname),
+ 1);
+ ACE_OS::fprintf (output_file, "%s", "OK\n");
+ ACE_OS::fclose (output_file);
+ }
+ catch (CORBA::Exception& ex)
+ {
+ ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION,
+ "Exception caught:");
+ return 1;
+ }
+
+ return 0;
+}
+
+// ****************************************************************
+
+Worker::Worker (CORBA::ORB_ptr orb)
+ : orb_ (CORBA::ORB::_duplicate (orb))
+{
+}
+
+int
+Worker::svc (void)
+{
+ try
+ {
+ this->orb_->run ();
+ }
+ catch (CORBA::Exception&)
+ {
+ }
+ return 0;
+}
diff --git a/TAO/tests/Bug_2494_Regression/test.idl b/TAO/tests/Bug_2494_Regression/test.idl
new file mode 100644
index 00000000000..335009e627f
--- /dev/null
+++ b/TAO/tests/Bug_2494_Regression/test.idl
@@ -0,0 +1,10 @@
+//
+// $Id$
+//
+
+interface Simple_Server
+{
+ string test_method (in string str);
+
+ oneway void shutdown ();
+};
diff --git a/TAO/tests/Bug_2494_Regression/test_i.cpp b/TAO/tests/Bug_2494_Regression/test_i.cpp
new file mode 100644
index 00000000000..bfccb378f26
--- /dev/null
+++ b/TAO/tests/Bug_2494_Regression/test_i.cpp
@@ -0,0 +1,29 @@
+// $Id$
+
+#include "test_i.h"
+#include "tao/debug.h"
+#include "ace/OS_NS_unistd.h"
+
+#if !defined(__ACE_INLINE__)
+#include "test_i.inl"
+#endif /* __ACE_INLINE__ */
+
+ACE_RCSID(Bug_2494_Regression, test_i, "$Id$")
+
+char *
+Simple_Server_i::test_method (const char *x)
+ ACE_THROW_SPEC ((CORBA::SystemException))
+{
+ if (TAO_debug_level > 0)
+ ACE_DEBUG ((LM_DEBUG, "Request in thread %t\n"));
+ ACE_Time_Value tv (2);
+ ACE_OS::sleep (tv);
+ return CORBA::string_dup(x);
+}
+
+void
+Simple_Server_i::shutdown ()
+ ACE_THROW_SPEC ((CORBA::SystemException))
+{
+ this->orb_->shutdown (0);
+}
diff --git a/TAO/tests/Bug_2494_Regression/test_i.h b/TAO/tests/Bug_2494_Regression/test_i.h
new file mode 100644
index 00000000000..cd8971dc7a6
--- /dev/null
+++ b/TAO/tests/Bug_2494_Regression/test_i.h
@@ -0,0 +1,36 @@
+// $Id$
+
+#ifndef TAO_BUG_2494_REGRESSION_TEST_I_H
+#define TAO_BUG_2494_REGRESSION_TEST_I_H
+
+#include "testS.h"
+
+class Simple_Server_i : public POA_Simple_Server
+{
+ // = TITLE
+ // Simpler Server implementation
+ //
+ // = DESCRIPTION
+ // Implements the Simple_Server interface in test.idl
+ //
+public:
+ Simple_Server_i (CORBA::ORB_ptr orb);
+ // ctor
+
+ // = The Simple_Server methods.
+ char *test_method (const char *x)
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+ void shutdown ()
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+private:
+ CORBA::ORB_var orb_;
+ // The ORB
+};
+
+#if defined(__ACE_INLINE__)
+#include "test_i.inl"
+#endif /* __ACE_INLINE__ */
+
+#endif /* TAO_BUG_2494_REGRESSION_TEST_I_H */
diff --git a/TAO/tests/Bug_2494_Regression/test_i.inl b/TAO/tests/Bug_2494_Regression/test_i.inl
new file mode 100644
index 00000000000..97524552ff4
--- /dev/null
+++ b/TAO/tests/Bug_2494_Regression/test_i.inl
@@ -0,0 +1,7 @@
+// $Id$
+
+ACE_INLINE
+Simple_Server_i::Simple_Server_i (CORBA::ORB_ptr orb)
+ : orb_ (CORBA::ORB::_duplicate (orb))
+{
+}
diff --git a/TAO/tests/CSD_Strategy_Tests/Broken/CSD_TP_Broken.mpc b/TAO/tests/CSD_Strategy_Tests/Broken/CSD_TP_Broken.mpc
new file mode 100644
index 00000000000..016caef75ef
--- /dev/null
+++ b/TAO/tests/CSD_Strategy_Tests/Broken/CSD_TP_Broken.mpc
@@ -0,0 +1,21 @@
+// -*- MPC -*-
+// $Id$
+
+project(*Server): csd_tp_test_exe_b {
+ exename=server_main
+
+ Source_Files {
+ ServerApp.cpp
+ server_main.cpp
+ }
+}
+
+project(*Client): csd_tp_test_exe_b {
+ exename=client_main
+
+ Source_Files {
+ ClientApp.cpp
+ client_main.cpp
+ }
+}
+
diff --git a/TAO/tests/CSD_Strategy_Tests/Broken/ClientApp.cpp b/TAO/tests/CSD_Strategy_Tests/Broken/ClientApp.cpp
new file mode 100644
index 00000000000..0fbab91f139
--- /dev/null
+++ b/TAO/tests/CSD_Strategy_Tests/Broken/ClientApp.cpp
@@ -0,0 +1,328 @@
+// $Id$
+#include "ClientApp.h"
+#include "AppHelper.h"
+#include "OrbRunner.h"
+#include "AppShutdown.h"
+#include "TestAppExceptionC.h"
+#include "Foo_B_ClientEngine.h"
+#include "ace/Get_Opt.h"
+// To force static load the service.
+#include "tao/PI/PI.h"
+#include "tao/CSD_ThreadPool/CSD_ThreadPool.h"
+
+
+ClientApp::ClientApp()
+: TestAppBase("TP_Test_3_Client"),
+ client_task_ (true), // shutdown orb after client is done.
+ num_servants_ (1),
+ num_csd_threads_ (1),
+ num_orb_threads_ (1),
+ ior_("Not Set"),
+ client_kind_(0),
+ client_id_(0)
+{
+}
+
+
+ClientApp::~ClientApp()
+{
+}
+
+
+int
+ClientApp::run_i(int argc, char* argv[] ACE_ENV_ARG_DECL)
+{
+ int result = this->init(argc, argv ACE_ENV_ARG_PARAMETER);
+ if (result != 0)
+ {
+ return result;
+ }
+ ACE_CHECK_RETURN (-1);
+
+ this->poa_setup(ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+ this->csd_setup(ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+ this->client_setup(ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+ this->poa_activate(ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+ this->run_clients(ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+ this->run_orb_event_loop(ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+
+ // Calling wait on ACE_Thread_Manager singleton to avoid the problem
+ // that the main thread might exit before all CSD Threads exit.
+
+ // Wait for all CSD task threads exit.
+ ACE_Thread_Manager::instance ()->wait ();
+
+ this->cleanup();
+
+ return this->check_validity () ? 0 : -1;
+}
+
+
+int
+ClientApp::init(int argc, char* argv[] ACE_ENV_ARG_DECL)
+{
+ this->orb_ = CORBA::ORB_init(argc, argv, "" ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+
+ // Parse the command-line args for this application.
+ // * Raises -1 if problems are encountered.
+ // * Returns 1 if the usage statement was explicitly requested.
+ // * Returns 0 otherwise.
+ int result = this->parse_args(argc, argv);
+ if (result != 0)
+ {
+ return result;
+ }
+
+ TheAppShutdown->init(this->orb_.in(), num_servants_ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+
+ return 0;
+}
+
+
+void
+ClientApp::poa_setup(ACE_ENV_SINGLE_ARG_DECL)
+{
+ this->poa_ = this->create_poa(this->orb_.in(),
+ "ChildPoa"
+ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK;
+}
+
+
+void
+ClientApp::csd_setup(ACE_ENV_SINGLE_ARG_DECL)
+{
+ this->tp_strategy_ = new TAO::CSD::TP_Strategy(this->num_csd_threads_);
+
+ if (!this->tp_strategy_->apply_to(this->poa_.in() ACE_ENV_ARG_PARAMETER))
+ {
+ ACE_ERROR((LM_ERROR,
+ "Failed to apply CSD strategy to poa.\n"));
+ ACE_THROW(TestAppException());
+ }
+ ACE_CHECK;
+}
+
+
+void
+ClientApp::client_setup(ACE_ENV_SINGLE_ARG_DECL)
+{
+ // Turn the ior_ into a Foo_B obj ref.
+ Foo_B_var foo = RefHelper<Foo_B>::string_to_ref(this->orb_.in(),
+ this->ior_.c_str()
+ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK;
+
+ this->servants_.create_and_activate(1, // number of callback servants
+ this->poa_.in()
+ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK;
+ ServantListType::T_stub_var cb = this->servants_.objref(0);
+
+ // Create the ClientEngine object, and give it the Foo_B and Callback object
+ // references.
+ ClientEngine_Handle engine
+ = new Foo_B_ClientEngine(foo.in(), cb.in (), this->client_id_);
+ this->client_task_.add_engine(engine.in());
+}
+
+
+void
+ClientApp::poa_activate(ACE_ENV_SINGLE_ARG_DECL)
+{
+ PortableServer::POAManager_var poa_manager
+ = this->poa_->the_POAManager(ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK;
+ poa_manager->activate(ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK;
+}
+
+
+void
+ClientApp::run_clients(ACE_ENV_SINGLE_ARG_DECL)
+{
+ if (this->client_task_.open() != 0)
+ {
+ ACE_THROW (TestAppException ());
+ }
+}
+
+
+void
+ClientApp::run_orb_event_loop(ACE_ENV_SINGLE_ARG_DECL)
+{
+ OrbRunner orb_runner(this->orb_.in(), this->num_orb_threads_);
+ orb_runner.run(ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK;
+ TheAppShutdown->wait ();
+}
+
+
+PortableServer::POA_ptr
+ClientApp::create_poa(CORBA::ORB_ptr orb, const char* poa_name ACE_ENV_ARG_DECL)
+{
+ // Get the Root POA.
+ PortableServer::POA_var root_poa
+ = RefHelper<PortableServer::POA>::resolve_initial_ref(orb,
+ "RootPOA"
+ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK_RETURN (PortableServer::POA::_nil ());
+
+ // Get the POAManager from the Root POA.
+ PortableServer::POAManager_var poa_manager
+ = root_poa->the_POAManager(ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK_RETURN (PortableServer::POA::_nil ());
+
+ // Create the child POA Policies.
+ CORBA::PolicyList policies(0);
+ policies.length(0);
+
+ // Create the child POA
+ PortableServer::POA_var poa = AppHelper::create_poa(poa_name,
+ root_poa.in(),
+ poa_manager.in(),
+ policies
+ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK_RETURN (PortableServer::POA::_nil ());
+
+ // Give away the child POA_ptr from the POA_var variable.
+ return poa._retn();
+}
+
+
+void
+ClientApp::cleanup()
+{
+}
+
+
+int
+ClientApp::parse_args(int argc, char* argv[])
+{
+ this->exe_name_ = argv[0];
+
+ ACE_Get_Opt get_opts(argc, argv, "i:k:n:");
+
+ int c;
+
+ while ((c = get_opts()) != -1)
+ {
+ int result = 0;
+ switch (c)
+ {
+ case 'i':
+ this->ior_ = get_opts.opt_arg();
+ break;
+
+ case 'k':
+ result = set_arg(this->client_kind_,
+ get_opts.opt_arg(),
+ c,
+ "client_kind");
+ break;
+
+ case 'n':
+ result = set_arg(this->client_id_,
+ get_opts.opt_arg(),
+ c,
+ "client_id");
+ break;
+
+ case '?':
+ this->usage_statement();
+ return 1;
+
+ default:
+ this->usage_statement();
+ return -1;
+ }
+
+ if (result != 0)
+ {
+ return result;
+ }
+ }
+
+ return this->arg_dependency_checks();
+}
+
+void
+ClientApp::usage_statement()
+{
+ ACE_ERROR((LM_ERROR,
+ "Usage: %s [options]\n\n"
+ "OPTIONS:\n\n"
+ "\t[-i <ior>]\n"
+ "\t[-k <client_kind>]\n"
+ "\t[-n <client_id>]\n"
+ "\t[-?]\n\n",
+ this->exe_name_.c_str()));
+}
+
+
+int
+ClientApp::arg_dependency_checks()
+{
+ if (this->ior_ == "Not Set")
+ {
+ ACE_ERROR((LM_ERROR,
+ "Error: Missing required command-line option (-i <ior>).\n"));
+ this->usage_statement();
+ return -1;
+ }
+ if (this->client_id_ <= 0)
+ {
+ ACE_ERROR((LM_ERROR,
+ "Error: Invalid command-line option (-n <client id>). \n"
+ " The client id should be positive integer. \n"));
+ this->usage_statement();
+ return -1;
+ }
+
+ return 0;
+}
+
+
+int
+ClientApp::set_arg(unsigned& value,
+ const char* arg,
+ char opt,
+ const char* name,
+ int min)
+{
+ int tmp = ACE_OS::atoi(arg);
+
+ if (tmp < min)
+ {
+ ACE_ERROR((LM_ERROR,
+ "Error: -%c <%s> must be integer type with a value of, "
+ "at least, %d.\n", opt, name, min));
+ this->usage_statement();
+ return -1;
+ }
+
+ value = tmp;
+ return 0;
+}
+
+
+bool
+ClientApp::check_validity ()
+{
+ // Check whether the clients return any errors.
+ if (this->client_task_.failure_count () > 0)
+ {
+ return false;
+ }
+
+ return true;
+}
+
diff --git a/TAO/tests/CSD_Strategy_Tests/Broken/ClientApp.h b/TAO/tests/CSD_Strategy_Tests/Broken/ClientApp.h
new file mode 100644
index 00000000000..846384224f5
--- /dev/null
+++ b/TAO/tests/CSD_Strategy_Tests/Broken/ClientApp.h
@@ -0,0 +1,78 @@
+// $Id$
+#ifndef CLIENTAPP_H
+#define CLIENTAPP_H
+
+#include "TestAppBase.h"
+#include "ClientEngine.h"
+#include "ServantList_T.h"
+#include "Callback_i.h"
+#include "ClientTask.h"
+#include "tao/CSD_ThreadPool/CSD_TP_Strategy.h"
+#include "tao/ORB.h"
+#include "ace/SString.h"
+
+
+class ClientApp : public TestAppBase
+{
+ public:
+
+ ClientApp();
+ virtual ~ClientApp();
+
+ protected:
+
+ virtual int run_i(int argc, char* argv[] ACE_ENV_ARG_DECL);
+
+
+ private:
+
+ // These are all called, in order, by the run_i() method.
+ int init(int argc, char* argv[] ACE_ENV_ARG_DECL);
+ void poa_setup(ACE_ENV_SINGLE_ARG_DECL);
+ void csd_setup(ACE_ENV_SINGLE_ARG_DECL);
+ void client_setup(ACE_ENV_SINGLE_ARG_DECL);
+ void poa_activate(ACE_ENV_SINGLE_ARG_DECL);
+ void run_clients(ACE_ENV_SINGLE_ARG_DECL);
+ void run_orb_event_loop(ACE_ENV_SINGLE_ARG_DECL);
+ bool check_validity ();
+ void cleanup();
+
+ // Helper methods used by the methods above.
+ int parse_args(int argc, char* argv[]);
+
+ int set_arg(unsigned& value,
+ const char* arg,
+ char opt,
+ const char* name,
+ int min = 0);
+
+ void usage_statement();
+ int arg_dependency_checks();
+
+ PortableServer::POA_ptr create_poa(CORBA::ORB_ptr orb,
+ const char* poa_name
+ ACE_ENV_ARG_DECL);
+
+
+ typedef ServantList<Callback_i> ServantListType;
+
+ CORBA::ORB_var orb_;
+ PortableServer::POA_var poa_;
+ TAO::CSD::TP_Strategy_Handle tp_strategy_;
+
+ ServantListType servants_;
+
+ ClientTask client_task_;
+
+ ACE_CString exe_name_;
+
+ unsigned num_servants_;
+ unsigned num_csd_threads_;
+ unsigned num_orb_threads_;
+
+ ACE_CString ior_;
+ unsigned client_kind_;
+ unsigned client_id_;
+};
+
+#endif
diff --git a/TAO/tests/CSD_Strategy_Tests/Broken/ServerApp.cpp b/TAO/tests/CSD_Strategy_Tests/Broken/ServerApp.cpp
new file mode 100644
index 00000000000..e48955f8c06
--- /dev/null
+++ b/TAO/tests/CSD_Strategy_Tests/Broken/ServerApp.cpp
@@ -0,0 +1,427 @@
+// $Id$
+#include "ServerApp.h"
+#include "AppHelper.h"
+#include "OrbRunner.h"
+#include "AppShutdown.h"
+#include "TestAppExceptionC.h"
+#include "Foo_B_SimpleClientEngine.h"
+#include "Callback_i.h"
+#include "ace/OS.h"
+#include "ace/Get_Opt.h"
+// To force static load the service.
+#include "tao/PI/PI.h"
+#include "tao/CSD_ThreadPool/CSD_ThreadPool.h"
+
+
+ServerApp::ServerApp()
+ : TestAppBase("TP_Test_3_Server"),
+ ior_filename_prefix_("foo"),
+ num_servants_(1),
+ num_csd_threads_(1),
+ num_orb_threads_(1),
+ num_remote_clients_(1),
+ num_collocated_clients_(0),
+ collocated_client_kind_(0)
+{
+}
+
+
+ServerApp::~ServerApp()
+{
+}
+
+
+int
+ServerApp::run_i(int argc, char* argv[] ACE_ENV_ARG_DECL)
+{
+ int result = this->init(argc, argv ACE_ENV_ARG_PARAMETER);
+ if (result != 0)
+ {
+ return result;
+ }
+ ACE_CHECK_RETURN (-1);
+
+ this->poa_setup(ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+ this->csd_setup(ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+ this->servant_setup(ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+ this->collocated_setup(ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+ this->poa_activate(ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+ this->run_collocated_clients(ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+ this->run_orb_event_loop(ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+
+ // Calling wait on ACE_Thread_Manager singleton to avoid the problem
+ // that the main thread might exit before all CSD Threads exit.
+
+ // Wait for all CSD task threads exit.
+ ACE_Thread_Manager::instance ()->wait ();
+
+ this->cleanup();
+ return this->check_validity () ? 0 : -1;
+}
+
+
+int
+ServerApp::init(int argc, char* argv[] ACE_ENV_ARG_DECL)
+{
+ this->orb_ = CORBA::ORB_init(argc, argv, "" ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+
+ // Parse the command-line args for this application.
+ // * Raises -1 if problems are encountered.
+ // * Returns 1 if the usage statement was explicitly requested.
+ // * Returns 0 otherwise.
+ int result = this->parse_args(argc, argv);
+ if (result != 0)
+ {
+ return result;
+ }
+
+ unsigned num_clients = this->num_remote_clients_ +
+ this->num_collocated_clients_;
+
+ TheAppShutdown->init(this->orb_.in(), num_clients ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+
+ return 0;
+}
+
+
+void
+ServerApp::poa_setup(ACE_ENV_SINGLE_ARG_DECL)
+{
+ this->poa_ = this->create_poa(this->orb_.in(),
+ "ChildPoa"
+ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK;
+
+ if (this->num_collocated_clients_ > 0)
+ {
+ this->cb_poa_ = this->create_poa(this->orb_.in(),
+ "CallbackPoa"
+ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK;
+ }
+}
+
+void
+ServerApp::csd_setup(ACE_ENV_SINGLE_ARG_DECL)
+{
+ this->tp_strategy_ = new TAO::CSD::TP_Strategy(this->num_csd_threads_);
+
+// We don't apply the strategy for this test to show that the bug isn't
+// part of the CSD ThreadPool Strategy code.
+#if 0
+ if (!this->tp_strategy_->apply_to(this->poa_.in() ACE_ENV_ARG_PARAMETER))
+ {
+ ACE_ERROR((LM_ERROR,
+ "Failed to apply CSD strategy to poa.\n"));
+ ACE_THROW(TestAppException());
+ }
+ ACE_CHECK;
+#endif
+
+ // Use another poa and strategy for callbacks. This would resolve
+ // the deadlock situation that happens when having number of csd
+ // threads less than number of collocated clients.
+ if (this->num_collocated_clients_ > 0)
+ {
+ this->cb_tp_strategy_ = new TAO::CSD::TP_Strategy();
+// We don't apply the strategy for this test to show that the bug isn't
+// part of the CSD ThreadPool Strategy code.
+#if 0
+ if (!this->cb_tp_strategy_->apply_to(this->cb_poa_.in() ACE_ENV_ARG_PARAMETER))
+ {
+ ACE_ERROR((LM_ERROR,
+ "Failed to apply CSD strategy to callback poa.\n"));
+ ACE_THROW(TestAppException());
+ }
+ ACE_CHECK;
+#endif
+ }
+}
+
+
+void
+ServerApp::servant_setup(ACE_ENV_SINGLE_ARG_DECL)
+{
+ this->foo_servants_.create_and_activate(this->num_servants_,
+ this->orb_.in (),
+ this->poa_.in (),
+ this->ior_filename_prefix_.c_str()
+ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK;
+}
+
+
+void
+ServerApp::collocated_setup(ACE_ENV_SINGLE_ARG_DECL)
+{
+ if (this->num_collocated_clients_ == 0)
+ return;
+
+ this->cb_servants_.create_and_activate(1, // number of callback servants
+ this->cb_poa_.in()
+ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK;
+
+ CallbackServantListType::T_stub_var cb = this->cb_servants_.objref(0);
+
+ unsigned client_id = this->num_remote_clients_;
+
+ for (unsigned i = 0; i < this->num_collocated_clients_; i++)
+ {
+ client_id ++;
+ // Dole out the servant object references in a round-robin fashion.
+ unsigned servant_index = i % this->num_servants_;
+
+ FooServantListType::T_stub_var foo
+ = this->foo_servants_.objref(servant_index);
+ ClientEngine_Handle engine
+ = new Foo_B_SimpleClientEngine(foo.in(), cb.in (), client_id, true);
+ this->collocated_client_task_.add_engine(engine.in());
+ }
+}
+
+
+void
+ServerApp::poa_activate(ACE_ENV_SINGLE_ARG_DECL)
+{
+ PortableServer::POAManager_var poa_manager
+ = this->poa_->the_POAManager(ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK;
+ poa_manager->activate(ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK;
+}
+
+
+void
+ServerApp::run_collocated_clients(ACE_ENV_SINGLE_ARG_DECL)
+{
+ if (this->num_collocated_clients_ > 0)
+ {
+ if (this->collocated_client_task_.open() == -1)
+ {
+ ACE_THROW (TestAppException ());
+ }
+ }
+}
+
+
+void
+ServerApp::run_orb_event_loop(ACE_ENV_SINGLE_ARG_DECL)
+{
+ OrbRunner orb_runner(this->orb_.in(), this->num_orb_threads_);
+ orb_runner.run(ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK;
+ TheAppShutdown->wait ();
+}
+
+
+void
+ServerApp::cleanup()
+{
+}
+
+
+int
+ServerApp::parse_args(int argc, char* argv[])
+{
+ this->exe_name_ = argv[0];
+
+ ACE_Get_Opt get_opts(argc, argv, "p:s:n:t:r:c:k:");
+
+ int c;
+
+ while ((c = get_opts()) != -1)
+ {
+ int result = 0;
+ switch (c)
+ {
+ case 'p':
+ this->ior_filename_prefix_ = get_opts.opt_arg();
+ break;
+
+ case 's':
+ result = set_arg(this->num_servants_,
+ get_opts.opt_arg(),
+ c,
+ "num_servants",
+ 1);
+ break;
+
+ case 'n':
+ result = set_arg(this->num_csd_threads_,
+ get_opts.opt_arg(),
+ c,
+ "num_servants",
+ 1);
+ break;
+
+ case 't':
+ result = set_arg(this->num_orb_threads_,
+ get_opts.opt_arg(),
+ c,
+ "num_orb_threads",
+ 1);
+ break;
+
+ case 'r':
+ result = set_arg(this->num_remote_clients_,
+ get_opts.opt_arg(),
+ c,
+ "num_remote_clients");
+ break;
+
+ case 'c':
+ result = set_arg(this->num_collocated_clients_,
+ get_opts.opt_arg(),
+ c,
+ "num_collocated_clients");
+ break;
+
+ case 'k':
+ result = set_arg(this->collocated_client_kind_,
+ get_opts.opt_arg(),
+ c,
+ "collocated_client_kind");
+ break;
+
+ case '?':
+ this->usage_statement();
+ return 1;
+
+ default:
+ this->usage_statement();
+ return -1;
+ }
+
+ if (result != 0)
+ {
+ return result;
+ }
+ }
+
+ return this->arg_dependency_checks();
+}
+
+void
+ServerApp::usage_statement()
+{
+ ACE_ERROR((LM_ERROR,
+ "Usage: %s [options]\n\n"
+ "OPTIONS:\n\n"
+ "\t[-p <ior_filename_prefix>]\n"
+ "\t[-s <num_servants>]\n"
+ "\t[-n <num_csd_threads>]\n"
+ "\t[-t <num_orb_threads>]\n"
+ "\t[-r <num_remote_clients>]\n"
+ "\t[-c <num_collocated_clients>]\n"
+ "\t[-k <collocated_client_kind>]\n"
+ "\t[-?]\n\n",
+ this->exe_name_.c_str()));
+}
+
+
+int
+ServerApp::arg_dependency_checks()
+{
+ return (this->num_remote_clients_
+ + this->num_collocated_clients_) > 0 ? 0 : -1;
+}
+
+
+int
+ServerApp::set_arg(unsigned& value,
+ const char* arg,
+ char opt,
+ const char* name,
+ int min)
+{
+ int tmp = ACE_OS::atoi(arg);
+
+ if (tmp < min)
+ {
+ ACE_ERROR((LM_ERROR,
+ "Error: -%c <%s> must be integer type with a value of, "
+ "at least, %d.\n", opt, name, min));
+ this->usage_statement();
+ return -1;
+ }
+
+ value = tmp;
+ return 0;
+}
+
+
+PortableServer::POA_ptr
+ServerApp::create_poa(CORBA::ORB_ptr orb,
+ const char* poa_name
+ ACE_ENV_ARG_DECL)
+{
+ // Get the Root POA.
+ PortableServer::POA_var root_poa
+ = RefHelper<PortableServer::POA>::resolve_initial_ref(orb,
+ "RootPOA"
+ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK_RETURN (PortableServer::POA::_nil ());
+
+ // Get the POAManager from the Root POA.
+ PortableServer::POAManager_var poa_manager
+ = root_poa->the_POAManager(ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK_RETURN (PortableServer::POA::_nil ());
+
+ // Create the child POA Policies.
+ CORBA::PolicyList policies(0);
+ policies.length(0);
+
+ // Create the child POA
+ PortableServer::POA_var poa = AppHelper::create_poa(poa_name,
+ root_poa.in(),
+ poa_manager.in(),
+ policies
+ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK_RETURN (PortableServer::POA::_nil ());
+
+ // Give away the child POA_ptr from the POA_var variable.
+ return poa._retn();
+}
+
+
+bool
+ServerApp::check_validity ()
+{
+ return true;
+#if 0
+ // Check whether the clients return any errors.
+ if (this->num_collocated_clients_ > 0
+ && this->collocated_client_task_.failure_count () > 0)
+ {
+ return false;
+ }
+
+ Foo_B_Statistics stats (this->num_remote_clients_,
+ this->num_collocated_clients_);
+
+ Foo_B_SimpleClientEngine::expected_results (stats);
+
+ for (unsigned i = 0; i < this->num_servants_; i++)
+ {
+ this->foo_servants_.servant(i)->gather_stats (stats);
+ }
+
+ if (this->num_collocated_clients_ > 0)
+ {
+ this->cb_servants_.servant (0)->gather_stats (stats);
+ }
+
+ return stats.actual_vs_expected ();
+#endif
+}
+
diff --git a/TAO/tests/CSD_Strategy_Tests/Broken/ServerApp.h b/TAO/tests/CSD_Strategy_Tests/Broken/ServerApp.h
new file mode 100644
index 00000000000..c90b7671534
--- /dev/null
+++ b/TAO/tests/CSD_Strategy_Tests/Broken/ServerApp.h
@@ -0,0 +1,85 @@
+// $Id$
+#ifndef SERVERAPP_H
+#define SERVERAPP_H
+
+#include "TestAppBase.h"
+#include "ServantList_T.h"
+#include "ClientTask.h"
+#include "Foo_B_i.h"
+#include "Callback_i.h"
+#include "tao/CSD_ThreadPool/CSD_TP_Strategy.h"
+#include "ace/SString.h"
+
+
+class ServerApp : public TestAppBase
+{
+ public:
+
+ ServerApp();
+ virtual ~ServerApp();
+
+
+ protected:
+
+ virtual int run_i(int argc, char* argv[] ACE_ENV_ARG_DECL);
+
+
+ private:
+
+ // These are all called, in order, by the run_i() method.
+ int init(int argc, char* argv[] ACE_ENV_ARG_DECL);
+ void poa_setup(ACE_ENV_SINGLE_ARG_DECL);
+ void csd_setup(ACE_ENV_SINGLE_ARG_DECL);
+ void servant_setup(ACE_ENV_SINGLE_ARG_DECL);
+ void collocated_setup(ACE_ENV_SINGLE_ARG_DECL);
+ void poa_activate(ACE_ENV_SINGLE_ARG_DECL);
+ void run_collocated_clients(ACE_ENV_SINGLE_ARG_DECL);
+ void run_orb_event_loop(ACE_ENV_SINGLE_ARG_DECL);
+ bool check_validity ();
+ void cleanup();
+
+
+ // Helper methods used by the methods above.
+ int parse_args(int argc, char* argv[]);
+
+ int set_arg(unsigned& value,
+ const char* arg,
+ char opt,
+ const char* name,
+ int min = 0);
+
+ void usage_statement();
+ int arg_dependency_checks();
+
+
+ PortableServer::POA_ptr create_poa(CORBA::ORB_ptr orb,
+ const char* poa_name
+ ACE_ENV_ARG_DECL);
+
+ typedef ServantList<Foo_B_i> FooServantListType;
+ typedef ServantList<Callback_i> CallbackServantListType;
+
+ CORBA::ORB_var orb_;
+ PortableServer::POA_var poa_;
+ TAO::CSD::TP_Strategy_Handle tp_strategy_;
+
+ PortableServer::POA_var cb_poa_;
+ TAO::CSD::TP_Strategy_Handle cb_tp_strategy_;
+
+ FooServantListType foo_servants_;
+ CallbackServantListType cb_servants_;
+
+ ClientTask collocated_client_task_;
+
+ ACE_CString exe_name_;
+
+ ACE_CString ior_filename_prefix_;
+ unsigned num_servants_;
+ unsigned num_csd_threads_;
+ unsigned num_orb_threads_;
+ unsigned num_remote_clients_;
+ unsigned num_collocated_clients_;
+ unsigned collocated_client_kind_;
+};
+
+#endif
diff --git a/TAO/tests/CSD_Strategy_Tests/Broken/client_main.cpp b/TAO/tests/CSD_Strategy_Tests/Broken/client_main.cpp
new file mode 100644
index 00000000000..3814bef5ff9
--- /dev/null
+++ b/TAO/tests/CSD_Strategy_Tests/Broken/client_main.cpp
@@ -0,0 +1,7 @@
+// $Id$
+#include "ClientApp.h"
+#include "TestAppMain.h"
+
+TEST_APP_MAIN(ClientApp)
+
+
diff --git a/TAO/tests/CSD_Strategy_Tests/Broken/run_test.pl b/TAO/tests/CSD_Strategy_Tests/Broken/run_test.pl
new file mode 100755
index 00000000000..6d3802bc59f
--- /dev/null
+++ b/TAO/tests/CSD_Strategy_Tests/Broken/run_test.pl
@@ -0,0 +1,186 @@
+eval '(exit $?0)' && eval 'exec perl -S $0 ${1+"$@"}'
+ & eval 'exec perl -S $0 $argv:q'
+ if 0;
+
+# $Id$
+# -*- perl -*-
+
+use lib '../../../../bin';
+use PerlACE::Run_Test;
+
+my $status = 0;
+
+my $iorfname_prefix = "servant";
+my $num_servants = 1;
+my $num_orb_threads = 1;
+my $num_remote_clients = 1;
+my $num_csd_threads = 1;
+my $num_collocated_clients = 0;
+my $collocated_client_kind = 0;
+my $client_kind = 0;
+
+my $i;
+my $j;
+my @iorfile;
+
+my $ARGC = @ARGV;
+
+if ($ARGC > 0)
+{
+ if ($ARGC > 1)
+ {
+ print STDERR "ERROR: Too many command-line arguments for $0.\n";
+ exit 1;
+ }
+
+ my $subtest = $ARGV[0];
+
+ if ($subtest eq 'remote')
+ {
+ $num_remote_clients = 40;
+ }
+ elsif ($subtest eq 'collocated')
+ {
+ $num_remote_clients = 0;
+ $num_collocated_clients = 1;
+ $num_csd_threads=1;
+ }
+ elsif ($subtest eq 'remote_orbthreads')
+ {
+ $num_orb_threads = 5;
+ $num_remote_clients = 40;
+ }
+ elsif ($subtest eq 'remote_servants')
+ {
+ $num_servants = 5;
+ $num_remote_clients = 40;
+ }
+ elsif ($subtest eq 'remote_csdthreads')
+ {
+ $num_csd_threads = 5;
+ $num_remote_clients = 40;
+ }
+ elsif ($subtest eq 'remote_big')
+ {
+ $num_csd_threads = 5;
+ $num_servants = 10;
+ $num_orb_threads = 4;
+ $num_remote_clients = 40;
+ }
+ elsif ($subtest eq 'big')
+ {
+ $num_csd_threads = 5;
+ $num_servants = 10;
+ $num_orb_threads = 4;
+ $num_remote_clients = 40;
+ $num_collocated_clients = 40;
+ }
+ elsif ($subtest eq 'usage')
+ {
+ print STDOUT "Usage: $0 [<subtest>]\n" .
+ "\n" .
+ "Supported <subtest> values:\n" .
+ "\n" .
+ "\tremote\n" .
+ "\tcollocated\n" .
+ "\tremote_orbthreads\n" .
+ "\tremote_servants\n" .
+ "\tremote_csdthreads\n" .
+ "\tremote_big\n" .
+ "\tusage\n" .
+ "\n";
+ exit 0;
+ }
+ else
+ {
+ print STDERR "ERROR: invalid subtest argument for $0: $subtest\n";
+ exit 1;
+ }
+}
+
+#Delete old ior files.
+for ($i = 0; $i < $num_servants; $i++) {
+ my $servant_id = sprintf("%02d", ($i + 1));
+ $iorfile[$i] = PerlACE::LocalFile($iorfname_prefix . "_$servant_id.ior");
+ unlink $iorfile[$i];
+}
+
+if (PerlACE::is_vxworks_test()) {
+ $SV = new PerlACE::ProcessVX ("server_main",
+# "-ORBNegotiateCodesets 0 " .
+ "-p $iorfname_prefix " .
+ "-s $num_servants " .
+ "-n $num_csd_threads " .
+ "-t $num_orb_threads " .
+ "-r $num_remote_clients " .
+ "-c $num_collocated_clients " .
+ "-k $collocated_client_kind");
+}
+else {
+ $SV = new PerlACE::Process("server_main",
+# "-ORBNegotiateCodesets 0 " .
+ "-p $iorfname_prefix " .
+ "-s $num_servants " .
+ "-n $num_csd_threads " .
+ "-t $num_orb_threads " .
+ "-r $num_remote_clients " .
+ "-c $num_collocated_clients " .
+ "-k $collocated_client_kind");
+}
+
+
+
+$SV->Spawn();
+
+# Wait for the servant ior files created by server.
+for ($i = 0; $i < $num_servants; $i++) {
+ if (PerlACE::waitforfile_timed
+ ($iorfile[$i],
+ $PerlACE::wait_interval_for_process_creation) == -1) {
+ print STDERR "ERROR: cannot find file <$iorfile[$i]>\n";
+ $SV->Kill();
+ $SV->TimedWait(1);
+ exit 1;
+ }
+}
+
+my $count = 0;
+
+for ($i = 0; $i < $num_remote_clients; $i++)
+{
+ $client_id = $i + 1;
+
+ $j = $i % $num_servants;
+
+ $CLS[$i] = new PerlACE::Process("client_main",
+ "-i file://$iorfile[$j] ".
+ "-k $client_kind ".
+ "-n $client_id");
+ $CLS[$i]->Spawn();
+}
+
+for ($i = 0; $i < $num_remote_clients; $i++)
+{
+ $client = $CLS[$i]->WaitKill(60);
+
+ if ($client != 0)
+ {
+ print STDERR "ERROR: client $i returned $client\n";
+ $status = 1;
+ }
+}
+
+
+$server = $SV->WaitKill(60);
+
+if ($server != 0) {
+ print STDERR "ERROR: server returned $server\n";
+ $status = 1;
+}
+
+#Delete ior files generated by this run.
+for ($i = 0; $i < $num_servants; $i++) {
+ unlink $iorfile[$i];
+}
+
+exit $status;
diff --git a/TAO/tests/CSD_Strategy_Tests/Broken/server_main.cpp b/TAO/tests/CSD_Strategy_Tests/Broken/server_main.cpp
new file mode 100644
index 00000000000..82e987f6d41
--- /dev/null
+++ b/TAO/tests/CSD_Strategy_Tests/Broken/server_main.cpp
@@ -0,0 +1,5 @@
+// $Id$
+#include "ServerApp.h"
+#include "TestAppMain.h"
+
+TEST_APP_MAIN(ServerApp)
diff --git a/TAO/tests/CSD_Strategy_Tests/TP_Common/CSD_TP_Test_Lib.mpc b/TAO/tests/CSD_Strategy_Tests/TP_Common/CSD_TP_Test_Lib.mpc
new file mode 100644
index 00000000000..453ea84a1f0
--- /dev/null
+++ b/TAO/tests/CSD_Strategy_Tests/TP_Common/CSD_TP_Test_Lib.mpc
@@ -0,0 +1,39 @@
+//$Id$
+project : taolib_with_idl, csd_threadpool {
+ sharedname = CSD_TP_Test
+ dynamicflags = CSD_TP_TEST_BUILD_DLL
+ idlflags += -Wb,export_macro=CSD_TP_Test_Export \
+ -Wb,export_include=CSD_TP_Test_Export.h
+ includes += $(TAO_ROOT)/tao
+
+ IDL_Files {
+ FooException.idl
+ TestAppException.idl
+ CancelledException.idl
+ CustomException.idl
+ }
+
+ Source_Files {
+ AppHelper.cpp
+ AppShutdown.cpp
+ ClientEngine.cpp
+ ClientTask.cpp
+ OrbRunner.cpp
+ OrbTask.cpp
+ TestAppBase.cpp
+ StatisticsHelper.cpp
+ OrbShutdownTask.cpp
+ FooExceptionC.cpp
+ FooExceptionS.cpp
+ TestAppExceptionC.cpp
+ TestAppExceptionS.cpp
+ CancelledExceptionC.cpp
+ CancelledExceptionS.cpp
+ CustomExceptionC.cpp
+ CustomExceptionS.cpp
+ }
+
+ Template_Files {
+ ServantList_T.cpp
+ }
+}
diff --git a/TAO/tests/CSD_Strategy_Tests/TP_Common/ClientTask.cpp b/TAO/tests/CSD_Strategy_Tests/TP_Common/ClientTask.cpp
new file mode 100644
index 00000000000..00d92a17608
--- /dev/null
+++ b/TAO/tests/CSD_Strategy_Tests/TP_Common/ClientTask.cpp
@@ -0,0 +1,116 @@
+// $Id$
+#include "ClientTask.h"
+#include "ClientEngine.h"
+#include "AppShutdown.h"
+#include "ace/SString.h"
+
+
+ClientTask::ClientTask(bool shutdown_after_done)
+: shutdown_after_done_(shutdown_after_done),
+ failure_count_(0)
+{
+}
+
+
+ClientTask::~ClientTask()
+{
+}
+
+
+void
+ClientTask::add_engine(ClientEngine* engine)
+{
+ // Pass in false so that _add_ref() is called.
+ ClientEngine_Handle engine_handle(engine,false);
+ this->engines_.push_back(engine_handle);
+}
+
+
+int
+ClientTask::open(void*)
+{
+ size_t num_threads = this->engines_.size();
+
+ if (num_threads == 0)
+ {
+ ACE_ERROR_RETURN((LM_ERROR,
+ "(%P|%t) ClientTask cannot activate 0 threads.\n"),
+ -1);
+ }
+
+ if (this->activate(THR_NEW_LWP | THR_JOINABLE, num_threads) != 0)
+ {
+ // Assumes that when activate returns non-zero return code that
+ // no threads were activated.
+ ACE_ERROR_RETURN((LM_ERROR,
+ "(%P|%t) ClientTask failed to activate "
+ "the %d client threads.\n", num_threads),
+ -1);
+ }
+
+ return 0;
+}
+
+
+int
+ClientTask::svc()
+{
+ ClientEngine_Handle engine;
+
+ {
+ GuardType guard(this->lock_);
+ this->engines_.get(engine, this->engines_.size() - 1);
+ this->engines_.pop_back();
+ }
+
+ ACE_TRY_NEW_ENV
+ {
+ bool exec_ret = engine->execute(ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+ if (exec_ret == false)
+ {
+ GuardType guard(this->lock_);
+ this->failure_count_ ++;
+ }
+ }
+ ACE_CATCHANY
+ {
+ ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION,
+ "ClientTask::svc Caught exception from execute():");
+
+ GuardType guard(this->lock_);
+ this->failure_count_ ++;
+ }
+ ACE_CATCHALL
+ {
+ ACE_ERROR((LM_ERROR,
+ "(%P|%t) ClientTask::svc caught unknown (...) exception "\
+ "in execute() " ));
+ GuardType guard(this->lock_);
+ this->failure_count_ ++;
+ }
+ ACE_ENDTRY;
+
+ if(this->shutdown_after_done_)
+ {
+ // This is used to shutdown orb for a client application
+ // with an orb running.
+ TheAppShutdown->client_done ();
+ }
+
+ return 0;
+}
+
+
+int
+ClientTask::close(u_long)
+{
+ return 0;
+}
+
+
+unsigned
+ClientTask::failure_count () const
+{
+ return this->failure_count_;
+}
diff --git a/TAO/tests/CSD_Strategy_Tests/TP_Foo_A/Foo_A_i.h b/TAO/tests/CSD_Strategy_Tests/TP_Foo_A/Foo_A_i.h
new file mode 100644
index 00000000000..6361baa6ca7
--- /dev/null
+++ b/TAO/tests/CSD_Strategy_Tests/TP_Foo_A/Foo_A_i.h
@@ -0,0 +1,43 @@
+// $Id$
+#ifndef FOO_A_I_H
+#define FOO_A_I_H
+
+#include "CSD_TP_Foo_A_Export.h"
+#include "Foo_AS.h"
+#include "Foo_A_Statistics.h"
+
+
+class CSD_TP_Foo_A_Export Foo_A_i : public virtual POA_Foo_A
+{
+ public:
+
+ Foo_A_i();
+ virtual ~Foo_A_i();
+
+ virtual void op1(ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC((CORBA::SystemException));
+
+ virtual void op2(CORBA::Long value ACE_ENV_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC((CORBA::SystemException));
+
+ virtual CORBA::Long op3(CORBA::Long value ACE_ENV_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC((CORBA::SystemException));
+
+ virtual void op4(CORBA::Long value ACE_ENV_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC((CORBA::SystemException));
+
+ virtual void op5(ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC((CORBA::SystemException, FooException));
+
+ virtual void done(ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC((CORBA::SystemException));
+
+ void gather_stats (Foo_A_Statistics& stats) ;
+
+ private:
+
+ LongVector in_values_ [5];
+ unsigned op_count_ [5];
+};
+
+#endif
diff --git a/TAO/tests/CSD_Strategy_Tests/TP_Foo_B/Callback_i.cpp b/TAO/tests/CSD_Strategy_Tests/TP_Foo_B/Callback_i.cpp
new file mode 100644
index 00000000000..8438b572ce2
--- /dev/null
+++ b/TAO/tests/CSD_Strategy_Tests/TP_Foo_B/Callback_i.cpp
@@ -0,0 +1,28 @@
+// $Id$
+#include "Callback_i.h"
+
+Callback_i::Callback_i()
+ : num_callbacks_(0)
+{
+}
+
+
+Callback_i::~Callback_i ()
+{
+}
+
+
+void
+Callback_i::test_method(ACE_ENV_SINGLE_ARG_DECL_NOT_USED)
+ ACE_THROW_SPEC((CORBA::SystemException))
+{
+ this->num_callbacks_ ++;
+}
+
+
+void
+Callback_i::gather_stats(Foo_B_Statistics& stats)
+{
+ stats.actual_callbacks(this->num_callbacks_);
+}
+
diff --git a/TAO/tests/CSD_Strategy_Tests/TP_Foo_B/Callback_i.h b/TAO/tests/CSD_Strategy_Tests/TP_Foo_B/Callback_i.h
new file mode 100644
index 00000000000..8948435ceed
--- /dev/null
+++ b/TAO/tests/CSD_Strategy_Tests/TP_Foo_B/Callback_i.h
@@ -0,0 +1,31 @@
+// $Id$
+#ifndef CALLBACK_I_H
+#define CALLBACK_I_H
+
+#include "CSD_TP_Foo_B_Export.h"
+#include "CallbackS.h"
+#include "Foo_B_Statistics.h"
+
+
+class CSD_TP_Foo_B_Export Callback_i
+ : public virtual POA_Callback
+{
+ public:
+
+ Callback_i();
+
+ virtual ~Callback_i();
+
+ virtual void test_method(ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC((CORBA::SystemException));
+
+ void gather_stats(Foo_B_Statistics& stats);
+
+
+ private:
+
+ unsigned num_callbacks_;
+};
+
+
+#endif
diff --git a/TAO/tests/CSD_Strategy_Tests/TP_Foo_B/Foo_B.idl b/TAO/tests/CSD_Strategy_Tests/TP_Foo_B/Foo_B.idl
new file mode 100644
index 00000000000..2b6b7382fab
--- /dev/null
+++ b/TAO/tests/CSD_Strategy_Tests/TP_Foo_B/Foo_B.idl
@@ -0,0 +1,70 @@
+// $Id$
+#ifndef FOO_B_IDL
+#define FOO_B_IDL
+
+#include "FooException.idl"
+#include "Callback.idl"
+
+
+typedef sequence<char, 32> Bounded_Var_Size;
+typedef sequence<char> Unbounded_Var_Size;
+typedef long Fixed_Array[20];
+typedef string Var_Array [3];
+
+struct TimeOfDay {
+ short hour; // 0 - 23
+ short minute; // 0 - 59
+ short second; // 0 - 59
+};
+interface Foo_B
+{
+ /// void return-type, no arguments
+ void op1();
+
+ /// void return-type, 1 "in" argument
+ void op2(in long value);
+
+ /// long return-type, 1 "in" argument
+ long op3(in long value);
+
+ /// one-way version of op2
+ oneway void op4(in long value);
+
+ /// Operation that always raises an exception.
+ void op5() raises (FooException);
+
+ /// Test fixed size "in" argument and the "inout" parameter.
+ boolean op6(in TimeOfDay t,
+ inout string message);
+
+ /// Callback test.
+
+ /// Pass the callback object and the server invoke operation on
+ /// the callback object reference.
+ void op7 (in Callback cb) raises (FooException);
+
+ oneway void test_unbounded_string_arg(in string message);
+
+ oneway void test_bounded_string_arg(in string<20> message);
+
+ oneway void test_fixed_array_arg(in Fixed_Array message);
+
+ oneway void test_var_array_arg(in Var_Array messages);
+
+ oneway void test_bounded_var_size_arg(in Bounded_Var_Size message);
+
+ oneway void test_unbounded_var_size_arg(in Unbounded_Var_Size message);
+
+ oneway void test_fixed_size_arg (in TimeOfDay t);
+
+ oneway void test_special_basic_arg(in boolean value, in long client_id);
+
+ oneway void test_objref_arg (in Callback cb);
+
+ /// Client calls this last. The last client to claim that it is
+ /// done will cause the server to shutdown.
+ void done();
+};
+
+
+#endif
diff --git a/TAO/tests/CSD_Strategy_Tests/TP_Foo_B/Foo_B_Statistics.cpp b/TAO/tests/CSD_Strategy_Tests/TP_Foo_B/Foo_B_Statistics.cpp
new file mode 100644
index 00000000000..6cf19e95125
--- /dev/null
+++ b/TAO/tests/CSD_Strategy_Tests/TP_Foo_B/Foo_B_Statistics.cpp
@@ -0,0 +1,218 @@
+// $Id$
+#include "Foo_B_Statistics.h"
+#include "Foo_B_ClientEngine.h"
+
+extern const char* ONEWAY_ARG_TEST_STR;
+extern CORBA::Boolean special_value;
+
+Foo_B_Statistics::Foo_B_Statistics(unsigned num_remote_clients,
+ unsigned num_collcated_clients)
+: num_clients_ (num_remote_clients + num_collcated_clients),
+ num_collcated_clients_ (num_collcated_clients),
+ expected_callbacks_ (0),
+ actual_callbacks_ (0),
+ servant_error_count_ (0)
+{
+ for (unsigned i = 0; i < 16; i++)
+ {
+ this->expected_op_count_[i] = 0;
+ this->actual_op_count_[i] = 0;
+ }
+}
+
+
+Foo_B_Statistics::~Foo_B_Statistics()
+{
+}
+
+
+void
+Foo_B_Statistics::expected(unsigned op_num, unsigned count, In_Value_Type type)
+{
+ this->expected_op_count_[op_num-1] = count * this->num_clients_;
+ this->expected_in_value_type_[op_num-1] = type;
+}
+
+
+void
+Foo_B_Statistics::actual(unsigned op_num, unsigned count)
+{
+ this->actual_op_count_[op_num-1] += count;
+}
+
+
+void
+Foo_B_Statistics::actual(unsigned op_num, LongVector lv)
+{
+ unsigned sz = lv.size();
+ for (unsigned i = 0; i < sz; i++)
+ {
+ this->actual_in_long_[op_num-1].push_back (lv[i]);
+ }
+}
+
+
+void
+Foo_B_Statistics::actual(unsigned op_num, StringVector sv)
+{
+ unsigned sz = sv.size();
+ for (unsigned i = 0; i < sz; i++)
+ {
+ this->actual_in_string_[op_num-1].push_back (sv[i]);
+ }
+}
+
+
+void
+Foo_B_Statistics::expected_callbacks (unsigned num_cbs)
+{
+ expected_callbacks_ = num_cbs * this->num_collcated_clients_;
+}
+
+
+void
+Foo_B_Statistics::actual_callbacks (unsigned num_cbs)
+{
+ actual_callbacks_ += num_cbs;
+}
+
+
+void
+Foo_B_Statistics::servant_error_count (unsigned error_count)
+{
+ this->servant_error_count_ += error_count;
+}
+
+
+bool
+Foo_B_Statistics::actual_vs_expected()
+{
+ bool ret = true;
+
+ // Verify the checking results in servant operation code.
+ if (this->servant_error_count_ > 0)
+ {
+ ACE_ERROR((LM_ERROR, "(%P|%t)Foo_B_Statistics::actual_vs_expected "
+ "servant_error_count_=%u\n", servant_error_count_));
+ if (ret)
+ ret = false;
+ }
+
+ // Verify the number of callbacks received for the collocated
+ // client.
+ if (actual_callbacks_ != expected_callbacks_)
+ {
+ ACE_ERROR((LM_ERROR, "(%P|%t)Foo_B_Statistics::actual_vs_expected "
+ "actual_callbacks_=%u expected_callbacks_=%u \n",
+ actual_callbacks_, expected_callbacks_));
+ if (ret)
+ ret = false;
+ }
+
+ // Verify the number of operations server received.
+ for (unsigned int z = 0; z < 16; z++)
+ {
+ if (this->expected_op_count_[z] != this->actual_op_count_[z])
+ {
+ ACE_ERROR((LM_ERROR, "(%P|%t)Foo_B_Statistics::actual_vs_expected "
+ "expected_op_count_[%u]=%u actual_op_count_[%u]=%u \n",
+ z, expected_op_count_[z], z, actual_op_count_[z]));
+ if (ret)
+ ret = false;
+ }
+ }
+
+ Foo_B_Statistics stats (1, 0);
+ Foo_B_ClientEngine::expected_results (stats);
+
+ for (unsigned i = 0; i < 16; i++)
+ {
+ switch (expected_in_value_type_[i])
+ {
+ case FOO_B_STAT_LONG:
+ {
+ unsigned actual_size
+ = this->actual_in_long_[i].size ();
+ unsigned expected_size
+ = this->num_clients_ * stats.expected_op_count_[i];
+ if (actual_size != expected_size)
+ {
+ ACE_ERROR((LM_ERROR, "(%P|%t)Foo_B_Statistics::actual_vs_expected "
+ "actual_size=%u expected_size=%u\n", actual_size, expected_size));
+ if (ret)
+ ret = false;
+ }
+ sort (this->actual_in_long_[i]);
+
+ for (unsigned j = 0; j < actual_size - 1; j++)
+ {
+ if (this->actual_in_long_[i][j] != this->actual_in_long_[i][j + 1] - 1)
+ {
+ ACE_ERROR((LM_ERROR, "(%P|%t)Foo_B_Statistics::actual_vs_expected "
+ "actual_in_long_[%u][%u]=%d actual_in_long_[%u][%u]=%d\n",
+ i, j, actual_in_long_[i][j], i, j+1, actual_in_long_[i][j + 1]));
+ if (ret)
+ ret = false;
+ }
+ }
+ }
+ break;
+
+ case FOO_B_STAT_STRING:
+ {
+ unsigned actual_size
+ = this->actual_in_string_[i].size ();
+ unsigned expected_size
+ = this->num_clients_ * stats.expected_op_count_[i];
+ if (actual_size != expected_size)
+ {
+ ACE_ERROR((LM_ERROR, "(%P|%t)Foo_B_Statistics::actual_vs_expected "
+ "actual_size=%u expected_size=%u\n", actual_size, expected_size));
+ if (ret)
+ ret = false;
+ }
+
+ LongVector lvec;
+ char buffer[50];
+
+ for (unsigned k = 0; k < actual_size; k++)
+ {
+ unsigned client_id;
+ sscanf (this->actual_in_string_[i][k].c_str(), "%u %s", &client_id, buffer);
+ if (ACE_OS::strcmp (buffer, ONEWAY_ARG_TEST_STR) != 0)
+ {
+ ACE_ERROR((LM_ERROR, "(%P|%t)Foo_B_Statistics::actual_vs_expected "
+ "actual_in_string_[%u][%u]=%s \n",
+ i, k, actual_in_string_[i][k].c_str()));
+ if (ret)
+ ret = false;
+ }
+ lvec.push_back (client_id);
+ }
+
+ sort (lvec);
+
+ for (unsigned j = 0; j < actual_size - 1; j++)
+ {
+ if (lvec[j] != lvec[j + 1] - 1)
+ {
+ ACE_ERROR((LM_ERROR, "(%P|%t)Foo_B_Statistics::actual_vs_expected "
+ "lvec[%u]=%d lvec[%u]=%d\n",
+ j, lvec[j], j+1, lvec[j + 1]));
+ if (ret)
+ ret = false;
+ }
+ }
+ }
+ break;
+
+ case FOO_B_STAT_NONE:
+ default:
+ break;
+ }
+
+ }
+
+ return ret;
+}
+
diff --git a/TAO/tests/CSD_Strategy_Tests/TP_Foo_B/Foo_B_i.cpp b/TAO/tests/CSD_Strategy_Tests/TP_Foo_B/Foo_B_i.cpp
new file mode 100644
index 00000000000..5ee8d0b8690
--- /dev/null
+++ b/TAO/tests/CSD_Strategy_Tests/TP_Foo_B/Foo_B_i.cpp
@@ -0,0 +1,297 @@
+// $Id$
+#include "Foo_B_i.h"
+#include "AppShutdown.h"
+#include "TestAppExceptionC.h"
+#include "ace/OS.h"
+#include "ace/SString.h"
+
+
+Foo_B_i::Foo_B_i()
+: error_count_ (0)
+{
+ for (unsigned i = 0; i < 16; i++)
+ {
+ op_count_[i] = 0;
+ }
+}
+
+
+Foo_B_i::~Foo_B_i()
+{
+}
+
+
+void
+Foo_B_i::op1(ACE_ENV_SINGLE_ARG_DECL_NOT_USED)
+ ACE_THROW_SPEC((CORBA::SystemException))
+{
+ this->op_count_[0] ++;
+}
+
+
+void
+Foo_B_i::op2(CORBA::Long value ACE_ENV_ARG_DECL_NOT_USED)
+ ACE_THROW_SPEC((CORBA::SystemException))
+{
+ this->op_count_[1] ++;
+ this->in_long_[1].push_back (value);
+}
+
+
+CORBA::Long
+Foo_B_i::op3(CORBA::Long value ACE_ENV_ARG_DECL_NOT_USED)
+ ACE_THROW_SPEC((CORBA::SystemException))
+{
+ this->op_count_[2] ++;
+ this->in_long_[2].push_back (value);
+ return value;
+}
+
+
+void
+Foo_B_i::op4(CORBA::Long value ACE_ENV_ARG_DECL_NOT_USED)
+ ACE_THROW_SPEC((CORBA::SystemException))
+{
+ this->op_count_[3] ++;
+ this->in_long_[3].push_back (value);
+}
+
+
+void
+Foo_B_i::op5(ACE_ENV_SINGLE_ARG_DECL)
+ ACE_THROW_SPEC((CORBA::SystemException, FooException))
+{
+ this->op_count_[4] ++;
+ ACE_THROW (FooException());
+}
+
+
+CORBA::Boolean
+Foo_B_i::op6(const TimeOfDay& t,
+ char*& message
+ ACE_ENV_ARG_DECL_NOT_USED)
+ ACE_THROW_SPEC((CORBA::SystemException))
+{
+ this->op_count_[5] ++;
+ char buf [20];
+ ACE_OS::sprintf (buf, "%s %d:%d:%d", message, t.hour, t.minute, t.second);
+ CORBA::string_free (message);
+ message = CORBA::string_dup (buf);
+
+ return 1;
+}
+
+
+void
+Foo_B_i::op7(Callback_ptr cb
+ ACE_ENV_ARG_DECL)
+ ACE_THROW_SPEC((CORBA::SystemException,
+ FooException))
+{
+ this->op_count_[6] ++;
+
+ if (CORBA::is_nil (cb))
+ {
+ error_count_ ++;
+ ACE_ERROR((LM_ERROR, "(%P|%t)Foo_B_i::op7 nil callback error_count %u\n",
+ error_count_));
+ ACE_THROW (FooException ());
+ }
+ else
+ {
+ cb->test_method (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK;
+ }
+}
+
+
+void
+Foo_B_i::test_unbounded_string_arg(const char* message
+ ACE_ENV_ARG_DECL_NOT_USED)
+ ACE_THROW_SPEC((CORBA::SystemException))
+{
+ this->op_count_[7] ++;
+ //ACE_DEBUG((LM_DEBUG, ACE_TEXT("(%P|%t)Foo_B_i::test_unbounded_string_arg ")
+ // ACE_TEXT("got unbounded string %s\n"),
+ // message));
+ this->in_string_[7].push_back (message);
+}
+
+
+void
+Foo_B_i::test_bounded_string_arg(const char* message
+ ACE_ENV_ARG_DECL_NOT_USED)
+ ACE_THROW_SPEC((CORBA::SystemException))
+{
+ this->op_count_[8] ++;
+ //ACE_DEBUG((LM_DEBUG, ACE_TEXT("(%P|%t)Foo_B_i::test_bounded_string_arg ")
+ // ACE_TEXT("got bounded string %s\n"),
+ // message));
+ this->in_string_[8].push_back (message);
+}
+
+
+void
+Foo_B_i::test_fixed_array_arg(const Fixed_Array message
+ ACE_ENV_ARG_DECL_NOT_USED)
+ ACE_THROW_SPEC((CORBA::SystemException))
+{
+ this->op_count_[9] ++;
+
+ for (unsigned i = 0; i < 19; i++)
+ {
+ //ACE_DEBUG((LM_DEBUG, ACE_TEXT("(%P|%t)Foo_B_i::test_fixed_array_arg ")
+ // ACE_TEXT("got fixed array[i] = %d\n"),
+ // i, message[i]));
+
+ if (message[i] != message[i + 1] -1)
+ {
+ error_count_ ++;
+ ACE_ERROR((LM_ERROR, "(%P|%t)Foo_B_i::test_fixed_array_arg: value checking failed "
+ "- message[%u]=%d message[%u]=%d error_count=%u\n",
+ i, message[i], i+1, message[i + 1], error_count_));
+ break;
+ }
+ }
+
+
+ this->in_long_[9].push_back (message[0]);
+}
+
+
+void
+Foo_B_i::test_bounded_var_size_arg(const Bounded_Var_Size& message
+ ACE_ENV_ARG_DECL_NOT_USED)
+ ACE_THROW_SPEC((CORBA::SystemException))
+{
+ this->op_count_[10] ++;
+ //ACE_DEBUG((LM_DEBUG, ACE_TEXT("(%P|%t)Foo_B_i::test_bounded_var_size_arg ")
+ // ACE_TEXT("got var array chars %s\n"),
+ // message.get_buffer ()));
+ this->in_string_[10].push_back (message.get_buffer ());
+}
+
+
+void
+Foo_B_i::test_unbounded_var_size_arg(const Unbounded_Var_Size& message
+ ACE_ENV_ARG_DECL_NOT_USED)
+ ACE_THROW_SPEC((CORBA::SystemException))
+{
+ this->op_count_[11] ++;
+ //ACE_DEBUG((LM_DEBUG, ACE_TEXT("(%P|%t)Foo_B_i::test_unbounded_var_size_arg ")
+ // ACE_TEXT("got var array chars %s\n"),
+ // message.get_buffer ()));
+ this->in_string_[11].push_back (message.get_buffer ());
+}
+
+
+void
+Foo_B_i::test_fixed_size_arg(const TimeOfDay& t
+ ACE_ENV_ARG_DECL_NOT_USED)
+ ACE_THROW_SPEC ((CORBA::SystemException))
+{
+ ACE_UNUSED_ARG(t);
+
+ this->op_count_[12] ++;
+ //ACE_DEBUG((LM_DEBUG, ACE_TEXT("(%P|%t)Foo_B_i::test_fixed_size_arg ")
+ // ACE_TEXT("got timeofday %d:%d:%d\n"),
+ // t.hour, t.minute, t.second));
+}
+
+
+void
+Foo_B_i::test_var_array_arg(const Var_Array messages
+ ACE_ENV_ARG_DECL_NOT_USED)
+ ACE_THROW_SPEC((CORBA::SystemException))
+{
+ this->op_count_[13] ++;
+ //ACE_DEBUG((LM_DEBUG, ACE_TEXT("(%P|%t)Foo_B_i::test_var_array_arg ")
+ // ACE_TEXT(" %s \n"), messages[0].in ()));
+ //ACE_DEBUG((LM_DEBUG, ACE_TEXT("(%P|%t)Foo_B_i::test_var_array_arg ")
+ // ACE_TEXT(" %s \n"), messages[1].in ()));
+ //ACE_DEBUG((LM_DEBUG, ACE_TEXT("(%P|%t)Foo_B_i::test_var_array_arg ")
+ // ACE_TEXT(" %s \n"), messages[2].in ()));
+ unsigned cur_client_id = 0;
+
+ for (unsigned i = 0 ; i < 3; i ++)
+ {
+ unsigned client_id = 0;
+ unsigned str_id = 0;
+ char test_str[20];
+ sscanf (messages[i].in (), "%u %s %u", &client_id, test_str, &str_id);
+
+ if (str_id != i)
+ {
+ error_count_ ++;
+ ACE_ERROR((LM_ERROR, "(%P|%t)Foo_B_i::test_var_array_arg: str_id checking failed "
+ "- str_id=%u i=%u error_count_=%u\n", str_id, i, error_count_));
+ }
+
+ if (i == 0)
+ {
+ cur_client_id = client_id;
+ }
+ else if (client_id != cur_client_id)
+ {
+ error_count_ ++;
+ ACE_ERROR((LM_ERROR, "(%P|%t)Foo_B_i::test_var_array_arg: client_id checking failed "
+ "- client_id=%u cur_client_id=%u error_count_=%u\n",
+ client_id, cur_client_id, error_count_));
+ }
+ }
+ this->in_string_[13].push_back (messages[0].in ());
+}
+
+
+void
+Foo_B_i::test_special_basic_arg(CORBA::Boolean value,
+ CORBA::Long client_id
+ ACE_ENV_ARG_DECL_NOT_USED)
+ ACE_THROW_SPEC((CORBA::SystemException))
+{
+ this->op_count_[14] ++;
+ //ACE_DEBUG((LM_DEBUG, ACE_TEXT("(%P|%t)Foo_B_i::test_special_basic_arg ")
+ // ACE_TEXT(" got special basic arg: %d \n"), value));
+
+ CORBA::Boolean expected_special_value = client_id % 2;
+ if (expected_special_value != value)
+ {
+ error_count_ ++;
+ ACE_ERROR((LM_ERROR, "(%P|%t)Foo_B_i::test_special_basic_arg "
+ "value checking failed - client_id %d got value %d error_count=%u\n",
+ client_id, value, error_count_));
+ }
+}
+
+
+void
+Foo_B_i::test_objref_arg(Callback_ptr cb
+ ACE_ENV_ARG_DECL_NOT_USED)
+ ACE_THROW_SPEC ((CORBA::SystemException))
+{
+ ACE_UNUSED_ARG(cb);
+ this->op_count_[15] ++;
+ //ACE_DEBUG((LM_DEBUG, ACE_TEXT("(%P|%t)Foo_B_i::test_objref_arg ")
+ // ACE_TEXT(" got callback object. \n")));
+}
+
+
+void
+Foo_B_i::done(ACE_ENV_SINGLE_ARG_DECL_NOT_USED)
+ ACE_THROW_SPEC((CORBA::SystemException))
+{
+ TheAppShutdown->client_done();
+}
+
+
+void
+Foo_B_i::gather_stats (Foo_B_Statistics& stats)
+{
+ for (unsigned i = 0; i < 16; i++)
+ {
+ stats.actual (i+1, this->op_count_[i]);
+ stats.actual (i+1, this->in_string_[i]);
+ stats.actual (i+1, this->in_long_[i]);
+ stats.servant_error_count (this->error_count_);
+ }
+}
diff --git a/TAO/tests/CSD_Strategy_Tests/TP_Foo_B/Foo_B_i.h b/TAO/tests/CSD_Strategy_Tests/TP_Foo_B/Foo_B_i.h
new file mode 100644
index 00000000000..771eb05eca3
--- /dev/null
+++ b/TAO/tests/CSD_Strategy_Tests/TP_Foo_B/Foo_B_i.h
@@ -0,0 +1,92 @@
+// $Id$
+#ifndef FOO_B_I_H
+#define FOO_B_I_H
+
+#include "CSD_TP_Foo_B_Export.h"
+#include "Foo_BS.h"
+#include "Foo_B_Statistics.h"
+
+
+class CSD_TP_Foo_B_Export Foo_B_i : public virtual POA_Foo_B
+{
+ public:
+
+ Foo_B_i();
+ virtual ~Foo_B_i();
+
+ virtual void op1(ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC((CORBA::SystemException));
+
+ virtual void op2(CORBA::Long value ACE_ENV_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC((CORBA::SystemException));
+
+ virtual CORBA::Long op3(CORBA::Long value ACE_ENV_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC((CORBA::SystemException));
+
+ virtual void op4(CORBA::Long value ACE_ENV_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC((CORBA::SystemException));
+
+ virtual void op5(ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC((CORBA::SystemException, FooException));
+
+ virtual CORBA::Boolean op6(const TimeOfDay& t,
+ char*& message
+ ACE_ENV_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC((CORBA::SystemException));
+
+ virtual void op7(Callback_ptr cb
+ ACE_ENV_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC((CORBA::SystemException,
+ FooException));
+
+ virtual void test_unbounded_string_arg(const char* message
+ ACE_ENV_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC((CORBA::SystemException));
+
+ virtual void test_bounded_string_arg(const char* message
+ ACE_ENV_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC((CORBA::SystemException));
+
+ virtual void test_fixed_array_arg(const Fixed_Array message
+ ACE_ENV_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC((CORBA::SystemException));
+
+ virtual void test_var_array_arg(const Var_Array messages
+ ACE_ENV_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC((CORBA::SystemException));
+
+ virtual void test_bounded_var_size_arg(const Bounded_Var_Size& message
+ ACE_ENV_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC((CORBA::SystemException));
+
+ virtual void test_unbounded_var_size_arg(const Unbounded_Var_Size& message
+ ACE_ENV_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC((CORBA::SystemException));
+
+ virtual void test_fixed_size_arg(const TimeOfDay& t
+ ACE_ENV_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC((CORBA::SystemException));
+
+ virtual void test_special_basic_arg(CORBA::Boolean value,
+ CORBA::Long client_id
+ ACE_ENV_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC((CORBA::SystemException));
+
+ virtual void test_objref_arg(Callback_ptr cb
+ ACE_ENV_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC((CORBA::SystemException));
+
+ virtual void done(ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC((CORBA::SystemException));
+
+ void gather_stats (Foo_B_Statistics& stats);
+
+ private:
+
+ LongVector in_long_ [16];
+ StringVector in_string_ [16];
+ unsigned op_count_ [16];
+ unsigned error_count_;
+};
+
+#endif
diff --git a/TAO/tests/CSD_Strategy_Tests/TP_Foo_C/Foo_C_Custom_ClientEngine.h b/TAO/tests/CSD_Strategy_Tests/TP_Foo_C/Foo_C_Custom_ClientEngine.h
new file mode 100644
index 00000000000..9d51fcddcea
--- /dev/null
+++ b/TAO/tests/CSD_Strategy_Tests/TP_Foo_C/Foo_C_Custom_ClientEngine.h
@@ -0,0 +1,42 @@
+// This may look like C, but it's really -*- C++ -*-
+
+//=============================================================================
+/**
+ * @file Foo_C_Custom_ClientEngine.h
+ *
+ * $Id$
+ *
+ * @author Tim Bradley <bradley_t@ociweb.com>
+ */
+//=============================================================================
+
+#ifndef FOO_C_CUSTOM_CLIENT_ENGINE_H
+#define FOO_C_CUSTOM_CLIENT_ENGINE_H
+
+#include "CSD_TP_Foo_C_Export.h"
+#include "ClientEngine.h"
+#include "Foo_C_Custom_Proxy.h"
+
+
+class CSD_TP_Foo_C_Export Foo_C_Custom_ClientEngine : public ClientEngine
+{
+ public:
+
+ Foo_C_Custom_ClientEngine(Foo_C_i* servant,
+ Foo_C_ptr objref,
+ TAO::CSD::TP_Strategy* strategy,
+ unsigned client_id);
+ virtual ~Foo_C_Custom_ClientEngine();
+
+ virtual bool execute(ACE_ENV_SINGLE_ARG_DECL);
+
+ static void expected_results(Foo_C_Statistics& stats);
+
+
+ private:
+
+ Foo_C_Custom_Proxy proxy_;
+ unsigned client_id_;
+};
+
+#endif
diff --git a/TAO/tests/CSD_Strategy_Tests/TP_Foo_C/Foo_C_i.h b/TAO/tests/CSD_Strategy_Tests/TP_Foo_C/Foo_C_i.h
new file mode 100644
index 00000000000..c58cfb288d4
--- /dev/null
+++ b/TAO/tests/CSD_Strategy_Tests/TP_Foo_C/Foo_C_i.h
@@ -0,0 +1,53 @@
+// $Id$
+#ifndef FOO_C_I_H
+#define FOO_C_I_H
+
+#include "CSD_TP_Foo_C_Export.h"
+#include "Foo_CS.h"
+#include "Foo_C_Statistics.h"
+
+
+class CSD_TP_Foo_C_Export Foo_C_i : public virtual POA_Foo_C
+{
+ public:
+
+ Foo_C_i();
+ virtual ~Foo_C_i();
+
+ virtual void op1(ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC((CORBA::SystemException));
+
+ virtual void op2(CORBA::Long value ACE_ENV_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC((CORBA::SystemException));
+
+ virtual CORBA::Long op3(CORBA::Long value ACE_ENV_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC((CORBA::SystemException));
+
+ virtual void op4(CORBA::Long value ACE_ENV_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC((CORBA::SystemException));
+
+ virtual void op5(ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC((CORBA::SystemException,
+ FooException));
+
+ virtual void done(ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC((CORBA::SystemException));
+
+ void cust_op1(ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS);
+ void cust_op2(long value ACE_ENV_ARG_DECL_WITH_DEFAULTS);
+ long cust_op3(long value ACE_ENV_ARG_DECL_WITH_DEFAULTS);
+ void cust_op4(long value ACE_ENV_ARG_DECL_WITH_DEFAULTS);
+ void cust_op5(ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS);
+
+ void gather_stats(Foo_C_Statistics& stats);
+
+ void dump();
+
+
+ private:
+
+ LongVector in_values_ [10];
+ unsigned count_[10];
+};
+
+#endif
diff --git a/TAO/tests/CSD_Strategy_Tests/TP_Test_1/ServerApp.cpp b/TAO/tests/CSD_Strategy_Tests/TP_Test_1/ServerApp.cpp
new file mode 100644
index 00000000000..eb0d108bfb1
--- /dev/null
+++ b/TAO/tests/CSD_Strategy_Tests/TP_Test_1/ServerApp.cpp
@@ -0,0 +1,192 @@
+// $Id$
+#include "ServerApp.h"
+#include "Foo_A_i.h"
+#include "AppHelper.h"
+#include "TestAppExceptionC.h"
+#include "AppShutdown.h"
+#include "ace/Get_Opt.h"
+#include "tao/CSD_ThreadPool/CSD_TP_Strategy.h"
+#include "tao/Intrusive_Ref_Count_Handle_T.h"
+// To force static load the service.
+#include "tao/PI/PI.h"
+#include "tao/CSD_ThreadPool/CSD_ThreadPool.h"
+
+ServerApp::ServerApp()
+ : TestAppBase("TP_Test_1_Server"),
+ num_clients_ (1)
+{
+}
+
+
+ServerApp::~ServerApp()
+{
+}
+
+
+int
+ServerApp::run_i(int argc, char* argv[] ACE_ENV_ARG_DECL)
+{
+ // Initialize the ORB before parsing our own args.
+ CORBA::ORB_var orb = CORBA::ORB_init(argc, argv, "" ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+
+ // Parse the command-line args for this application.
+ // * Returns -1 if problems are encountered.
+ // * Returns 1 if the usage statement was explicitly requested.
+ // * Returns 0 otherwise.
+ int result = this->parse_args(argc, argv);
+ if (result != 0)
+ {
+ return result;
+ }
+
+ TheAppShutdown->init(orb.in(), num_clients_ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+
+ // Get the Root POA
+ PortableServer::POA_var root_poa =
+ RefHelper<PortableServer::POA>::resolve_initial_ref(orb.in(),
+ "RootPOA"
+ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+
+ // Get the POAManager from the Root POA.
+ PortableServer::POAManager_var poa_manager
+ = root_poa->the_POAManager(ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+
+ // Create the child POA Policies.
+ CORBA::PolicyList policies(0);
+ policies.length(0);
+
+ // Create the child POA
+ PortableServer::POA_var child_poa =
+ AppHelper::create_poa("ChildPoa",
+ root_poa.in(),
+ poa_manager.in(),
+ policies
+ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+
+
+ // Create the thread pool servant dispatching strategy object, and
+ // hold it in a (local) smart pointer variable.
+ TAO_Intrusive_Ref_Count_Handle<TAO::CSD::TP_Strategy> csd_strategy =
+ new TAO::CSD::TP_Strategy();
+
+ // Tell the strategy to apply itself to the child poa.
+ if (csd_strategy->apply_to(child_poa.in() ACE_ENV_ARG_PARAMETER) == false)
+ {
+ ACE_ERROR((LM_ERROR,
+ "Failed to apply CSD strategy to child poa.\n"));
+ return -1;
+ }
+ ACE_CHECK_RETURN (-1);
+
+ // Create the servant object.
+ Foo_A_i* servant = new Foo_A_i();
+
+ // Local smart pointer variable to deal with releasing the reference
+ // to the servant object when the variable falls out of scope.
+ PortableServer::ServantBase_var servant_owner(servant);
+
+ // Obtain the object reference using the servant
+ CORBA::Object_var obj = AppHelper::activate_servant(child_poa.in(),
+ servant
+ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+
+ // Stringify and save the object reference to a file
+ AppHelper::ref_to_file(orb.in(),
+ obj.in(),
+ this->ior_filename_.c_str()
+ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+
+ // Activate the POA Manager
+ poa_manager->activate(ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+
+ ACE_DEBUG((LM_DEBUG,
+ "(%P|%t) ServerApp is ready. Running the ORB event loop.\n"));
+
+ // Run the ORB event loop.
+ orb->run (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+
+ ACE_DEBUG((LM_DEBUG,
+ "(%P|%t) ServerApp ORB event loop has completed.\n"));
+
+ TheAppShutdown->wait ();
+
+ // Calling wait on ACE_Thread_Manager singleton to avoid the problem
+ // that the main thread might exit before all CSD Threads exit.
+
+ // Wait for all CSD task threads exit.
+ ACE_Thread_Manager::instance ()->wait ();
+
+ ACE_DEBUG((LM_DEBUG,
+ "(%P|%t) ServerApp is destroying the Root POA.\n"));
+
+ root_poa->destroy(1, 1 ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+
+ ACE_DEBUG((LM_DEBUG,
+ "(%P|%t) ServerApp is destroying the ORB.\n"));
+
+ orb->destroy(ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+
+ ACE_DEBUG((LM_DEBUG,
+ "(%P|%t) ServerApp has completed running successfully.\n"));
+
+ return 0;
+}
+
+
+int
+ServerApp::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':
+ this->ior_filename_ = get_opts.opt_arg();
+ break;
+
+ case 'n':
+ {
+ int tmp = ACE_OS::atoi(get_opts.opt_arg());
+ if (tmp < 1)
+ {
+ ACE_ERROR((LM_ERROR,
+ "(%P|%t) Error. -n must be followed by an integer "
+ "value greater than 0.\n"));
+ return -1;
+ }
+
+ this->num_clients_ = tmp;
+ }
+ break;
+
+ case '?':
+ ACE_ERROR((LM_ERROR,
+ "(%P|%t) usage: %s -o <ior_filename> -n <num_clients>\n",
+ argv[0]));
+ return 1;
+
+ default:
+ ACE_ERROR((LM_ERROR,
+ "(%P|%t) usage: %s -o <ior_filename> -n <num_clients>\n",
+ argv[0]));
+ return -1;
+ }
+ }
+
+ return 0;
+}
diff --git a/TAO/tests/CSD_Strategy_Tests/TP_Test_1/run_test.pl b/TAO/tests/CSD_Strategy_Tests/TP_Test_1/run_test.pl
new file mode 100755
index 00000000000..1ff6338702b
--- /dev/null
+++ b/TAO/tests/CSD_Strategy_Tests/TP_Test_1/run_test.pl
@@ -0,0 +1,60 @@
+eval '(exit $?0)' && eval 'exec perl -S $0 ${1+"$@"}'
+ & eval 'exec perl -S $0 $argv:q'
+ if 0;
+
+# $Id$
+# -*- perl -*-
+
+use lib '../../../../bin';
+use PerlACE::Run_Test;
+
+$iorfile = PerlACE::LocalFile ("server.ior");
+unlink $iorfile;
+$status = 0;
+
+$num_clients=40;
+
+if (PerlACE::is_vxworks_test()) {
+ $SV = new PerlACE::ProcessVX ("server_main", "-o $iorfile -n $num_clients");
+}
+else {
+ $SV = new PerlACE::Process ("server_main", "-o $iorfile -n $num_clients");
+}
+
+$SV->Spawn ();
+
+if (PerlACE::waitforfile_timed ($iorfile,
+ $PerlACE::wait_interval_for_process_creation) == -1) {
+ print STDERR "ERROR: cannot find file <$iorfile>\n";
+ $SV->Kill (); $SV->TimedWait (1);
+ exit 1;
+}
+
+for ($i = 0; $i < $num_clients; $i++) {
+
+ @CLS[$i] = new PerlACE::Process ("client_main", " -i file://$iorfile");
+
+ @CLS[$i]->Spawn ();
+}
+
+for ($i = 0; $i < $num_clients; $i++) {
+
+ $client = @CLS[$i]->WaitKill (60);
+
+ if ($client != 0) {
+ print STDERR "ERROR: client $i returned $client\n";
+ $status = 1;
+ }
+}
+
+
+$server = $SV->WaitKill (60);
+
+if ($server != 0) {
+ print STDERR "ERROR: server returned $server\n";
+ $status = 1;
+}
+
+unlink $iorfile;
+
+exit $status;
diff --git a/TAO/tests/CSD_Strategy_Tests/TP_Test_2/ServerApp.cpp b/TAO/tests/CSD_Strategy_Tests/TP_Test_2/ServerApp.cpp
new file mode 100644
index 00000000000..f291baacad4
--- /dev/null
+++ b/TAO/tests/CSD_Strategy_Tests/TP_Test_2/ServerApp.cpp
@@ -0,0 +1,375 @@
+// $Id$
+#include "ServerApp.h"
+#include "AppHelper.h"
+#include "OrbRunner.h"
+#include "AppShutdown.h"
+#include "TestAppExceptionC.h"
+#include "Foo_A_ClientEngine.h"
+#include "ace/OS.h"
+#include "ace/Get_Opt.h"
+// To force static load the service.
+#include "tao/PI/PI.h"
+#include "tao/CSD_ThreadPool/CSD_ThreadPool.h"
+
+ServerApp::ServerApp()
+ : TestAppBase("TP_Test_2_Server"),
+ ior_filename_prefix_("foo"),
+ num_servants_(1),
+ num_csd_threads_(1),
+ num_orb_threads_(1),
+ num_remote_clients_(1),
+ num_collocated_clients_(0),
+ collocated_client_kind_(0)
+{
+}
+
+
+ServerApp::~ServerApp()
+{
+}
+
+
+int
+ServerApp::run_i(int argc, char* argv[] ACE_ENV_ARG_DECL)
+{
+ int result = this->init(argc, argv ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+ if (result != 0)
+ {
+ return result;
+ }
+
+ this->poa_setup(ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+ this->csd_setup(ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+ this->servant_setup(ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+ this->collocated_setup();
+ this->poa_activate(ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+ this->run_collocated_clients(ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+ this->run_orb_event_loop(ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+
+ // Calling wait on ACE_Thread_Manager singleton to avoid the problem
+ // that the main thread might exit before all CSD Threads exit.
+
+ // Wait for all CSD task threads exit.
+ ACE_Thread_Manager::instance ()->wait ();
+
+ this->cleanup();
+ return this->check_validity () ? 0 : -1;
+}
+
+
+int
+ServerApp::init(int argc, char* argv[] ACE_ENV_ARG_DECL)
+{
+ this->orb_ = CORBA::ORB_init(argc, argv, "" ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+
+ // Parse the command-line args for this application.
+ // * Raises -1 if problems are encountered.
+ // * Returns 1 if the usage statement was explicitly requested.
+ // * Returns 0 otherwise.
+ int result = this->parse_args(argc, argv);
+
+ if (result != 0)
+ {
+ return result;
+ }
+
+ unsigned num_clients = this->num_remote_clients_ +
+ this->num_collocated_clients_;
+
+ TheAppShutdown->init (this->orb_.in (), num_clients ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+
+ return 0;
+}
+
+
+void
+ServerApp::poa_setup(ACE_ENV_SINGLE_ARG_DECL)
+{
+ this->poa_ = this->create_poa(this->orb_.in(),
+ "ChildPoa"
+ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK;
+}
+
+
+void
+ServerApp::csd_setup(ACE_ENV_SINGLE_ARG_DECL)
+{
+ this->tp_strategy_ = new TAO::CSD::TP_Strategy(this->num_csd_threads_);
+
+ if (!this->tp_strategy_->apply_to(this->poa_.in() ACE_ENV_ARG_PARAMETER))
+ {
+ ACE_ERROR((LM_ERROR,
+ "Failed to apply CSD strategy to poa.\n"));
+ ACE_THROW(TestAppException());
+ }
+ ACE_CHECK;
+}
+
+
+void
+ServerApp::servant_setup(ACE_ENV_SINGLE_ARG_DECL)
+{
+ this->servants_.create_and_activate(this->num_servants_,
+ this->orb_.in (),
+ this->poa_.in (),
+ this->ior_filename_prefix_.c_str()
+ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK;
+}
+
+
+void
+ServerApp::collocated_setup()
+{
+ int client_id_start = this->num_remote_clients_;
+ for (unsigned i = 0; i < this->num_collocated_clients_; i++)
+ {
+ // Dole out the servant object references in a round-robin fashion.
+ unsigned servant_index = i % this->num_servants_;
+
+ ServantListType::T_stub_var obj = this->servants_.objref(servant_index);
+ ClientEngine_Handle engine = new Foo_A_ClientEngine(obj.in(), ++client_id_start, true);
+ this->collocated_client_task_.add_engine(engine.in());
+ }
+}
+
+
+void
+ServerApp::poa_activate(ACE_ENV_SINGLE_ARG_DECL)
+{
+ PortableServer::POAManager_var poa_manager
+ = this->poa_->the_POAManager(ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK;
+
+ poa_manager->activate(ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK;
+}
+
+
+void
+ServerApp::run_collocated_clients(ACE_ENV_SINGLE_ARG_DECL)
+{
+ if (this->num_collocated_clients_ > 0)
+ {
+ if (this->collocated_client_task_.open() == -1)
+ {
+ ACE_THROW (TestAppException ());
+ }
+ }
+}
+
+
+void
+ServerApp::run_orb_event_loop(ACE_ENV_SINGLE_ARG_DECL)
+{
+ OrbRunner orb_runner(this->orb_.in(), this->num_orb_threads_);
+ orb_runner.run(ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK;
+ TheAppShutdown->wait ();
+}
+
+
+void
+ServerApp::cleanup()
+{
+}
+
+
+int
+ServerApp::parse_args(int argc, char* argv[])
+{
+ this->exe_name_ = argv[0];
+
+ ACE_Get_Opt get_opts(argc, argv, "p:s:n:t:r:c:k:");
+
+ int c;
+
+ while ((c = get_opts()) != -1)
+ {
+ int result = 0;
+ switch (c)
+ {
+ case 'p':
+ this->ior_filename_prefix_ = get_opts.opt_arg();
+ break;
+
+ case 's':
+ result = this->set_arg(this->num_servants_,
+ get_opts.opt_arg(),
+ c,
+ "num_servants",
+ 1);
+ break;
+
+ case 'n':
+ result = this->set_arg(this->num_csd_threads_,
+ get_opts.opt_arg(),
+ c,
+ "num_servants",
+ 1);
+ break;
+
+ case 't':
+ result = this->set_arg(this->num_orb_threads_,
+ get_opts.opt_arg(),
+ c,
+ "num_orb_threads",
+ 1);
+ break;
+
+ case 'r':
+ result = this->set_arg(this->num_remote_clients_,
+ get_opts.opt_arg(),
+ c,
+ "num_remote_clients");
+ break;
+
+ case 'c':
+ result = this->set_arg(this->num_collocated_clients_,
+ get_opts.opt_arg(),
+ c,
+ "num_collocated_clients");
+ break;
+
+ case 'k':
+ result = this->set_arg(this->collocated_client_kind_,
+ get_opts.opt_arg(),
+ c,
+ "collocated_client_kind");
+ break;
+
+ case '?':
+ this->usage_statement();
+ return 1;
+
+ default:
+ this->usage_statement();
+ return -1;
+ }
+
+ if (result != 0)
+ {
+ return result;
+ }
+ }
+
+ return this->arg_dependency_checks();
+}
+
+void
+ServerApp::usage_statement()
+{
+ ACE_ERROR((LM_ERROR,
+ "Usage: %s [options]\n\n"
+ "OPTIONS:\n\n"
+ "\t[-p <ior_filename_prefix>]\n"
+ "\t[-s <num_servants>]\n"
+ "\t[-n <num_csd_threads>]\n"
+ "\t[-t <num_orb_threads>]\n"
+ "\t[-r <num_remote_clients>]\n"
+ "\t[-c <num_collocated_clients>]\n"
+ "\t[-k <collocated_client_kind>]\n"
+ "\t[-?]\n\n",
+ this->exe_name_.c_str()));
+}
+
+
+int
+ServerApp::arg_dependency_checks()
+{
+ return (this->num_remote_clients_
+ + this->num_collocated_clients_) > 0 ? 0 : -1;
+}
+
+
+int
+ServerApp::set_arg(unsigned& value,
+ const char* arg,
+ char opt,
+ const char* name,
+ int min)
+{
+ int tmp = ACE_OS::atoi(arg);
+
+ if (tmp < min)
+ {
+ ACE_ERROR((LM_ERROR,
+ "Error: -%c <%s> must be integer type with a value of, "
+ "at least, %d.\n", opt, name, min));
+ this->usage_statement();
+ return -1;
+ }
+
+ value = tmp;
+ return 0;
+}
+
+
+PortableServer::POA_ptr
+ServerApp::create_poa(CORBA::ORB_ptr orb,
+ const char* poa_name
+ ACE_ENV_ARG_DECL)
+{
+ // Get the Root POA.
+ PortableServer::POA_var root_poa
+ = RefHelper<PortableServer::POA>::resolve_initial_ref(orb,
+ "RootPOA"
+ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK_RETURN (PortableServer::POA::_nil ());
+
+ // Get the POAManager from the Root POA.
+ PortableServer::POAManager_var poa_manager
+ = root_poa->the_POAManager(ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK_RETURN (PortableServer::POA::_nil ());
+
+ // Create the child POA Policies.
+ CORBA::PolicyList policies(0);
+ policies.length(0);
+
+ // Create the child POA
+ PortableServer::POA_var poa = AppHelper::create_poa(poa_name,
+ root_poa.in(),
+ poa_manager.in(),
+ policies
+ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK_RETURN (PortableServer::POA::_nil ());
+
+ // Give away the child POA_ptr from the POA_var variable.
+ return poa._retn();
+}
+
+
+bool
+ServerApp::check_validity ()
+{
+ // Check whether the clients return any errors.
+ if (this->num_collocated_clients_ > 0
+ && this->collocated_client_task_.failure_count () > 0)
+ {
+ return false;
+ }
+
+ unsigned num_clients = this->num_remote_clients_ +
+ this->num_collocated_clients_;
+
+ Foo_A_Statistics stats (num_clients);
+
+ Foo_A_ClientEngine::expected_results (stats);
+
+ for (unsigned i = 0; i < this->num_servants_; i++)
+ {
+ this->servants_.servant(i)->gather_stats(stats);
+ }
+
+ return stats.actual_vs_expected ();
+}
diff --git a/TAO/tests/CSD_Strategy_Tests/TP_Test_2/run_test.pl b/TAO/tests/CSD_Strategy_Tests/TP_Test_2/run_test.pl
new file mode 100755
index 00000000000..37fd19f21f6
--- /dev/null
+++ b/TAO/tests/CSD_Strategy_Tests/TP_Test_2/run_test.pl
@@ -0,0 +1,186 @@
+eval '(exit $?0)' && eval 'exec perl -S $0 ${1+"$@"}'
+ & eval 'exec perl -S $0 $argv:q'
+ if 0;
+
+# $Id$
+# -*- perl -*-
+
+use lib '../../../../bin';
+use PerlACE::Run_Test;
+
+my $status = 0;
+
+my $iorfname_prefix = "servant";
+my $num_servants = 1;
+my $num_orb_threads = 1;
+my $num_remote_clients = 1;
+my $num_csd_threads = 1;
+my $num_collocated_clients = 0;
+my $collocated_client_kind = 0;
+my $client_kind = 0;
+
+my $i;
+my $j;
+my @iorfile;
+
+my $ARGC = @ARGV;
+
+if ($ARGC > 0)
+{
+ if ($ARGC > 1)
+ {
+ print STDERR "ERROR: Too many command-line arguments for $0.\n";
+ exit 1;
+ }
+
+ my $subtest = $ARGV[0];
+
+ if ($subtest eq 'remote')
+ {
+ $num_remote_clients = 40;
+ }
+ elsif ($subtest eq 'collocated')
+ {
+ $num_remote_clients = 0;
+ $num_collocated_clients = 1;
+ }
+ elsif ($subtest eq 'remote_orbthreads')
+ {
+ $num_orb_threads = 5;
+ $num_remote_clients = 40;
+ }
+ elsif ($subtest eq 'remote_servants')
+ {
+ $num_servants = 5;
+ $num_remote_clients = 40;
+ }
+ elsif ($subtest eq 'remote_csdthreads')
+ {
+ $num_csd_threads = 5;
+ $num_remote_clients = 40;
+ }
+ elsif ($subtest eq 'remote_big')
+ {
+ $num_csd_threads = 5;
+ $num_servants = 10;
+ $num_orb_threads = 4;
+ $num_remote_clients = 40;
+ }
+ elsif ($subtest eq 'big')
+ {
+ $num_csd_threads = 5;
+ $num_servants = 10;
+ $num_orb_threads = 4;
+ $num_remote_clients = 40;
+ $num_collocated_clients = 40;
+ }
+ elsif ($subtest eq 'usage')
+ {
+ print STDOUT "Usage: $0 [<subtest>]\n" .
+ "\n" .
+ "Supported <subtest> values:\n" .
+ "\n" .
+ "\tremote\n" .
+ "\tcollocated\n" .
+ "\tremote_orbthreads\n" .
+ "\tremote_servants\n" .
+ "\tremote_csdthreads\n" .
+ "\tremote_big\n" .
+ "\tusage\n" .
+ "\n";
+ exit 0;
+ }
+ else
+ {
+ print STDERR "ERROR: invalid subtest argument for $0: $subtest\n";
+ exit 1;
+ }
+}
+
+#Delete old ior files.
+for ($i = 0; $i < $num_servants; $i++) {
+ my $servant_id = sprintf("%02d", ($i + 1));
+ $iorfile[$i] = PerlACE::LocalFile($iorfname_prefix . "_$servant_id.ior");
+ unlink $iorfile[$i];
+}
+
+if (PerlACE::is_vxworks_test()) {
+ $SV = new PerlACE::ProcessVX ("server_main",
+ "-p $iorfname_prefix " .
+ "-s $num_servants " .
+ "-n $num_csd_threads " .
+ "-t $num_orb_threads " .
+ "-r $num_remote_clients " .
+ "-c $num_collocated_clients " .
+ "-k $collocated_client_kind");
+}
+else {
+ $SV = new PerlACE::Process("server_main",
+ "-p $iorfname_prefix " .
+ "-s $num_servants " .
+ "-n $num_csd_threads " .
+ "-t $num_orb_threads " .
+ "-r $num_remote_clients " .
+ "-c $num_collocated_clients " .
+ "-k $collocated_client_kind");
+}
+
+
+$SV->Spawn();
+
+
+# Wait for the servant ior files created by server.
+for ($i = 0; $i < $num_servants; $i++) {
+ if (PerlACE::waitforfile_timed
+ ($iorfile[$i],
+ $PerlACE::wait_interval_for_process_creation) == -1) {
+ print STDERR "ERROR: cannot find file <$iorfile[$i]>\n";
+ $SV->Kill();
+ $SV->TimedWait(1);
+ exit 1;
+ }
+}
+
+
+my $count = 0;
+
+for ($i = 0; $i < $num_remote_clients; $i++)
+{
+
+ $client_id = $i+1;
+
+ $j = $i % $num_servants;
+
+ $CLS[$i] = new PerlACE::Process("client_main",
+ "-i file://$iorfile[$j] ".
+ "-k $client_kind ".
+ "-n $client_id");
+
+ $CLS[$i]->Spawn();
+}
+
+for ($i = 0; $i < $num_remote_clients; $i++)
+{
+ $client = $CLS[$i]->WaitKill(60);
+
+ if ($client != 0)
+ {
+ print STDERR "ERROR: client $i returned $client\n";
+ $status = 1;
+ }
+}
+
+
+$server = $SV->WaitKill(60);
+
+if ($server != 0) {
+ print STDERR "ERROR: server returned $server\n";
+ $status = 1;
+}
+
+#Delete ior files generated by this run.
+for ($i = 0; $i < $num_servants; $i++) {
+ unlink $iorfile[$i];
+}
+
+exit $status;
diff --git a/TAO/tests/CSD_Strategy_Tests/TP_Test_3/ClientApp.cpp b/TAO/tests/CSD_Strategy_Tests/TP_Test_3/ClientApp.cpp
new file mode 100644
index 00000000000..147b5ca43cf
--- /dev/null
+++ b/TAO/tests/CSD_Strategy_Tests/TP_Test_3/ClientApp.cpp
@@ -0,0 +1,326 @@
+// $Id$
+#include "ClientApp.h"
+#include "AppHelper.h"
+#include "OrbRunner.h"
+#include "AppShutdown.h"
+#include "TestAppExceptionC.h"
+#include "Foo_B_ClientEngine.h"
+#include "ace/Get_Opt.h"
+// To force static load the service.
+#include "tao/PI/PI.h"
+#include "tao/CSD_ThreadPool/CSD_ThreadPool.h"
+
+ClientApp::ClientApp()
+: TestAppBase("TP_Test_3_Client"),
+ client_task_ (true), // shutdown orb after client is done.
+ num_servants_ (1),
+ num_csd_threads_ (1),
+ num_orb_threads_ (1),
+ ior_("Not Set"),
+ client_kind_(0),
+ client_id_(0)
+{
+}
+
+
+ClientApp::~ClientApp()
+{
+}
+
+
+int
+ClientApp::run_i(int argc, char* argv[] ACE_ENV_ARG_DECL)
+{
+ int result = this->init(argc, argv ACE_ENV_ARG_PARAMETER);
+ if (result != 0)
+ {
+ return result;
+ }
+ ACE_CHECK_RETURN (-1);
+
+ this->poa_setup(ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+ this->csd_setup(ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+ this->client_setup(ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+ this->poa_activate(ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+ this->run_clients();
+ this->run_orb_event_loop(ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+
+ // Calling wait on ACE_Thread_Manager singleton to avoid the problem
+ // that the main thread might exit before all CSD Threads exit.
+
+ // Wait for all CSD task threads exit.
+ ACE_Thread_Manager::instance ()->wait ();
+
+ result = this->check_validity () ? 0 : -1;
+ this->cleanup();
+
+ return result;
+}
+
+
+int
+ClientApp::init(int argc, char* argv[] ACE_ENV_ARG_DECL)
+{
+ this->orb_ = CORBA::ORB_init(argc, argv, "" ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+
+ // Parse the command-line args for this application.
+ // * Raises -1 if problems are encountered.
+ // * Returns 1 if the usage statement was explicitly requested.
+ // * Returns 0 otherwise.
+ int result = this->parse_args(argc, argv);
+ if (result != 0)
+ {
+ return result;
+ }
+
+ TheAppShutdown->init(this->orb_.in(), num_servants_ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+
+ return 0;
+}
+
+
+void
+ClientApp::poa_setup(ACE_ENV_SINGLE_ARG_DECL)
+{
+ this->poa_ = this->create_poa(this->orb_.in(),
+ "ChildPoa"
+ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK;
+}
+
+
+void
+ClientApp::csd_setup(ACE_ENV_SINGLE_ARG_DECL)
+{
+ this->tp_strategy_ = new TAO::CSD::TP_Strategy(this->num_csd_threads_);
+
+ if (!this->tp_strategy_->apply_to(this->poa_.in() ACE_ENV_ARG_PARAMETER))
+ {
+ ACE_ERROR((LM_ERROR,
+ "Failed to apply CSD strategy to poa.\n"));
+ ACE_THROW(TestAppException());
+ }
+ ACE_CHECK;
+}
+
+
+void
+ClientApp::client_setup(ACE_ENV_SINGLE_ARG_DECL)
+{
+ // Turn the ior_ into a Foo_B obj ref.
+ Foo_B_var foo = RefHelper<Foo_B>::string_to_ref(this->orb_.in(),
+ this->ior_.c_str()
+ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK;
+
+ this->servants_.create_and_activate(1, // number of callback servants
+ this->poa_.in()
+ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK;
+ ServantListType::T_stub_var cb = this->servants_.objref(0);
+
+ // Create the ClientEngine object, and give it the Foo_B and Callback object
+ // references.
+ ClientEngine_Handle engine
+ = new Foo_B_ClientEngine(foo.in(), cb.in (), this->client_id_);
+ this->client_task_.add_engine(engine.in());
+}
+
+
+void
+ClientApp::poa_activate(ACE_ENV_SINGLE_ARG_DECL)
+{
+ PortableServer::POAManager_var poa_manager
+ = this->poa_->the_POAManager(ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK;
+ poa_manager->activate(ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK;
+}
+
+
+void
+ClientApp::run_clients()
+{
+ this->client_task_.open();
+}
+
+
+void
+ClientApp::run_orb_event_loop(ACE_ENV_SINGLE_ARG_DECL)
+{
+ OrbRunner orb_runner(this->orb_.in(), this->num_orb_threads_);
+ orb_runner.run(ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK;
+ TheAppShutdown->wait ();
+}
+
+
+PortableServer::POA_ptr
+ClientApp::create_poa(CORBA::ORB_ptr orb,
+ const char* poa_name
+ ACE_ENV_ARG_DECL)
+{
+ // Get the Root POA.
+ PortableServer::POA_var root_poa
+ = RefHelper<PortableServer::POA>::resolve_initial_ref(orb,
+ "RootPOA"
+ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK_RETURN (PortableServer::POA::_nil ());
+
+ // Get the POAManager from the Root POA.
+ PortableServer::POAManager_var poa_manager
+ = root_poa->the_POAManager(ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK_RETURN (PortableServer::POA::_nil ());
+
+ // Create the child POA Policies.
+ CORBA::PolicyList policies(0);
+ policies.length(0);
+
+ // Create the child POA
+ PortableServer::POA_var poa = AppHelper::create_poa(poa_name,
+ root_poa.in(),
+ poa_manager.in(),
+ policies
+ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK_RETURN (PortableServer::POA::_nil ());
+
+ // Give away the child POA_ptr from the POA_var variable.
+ return poa._retn();
+}
+
+
+void
+ClientApp::cleanup()
+{
+}
+
+
+int
+ClientApp::parse_args(int argc, char* argv[])
+{
+ this->exe_name_ = argv[0];
+
+ ACE_Get_Opt get_opts(argc, argv, "i:k:n:");
+
+ int c;
+
+ while ((c = get_opts()) != -1)
+ {
+ int result = 0;
+ switch (c)
+ {
+ case 'i':
+ this->ior_ = get_opts.opt_arg();
+ break;
+
+ case 'k':
+ result = set_arg(this->client_kind_,
+ get_opts.opt_arg(),
+ c,
+ "client_kind");
+ break;
+
+ case 'n':
+ result = set_arg(this->client_id_,
+ get_opts.opt_arg(),
+ c,
+ "client_id");
+ break;
+
+ case '?':
+ this->usage_statement();
+ return 1;
+
+ default:
+ this->usage_statement();
+ return -1;
+ }
+
+ if (result != 0)
+ {
+ return result;
+ }
+ }
+
+ return this->arg_dependency_checks();
+}
+
+void
+ClientApp::usage_statement()
+{
+ ACE_ERROR((LM_ERROR,
+ "Usage: %s [options]\n\n"
+ "OPTIONS:\n\n"
+ "\t[-i <ior>]\n"
+ "\t[-k <client_kind>]\n"
+ "\t[-n <client_id>]\n"
+ "\t[-?]\n\n",
+ this->exe_name_.c_str()));
+}
+
+
+int
+ClientApp::arg_dependency_checks()
+{
+ if (this->ior_ == "Not Set")
+ {
+ ACE_ERROR((LM_ERROR,
+ "Error: Missing required command-line option (-i <ior>).\n"));
+ this->usage_statement();
+ return -1;
+ }
+ if (this->client_id_ <= 0)
+ {
+ ACE_ERROR((LM_ERROR,
+ "Error: Invalid command-line option (-n <client id>). \n"
+ " The client id should be positive integer. \n"));
+ this->usage_statement();
+ return -1;
+ }
+
+ return 0;
+}
+
+
+int
+ClientApp::set_arg(unsigned& value,
+ const char* arg,
+ char opt,
+ const char* name,
+ int min)
+{
+ int tmp = ACE_OS::atoi(arg);
+
+ if (tmp < min)
+ {
+ ACE_ERROR((LM_ERROR,
+ "Error: -%c <%s> must be integer type with a value of, "
+ "at least, %d.\n", opt, name, min));
+ this->usage_statement();
+ return -1;
+ }
+
+ value = tmp;
+ return 0;
+}
+
+
+bool
+ClientApp::check_validity ()
+{
+ // Check whether the clients return any errors.
+ if (this->client_task_.failure_count () > 0)
+ {
+ return false;
+ }
+
+ return true;
+}
+
diff --git a/TAO/tests/CSD_Strategy_Tests/TP_Test_3/ServerApp.cpp b/TAO/tests/CSD_Strategy_Tests/TP_Test_3/ServerApp.cpp
new file mode 100644
index 00000000000..883a0dec322
--- /dev/null
+++ b/TAO/tests/CSD_Strategy_Tests/TP_Test_3/ServerApp.cpp
@@ -0,0 +1,428 @@
+// $Id$
+#include "ServerApp.h"
+#include "AppHelper.h"
+#include "OrbRunner.h"
+#include "AppShutdown.h"
+#include "TestAppExceptionC.h"
+#include "Foo_B_ClientEngine.h"
+#include "Foo_B_ClientEngine.h"
+#include "Callback_i.h"
+#include "ace/OS.h"
+#include "ace/Get_Opt.h"
+// To force static load the service.
+#include "tao/PI/PI.h"
+#include "tao/CSD_ThreadPool/CSD_ThreadPool.h"
+
+ServerApp::ServerApp()
+ : TestAppBase("TP_Test_3_Server"),
+ ior_filename_prefix_("foo"),
+ num_servants_(1),
+ num_csd_threads_(1),
+ num_orb_threads_(1),
+ num_remote_clients_(1),
+ num_collocated_clients_(0),
+ collocated_client_kind_(0)
+{
+}
+
+
+ServerApp::~ServerApp()
+{
+}
+
+
+int
+ServerApp::run_i(int argc, char* argv[] ACE_ENV_ARG_DECL)
+{
+ int result = this->init(argc, argv ACE_ENV_ARG_PARAMETER);
+ if (result != 0)
+ {
+ return result;
+ }
+ ACE_CHECK_RETURN (-1);
+
+ this->poa_setup(ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+ this->csd_setup(ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+ this->servant_setup(ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+ this->collocated_setup(ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+ this->poa_activate(ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+ this->run_collocated_clients(ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+
+ ACE_DEBUG((LM_DEBUG,
+ "(%P|%t) ServerApp is ready. Running the ORB event loop.\n"));
+
+ this->run_orb_event_loop(ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+
+ ACE_DEBUG((LM_DEBUG,
+ "(%P|%t) ServerApp ORB event loop has completed.\n"));
+
+ // Calling wait on ACE_Thread_Manager singleton to avoid the problem
+ // that the main thread might exit before all CSD Threads exit.
+
+ // Wait for all CSD task threads exit.
+ ACE_Thread_Manager::instance ()->wait ();
+
+ this->cleanup();
+ result = this->check_validity () ? 0 : -1;
+
+ ACE_DEBUG((LM_DEBUG,
+ "(%P|%t) ServerApp check_validity returned %d .\n", result));
+
+ return result;
+}
+
+
+int
+ServerApp::init(int argc, char* argv[] ACE_ENV_ARG_DECL)
+{
+ this->orb_ = CORBA::ORB_init(argc, argv, "" ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+
+ // Parse the command-line args for this application.
+ // * Raises -1 if problems are encountered.
+ // * Returns 1 if the usage statement was explicitly requested.
+ // * Returns 0 otherwise.
+ int result = this->parse_args(argc, argv);
+ if (result != 0)
+ {
+ return result;
+ }
+
+ unsigned num_clients = this->num_remote_clients_ +
+ this->num_collocated_clients_;
+
+ TheAppShutdown->init(this->orb_.in(), num_clients ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+
+ return 0;
+}
+
+
+void
+ServerApp::poa_setup(ACE_ENV_SINGLE_ARG_DECL)
+{
+ this->poa_ = this->create_poa(this->orb_.in(),
+ "ChildPoa"
+ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK;
+
+ if (this->num_collocated_clients_ > 0)
+ {
+ this->cb_poa_ = this->create_poa(this->orb_.in(),
+ "CallbackPoa"
+ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK;
+ }
+}
+
+void
+ServerApp::csd_setup(ACE_ENV_SINGLE_ARG_DECL)
+{
+ this->tp_strategy_ = new TAO::CSD::TP_Strategy(this->num_csd_threads_);
+
+ if (!this->tp_strategy_->apply_to(this->poa_.in() ACE_ENV_ARG_PARAMETER))
+ {
+ ACE_ERROR((LM_ERROR,
+ "Failed to apply CSD strategy to poa.\n"));
+ ACE_THROW(TestAppException());
+ }
+ ACE_CHECK;
+
+ // Use another poa and strategy for callbacks. This would resolve
+ // the deadlock situation that happens when having number of csd
+ // threads less than number of collocated clients.
+ if (this->num_collocated_clients_ > 0)
+ {
+ this->cb_tp_strategy_ = new TAO::CSD::TP_Strategy();
+ if (!this->cb_tp_strategy_->apply_to(this->cb_poa_.in() ACE_ENV_ARG_PARAMETER))
+ {
+ ACE_ERROR((LM_ERROR,
+ "Failed to apply CSD strategy to callback poa.\n"));
+ ACE_THROW(TestAppException());
+ }
+ ACE_CHECK;
+ }
+}
+
+
+void
+ServerApp::servant_setup(ACE_ENV_SINGLE_ARG_DECL)
+{
+ this->foo_servants_.create_and_activate(this->num_servants_,
+ this->orb_.in (),
+ this->poa_.in (),
+ this->ior_filename_prefix_.c_str()
+ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK;
+}
+
+
+void
+ServerApp::collocated_setup(ACE_ENV_SINGLE_ARG_DECL)
+{
+ if (this->num_collocated_clients_ == 0)
+ return;
+
+ this->cb_servants_.create_and_activate(1, // number of callback servants
+ this->cb_poa_.in()
+ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK;
+
+ CallbackServantListType::T_stub_var cb = this->cb_servants_.objref(0);
+
+ unsigned client_id = this->num_remote_clients_;
+
+ for (unsigned i = 0; i < this->num_collocated_clients_; i++)
+ {
+ client_id ++;
+ // Dole out the servant object references in a round-robin fashion.
+ unsigned servant_index = i % this->num_servants_;
+
+ FooServantListType::T_stub_var foo
+ = this->foo_servants_.objref(servant_index);
+ ClientEngine_Handle engine
+ = new Foo_B_ClientEngine(foo.in(), cb.in (), client_id, true);
+ this->collocated_client_task_.add_engine(engine.in());
+ }
+}
+
+
+void
+ServerApp::poa_activate(ACE_ENV_SINGLE_ARG_DECL)
+{
+ PortableServer::POAManager_var poa_manager
+ = this->poa_->the_POAManager(ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK;
+ poa_manager->activate(ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK;
+}
+
+
+void
+ServerApp::run_collocated_clients(ACE_ENV_SINGLE_ARG_DECL)
+{
+ if (this->num_collocated_clients_ > 0)
+ {
+ if (this->collocated_client_task_.open() == -1)
+ {
+ ACE_THROW (TestAppException ());
+ }
+ }
+}
+
+
+void
+ServerApp::run_orb_event_loop(ACE_ENV_SINGLE_ARG_DECL)
+{
+ OrbRunner orb_runner(this->orb_.in(), this->num_orb_threads_);
+ orb_runner.run(ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK;
+ TheAppShutdown->wait ();
+}
+
+
+void
+ServerApp::cleanup()
+{
+}
+
+
+int
+ServerApp::parse_args(int argc, char* argv[])
+{
+ this->exe_name_ = argv[0];
+
+ ACE_Get_Opt get_opts(argc, argv, "p:s:n:t:r:c:k:");
+
+ int c;
+
+ while ((c = get_opts()) != -1)
+ {
+ int result = 0;
+ switch (c)
+ {
+ case 'p':
+ this->ior_filename_prefix_ = get_opts.opt_arg();
+ break;
+
+ case 's':
+ result = set_arg(this->num_servants_,
+ get_opts.opt_arg(),
+ c,
+ "num_servants",
+ 1);
+ break;
+
+ case 'n':
+ result = set_arg(this->num_csd_threads_,
+ get_opts.opt_arg(),
+ c,
+ "num_servants",
+ 1);
+ break;
+
+ case 't':
+ result = set_arg(this->num_orb_threads_,
+ get_opts.opt_arg(),
+ c,
+ "num_orb_threads",
+ 1);
+ break;
+
+ case 'r':
+ result = set_arg(this->num_remote_clients_,
+ get_opts.opt_arg(),
+ c,
+ "num_remote_clients");
+ break;
+
+ case 'c':
+ result = set_arg(this->num_collocated_clients_,
+ get_opts.opt_arg(),
+ c,
+ "num_collocated_clients");
+ break;
+
+ case 'k':
+ result = set_arg(this->collocated_client_kind_,
+ get_opts.opt_arg(),
+ c,
+ "collocated_client_kind");
+ break;
+
+ case '?':
+ this->usage_statement();
+ return 1;
+
+ default:
+ this->usage_statement();
+ return -1;
+ }
+
+ if (result != 0)
+ {
+ return result;
+ }
+ }
+
+ return this->arg_dependency_checks();
+}
+
+void
+ServerApp::usage_statement()
+{
+ ACE_ERROR((LM_ERROR,
+ "Usage: %s [options]\n\n"
+ "OPTIONS:\n\n"
+ "\t[-p <ior_filename_prefix>]\n"
+ "\t[-s <num_servants>]\n"
+ "\t[-n <num_csd_threads>]\n"
+ "\t[-t <num_orb_threads>]\n"
+ "\t[-r <num_remote_clients>]\n"
+ "\t[-c <num_collocated_clients>]\n"
+ "\t[-k <collocated_client_kind>]\n"
+ "\t[-?]\n\n",
+ this->exe_name_.c_str()));
+}
+
+
+int
+ServerApp::arg_dependency_checks()
+{
+ return (this->num_remote_clients_
+ + this->num_collocated_clients_) > 0 ? 0 : -1;
+}
+
+
+int
+ServerApp::set_arg(unsigned& value,
+ const char* arg,
+ char opt,
+ const char* name,
+ int min)
+{
+ int tmp = ACE_OS::atoi(arg);
+
+ if (tmp < min)
+ {
+ ACE_ERROR((LM_ERROR,
+ "Error: -%c <%s> must be integer type with a value of, "
+ "at least, %d.\n", opt, name, min));
+ this->usage_statement();
+ return -1;
+ }
+
+ value = tmp;
+ return 0;
+}
+
+
+PortableServer::POA_ptr
+ServerApp::create_poa(CORBA::ORB_ptr orb,
+ const char* poa_name
+ ACE_ENV_ARG_DECL)
+{
+ // Get the Root POA.
+ PortableServer::POA_var root_poa
+ = RefHelper<PortableServer::POA>::resolve_initial_ref(orb,
+ "RootPOA"
+ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK_RETURN (PortableServer::POA::_nil ());
+
+ // Get the POAManager from the Root POA.
+ PortableServer::POAManager_var poa_manager
+ = root_poa->the_POAManager(ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK_RETURN (PortableServer::POA::_nil ());
+
+ // Create the child POA Policies.
+ CORBA::PolicyList policies(0);
+ policies.length(0);
+
+ // Create the child POA
+ PortableServer::POA_var poa = AppHelper::create_poa(poa_name,
+ root_poa.in(),
+ poa_manager.in(),
+ policies
+ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK_RETURN (PortableServer::POA::_nil ());
+
+ // Give away the child POA_ptr from the POA_var variable.
+ return poa._retn();
+}
+
+
+bool
+ServerApp::check_validity ()
+{
+ // Check whether the clients return any errors.
+ if (this->num_collocated_clients_ > 0
+ && this->collocated_client_task_.failure_count () > 0)
+ {
+ return false;
+ }
+
+ Foo_B_Statistics stats (this->num_remote_clients_,
+ this->num_collocated_clients_);
+
+ Foo_B_ClientEngine::expected_results (stats);
+
+ for (unsigned i = 0; i < this->num_servants_; i++)
+ {
+ this->foo_servants_.servant(i)->gather_stats (stats);
+ }
+
+ if (this->num_collocated_clients_ > 0)
+ {
+ this->cb_servants_.servant (0)->gather_stats (stats);
+ }
+
+ return stats.actual_vs_expected ();
+}
+
diff --git a/TAO/tests/CSD_Strategy_Tests/TP_Test_3/run_test.pl b/TAO/tests/CSD_Strategy_Tests/TP_Test_3/run_test.pl
new file mode 100755
index 00000000000..13aac1fa8c9
--- /dev/null
+++ b/TAO/tests/CSD_Strategy_Tests/TP_Test_3/run_test.pl
@@ -0,0 +1,186 @@
+eval '(exit $?0)' && eval 'exec perl -S $0 ${1+"$@"}'
+ & eval 'exec perl -S $0 $argv:q'
+ if 0;
+
+# $Id$
+# -*- perl -*-
+
+use lib '../../../../bin';
+use PerlACE::Run_Test;
+
+my $status = 0;
+
+my $iorfname_prefix = "servant";
+my $num_servants = 1;
+my $num_orb_threads = 1;
+my $num_remote_clients = 1;
+my $num_csd_threads = 1;
+my $num_collocated_clients = 0;
+my $collocated_client_kind = 0;
+my $client_kind = 0;
+
+my $i;
+my $j;
+my @iorfile;
+
+my $ARGC = @ARGV;
+
+if ($ARGC > 0)
+{
+ if ($ARGC > 1)
+ {
+ print STDERR "ERROR: Too many command-line arguments for $0.\n";
+ exit 1;
+ }
+
+ my $subtest = $ARGV[0];
+
+ if ($subtest eq 'remote')
+ {
+ $num_remote_clients = 40;
+ }
+ elsif ($subtest eq 'collocated')
+ {
+ $num_remote_clients = 0;
+ $num_collocated_clients = 1;
+ $num_csd_threads=1;
+ }
+ elsif ($subtest eq 'remote_orbthreads')
+ {
+ $num_orb_threads = 5;
+ $num_remote_clients = 40;
+ }
+ elsif ($subtest eq 'remote_servants')
+ {
+ $num_servants = 5;
+ $num_remote_clients = 40;
+ }
+ elsif ($subtest eq 'remote_csdthreads')
+ {
+ $num_csd_threads = 5;
+ $num_remote_clients = 40;
+ }
+ elsif ($subtest eq 'remote_big')
+ {
+ $num_csd_threads = 5;
+ $num_servants = 10;
+ $num_orb_threads = 4;
+ $num_remote_clients = 40;
+ }
+ elsif ($subtest eq 'big')
+ {
+ $num_csd_threads = 5;
+ $num_servants = 10;
+ $num_orb_threads = 4;
+ $num_remote_clients = 40;
+ $num_collocated_clients = 40;
+ }
+ elsif ($subtest eq 'usage')
+ {
+ print STDOUT "Usage: $0 [<subtest>]\n" .
+ "\n" .
+ "Supported <subtest> values:\n" .
+ "\n" .
+ "\tremote\n" .
+ "\tcollocated\n" .
+ "\tremote_orbthreads\n" .
+ "\tremote_servants\n" .
+ "\tremote_csdthreads\n" .
+ "\tremote_big\n" .
+ "\tusage\n" .
+ "\n";
+ exit 0;
+ }
+ else
+ {
+ print STDERR "ERROR: invalid subtest argument for $0: $subtest\n";
+ exit 1;
+ }
+}
+
+#Delete old ior files.
+for ($i = 0; $i < $num_servants; $i++) {
+ my $servant_id = sprintf("%02d", ($i + 1));
+ $iorfile[$i] = PerlACE::LocalFile($iorfname_prefix . "_$servant_id.ior");
+ unlink $iorfile[$i];
+}
+
+if (PerlACE::is_vxworks_test()) {
+ $SV = new PerlACE::ProcessVX ("server_main",
+ "-p $iorfname_prefix " .
+ "-s $num_servants " .
+ "-n $num_csd_threads " .
+ "-t $num_orb_threads " .
+ "-r $num_remote_clients " .
+ "-c $num_collocated_clients " .
+ "-k $collocated_client_kind");
+}
+else {
+ $SV = new PerlACE::Process("server_main",
+ "-p $iorfname_prefix " .
+ "-s $num_servants " .
+ "-n $num_csd_threads " .
+ "-t $num_orb_threads " .
+ "-r $num_remote_clients " .
+ "-c $num_collocated_clients " .
+ "-k $collocated_client_kind");
+}
+
+
+
+$SV->Spawn();
+
+# Wait for the servant ior files created by server.
+for ($i = 0; $i < $num_servants; $i++) {
+ if (PerlACE::waitforfile_timed
+ ($iorfile[$i],
+ $PerlACE::wait_interval_for_process_creation) == -1) {
+ print STDERR "ERROR: cannot find file <$iorfile[$i]>\n";
+ $SV->Kill();
+ $SV->TimedWait(1);
+ exit 1;
+ }
+}
+
+my $count = 0;
+
+for ($i = 0; $i < $num_remote_clients; $i++)
+{
+ $client_id = $i + 1;
+
+ $j = $i % $num_servants;
+
+ $CLS[$i] = new PerlACE::Process("client_main",
+ "-i file://$iorfile[$j] ".
+ "-k $client_kind ".
+ "-n $client_id");
+# print STDERR $CLS[$i]->CommandLine() . "\n";
+
+ $CLS[$i]->Spawn();
+}
+
+for ($i = 0; $i < $num_remote_clients; $i++)
+{
+ $client = $CLS[$i]->WaitKill(60);
+
+ if ($client != 0)
+ {
+ print STDERR "ERROR: client $i returned $client\n";
+ $status = 1;
+ }
+}
+
+
+$server = $SV->WaitKill(60);
+
+if ($server != 0) {
+ print STDERR "ERROR: server returned $server\n";
+ $status = 1;
+}
+
+#Delete ior files generated by this run.
+for ($i = 0; $i < $num_servants; $i++) {
+ unlink $iorfile[$i];
+}
+
+exit $status;
diff --git a/TAO/tests/CSD_Strategy_Tests/TP_Test_4/ServerApp.cpp b/TAO/tests/CSD_Strategy_Tests/TP_Test_4/ServerApp.cpp
new file mode 100644
index 00000000000..9ce517c4863
--- /dev/null
+++ b/TAO/tests/CSD_Strategy_Tests/TP_Test_4/ServerApp.cpp
@@ -0,0 +1,391 @@
+// $Id$
+#include "ServerApp.h"
+#include "AppHelper.h"
+#include "OrbRunner.h"
+#include "AppShutdown.h"
+#include "TestAppExceptionC.h"
+#include "Foo_C_Custom_ClientEngine.h"
+#include "Foo_C_ClientEngine.h"
+#include "Foo_C_Statistics.h"
+#include "ace/OS.h"
+#include "ace/Get_Opt.h"
+// To force static load the service.
+#include "tao/PI/PI.h"
+#include "tao/CSD_ThreadPool/CSD_ThreadPool.h"
+
+ServerApp::ServerApp()
+ : TestAppBase("TP_Test_4_Server"),
+ ior_filename_prefix_("foo"),
+ num_servants_(1),
+ num_csd_threads_(1),
+ num_orb_threads_(1),
+ num_remote_clients_(1),
+ num_collocated_clients_(0),
+ collocated_client_kind_(0)
+{
+}
+
+
+ServerApp::~ServerApp()
+{
+}
+
+
+int
+ServerApp::run_i(int argc, char* argv[] ACE_ENV_ARG_DECL)
+{
+ int result = this->init(argc, argv ACE_ENV_ARG_PARAMETER);
+ if (result != 0)
+ {
+ return result;
+ }
+ ACE_CHECK_RETURN (-1);
+
+ this->poa_setup(ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+ this->csd_setup(ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+ this->servant_setup(ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+ this->collocated_setup();
+ this->poa_activate(ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+ this->run_collocated_clients(ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+ this->run_orb_event_loop(ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+
+ // Calling wait on ACE_Thread_Manager singleton to avoid the problem
+ // that the main thread might exit before all CSD Threads exit.
+
+ // Wait for all CSD task threads exit.
+ ACE_Thread_Manager::instance ()->wait ();
+
+ this->cleanup();
+ return this->check_validity () ? 0 : -1;
+}
+
+
+int
+ServerApp::init(int argc, char* argv[] ACE_ENV_ARG_DECL)
+{
+ this->orb_ = CORBA::ORB_init(argc, argv, "" ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+
+ // Parse the command-line args for this application.
+ // * Raises -1 if problems are encountered.
+ // * Returns 1 if the usage statement was explicitly requested.
+ // * Returns 0 otherwise.
+ int result = this->parse_args(argc, argv);
+ if (result != 0)
+ {
+ return result;
+ }
+
+ unsigned num_clients = this->num_remote_clients_ +
+ this->num_collocated_clients_;
+
+ TheAppShutdown->init(this->orb_.in(), num_clients ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+
+ return 0;
+}
+
+
+void
+ServerApp::poa_setup(ACE_ENV_SINGLE_ARG_DECL)
+{
+ this->poa_ = this->create_poa(this->orb_.in(),
+ "ChildPoa"
+ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK;
+}
+
+
+void
+ServerApp::csd_setup(ACE_ENV_SINGLE_ARG_DECL)
+{
+ this->tp_strategy_ = new TAO::CSD::TP_Strategy(this->num_csd_threads_);
+
+ if (!this->tp_strategy_->apply_to(this->poa_.in() ACE_ENV_ARG_PARAMETER))
+ {
+ ACE_ERROR((LM_ERROR,
+ "Failed to apply CSD strategy to poa.\n"));
+ ACE_THROW(TestAppException());
+ }
+ ACE_CHECK;
+}
+
+
+void
+ServerApp::servant_setup(ACE_ENV_SINGLE_ARG_DECL)
+{
+ this->servants_.create_and_activate(this->num_servants_,
+ this->orb_.in (),
+ this->poa_.in (),
+ this->ior_filename_prefix_.c_str()
+ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK;
+}
+
+
+void
+ServerApp::collocated_setup()
+{
+ int custom_client_id_start = this->num_remote_clients_;
+
+ unsigned servant_index = 0;
+
+ for (unsigned i = 0; i < this->num_collocated_clients_; i++)
+ {
+ if (i > 0)
+ {
+ // Dole out the servant object references in a round-robin fashion.
+ servant_index = (servant_index + 1) % this->num_servants_;
+ }
+
+ ServantListType::T_stub_var obj = this->servants_.objref(servant_index);
+
+ ClientEngine_Handle engine =
+ new Foo_C_Custom_ClientEngine(this->servants_.servant(servant_index),
+ obj.in(),
+ this->tp_strategy_.in(),
+ ++ custom_client_id_start);
+ this->collocated_client_task_.add_engine(engine.in());
+ }
+}
+
+
+void
+ServerApp::poa_activate(ACE_ENV_SINGLE_ARG_DECL)
+{
+ PortableServer::POAManager_var poa_manager
+ = this->poa_->the_POAManager(ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK;
+
+ poa_manager->activate(ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK;
+}
+
+
+void
+ServerApp::run_collocated_clients(ACE_ENV_SINGLE_ARG_DECL)
+{
+ if (this->num_collocated_clients_ > 0)
+ {
+ if (this->collocated_client_task_.open() == -1)
+ {
+ ACE_THROW (TestAppException ());
+ }
+ }
+}
+
+
+void
+ServerApp::run_orb_event_loop(ACE_ENV_SINGLE_ARG_DECL)
+{
+ OrbRunner orb_runner(this->orb_.in(), this->num_orb_threads_);
+ orb_runner.run(ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK;
+ TheAppShutdown->wait ();
+}
+
+
+void
+ServerApp::cleanup()
+{
+ for (unsigned i = 0; i < this->num_servants_; i++)
+ {
+ this->servants_.servant(i)->dump();
+ }
+
+ // Wait for all of the collocated client task threads to finish.
+ if (this->num_collocated_clients_ > 0)
+ {
+ this->collocated_client_task_.wait();
+ }
+}
+
+
+int
+ServerApp::parse_args(int argc, char* argv[])
+{
+ this->exe_name_ = argv[0];
+
+ ACE_Get_Opt get_opts(argc, argv, "p:s:n:t:r:c:k:");
+
+ int c;
+
+ while ((c = get_opts()) != -1)
+ {
+ int result = 0;
+ switch (c)
+ {
+ case 'p':
+ this->ior_filename_prefix_ = get_opts.opt_arg();
+ break;
+
+ case 's':
+ result = this->set_arg(this->num_servants_,
+ get_opts.opt_arg(),
+ c,
+ "num_servants",
+ 1);
+ break;
+
+ case 'n':
+ result = this->set_arg(this->num_csd_threads_,
+ get_opts.opt_arg(),
+ c,
+ "num_servants",
+ 1);
+ break;
+
+ case 't':
+ result = this->set_arg(this->num_orb_threads_,
+ get_opts.opt_arg(),
+ c,
+ "num_orb_threads",
+ 1);
+ break;
+
+ case 'r':
+ result = this->set_arg(this->num_remote_clients_,
+ get_opts.opt_arg(),
+ c,
+ "num_remote_clients");
+ break;
+
+ case 'c':
+ result = this->set_arg(this->num_collocated_clients_,
+ get_opts.opt_arg(),
+ c,
+ "num_collocated_clients");
+ break;
+
+ case 'k':
+ result = this->set_arg(this->collocated_client_kind_,
+ get_opts.opt_arg(),
+ c,
+ "collocated_client_kind");
+ break;
+
+ case '?':
+ this->usage_statement();
+ return 1;
+
+ default:
+ this->usage_statement();
+ return -1;
+ }
+
+ if (result != 0)
+ {
+ return result;
+ }
+ }
+
+ return this->arg_dependency_checks();
+}
+
+void
+ServerApp::usage_statement()
+{
+ ACE_ERROR((LM_ERROR,
+ "Usage: %s [options]\n\n"
+ "OPTIONS:\n\n"
+ "\t[-p <ior_filename_prefix>]\n"
+ "\t[-s <num_servants>]\n"
+ "\t[-n <num_csd_threads>]\n"
+ "\t[-t <num_orb_threads>]\n"
+ "\t[-r <num_remote_clients>]\n"
+ "\t[-c <num_collocated_clients>]\n"
+ "\t[-k <collocated_client_kind>]\n"
+ "\t[-?]\n\n",
+ this->exe_name_.c_str()));
+}
+
+
+int
+ServerApp::arg_dependency_checks()
+{
+ return (this->num_remote_clients_
+ + this->num_collocated_clients_) > 0 ? 0 : -1;
+}
+
+
+int
+ServerApp::set_arg(unsigned& value,
+ const char* arg,
+ char opt,
+ const char* name,
+ int min)
+{
+ int tmp = ACE_OS::atoi(arg);
+
+ if (tmp < min)
+ {
+ ACE_ERROR((LM_ERROR,
+ "Error: -%c <%s> must be integer type with a value of, "
+ "at least, %d.\n", opt, name, min));
+ this->usage_statement();
+ return -1;
+ }
+
+ value = tmp;
+
+ return 0;
+}
+
+
+PortableServer::POA_ptr
+ServerApp::create_poa(CORBA::ORB_ptr orb,
+ const char* poa_name
+ ACE_ENV_ARG_DECL)
+{
+ // Get the Root POA.
+ PortableServer::POA_var root_poa
+ = RefHelper<PortableServer::POA>::resolve_initial_ref(orb,
+ "RootPOA"
+ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK_RETURN (PortableServer::POA::_nil ());
+
+ // Get the POAManager from the Root POA.
+ PortableServer::POAManager_var poa_manager
+ = root_poa->the_POAManager(ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK_RETURN (PortableServer::POA::_nil ());
+
+ // Create the child POA Policies.
+ CORBA::PolicyList policies(0);
+ policies.length(0);
+
+ // Create the child POA
+ PortableServer::POA_var poa
+ = AppHelper::create_poa(poa_name,
+ root_poa.in(),
+ poa_manager.in(),
+ policies
+ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK_RETURN (PortableServer::POA::_nil ());
+
+ // Give away the child POA_ptr from the POA_var variable.
+ return poa._retn();
+}
+
+
+bool
+ServerApp::check_validity ()
+{
+ Foo_C_Statistics stats (this->num_remote_clients_,
+ this->num_collocated_clients_);
+
+ Foo_C_ClientEngine::expected_results (stats);
+ Foo_C_Custom_ClientEngine::expected_results (stats);
+
+ for (unsigned i = 0; i < this->num_servants_; i++)
+ {
+ this->servants_.servant(i)->gather_stats(stats);
+ }
+
+ return stats.actual_vs_expected ();
+}
diff --git a/TAO/tests/CSD_Strategy_Tests/TP_Test_4/run_test.pl b/TAO/tests/CSD_Strategy_Tests/TP_Test_4/run_test.pl
new file mode 100755
index 00000000000..f50c6616e1e
--- /dev/null
+++ b/TAO/tests/CSD_Strategy_Tests/TP_Test_4/run_test.pl
@@ -0,0 +1,191 @@
+eval '(exit $?0)' && eval 'exec perl -S $0 ${1+"$@"}'
+ & eval 'exec perl -S $0 $argv:q'
+ if 0;
+
+# $Id$
+# -*- perl -*-
+
+use lib '../../../../bin';
+use PerlACE::Run_Test;
+
+my $status = 0;
+
+my $iorfname_prefix = "servant";
+my $num_servants = 1;
+my $num_orb_threads = 1;
+my $num_remote_clients = 1;
+my $num_csd_threads = 1;
+my $num_collocated_clients = 0;
+my $collocated_client_kind = 0;
+my $client_kind = 0;
+
+my $i;
+my $j;
+my @iorfile;
+
+my $ARGC = @ARGV;
+
+if ($ARGC > 0)
+{
+ if ($ARGC > 1)
+ {
+ print STDERR "ERROR: Too many command-line arguments for $0.\n";
+ exit 1;
+ }
+
+ my $subtest = $ARGV[0];
+
+ if ($subtest eq 'remote')
+ {
+ $num_remote_clients = 40;
+ }
+ elsif ($subtest eq 'collocated')
+ {
+ $num_remote_clients = 0;
+ $num_collocated_clients = 1;
+ }
+ elsif ($subtest eq 'collocated_big')
+ {
+ $num_remote_clients = 0;
+ $num_csd_threads = 5;
+ $num_collocated_clients = 40;
+ }
+ elsif ($subtest eq 'remote_orbthreads')
+ {
+ $num_orb_threads = 5;
+ $num_remote_clients = 40;
+ }
+ elsif ($subtest eq 'remote_servants')
+ {
+ $num_servants = 5;
+ $num_remote_clients = 40;
+ }
+ elsif ($subtest eq 'remote_csdthreads')
+ {
+ $num_csd_threads = 5;
+ $num_remote_clients = 40;
+ }
+ elsif ($subtest eq 'remote_big')
+ {
+ $num_csd_threads = 5;
+ $num_servants = 10;
+ $num_orb_threads = 4;
+ $num_remote_clients = 40;
+ }
+ elsif ($subtest eq 'big')
+ {
+ $num_csd_threads = 5;
+ $num_servants = 10;
+ $num_orb_threads = 4;
+ $num_remote_clients = 40;
+ $num_collocated_clients = 40;
+ }
+ elsif ($subtest eq 'usage')
+ {
+ print STDOUT "Usage: $0 [<subtest>]\n" .
+ "\n" .
+ "Supported <subtest> values:\n" .
+ "\n" .
+ "\tremote\n" .
+ "\tcollocated\n" .
+ "\tremote_orbthreads\n" .
+ "\tremote_servants\n" .
+ "\tremote_csdthreads\n" .
+ "\tremote_big\n" .
+ "\tusage\n" .
+ "\n";
+ exit 0;
+ }
+ else
+ {
+ print STDERR "ERROR: invalid subtest argument for $0: $subtest\n";
+ exit 1;
+ }
+}
+
+#Delete old ior files.
+for ($i = 0; $i < $num_servants; $i++) {
+ my $servant_id = sprintf("%02d", ($i + 1));
+ $iorfile[$i] = PerlACE::LocalFile($iorfname_prefix . "_$servant_id.ior");
+ unlink $iorfile[$i];
+}
+
+if (PerlACE::is_vxworks_test()) {
+ $SV = new PerlACE::ProcessVX ("server_main",
+ "-p $iorfname_prefix " .
+ "-s $num_servants " .
+ "-n $num_csd_threads " .
+ "-t $num_orb_threads " .
+ "-r $num_remote_clients " .
+ "-c $num_collocated_clients " .
+ "-k $collocated_client_kind");
+
+}
+else {
+ $SV = new PerlACE::Process("server_main",
+ "-p $iorfname_prefix " .
+ "-s $num_servants " .
+ "-n $num_csd_threads " .
+ "-t $num_orb_threads " .
+ "-r $num_remote_clients " .
+ "-c $num_collocated_clients " .
+ "-k $collocated_client_kind");
+}
+
+
+$SV->Spawn();
+
+# Wait for the servant ior files created by server.
+for ($i = 0; $i < $num_servants; $i++) {
+ if (PerlACE::waitforfile_timed
+ ($iorfile[$i],
+ $PerlACE::wait_interval_for_process_creation) == -1) {
+ print STDERR "ERROR: cannot find file <$iorfile[$i]>\n";
+ $SV->Kill();
+ $SV->TimedWait(1);
+ exit 1;
+ }
+}
+
+my $count = 0;
+
+for ($i = 0; $i < $num_remote_clients; $i++)
+{
+
+ $client_id = $i+1;
+
+ $j = $i % $num_servants;
+
+ $CLS[$i] = new PerlACE::Process("client_main",
+ "-i file://$iorfile[$j] ".
+ "-k $client_kind ".
+ "-n $client_id");
+
+ $CLS[$i]->Spawn();
+}
+
+for ($i = 0; $i < $num_remote_clients; $i++)
+{
+ $client = $CLS[$i]->WaitKill(60);
+
+ if ($client != 0)
+ {
+ print STDERR "ERROR: client $i returned $client\n";
+ $status = 1;
+ }
+}
+
+
+$server = $SV->WaitKill(60);
+
+if ($server != 0) {
+ print STDERR "ERROR: server returned $server\n";
+ $status = 1;
+}
+
+#Delete ior files generated by this run.
+for ($i = 0; $i < $num_servants; $i++) {
+ unlink $iorfile[$i];
+}
+
+exit $status;
diff --git a/TAO/tests/CSD_Strategy_Tests/TP_Test_Dynamic/CSD_TP_Test_Dynamic.mpc b/TAO/tests/CSD_Strategy_Tests/TP_Test_Dynamic/CSD_TP_Test_Dynamic.mpc
new file mode 100644
index 00000000000..9da402191ea
--- /dev/null
+++ b/TAO/tests/CSD_Strategy_Tests/TP_Test_Dynamic/CSD_TP_Test_Dynamic.mpc
@@ -0,0 +1,21 @@
+// -*- MPC -*-
+// $Id$
+
+project(*Server): taoserver {
+ idlflags += -Sa -St
+ Source_Files {
+ Hello.cpp
+ server.cpp
+ }
+}
+
+project(*Client): taoclient {
+ after += *Server
+ Source_Files {
+ TestC.cpp
+ client.cpp
+ }
+}
+
+
+
diff --git a/TAO/tests/CSD_Strategy_Tests/TP_Test_Dynamic/Hello.h b/TAO/tests/CSD_Strategy_Tests/TP_Test_Dynamic/Hello.h
new file mode 100644
index 00000000000..1a404058944
--- /dev/null
+++ b/TAO/tests/CSD_Strategy_Tests/TP_Test_Dynamic/Hello.h
@@ -0,0 +1,33 @@
+//
+// $Id$
+//
+
+#ifndef HELLO_H
+#define HELLO_H
+#include /**/ "ace/pre.h"
+
+#include "TestS.h"
+
+/// Implement the Test::Hello interface
+class Hello
+ : public virtual POA_Test::Hello
+{
+public:
+ /// Constructor
+ Hello (CORBA::ORB_ptr orb);
+
+ // = The skeleton methods
+ virtual char * get_string (ACE_ENV_SINGLE_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_;
+};
+
+#include /**/ "ace/post.h"
+#endif /* HELLO_H */
diff --git a/TAO/tests/CSD_Strategy_Tests/TP_Test_Dynamic/client.cpp b/TAO/tests/CSD_Strategy_Tests/TP_Test_Dynamic/client.cpp
new file mode 100644
index 00000000000..f85722246b5
--- /dev/null
+++ b/TAO/tests/CSD_Strategy_Tests/TP_Test_Dynamic/client.cpp
@@ -0,0 +1,86 @@
+// $Id$
+
+#include "TestC.h"
+#include "ace/Get_Opt.h"
+
+ACE_RCSID(Hello, client, "$Id$")
+
+const char *ior = "file://test.ior";
+
+int
+parse_args (int argc, char *argv[])
+{
+ ACE_Get_Opt get_opts (argc, argv, "k:");
+ int c;
+
+ while ((c = get_opts ()) != -1)
+ switch (c)
+ {
+ case 'k':
+ ior = get_opts.opt_arg ();
+ break;
+
+ case '?':
+ default:
+ ACE_ERROR_RETURN ((LM_ERROR,
+ "usage: %s "
+ "-k <ior> "
+ "\n",
+ argv [0]),
+ -1);
+ }
+ // Indicates sucessful parsing of the command line
+ return 0;
+}
+
+int
+main (int argc, char *argv[])
+{
+ 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 tmp =
+ orb->string_to_object(ior ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ Test::Hello_var hello =
+ Test::Hello::_narrow(tmp.in () ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ if (CORBA::is_nil (hello.in ()))
+ {
+ ACE_ERROR_RETURN ((LM_DEBUG,
+ "Nil Test::Hello reference <%s>\n",
+ ior),
+ 1);
+ }
+
+ CORBA::String_var the_string =
+ hello->get_string (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ ACE_DEBUG ((LM_DEBUG, "(%P|%t) - string returned <%s>\n",
+ the_string.in ()));
+
+ hello->shutdown (ACE_ENV_SINGLE_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/tests/CSD_Strategy_Tests/TP_Test_Dynamic/run_test.pl b/TAO/tests/CSD_Strategy_Tests/TP_Test_Dynamic/run_test.pl
new file mode 100755
index 00000000000..de69f709455
--- /dev/null
+++ b/TAO/tests/CSD_Strategy_Tests/TP_Test_Dynamic/run_test.pl
@@ -0,0 +1,49 @@
+eval '(exit $?0)' && eval 'exec perl -S $0 ${1+"$@"}'
+ & eval 'exec perl -S $0 $argv:q'
+ if 0;
+
+# $Id$
+# -*- perl -*-
+
+use lib '../../../../bin';
+use PerlACE::Run_Test;
+
+$status = 0;
+
+$iorfile = PerlACE::LocalFile ("server.ior");
+unlink $iorfile;
+
+if (PerlACE::is_vxworks_test()) {
+ $SV = new PerlACE::ProcessVX ("server", "-o server.ior");
+}
+else {
+ $SV = new PerlACE::Process ("server", "-o $iorfile");
+}
+$CL = new PerlACE::Process ("client", " -k file://$iorfile");
+
+$SV->Spawn ();
+
+if (PerlACE::waitforfile_timed ($iorfile,
+ $PerlACE::wait_interval_for_process_creation) == -1) {
+ print STDERR "ERROR: cannot find file <$iorfile>\n";
+ $SV->Kill (); $SV->TimedWait (1);
+ exit 1;
+}
+
+$client = $CL->SpawnWaitKill (300);
+
+if ($client != 0) {
+ print STDERR "ERROR: client returned $client\n";
+ $status = 1;
+}
+
+$server = $SV->WaitKill (10);
+
+if ($server != 0) {
+ print STDERR "ERROR: server returned $server\n";
+ $status = 1;
+}
+
+unlink $iorfile;
+
+exit $status;
diff --git a/TAO/tests/CSD_Strategy_Tests/TP_Test_Dynamic/server.cpp b/TAO/tests/CSD_Strategy_Tests/TP_Test_Dynamic/server.cpp
new file mode 100644
index 00000000000..bd2b023e2b7
--- /dev/null
+++ b/TAO/tests/CSD_Strategy_Tests/TP_Test_Dynamic/server.cpp
@@ -0,0 +1,119 @@
+// $Id$
+
+#include "Hello.h"
+#include "ace/Get_Opt.h"
+#include "ace/OS_NS_stdio.h"
+#include "ace/Thread_Manager.h"
+
+ACE_RCSID (Hello,
+ 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[])
+{
+ 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;
+
+ PortableServer::POA_var root_poa =
+ PortableServer::POA::_narrow (poa_object.in () ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ if (CORBA::is_nil (root_poa.in ()))
+ ACE_ERROR_RETURN ((LM_ERROR,
+ " (%P|%t) Panic: nil RootPOA\n"),
+ 1);
+
+ 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;
+
+ Hello *hello_impl;
+ ACE_NEW_RETURN (hello_impl,
+ Hello (orb.in ()),
+ 1);
+ PortableServer::ServantBase_var owner_transfer(hello_impl);
+
+ Test::Hello_var hello =
+ hello_impl->_this (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ CORBA::String_var ior =
+ orb->object_to_string (hello.in () ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ // Output the IOR to the <ior_output_file>
+ 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;
+
+ // Wait for all CSD task threads exit.
+ ACE_Thread_Manager::instance ()->wait ();
+ }
+ ACE_CATCHANY
+ {
+ ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION,
+ "Exception caught:");
+ return 1;
+ }
+ ACE_ENDTRY;
+
+ return 0;
+}
diff --git a/TAO/tests/CSD_Strategy_Tests/TP_Test_Static/CSD_TP_Test_Static.mpc b/TAO/tests/CSD_Strategy_Tests/TP_Test_Static/CSD_TP_Test_Static.mpc
new file mode 100644
index 00000000000..afd9e5d8e68
--- /dev/null
+++ b/TAO/tests/CSD_Strategy_Tests/TP_Test_Static/CSD_TP_Test_Static.mpc
@@ -0,0 +1,22 @@
+// -*- MPC -*-
+// $Id$
+
+project(*Server): csd_tp_test_exe_a {
+ exename=server_main
+
+ Source_Files {
+ ServerApp.cpp
+ server_main.cpp
+ }
+}
+
+project(*Client): csd_tp_test_exe_a {
+ exename=client_main
+ after += *Server
+
+ Source_Files {
+ ClientApp.cpp
+ client_main.cpp
+ }
+}
+
diff --git a/TAO/tests/CSD_Strategy_Tests/TP_Test_Static/ClientApp.cpp b/TAO/tests/CSD_Strategy_Tests/TP_Test_Static/ClientApp.cpp
new file mode 100644
index 00000000000..38dd8c26647
--- /dev/null
+++ b/TAO/tests/CSD_Strategy_Tests/TP_Test_Static/ClientApp.cpp
@@ -0,0 +1,87 @@
+// $Id$
+#include "ClientApp.h"
+#include "Foo_A_ClientEngine.h"
+#include "AppHelper.h"
+#include "TestAppExceptionC.h"
+#include "ace/Get_Opt.h"
+#include "ace/Log_Msg.h"
+// To force static load the service.
+#include "tao/PI/PI.h"
+#include "tao/CSD_ThreadPool/CSD_ThreadPool.h"
+
+ClientApp::ClientApp()
+ : TestAppBase("TP_Test_1_Client"),
+ ior_ ("file://test.ior")
+{
+}
+
+
+ClientApp::~ClientApp()
+{
+}
+
+
+int
+ClientApp::run_i(int argc, char* argv[] ACE_ENV_ARG_DECL)
+{
+ // Initialize the ORB before parsing our own args.
+ CORBA::ORB_var orb = CORBA::ORB_init(argc, argv, "" ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+
+ // Parse the command-line args for this application.
+ // * Returns -1 if problems are encountered.
+ // * Returns 1 if the usage statement was explicitly requested.
+ // * Returns 0 otherwise.
+ int result = this->parse_args(argc, argv);
+ if (result != 0)
+ {
+ return result;
+ }
+ // Convert the IOR string to a Foo_A object reference.
+ Foo_A_var foo = RefHelper<Foo_A>::string_to_ref(orb.in(),
+ this->ior_.c_str()
+ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+
+ // Create the appropriate client "engine" object.
+ Foo_A_ClientEngine engine(foo.in());
+
+ // Execute the client algorithm
+ result = engine.execute(ACE_ENV_SINGLE_ARG_PARAMETER) ? 0 : -1;
+ ACE_CHECK_RETURN (-1);
+
+ return result;
+}
+
+
+int
+ClientApp::parse_args(int argc, char* argv[])
+{
+ ACE_Get_Opt get_opts(argc, argv, "i:");
+
+ int c;
+
+ while ((c = get_opts()) != -1)
+ {
+ switch (c)
+ {
+ case 'i':
+ this->ior_ = get_opts.opt_arg();
+ break;
+
+ case '?':
+ ACE_DEBUG((LM_DEBUG,
+ "(%P|%t) usage: %s -i <ior_string>\n",
+ argv[0]));
+ return 1;
+
+ default:
+ ACE_ERROR((LM_ERROR,
+ "(%P|%t) usage: %s -i <ior_string>\n",
+ argv[0]));
+ return -1;
+ }
+ }
+
+ return 0;
+}
diff --git a/TAO/tests/CSD_Strategy_Tests/TP_Test_Static/ServerApp.cpp b/TAO/tests/CSD_Strategy_Tests/TP_Test_Static/ServerApp.cpp
new file mode 100644
index 00000000000..c4af3802881
--- /dev/null
+++ b/TAO/tests/CSD_Strategy_Tests/TP_Test_Static/ServerApp.cpp
@@ -0,0 +1,175 @@
+// $Id$
+#include "ServerApp.h"
+#include "Foo_A_i.h"
+#include "AppHelper.h"
+#include "TestAppExceptionC.h"
+#include "AppShutdown.h"
+#include "ace/Get_Opt.h"
+// To force static load the service.
+#include "tao/PI/PI.h"
+#include "tao/CSD_ThreadPool/CSD_ThreadPool.h"
+
+
+ServerApp::ServerApp()
+ : TestAppBase("TP_Test_1_Server"),
+ ior_filename_ ("test.ior"),
+ num_clients_ (1)
+{
+}
+
+ServerApp::~ServerApp()
+{
+}
+
+int
+ServerApp::run_i(int argc, char* argv[] ACE_ENV_ARG_DECL)
+{
+ // Initialize the ORB before parsing our own args.
+ CORBA::ORB_var orb = CORBA::ORB_init(argc, argv, "" ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+
+ // Parse the command-line args for this application.
+ // * Returns -1 if problems are encountered.
+ // * Returns 1 if the usage statement was explicitly requested.
+ // * Returns 0 otherwise.
+ int result = this->parse_args(argc, argv);
+ if (result != 0)
+ {
+ return result;
+ }
+
+ TheAppShutdown->init(orb.in(), num_clients_ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+
+ // Get the Root POA
+ PortableServer::POA_var root_poa =
+ RefHelper<PortableServer::POA>::resolve_initial_ref(orb.in(),
+ "RootPOA"
+ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+
+ // Get the POAManager from the Root POA.
+ PortableServer::POAManager_var poa_manager
+ = root_poa->the_POAManager(ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+
+ // Create the child POA Policies.
+ CORBA::PolicyList policies(0);
+ policies.length(0);
+
+ // Create the child POA
+ PortableServer::POA_var child_poa =
+ AppHelper::create_poa("ChildPoa",
+ root_poa.in(),
+ poa_manager.in(),
+ policies
+ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+
+ // Create the servant object.
+ Foo_A_i* servant = new Foo_A_i();
+
+ // Local smart pointer variable to deal with releasing the reference
+ // to the servant object when the variable falls out of scope.
+ PortableServer::ServantBase_var servant_owner(servant);
+
+ // Obtain the object reference using the servant
+ CORBA::Object_var obj = AppHelper::activate_servant(child_poa.in(),
+ servant
+ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+
+ // Stringify and save the object reference to a file
+ AppHelper::ref_to_file(orb.in(),
+ obj.in(),
+ this->ior_filename_.c_str()
+ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+
+ // Activate the POA Manager
+ poa_manager->activate(ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+
+ ACE_DEBUG((LM_DEBUG,
+ "(%P|%t) ServerApp is ready. Running the ORB event loop.\n"));
+
+ // Run the ORB event loop.
+ orb->run (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+
+ ACE_DEBUG((LM_DEBUG,
+ "(%P|%t) ServerApp ORB event loop has completed.\n"));
+
+ TheAppShutdown->wait ();
+
+ // Calling wait on ACE_Thread_Manager singleton to avoid the problem
+ // that the main thread might exit before all CSD Threads exit.
+
+ // Wait for all CSD task threads exit.
+ ACE_Thread_Manager::instance ()->wait ();
+
+ ACE_DEBUG((LM_DEBUG,
+ "(%P|%t) ServerApp is destroying the Root POA.\n"));
+
+ root_poa->destroy(1, 1 ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+
+ ACE_DEBUG((LM_DEBUG,
+ "(%P|%t) ServerApp is destroying the ORB.\n"));
+
+ orb->destroy(ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+
+ ACE_DEBUG((LM_DEBUG,
+ "(%P|%t) ServerApp has completed running successfully.\n"));
+
+ return 0;
+}
+
+
+int
+ServerApp::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':
+ this->ior_filename_ = get_opts.opt_arg();
+ break;
+
+ case 'n':
+ {
+ int tmp = ACE_OS::atoi(get_opts.opt_arg());
+ if (tmp < 1)
+ {
+ ACE_ERROR((LM_ERROR,
+ "(%P|%t) Error. -n must be followed by an integer "
+ "value greater than 0.\n"));
+ return -1;
+ }
+
+ this->num_clients_ = tmp;
+ }
+ break;
+
+ case '?':
+ ACE_ERROR((LM_ERROR,
+ "(%P|%t) usage: %s -o <ior_filename> -n <num_clients>\n",
+ argv[0]));
+ return 1;
+
+ default:
+ ACE_ERROR((LM_ERROR,
+ "(%P|%t) usage: %s -o <ior_filename> -n <num_clients>\n",
+ argv[0]));
+ return -1;
+ }
+ }
+
+ return 0;
+}
diff --git a/TAO/tests/CSD_Strategy_Tests/TP_Test_Static/run_test.pl b/TAO/tests/CSD_Strategy_Tests/TP_Test_Static/run_test.pl
new file mode 100755
index 00000000000..7e34ffa58ba
--- /dev/null
+++ b/TAO/tests/CSD_Strategy_Tests/TP_Test_Static/run_test.pl
@@ -0,0 +1,61 @@
+eval '(exit $?0)' && eval 'exec perl -S $0 ${1+"$@"}'
+ & eval 'exec perl -S $0 $argv:q'
+ if 0;
+
+# $Id$
+# -*- perl -*-
+
+use lib '../../../../bin';
+use PerlACE::Run_Test;
+
+$iorfile = PerlACE::LocalFile ("server.ior");
+unlink $iorfile;
+$status = 0;
+
+$num_clients=40;
+
+if (PerlACE::is_vxworks_test()) {
+ $SV = new PerlACE::ProcessVX ("server_main", "-o $iorfile -n $num_clients");
+}
+else {
+ $SV = new PerlACE::Process ("server_main", "-o $iorfile -n $num_clients");
+}
+
+
+$SV->Spawn ();
+
+if (PerlACE::waitforfile_timed ($iorfile,
+ $PerlACE::wait_interval_for_process_creation) == -1) {
+ print STDERR "ERROR: cannot find file <$iorfile>\n";
+ $SV->Kill (); $SV->TimedWait (1);
+ exit 1;
+}
+
+for ($i = 0; $i < $num_clients; $i++) {
+
+ @CLS[$i] = new PerlACE::Process ("client_main", " -i file://$iorfile");
+
+ @CLS[$i]->Spawn ();
+}
+
+for ($i = 0; $i < $num_clients; $i++) {
+
+ $client = @CLS[$i]->WaitKill (60);
+
+ if ($client != 0) {
+ print STDERR "ERROR: client $i returned $client\n";
+ $status = 1;
+ }
+}
+
+
+$server = $SV->WaitKill (60);
+
+if ($server != 0) {
+ print STDERR "ERROR: server returned $server\n";
+ $status = 1;
+}
+
+unlink $iorfile;
+
+exit $status;
diff --git a/TAO/tests/CollocationLockup/AB.idl b/TAO/tests/CollocationLockup/AB.idl
new file mode 100644
index 00000000000..92b2822b872
--- /dev/null
+++ b/TAO/tests/CollocationLockup/AB.idl
@@ -0,0 +1,8 @@
+// $Id$
+
+interface A {
+};
+
+interface B {
+ A makeA ();
+};
diff --git a/TAO/tests/CollocationLockup/CollocationLockup.cpp b/TAO/tests/CollocationLockup/CollocationLockup.cpp
new file mode 100644
index 00000000000..eb391916472
--- /dev/null
+++ b/TAO/tests/CollocationLockup/CollocationLockup.cpp
@@ -0,0 +1,144 @@
+// $Id$
+
+/**
+ * CollocationLockup.cpp
+ * This is regression test against bug #2130.
+ * It tests a deadlock between a thread making a collocated invocation
+ * (which holds a lock on the ORB core and attempts to lock the POA) and a
+ * thread activating a servant (which locks the POA and attempts to lock the
+ * ORB core).
+ *
+ * This test was developed from a test submitted by Rick Marlborough for bug
+ * #2297 and refined by Paul Calabrese.
+ */
+
+#include "ABS.h"
+#include "SimpleNamingServiceC.h"
+
+#include "ace/Thread_Manager.h"
+#include "ace/SString.h"
+
+namespace
+{
+ const size_t N_THREADS = 20;
+ const size_t N_ITERATIONS = 100;
+ const char* nameString = "myBobject";
+
+ CORBA::ORB_var g_pOrb;
+ PortableServer::POA_var g_pPoa;
+ SimpleNamingService_var g_pNameService;
+}
+
+class A_i : public virtual POA_A
+{
+};
+
+class B_i : public virtual POA_B
+{
+public:
+ virtual A_ptr
+ makeA () ACE_THROW_SPEC ((CORBA::SystemException))
+ {
+ A_i* servant = new A_i;
+ g_pPoa->activate_object (servant);
+ CORBA::Object_var obj = g_pPoa->servant_to_reference (servant);
+ return A::_narrow (obj.in ());
+ }
+};
+
+// Thread for ORB->run()
+ACE_THR_FUNC_RETURN OrbRunThread (void*);
+
+// Thread to run the test
+ACE_THR_FUNC_RETURN TestThread (void*);
+
+int
+ACE_TMAIN (int argc, ACE_TCHAR *argv[])
+{
+ try
+ {
+ ACE_Thread_Manager threads;
+
+ // Normal corba init
+ g_pOrb = CORBA::ORB_init (argc, argv, "");
+
+ CORBA::Object_var pPoaObj =
+ g_pOrb->resolve_initial_references ("RootPOA");
+ g_pPoa = PortableServer::POA::_narrow (pPoaObj.in ());
+ PortableServer::POAManager_var pMgr = g_pPoa->the_POAManager ();
+ pMgr->activate ();
+
+ CORBA::Object_var pNSObj =
+ g_pOrb->resolve_initial_references ("SimpleNamingService");
+ g_pNameService = SimpleNamingService::_narrow (pNSObj.in ());
+
+ if (CORBA::is_nil (g_pNameService.in ()))
+ {
+ ACE_DEBUG ((LM_ERROR,
+ "ERROR: Could not locate the Simple Naming Service\n"));
+ return 1;
+ }
+
+ ACE_Thread::spawn (OrbRunThread, 0, THR_NEW_LWP | THR_DETACHED);
+
+ // Setup
+ B_i* servant = new B_i;
+ g_pPoa->activate_object (servant);
+ CORBA::Object_var b = g_pPoa->servant_to_reference (servant);
+
+ g_pNameService->bind (b.in ());
+
+ //Start threads
+ threads.spawn_n (N_THREADS, TestThread);
+ ACE_DEBUG ((LM_INFO, "All threads spawned.\n"));
+
+ } //destructor of ACE_Thread_Manager = implicit join
+ catch (CORBA::Exception& ex)
+ {
+ ACE_DEBUG ((LM_ERROR, "Corba Exception: %s\n", ex._info ().c_str ()));
+ return 1;
+ }
+
+ g_pOrb->shutdown (0);
+
+ return 0;
+}
+
+ACE_THR_FUNC_RETURN
+OrbRunThread (void*)
+{
+ try
+ {
+ g_pOrb->run ();
+ }
+ catch (CORBA::Exception& ex)
+ {
+ ACE_DEBUG ((LM_ERROR,
+ "In OrbRunThread: Corba Exception: %s\n",
+ ex._info ().c_str ()));
+ }
+ return 0;
+}
+
+ACE_THR_FUNC_RETURN
+TestThread (void*)
+{
+ try
+ {
+ for (size_t i (0); i < N_ITERATIONS; ++i)
+ {
+ CORBA::Object_var obj = g_pNameService->resolve ();
+ B_var b = B::_narrow (obj.in ());
+ b->makeA ();
+ if (i % 50 == 0)
+ ACE_DEBUG ((LM_INFO, "collocated call returned\n"));
+ }
+ }
+ catch (CORBA::Exception& ex)
+ {
+ ACE_DEBUG ((LM_ERROR,
+ "In TestThread: Corba Exception: %s\n",
+ ex._info ().c_str ()));
+ }
+ return 0;
+}
diff --git a/TAO/tests/CollocationLockup/CollocationLockup.mpc b/TAO/tests/CollocationLockup/CollocationLockup.mpc
new file mode 100644
index 00000000000..c02d02f27f7
--- /dev/null
+++ b/TAO/tests/CollocationLockup/CollocationLockup.mpc
@@ -0,0 +1,27 @@
+// -*- MPC -*-
+// $Id$
+
+project: taoexe, portableserver {
+ idlflags += -Sc -St
+ exename = CollocationLockup
+
+ Source_Files {
+ ABC.cpp
+ ABS.cpp
+ SimpleNamingServiceC.cpp
+ CollocationLockup.cpp
+ }
+}
+
+project(*SimpleNamingService): taoexe, portableserver {
+ idlflags += -Sc -St
+ exename = SimpleNamingService
+
+ IDL_Files {
+ SimpleNamingService.idl
+ }
+
+ Source_Files {
+ SimpleNamingService.cpp
+ }
+}
diff --git a/TAO/tests/CollocationLockup/SimpleNamingService.cpp b/TAO/tests/CollocationLockup/SimpleNamingService.cpp
new file mode 100644
index 00000000000..c21e466fec7
--- /dev/null
+++ b/TAO/tests/CollocationLockup/SimpleNamingService.cpp
@@ -0,0 +1,74 @@
+// $Id$
+
+/**
+ * SimpleNamingService.cpp
+ * This is part of the regression test against bug #2130.
+ * See CollocationLockup.cpp for a description of the test.
+ */
+
+#include "SimpleNamingServiceS.h"
+
+#include "ace/String_Base.h"
+#include "ace/streams.h"
+
+namespace
+{
+ const char* iorFileName = "SimpleNamingService.ior";
+}
+
+class SimpleNamingService_i : public virtual POA_SimpleNamingService
+{
+public:
+
+ virtual void
+ bind (CORBA::Object_ptr obj) ACE_THROW_SPEC ((CORBA::SystemException))
+ {
+ obj_ = CORBA::Object::_duplicate (obj);
+ }
+
+
+ virtual CORBA::Object_ptr
+ resolve () ACE_THROW_SPEC ((CORBA::SystemException))
+ {
+ return CORBA::Object::_duplicate (obj_.in ());
+ }
+
+private:
+
+ CORBA::Object_var obj_;
+
+};
+
+int
+ACE_TMAIN (int argc, ACE_TCHAR *argv[])
+{
+ try
+ {
+ CORBA::ORB_var orb = CORBA::ORB_init (argc, argv, "");
+
+ CORBA::Object_var pPoaObj =
+ orb->resolve_initial_references ("RootPOA");
+ PortableServer::POA_var poa =
+ PortableServer::POA::_narrow (pPoaObj.in ());
+ PortableServer::POAManager_var pMgr = poa->the_POAManager ();
+ pMgr->activate ();
+
+ SimpleNamingService_i* servant = new SimpleNamingService_i;
+ PortableServer::ObjectId_var oid = poa->activate_object (servant);
+ CORBA::Object_var obj = poa->id_to_reference (oid.in ());
+ CORBA::String_var str = orb->object_to_string (obj.in ());
+
+ ofstream iorFile (iorFileName);
+ iorFile << str.in () << endl;
+ iorFile.close ();
+
+ orb->run ();
+ }
+ catch (CORBA::Exception& ex)
+ {
+ ACE_DEBUG ((LM_ERROR, "Corba Exception: %s\n", ex._info ().c_str ()));
+ return 1;
+ }
+
+ return 0;
+}
diff --git a/TAO/tests/CollocationLockup/SimpleNamingService.idl b/TAO/tests/CollocationLockup/SimpleNamingService.idl
new file mode 100644
index 00000000000..e76b077308f
--- /dev/null
+++ b/TAO/tests/CollocationLockup/SimpleNamingService.idl
@@ -0,0 +1,9 @@
+// $Id$
+
+/// This is a degenerate Naming Service that only binds one object
+interface SimpleNamingService {
+
+ void bind (in Object o);
+ Object resolve ();
+
+};
diff --git a/TAO/tests/CollocationLockup/run_test.pl b/TAO/tests/CollocationLockup/run_test.pl
new file mode 100755
index 00000000000..49c9c408a61
--- /dev/null
+++ b/TAO/tests/CollocationLockup/run_test.pl
@@ -0,0 +1,61 @@
+eval '(exit $?0)' && eval 'exec perl -S $0 ${1+"$@"}'
+ & eval 'exec perl -S $0 $argv:q'
+ if 0;
+
+# $Id$
+# -*- perl -*-
+
+use lib '../../../bin';
+use PerlACE::Run_Test;
+
+use strict;
+
+# Amount of delay (in seconds) between starting a server and a client
+# to allow proper server initialization.
+my $sleeptime = 10;
+
+# Variables for command-line arguments to client and server
+# executables.
+my $iorbase = "SimpleNamingService.ior";
+my $iorfile = PerlACE::LocalFile ($iorbase);
+
+my $status = 0;
+
+my $NS = new PerlACE::Process ("SimpleNamingService");
+
+unlink $iorfile;
+
+$NS->Spawn ();
+
+if (PerlACE::waitforfile_timed ($iorfile, $sleeptime) == -1) {
+ print STDERR "ERROR: cannot find IOR file <$iorfile>\n";
+ $NS->Kill ();
+ exit 1;
+}
+
+my $CL;
+if (PerlACE::is_vxworks_test()) {
+ $CL = new PerlACE::ProcessVX ("CollocationLockup",
+ "-ORBInitRef " .
+ "SimpleNamingService=file://$iorbase");
+}
+else {
+ $CL = new PerlACE::Process ("CollocationLockup",
+ "-ORBInitRef " .
+ "SimpleNamingService=file://$iorfile");
+}
+
+# In testing on various platforms, the builds with the bug failed before
+# 20 seconds and when the bug was fixed it returned before 20 seconds.
+my $client = $CL->SpawnWaitKill (20);
+
+if ($client != 0) {
+ print STDERR "ERROR: client returned $client\n";
+ $status = 1;
+}
+
+$NS->Kill ();
+
+unlink $iorfile;
+
+exit $status;
diff --git a/TAO/tests/Permanent_Forward/Permanent_Forward.mpc b/TAO/tests/Permanent_Forward/Permanent_Forward.mpc
new file mode 100755
index 00000000000..ab5cf4db05d
--- /dev/null
+++ b/TAO/tests/Permanent_Forward/Permanent_Forward.mpc
@@ -0,0 +1,6 @@
+// -*- MPC -*-
+// $Id$
+
+project(*StubTest) : taoexe, iormanip {
+ exename = StubTest
+}
diff --git a/TAO/tests/Permanent_Forward/README b/TAO/tests/Permanent_Forward/README
new file mode 100755
index 00000000000..283aa20a87d
--- /dev/null
+++ b/TAO/tests/Permanent_Forward/README
@@ -0,0 +1,3 @@
+This program tests the various forward and forward-permanent
+combinations possible in applications. The tests operates directly on
+Objects and TAO_Stub interfaces.
diff --git a/TAO/tests/Permanent_Forward/StubTest.cpp b/TAO/tests/Permanent_Forward/StubTest.cpp
new file mode 100755
index 00000000000..21fbd5409bd
--- /dev/null
+++ b/TAO/tests/Permanent_Forward/StubTest.cpp
@@ -0,0 +1,371 @@
+// $Id$
+
+//========================================================================
+/**
+ * @file StubTest.cpp
+ *
+ * This program tests the basic functionality of the TAO_Stub in case
+ * of permanent_forward
+ *
+ * @author Frank Rehberger
+ */
+//=========================================================================
+
+
+#include "ace/Log_Msg.h"
+#include "ace/OS_NS_string.h"
+#include "tao/ORB.h"
+#include "tao/Environment.h"
+#include "tao/SystemException.h"
+#include "tao/Object.h"
+#include "tao/Stub.h"
+#include "tao/Profile.h"
+#include "tao/IIOP_Profile.h"
+
+#ifndef FRANKS_ASSERT
+#define FRANKS_ASSERT(X) \
+ ((X) \
+ ? static_cast<void>(0) \
+ : ACE_VERSIONED_NAMESPACE_NAME::__ace_assert(__FILE__, __LINE__, ACE_TEXT_CHAR_TO_TCHAR (#X)))
+#endif
+
+ACE_RCSID (Permanent_Forward,
+ StubTest,
+ "$Id$")
+
+static bool
+is_endpoint (TAO_Profile *profile, const char *host, unsigned short port)
+ {
+ TAO_IIOP_Profile *iiop = dynamic_cast<TAO_IIOP_Profile*> (profile);
+ TAO_Endpoint *endpoint = iiop->endpoint ();
+ TAO_IIOP_Endpoint *iiop_endpoint = dynamic_cast<TAO_IIOP_Endpoint*> (endpoint);
+ const char * endpoint_host = iiop_endpoint->host();
+ unsigned short endpoint_port = iiop_endpoint->port();
+
+ bool retval =
+ ACE_OS::strcmp (endpoint_host, host)==0
+ && endpoint_port == port;
+
+ return retval;
+ }
+
+static bool
+equal_endpoint (TAO_Profile *profile, TAO_Profile *other)
+ {
+ TAO_IIOP_Profile *iiop = dynamic_cast<TAO_IIOP_Profile*> (profile);
+ TAO_Endpoint *endpoint = iiop->endpoint ();
+ TAO_IIOP_Endpoint *iiop_endpoint = dynamic_cast<TAO_IIOP_Endpoint*> (endpoint);
+ const char * endpoint_host = iiop_endpoint->host();
+ unsigned short endpoint_port = iiop_endpoint->port();
+
+ TAO_IIOP_Profile *other_iiop = dynamic_cast<TAO_IIOP_Profile*> (other);
+ TAO_Endpoint *other_endpoint = other_iiop->endpoint ();
+ TAO_IIOP_Endpoint *other_iiop_endpoint = dynamic_cast<TAO_IIOP_Endpoint*> (other_endpoint);
+ const char * other_endpoint_host = other_iiop_endpoint->host();
+ unsigned short other_endpoint_port = other_iiop_endpoint->port();
+
+ bool retval =
+ ACE_OS::strcmp (endpoint_host, other_endpoint_host)==0
+ && endpoint_port == other_endpoint_port;
+
+ return retval;
+ }
+
+static bool
+marshaled_equal_to_other (CORBA::ORB_ptr orb, CORBA::Object_ptr obj, TAO_MProfile *other_mprofile)
+{
+ CORBA::String_var str = orb->object_to_string (obj ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ CORBA::Object_var obj_copy = orb->string_to_object (str.in () ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ TAO_Stub *stub_copy = obj_copy->_stubobj ();
+ TAO_MProfile *copy_mprofile = &(stub_copy->base_profiles ());
+
+ if ( copy_mprofile->size() != other_mprofile->size())
+ return false;
+
+ for (size_t i=0; i<copy_mprofile->size(); ++i)
+ {
+ TAO_Profile *copy_profile = copy_mprofile->get_profile (i);
+ TAO_Profile *other_profile = other_mprofile->get_profile (i);
+
+ if ( ! equal_endpoint (copy_profile, other_profile) )
+ return false;
+ }
+
+ return true;
+}
+
+static void
+test_forward_permanent (CORBA::ORB_ptr orb)
+{
+ CORBA::Object_var obj1 = orb->string_to_object ("corbaloc:iiop:192.168.1.2:1111,iiop:192.168.1.3:1111/NameService" ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ // the permanent profile
+ CORBA::Object_var obj4 = orb->string_to_object ("corbaloc:iiop:192.168.1.2:4444,iiop:192.168.1.3:4444/NameService" ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ TAO_Stub *stub1 = obj1->_stubobj ();
+ TAO_Stub *stub4 = obj4->_stubobj ();
+
+ TAO_Profile *profile = NULL;
+
+ profile = stub1->profile_in_use ();
+
+ FRANKS_ASSERT (is_endpoint (profile, "192.168.1.2", 1111));
+
+ // ----- forward to obj2 permanently
+ stub1->add_forward_profiles (stub4->base_profiles(), true /* permanent */ );
+
+ FRANKS_ASSERT (stub1->forward_profiles () != NULL);
+
+ profile = stub1->next_profile ();
+
+ FRANKS_ASSERT (is_endpoint (profile, "192.168.1.2", 4444));
+
+ // ----- stringified object reference must be equal to obj4->base_prpfiles().
+ FRANKS_ASSERT (marshaled_equal_to_other (orb, obj1.in (), &(stub4->base_profiles())) );
+
+ // ----- consume second profile of obj2
+
+ profile = stub1->next_profile ();
+
+ FRANKS_ASSERT (is_endpoint (profile, "192.168.1.3", 4444));
+
+
+ // ----- reached end, next_profile() must yield NULL
+
+ profile = stub1->next_profile ();
+
+ FRANKS_ASSERT (profile == NULL);
+
+ FRANKS_ASSERT (stub1->forward_profiles () != NULL);
+}
+
+static void
+test_forward_permanent_mix (CORBA::ORB_ptr orb)
+{
+ CORBA::Object_var obj1 = orb->string_to_object ("corbaloc:iiop:192.168.1.2:1111,iiop:192.168.1.3:1111/NameService" ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ CORBA::Object_var obj2 = orb->string_to_object ("corbaloc:iiop:192.168.1.2:2222,iiop:192.168.1.3:2222/NameService" ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ CORBA::Object_var obj3 = orb->string_to_object ("corbaloc:iiop:192.168.1.2:3333,iiop:192.168.1.3:3333/NameService" ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ CORBA::Object_var obj4 = orb->string_to_object ("corbaloc:iiop:192.168.1.2:4444,iiop:192.168.1.3:4444/NameService" ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ CORBA::Object_var obj5 = orb->string_to_object ("corbaloc:iiop:192.168.1.2:5555,iiop:192.168.1.3:5555/NameService" ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ TAO_Stub *stub1 = obj1->_stubobj ();
+ TAO_Stub *stub2 = obj2->_stubobj ();
+ TAO_Stub *stub3 = obj3->_stubobj ();
+ TAO_Stub *stub4 = obj4->_stubobj ();
+ TAO_Stub *stub5 = obj5->_stubobj ();
+
+ TAO_Profile *profile = NULL;
+
+ profile = stub1->profile_in_use ();
+
+ FRANKS_ASSERT (is_endpoint (profile, "192.168.1.2", 1111));
+
+ // ----- forward to obj2
+ stub1->add_forward_profiles (stub2->base_profiles(), false /* permanent */ );
+
+ FRANKS_ASSERT (stub1->forward_profiles () != NULL);
+
+ profile = stub1->next_profile ();
+
+ FRANKS_ASSERT (is_endpoint (profile, "192.168.1.2", 2222));
+
+ // ----- forward to obj3
+ stub1->add_forward_profiles (stub3->base_profiles(), false /* permanent */ );
+
+ FRANKS_ASSERT (stub1->forward_profiles () != NULL);
+
+ profile = stub1->next_profile ();
+
+ FRANKS_ASSERT (is_endpoint (profile, "192.168.1.2", 3333));
+
+ // ----- stringified object reference must be equal to obj1->base_prpfiles().
+ FRANKS_ASSERT (marshaled_equal_to_other (orb, obj1.in (), &(stub1->base_profiles())) );
+
+ // ----- forward to obj4 permanently
+ stub1->add_forward_profiles (stub4->base_profiles(), true /* permanent */ );
+
+ FRANKS_ASSERT (stub1->forward_profiles () != NULL);
+
+ profile = stub1->next_profile ();
+
+ FRANKS_ASSERT (is_endpoint (profile, "192.168.1.2", 4444));
+
+ // ----- stringified object reference must be equal to obj4->base_prpfiles().
+ FRANKS_ASSERT (marshaled_equal_to_other (orb, obj1.in (), &(stub4->base_profiles())) );
+
+ // ----- consume second profile from obj4
+ profile = stub1->next_profile ();
+
+ FRANKS_ASSERT (is_endpoint (profile, "192.168.1.3", 4444));
+
+ // ----- forward to obj2
+ stub1->add_forward_profiles (stub2->base_profiles(), false /* permanent */ );
+
+ FRANKS_ASSERT (stub1->forward_profiles () != NULL);
+
+ profile = stub1->next_profile ();
+
+ FRANKS_ASSERT (is_endpoint (profile, "192.168.1.2", 2222));
+
+ // ----- forward to obj3
+ stub1->add_forward_profiles (stub3->base_profiles(), false /* permanent */ );
+
+ FRANKS_ASSERT (stub1->forward_profiles () != NULL);
+
+ profile = stub1->next_profile ();
+
+ FRANKS_ASSERT (is_endpoint (profile, "192.168.1.2", 3333));
+
+ // ----- stringified object reference must be equal to obj4->base_prpfiles().
+ FRANKS_ASSERT (marshaled_equal_to_other (orb, obj1.in (), &(stub4->base_profiles())) );
+
+ // ----- forward to obj5 permanently
+ stub1->add_forward_profiles (stub5->base_profiles(), true /* permanent */ );
+
+ FRANKS_ASSERT (stub1->forward_profiles () != NULL);
+
+ profile = stub1->next_profile ();
+
+ FRANKS_ASSERT (is_endpoint (profile, "192.168.1.2", 5555));
+
+ // ----- stringified object reference must be equal to obj5->base_prpfiles().
+ FRANKS_ASSERT (marshaled_equal_to_other (orb, obj1.in (), &(stub5->base_profiles())) );
+
+ // ----- consume second profile from obj5
+ profile = stub1->next_profile ();
+
+ FRANKS_ASSERT (is_endpoint (profile, "192.168.1.3", 5555));
+
+ // ----- stringified object reference must be equal to obj1->base_prpfiles().
+ FRANKS_ASSERT (marshaled_equal_to_other (orb, obj1.in (), &(stub5->base_profiles())) );
+
+ // reached end of profiles, next_profile must return NULL
+
+ profile = stub1->next_profile ();
+
+ FRANKS_ASSERT (profile == NULL);
+}
+
+static void
+test_forward (CORBA::ORB_ptr orb)
+{
+ CORBA::Object_var obj1 = orb->string_to_object ("corbaloc:iiop:192.168.1.2:1111,iiop:192.168.1.3:1111/NameService" ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ CORBA::Object_var obj2 = orb->string_to_object ("corbaloc:iiop:192.168.1.2:2222,iiop:192.168.1.3:2222/NameService" ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ CORBA::Object_var obj3 = orb->string_to_object ("corbaloc:iiop:192.168.1.2:3333,iiop:192.168.1.3:3333/NameService" ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ TAO_Stub *stub1 = obj1->_stubobj ();
+ TAO_Stub *stub2 = obj2->_stubobj ();
+ TAO_Stub *stub3 = obj3->_stubobj ();
+
+ TAO_Profile *profile = NULL;
+
+ profile = stub1->profile_in_use ();
+
+ FRANKS_ASSERT (is_endpoint (profile, "192.168.1.2", 1111));
+
+ // ----- forward to obj2
+ stub1->add_forward_profiles (stub2->base_profiles(), false /* permanent */ );
+
+ FRANKS_ASSERT (stub1->forward_profiles () != NULL);
+
+ profile = stub1->next_profile ();
+
+ FRANKS_ASSERT (is_endpoint (profile, "192.168.1.2", 2222));
+
+ // ----- forward to obj3
+
+ stub1->add_forward_profiles (stub3->base_profiles(), false /* permanent */ );
+
+ FRANKS_ASSERT (stub1->forward_profiles () != NULL);
+
+ profile = stub1->next_profile ();
+
+ FRANKS_ASSERT (is_endpoint (profile, "192.168.1.2", 3333));
+
+ // ----- stringified object reference must be equal to obj1->base_prpfiles().
+ FRANKS_ASSERT (marshaled_equal_to_other (orb, obj1.in (), &(stub1->base_profiles())) );
+
+ // ----- consume second profile of obj3
+
+ profile = stub1->next_profile ();
+
+ FRANKS_ASSERT (is_endpoint (profile, "192.168.1.3", 3333));
+
+ // ----- consume second profile of obj2
+
+ profile = stub1->next_profile ();
+
+ FRANKS_ASSERT (is_endpoint (profile, "192.168.1.3", 2222));
+
+ // ----- consume second profile of obj1
+
+ profile = stub1->next_profile ();
+
+ FRANKS_ASSERT (is_endpoint (profile, "192.168.1.3", 1111));
+
+ FRANKS_ASSERT (stub1->forward_profiles () == NULL);
+
+ // ----- reached end, next_profile() must yield NULL
+
+ profile = stub1->next_profile ();
+}
+
+int
+main (int argc, char *argv[])
+{
+ ACE_DEBUG ((LM_DEBUG, "---------------------------------------------\n"));
+ ACE_DEBUG ((LM_DEBUG, "Running the Stub Tests.\n"));
+
+ ACE_DECLARE_NEW_CORBA_ENV;
+ ACE_TRY
+ {
+ // Retrieve the ORB.
+ CORBA::ORB_var orb = CORBA::ORB_init (argc,
+ argv,
+ ""
+ ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ test_forward (orb.in());
+ test_forward_permanent (orb.in());
+ test_forward_permanent_mix (orb.in());
+ }
+ ACE_CATCH (CORBA::SystemException, sysex)
+ {
+ ACE_PRINT_EXCEPTION (sysex,
+ "Unexpected system Exception!!\n");
+ return -1;
+ }
+ ACE_CATCHANY
+ {
+ ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION,
+ "Unexpected ACE_CATCHANY Exception!\n");
+ return -1;
+ }
+ ACE_ENDTRY;
+
+ ACE_DEBUG ((LM_DEBUG, "Stub Tests Successfully Completed!\n"));
+ ACE_DEBUG ((LM_DEBUG, "---------------------------------------------\n"));
+
+ return 0;
+}
diff --git a/TAO/tests/Permanent_Forward/run_test.pl b/TAO/tests/Permanent_Forward/run_test.pl
new file mode 100755
index 00000000000..60c2fb9ac3d
--- /dev/null
+++ b/TAO/tests/Permanent_Forward/run_test.pl
@@ -0,0 +1,25 @@
+eval '(exit $?0)' && eval 'exec perl -S $0 ${1+"$@"}'
+ & eval 'exec perl -S $0 $argv:q'
+ if 0;
+
+# $Id$
+# -*- perl -*-
+
+use lib '../../../bin';
+use PerlACE::Run_Test;
+
+if (PerlACE::is_vxworks_test()) {
+ $T = new PerlACE::ProcessVX ("StubTest");
+}
+else {
+ $T = new PerlACE::Process ("StubTest");
+}
+
+$test = $T->SpawnWaitKill (20);
+
+if ($test != 0) {
+ print STDERR "ERROR: test returned $test\n";
+ exit 1;
+}
+
+exit 0;
diff --git a/TAO/tests/Portable_Interceptors/AdvSlot/AdvSlot.mpc b/TAO/tests/Portable_Interceptors/AdvSlot/AdvSlot.mpc
new file mode 100644
index 00000000000..d53cfd5839c
--- /dev/null
+++ b/TAO/tests/Portable_Interceptors/AdvSlot/AdvSlot.mpc
@@ -0,0 +1,28 @@
+// $Id$
+project(*idl): taoidldefaults {
+ IDL_Files {
+ StateTransfer.idl
+ }
+ custom_only = 1
+}
+
+project(*Server): taoserver, pi_server, exceptions {
+ after += *idl
+ Source_Files {
+ StateTransferS.cpp
+ StateTransferC.cpp
+ server.cpp
+ }
+ IDL_Files {
+ }
+}
+
+project(*Client): taoclient, exceptions {
+ after += *idl
+ Source_Files {
+ StateTransferC.cpp
+ client.cpp
+ }
+ IDL_Files {
+ }
+}
diff --git a/TAO/tests/Portable_Interceptors/AdvSlot/StateTransfer.idl b/TAO/tests/Portable_Interceptors/AdvSlot/StateTransfer.idl
new file mode 100644
index 00000000000..663d4c57cbc
--- /dev/null
+++ b/TAO/tests/Portable_Interceptors/AdvSlot/StateTransfer.idl
@@ -0,0 +1,12 @@
+// file : StateTransfer.idl
+// author : Boris Kolpackov <boris@dre.vanderbilt.edu>
+// cvs-id : $Id$
+
+interface StateTransfer
+{
+ short
+ number ();
+
+ oneway void
+ shutdown ();
+};
diff --git a/TAO/tests/Portable_Interceptors/AdvSlot/client.cpp b/TAO/tests/Portable_Interceptors/AdvSlot/client.cpp
new file mode 100644
index 00000000000..0a9b7436bf1
--- /dev/null
+++ b/TAO/tests/Portable_Interceptors/AdvSlot/client.cpp
@@ -0,0 +1,27 @@
+// author : Boris Kolpackov <boris@dre.vanderbilt.edu>
+// cvs-id : $Id$
+
+#include "StateTransferC.h"
+
+int
+main (int argc, char *argv[])
+{
+ CORBA::ORB_var orb = CORBA::ORB_init (argc, argv);
+
+ if (argc != 2)
+ {
+ ACE_DEBUG ((LM_ERROR, "Usage: %s <ior>\n", argv[0]));
+ return -1;
+ }
+
+ CORBA::Object_var obj = orb->string_to_object (argv[1]);
+ StateTransfer_var server = StateTransfer::_narrow (obj.in ());
+
+ CORBA::Short n = server->number ();
+
+ ACE_DEBUG ((LM_ERROR, "Got number %d\n", n));
+
+ server->shutdown ();
+
+ return 0;
+}
diff --git a/TAO/tests/Portable_Interceptors/AdvSlot/run_test.pl b/TAO/tests/Portable_Interceptors/AdvSlot/run_test.pl
new file mode 100755
index 00000000000..2cfe882b1b5
--- /dev/null
+++ b/TAO/tests/Portable_Interceptors/AdvSlot/run_test.pl
@@ -0,0 +1,50 @@
+eval '(exit $?0)' && eval 'exec perl -S $0 ${1+"$@"}'
+ & eval 'exec perl -S $0 $argv:q'
+ if 0;
+
+# $Id$
+# -*- perl -*-
+
+use lib '../../../../bin';
+use PerlACE::Run_Test;
+
+$status = 0;
+$file = PerlACE::LocalFile ("server.ior");
+
+unlink $file;
+
+if (PerlACE::is_vxworks_test()) {
+ $SV = new PerlACE::ProcessVX ("server", "");
+}
+else {
+ $SV = new PerlACE::Process ("server", "");
+}
+$CL = new PerlACE::Process ("client", "file://$file");
+
+print STDERR "\n\n==== Running advanced slot test\n";
+
+$SV->Spawn ();
+
+if (PerlACE::waitforfile_timed ($file, 15) == -1) {
+ print STDERR "ERROR: cannot find file <$file>\n";
+ $SV->Kill ();
+ exit 1;
+}
+
+$client = $CL->SpawnWaitKill (60);
+
+if ($client != 0) {
+ print STDERR "ERROR: client returned $client\n";
+ $status = 1;
+}
+
+$server = $SV->WaitKill (5);
+
+if ($server != 0) {
+ print STDERR "ERROR: server returned $server\n";
+ $status = 1;
+}
+
+unlink $file;
+
+exit $status;
diff --git a/TAO/tests/Portable_Interceptors/AdvSlot/server.cpp b/TAO/tests/Portable_Interceptors/AdvSlot/server.cpp
new file mode 100644
index 00000000000..6c5f5825295
--- /dev/null
+++ b/TAO/tests/Portable_Interceptors/AdvSlot/server.cpp
@@ -0,0 +1,199 @@
+// author : Boris Kolpackov <boris@kolpackov.net>
+// cvs-id : $Id$
+
+#include "tao/LocalObject.h"
+#include "tao/ORBInitializer_Registry.h"
+
+#include "tao/PI/PI.h"
+#include "tao/PI_Server/PI_Server.h"
+
+#include "ace/OS_NS_stdio.h"
+
+#include "StateTransferS.h"
+
+using namespace CORBA;
+using namespace PortableServer;
+using namespace PortableInterceptor;
+
+//
+//
+PortableInterceptor::SlotId slot_id;
+
+
+//
+//
+class StateTransferImpl: public virtual POA_StateTransfer
+{
+public:
+ StateTransferImpl (ORB_ptr orb)
+ : orb_ (ORB::_duplicate (orb))
+ {
+ }
+
+ virtual Short
+ number () throw (SystemException)
+ {
+ // Prepare state update.
+ //
+ Any state;
+ CORBA::Long number = 5;
+ state <<= number;
+
+ Object_var obj (orb_->resolve_initial_references ("PICurrent"));
+ PortableInterceptor::Current_var pic (
+ PortableInterceptor::Current::_narrow (obj.in ()));
+
+ pic->set_slot (slot_id, state);
+
+ return 1;
+ }
+
+ virtual void
+ shutdown () throw (SystemException)
+ {
+ ACE_DEBUG ((LM_DEBUG, "Server is shutting down.\n"));
+ this->orb_->shutdown (0);
+ }
+
+private:
+ ORB_var orb_;
+};
+
+
+//
+//
+class ReplicaController: public virtual ServerRequestInterceptor,
+ public virtual TAO_Local_RefCounted_Object
+{
+public:
+ virtual char*
+ name () throw (SystemException)
+ {
+ return string_dup ("ReplicaController");
+ }
+
+ virtual void
+ destroy () throw (SystemException)
+ {
+ }
+
+#if TAO_HAS_EXTENDED_FT_INTERCEPTORS == 1
+ virtual void
+ tao_ft_interception_point (ServerRequestInfo_ptr, OctetSeq_out)
+ throw (SystemException, ForwardRequest)
+ {
+ }
+#endif /*TAO_HAS_EXTENDED_FT_INTERCEPTORS*/
+
+ virtual void
+ receive_request_service_contexts (ServerRequestInfo_ptr)
+ throw (SystemException, ForwardRequest)
+ {
+ }
+
+ virtual void
+ receive_request (ServerRequestInfo_ptr)
+ throw (SystemException, ForwardRequest)
+ {
+ }
+
+ virtual void
+ send_reply (ServerRequestInfo_ptr ri) throw (SystemException)
+ {
+ Any_var state (ri->get_slot (slot_id));
+ CORBA::Long n (0);
+ state >>= n;
+
+ if (n == 5)
+ ACE_DEBUG ((LM_DEBUG, "State value is correctly %d.\n", n));
+ else
+ ACE_ERROR ((LM_ERROR, "ERROR: State value is incorrectly %d.\n", n));
+ }
+
+ virtual void
+ send_exception (ServerRequestInfo_ptr)
+ throw (SystemException, ForwardRequest)
+ {
+ }
+
+ virtual void
+ send_other (ServerRequestInfo_ptr) throw (SystemException, ForwardRequest)
+ {
+ }
+};
+
+
+//
+//
+class ORB_Initializer : public virtual ORBInitializer,
+ public virtual TAO_Local_RefCounted_Object
+{
+public:
+ virtual void
+ pre_init (ORBInitInfo_ptr) throw (SystemException)
+ {
+ }
+
+ virtual void
+ post_init (ORBInitInfo_ptr info) throw (SystemException)
+ {
+ slot_id = info->allocate_slot_id ();
+ ACE_DEBUG ((LM_DEBUG, "Allocated slot with id %d.\n", slot_id));
+
+
+ ServerRequestInterceptor_var interceptor (new ReplicaController ());
+ info->add_server_request_interceptor (interceptor.in ());
+ }
+};
+
+int
+main (int argc, char *argv[])
+{
+ ORBInitializer_var orb_initializer (new ORB_Initializer ());
+ register_orb_initializer (orb_initializer.in ());
+
+ ORB_var orb (ORB_init (argc, argv));
+
+ Object_var obj (orb->resolve_initial_references ("RootPOA"));
+
+ POA_var root_poa (POA::_narrow (obj.in ()));
+ POAManager_var poa_manager (root_poa->the_POAManager ());
+
+ StateTransferImpl* impl = new StateTransferImpl (orb.in ());
+ ServantBase_var impl_var (impl);
+
+ StateTransfer_var ref (impl->_this ());
+ String_var ior (orb->object_to_string (ref.in ()));
+
+ poa_manager->activate ();
+
+
+ // Dump the ior.
+ //
+ FILE *output_file= ACE_OS::fopen ("server.ior", "w");
+ if (output_file == 0)
+ {
+ ACE_ERROR_RETURN ((LM_ERROR,
+ "Cannot open output file <%s> for writing "
+ "IOR: %s",
+ ior.in ()),
+ 1);
+ }
+
+ ACE_OS::fprintf (output_file, "%s", ior.in ());
+ ACE_OS::fclose (output_file);
+
+ ACE_DEBUG ((LM_DEBUG, "Server is ready, IOR is in 'server.ior'\n"));
+
+
+ // Run the ORB event loop.
+ //
+ orb->run ();
+
+ root_poa->destroy (1, 1);
+ orb->destroy ();
+
+ ACE_DEBUG ((LM_DEBUG, "Event loop finished.\n"));
+
+ return 0;
+}
diff --git a/TAO/tests/Portable_Interceptors/AdvSlotDblCpy/AdvSlotDblCpy.mpc b/TAO/tests/Portable_Interceptors/AdvSlotDblCpy/AdvSlotDblCpy.mpc
new file mode 100644
index 00000000000..0242f6d3360
--- /dev/null
+++ b/TAO/tests/Portable_Interceptors/AdvSlotDblCpy/AdvSlotDblCpy.mpc
@@ -0,0 +1,28 @@
+// $Id$
+project(*idl): taoidldefaults {
+ IDL_Files {
+ InvokeMe.idl
+ }
+ custom_only = 1
+}
+
+project(*Server): taoserver, pi_server, exceptions {
+ after += *idl
+ Source_Files {
+ InvokeMeS.cpp
+ InvokeMeC.cpp
+ server.cpp
+ }
+ IDL_Files {
+ }
+}
+
+project(*Client): taoclient, exceptions {
+ after += *idl
+ Source_Files {
+ InvokeMeC.cpp
+ client.cpp
+ }
+ IDL_Files {
+ }
+}
diff --git a/TAO/tests/Portable_Interceptors/AdvSlotDblCpy/InvokeMe.idl b/TAO/tests/Portable_Interceptors/AdvSlotDblCpy/InvokeMe.idl
new file mode 100644
index 00000000000..a6f58fd0b93
--- /dev/null
+++ b/TAO/tests/Portable_Interceptors/AdvSlotDblCpy/InvokeMe.idl
@@ -0,0 +1,12 @@
+// file : StateTransfer.idl
+// author : Boris Kolpackov <boris@dre.vanderbilt.edu>
+// cvs-id : $Id$
+
+interface InvokeMe
+{
+ void
+ invoke_me ();
+
+ oneway void
+ shutdown ();
+};
diff --git a/TAO/tests/Portable_Interceptors/AdvSlotDblCpy/README b/TAO/tests/Portable_Interceptors/AdvSlotDblCpy/README
new file mode 100644
index 00000000000..0ccccc13a8c
--- /dev/null
+++ b/TAO/tests/Portable_Interceptors/AdvSlotDblCpy/README
@@ -0,0 +1,60 @@
+The test should complete without exceptions or asserts.
+
+This test checks that simply calling GetSlot works at every
+Server side interception point.
+
+This used to trigger the following assert in the send_reply
+interception point if the slot had not actually been updated
+after the RSC->TSC logical copy that occurs after the
+"receive_request_service_contexts" (such as in the
+"receive_request" or the actual IDL interface implementation
+code) before the logical copy TSC->RSC that then occurs
+before the "send_reply" interception point.
+
+send_reply -> get_slot(TSC) -> long (62) SERVER
+send_reply -> get_slot(RSC)
+ACE_ASSERT: file ...\TAO\tao\PI\PICurrent_Impl.cpp, line 53
+assertion failed for 'this->lc_slot_table_ !=
+&this->slot_table_'.Aborting...
+
+This test also checks that the set_slot(RSC) does not effect
+the TSC that exists before the first logical copy (at the end
+of receive_request_service_contexts) and after the second
+logical copy that occurs after the IDL interface implimentation
+call (i.e. during send_reply).
+
+The run should look like this:
+
+Allocated slot with id 0.
+Server is ready, IOR is in 'server.ior'
+SERVER receive_request_service_contexts -> get_slot(TSC) -> is EMPTY -> OK
+SERVER receive_request_service_contexts -> get_slot(RSC) -> is EMPTY -> OK
+SERVER receive_request_service_contexts -> set_slot(RSC) -> long (62)
+SERVER receive_request_service_contexts -> get_slot(TSC) -> is EMPTY -> OK
+SERVER receive_request_service_contexts -> get_slot(RSC) -> is long (62) -> OK
+SERVER receive_request -> get_slot(TSC) -> is long (62) -> OK
+SERVER receive_request -> get_slot(RSC) -> is long (62) -> OK
+invoke_me
+SERVER send_reply -> get_slot(TSC) -> is long (62) -> OK
+SERVER send_reply -> get_slot(RSC) -> is long (62) -> OK
+SERVER send_reply -> set_slot(RSC) -> long (63)
+SERVER send_reply -> get_slot(TSC) -> is long (62) -> OK
+SERVER send_reply -> get_slot(RSC) -> is long (63) -> OK
+
+SERVER receive_request_service_contexts -> get_slot(TSC) -> is long (62) -> OK
+SERVER receive_request_service_contexts -> get_slot(RSC) -> is EMPTY -> OK
+SERVER receive_request_service_contexts -> set_slot(RSC) -> long (62)
+SERVER receive_request_service_contexts -> get_slot(TSC) -> is long (62) -> OK
+SERVER receive_request_service_contexts -> get_slot(RSC) -> is long (62) -> OK
+SERVER receive_request -> get_slot(TSC) -> is long (62) -> OK
+SERVER receive_request -> get_slot(RSC) -> is long (62) -> OK
+invoke_me
+SERVER send_reply -> get_slot(TSC) -> is long (62) -> OK
+SERVER send_reply -> get_slot(RSC) -> is long (62) -> OK
+SERVER send_reply -> set_slot(RSC) -> long (63)
+SERVER send_reply -> get_slot(TSC) -> is long (62) -> OK
+SERVER send_reply -> get_slot(RSC) -> is long (63) -> OK
+
+
+Server is shutting down.
+Event loop finished.
diff --git a/TAO/tests/Portable_Interceptors/AdvSlotDblCpy/client.cpp b/TAO/tests/Portable_Interceptors/AdvSlotDblCpy/client.cpp
new file mode 100644
index 00000000000..8a959137c9a
--- /dev/null
+++ b/TAO/tests/Portable_Interceptors/AdvSlotDblCpy/client.cpp
@@ -0,0 +1,41 @@
+// author : Boris Kolpackov <boris@dre.vanderbilt.edu>
+// cvs-id : $Id$
+
+#include "InvokeMeC.h"
+
+namespace
+{
+ class always
+ {
+ const InvokeMe_ptr server_;
+ public:
+ always(const InvokeMe_ptr x):server_(x) {}
+ ~always()
+ {
+ ACE_DEBUG ((LM_DEBUG, "\n"));
+ server_->shutdown ();
+ }
+ };
+}
+
+int
+main (int argc, char *argv[])
+{
+ CORBA::ORB_var orb = CORBA::ORB_init (argc, argv);
+
+ if (argc != 2)
+ {
+ ACE_DEBUG ((LM_ERROR, "Usage: %s <ior>\n", argv[0]));
+ return -1;
+ }
+
+ CORBA::Object_var obj = orb->string_to_object (argv[1]);
+ InvokeMe_var server = InvokeMe::_narrow (obj.in ());
+
+ always Shutdown( server.in () ); // When goes out of scope!
+ server->invoke_me ();
+ ACE_DEBUG ((LM_DEBUG, "\n"));
+ server->invoke_me ();
+
+ return 0;
+}
diff --git a/TAO/tests/Portable_Interceptors/AdvSlotDblCpy/run_test.pl b/TAO/tests/Portable_Interceptors/AdvSlotDblCpy/run_test.pl
new file mode 100755
index 00000000000..6adfc99fd7b
--- /dev/null
+++ b/TAO/tests/Portable_Interceptors/AdvSlotDblCpy/run_test.pl
@@ -0,0 +1,50 @@
+eval '(exit $?0)' && eval 'exec perl -S $0 ${1+"$@"}'
+ & eval 'exec perl -S $0 $argv:q'
+ if 0;
+
+# $Id$
+# -*- perl -*-
+
+use lib '../../../../bin';
+use PerlACE::Run_Test;
+
+$status = 0;
+$file = PerlACE::LocalFile ("server.ior");
+
+unlink $file;
+
+if (PerlACE::is_vxworks_test()) {
+ $SV = new PerlACE::ProcessVX ("server", "");
+}
+else {
+ $SV = new PerlACE::Process ("server", "");
+}
+$CL = new PerlACE::Process ("client", "file://$file");
+
+print STDERR "\n\n==== Running advanced slot double copy test\n";
+
+$SV->Spawn ();
+
+if (PerlACE::waitforfile_timed ($file, 15) == -1) {
+ print STDERR "ERROR: cannot find file <$file>\n";
+ $SV->Kill ();
+ exit 1;
+}
+
+$client = $CL->SpawnWaitKill (60);
+
+if ($client != 0) {
+ print STDERR "ERROR: client returned $client\n";
+ $status = 1;
+}
+
+$server = $SV->WaitKill (5);
+
+if ($server != 0) {
+ print STDERR "ERROR: server returned $server\n";
+ $status = 1;
+}
+
+unlink $file;
+
+exit $status;
diff --git a/TAO/tests/Portable_Interceptors/AdvSlotDblCpy/server.cpp b/TAO/tests/Portable_Interceptors/AdvSlotDblCpy/server.cpp
new file mode 100644
index 00000000000..729804b2872
--- /dev/null
+++ b/TAO/tests/Portable_Interceptors/AdvSlotDblCpy/server.cpp
@@ -0,0 +1,326 @@
+// author : Boris Kolpackov <boris@kolpackov.net>
+// cvs-id : $Id$
+
+#include "tao/AnyTypeCode/AnyTypeCode_methods.h"
+
+#include "tao/PI/PI.h"
+#include "tao/PI_Server/PI_Server.h"
+
+#include "tao/LocalObject.h"
+#include "tao/ORBInitializer_Registry.h"
+
+#include "ace/OS_NS_stdio.h"
+
+#include "InvokeMeS.h"
+
+using namespace CORBA;
+using namespace PortableServer;
+using namespace PortableInterceptor;
+
+namespace
+{
+ PortableInterceptor::SlotId slot_id;
+
+ CORBA::Long getMySlot(
+ PortableInterceptor::ServerRequestInfo_ptr ri,
+ PortableInterceptor::Current_ptr pi_current,
+ const char *location,
+ const CORBA::Long correctTSCvalue,
+ const CORBA::Long correctRSCvalue)
+ {
+ CORBA::Long number= 0;
+ CORBA::String_var
+ op= ri->operation ();
+
+ const bool correctOperation=
+ (0 == ACE_OS::strcmp( op.in (), "invoke_me" ));
+
+ if (correctOperation)
+ {
+ CORBA::Any_var data;
+
+ ACE_DEBUG ((LM_DEBUG, "SERVER %s -> get_slot(TSC) -> is ", location));
+ data= pi_current->get_slot( slot_id );
+ CORBA::TypeCode_var
+ tc= data->type();
+ if (tc->kind() == CORBA::tk_null)
+ {
+ ACE_DEBUG ((LM_DEBUG, "EMPTY -> "));
+ if (0 != correctTSCvalue)
+ {
+ ACE_DEBUG ((LM_DEBUG, "WRONG\n"));
+ throw INTERNAL ();
+ }
+ ACE_DEBUG ((LM_DEBUG, "OK\n"));
+ }
+ else if (data.in() >>= number)
+ {
+ ACE_DEBUG ((LM_DEBUG, "long (%d) -> ", number));
+ if ((0 != correctTSCvalue) && (correctTSCvalue != number))
+ {
+ ACE_DEBUG ((LM_DEBUG, "WRONG\n"));
+ throw INTERNAL ();
+ }
+ ACE_DEBUG ((LM_DEBUG, "OK\n"));
+ }
+ else
+ {
+ ACE_DEBUG ((LM_DEBUG, "UNKNOWN TYPE\n"));
+ throw INTERNAL ();
+ }
+
+ ACE_DEBUG ((LM_DEBUG, "SERVER %s -> get_slot(RSC) -> is ", location));
+ data= ri->get_slot( slot_id );
+
+ tc= data->type();
+ if (tc->kind() == CORBA::tk_null)
+ {
+ ACE_DEBUG ((LM_DEBUG, "EMPTY -> "));
+ if (0 != correctRSCvalue)
+ {
+ ACE_DEBUG ((LM_DEBUG, "WRONG\n"));
+ throw INTERNAL ();
+ }
+ ACE_DEBUG ((LM_DEBUG, "OK\n"));
+#if TAO_HAS_EXTENDED_FT_INTERCEPTORS == 1
+ number= 61;
+#else
+ number= 62;
+#endif /* TAO_HAS_EXTENDED_FT_INTERCEPTORS == 1 */
+ }
+ else if (data.in() >>= number)
+ {
+ ACE_DEBUG ((LM_DEBUG, "long (%d) -> ", number));
+ if ((0 != correctRSCvalue) && (correctRSCvalue != number))
+ {
+ ACE_DEBUG ((LM_DEBUG, "WRONG\n"));
+ throw INTERNAL ();
+ }
+ ACE_DEBUG ((LM_DEBUG, "OK\n"));
+ ++number;
+ }
+ else
+ {
+ ACE_DEBUG ((LM_DEBUG, "WRONG TYPE\n"));
+ throw INTERNAL();
+ }
+ }
+
+ return number;
+ }
+
+ void getAndSetMySlot(
+ PortableInterceptor::ServerRequestInfo_ptr ri,
+ PortableInterceptor::Current_ptr pi_current,
+ const char *location,
+ const CORBA::Long correctTSCvalue,
+ const CORBA::Long correctRSCvalue)
+ {
+ const CORBA::Long number=
+ getMySlot(
+ ri,
+ pi_current,
+ location,
+ correctTSCvalue,
+ correctRSCvalue );
+
+ if (number && (0 != ACE_OS::strcmp( location, "receive_request" )))
+ {
+ // Insert data into the RSC (request scope current).
+ CORBA::Any data;
+ data <<= number;
+
+ ACE_DEBUG ((LM_DEBUG, "SERVER %s -> set_slot(RSC)", location));
+ ri->set_slot( slot_id, data );
+
+ ACE_DEBUG ((LM_DEBUG, " -> long (%d)\n", number));
+
+ getMySlot(
+ ri,
+ pi_current,
+ location,
+ correctTSCvalue,
+ number );
+ }
+ }
+}
+
+//
+//
+class InvokeMeImpl: public virtual POA_InvokeMe
+{
+public:
+ InvokeMeImpl (ORB_ptr orb)
+ : orb_ (ORB::_duplicate (orb))
+ {
+ }
+
+ virtual void invoke_me() throw (SystemException)
+ {
+ ACE_DEBUG ((LM_DEBUG, "invoke_me\n"));
+ }
+
+ virtual void
+ shutdown () throw (SystemException)
+ {
+ ACE_DEBUG ((LM_DEBUG, "\nServer is shutting down.\n"));
+ this->orb_->shutdown (0);
+ }
+
+private:
+ ORB_var orb_;
+};
+
+
+//
+//
+class ReplicaController: public virtual ServerRequestInterceptor,
+ public virtual TAO_Local_RefCounted_Object
+{
+ PortableInterceptor::Current_ptr pi_current_;
+public:
+ ReplicaController ( PortableInterceptor::Current_ptr pi_current )
+ : pi_current_( pi_current )
+ {
+ }
+
+ virtual char*
+ name () throw (SystemException)
+ {
+ return string_dup ("ReplicaController");
+ }
+
+ virtual void
+ destroy () throw (SystemException)
+ {
+ }
+
+#if TAO_HAS_EXTENDED_FT_INTERCEPTORS == 1
+ virtual void
+ tao_ft_interception_point (ServerRequestInfo_ptr ri, OctetSeq_out)
+ throw (SystemException, ForwardRequest)
+ {
+ getAndSetMySlot( ri, this->pi_current_, "tao_ft_interception_point", 0, 0 );
+ }
+#endif /*TAO_HAS_EXTENDED_FT_INTERCEPTORS*/
+
+ virtual void
+ receive_request_service_contexts (ServerRequestInfo_ptr ri)
+ throw (SystemException, ForwardRequest)
+ {
+#if TAO_HAS_EXTENDED_FT_INTERCEPTORS == 1
+ getAndSetMySlot( ri, this->pi_current_, "receive_request_service_contexts", 0, 61 );
+#else
+ getAndSetMySlot( ri, this->pi_current_, "receive_request_service_contexts", 0, 0 );
+#endif /* TAO_HAS_EXTENDED_FT_INTERCEPTORS == 1 */
+ }
+
+ virtual void
+ receive_request (ServerRequestInfo_ptr ri)
+ throw (SystemException, ForwardRequest)
+ {
+ getAndSetMySlot( ri, this->pi_current_, "receive_request", 62, 62 );
+ }
+
+ virtual void
+ send_reply (ServerRequestInfo_ptr ri) throw (SystemException)
+ {
+ getAndSetMySlot( ri, this->pi_current_, "send_reply", 62, 62 );
+ }
+
+ virtual void
+ send_exception (ServerRequestInfo_ptr ri)
+ throw (SystemException, ForwardRequest)
+ {
+ getAndSetMySlot( ri, this->pi_current_, "send_exception", 62, 62 );
+ }
+
+ virtual void
+ send_other (ServerRequestInfo_ptr ri)
+ throw (SystemException, ForwardRequest)
+ {
+ getAndSetMySlot( ri, this->pi_current_, "send_other", 62, 62 );
+ }
+};
+
+
+//
+//
+class ORB_Initializer : public virtual ORBInitializer,
+ public virtual TAO_Local_RefCounted_Object
+{
+public:
+ virtual void
+ pre_init (ORBInitInfo_ptr) throw (SystemException)
+ {
+ }
+
+ virtual void
+ post_init (ORBInitInfo_ptr info) throw (SystemException)
+ {
+ CORBA::Object_var obj =
+ info->resolve_initial_references ("PICurrent");
+
+ PortableInterceptor::Current_var pi_current =
+ PortableInterceptor::Current::_narrow (obj.in ());
+
+ slot_id = info->allocate_slot_id ();
+ ACE_DEBUG ((LM_DEBUG, "Allocated slot with id %d.\n", slot_id));
+
+ ServerRequestInterceptor_var
+ interceptor (new ReplicaController (pi_current.in ()));
+ info->add_server_request_interceptor (interceptor.in ());
+ }
+};
+
+int
+main (int argc, char *argv[])
+{
+ ORBInitializer_var orb_initializer (new ORB_Initializer ());
+ register_orb_initializer (orb_initializer.in ());
+
+ ORB_var orb (ORB_init (argc, argv));
+
+ Object_var obj (orb->resolve_initial_references ("RootPOA"));
+
+ POA_var root_poa (POA::_narrow (obj.in ()));
+ POAManager_var poa_manager (root_poa->the_POAManager ());
+
+ InvokeMeImpl* impl = new InvokeMeImpl (orb.in ());
+ ServantBase_var impl_var (impl);
+
+ InvokeMe_var ref (impl->_this ());
+ String_var ior (orb->object_to_string (ref.in ()));
+
+ poa_manager->activate ();
+
+
+ // Dump the ior.
+ //
+ FILE *output_file= ACE_OS::fopen ("server.ior", "w");
+ if (output_file == 0)
+ {
+ ACE_ERROR_RETURN ((LM_ERROR,
+ "Cannot open output file <%s> for writing "
+ "IOR: %s",
+ ior.in ()),
+ 1);
+ }
+
+ ACE_OS::fprintf (output_file, "%s", ior.in ());
+ ACE_OS::fclose (output_file);
+
+ ACE_DEBUG ((LM_DEBUG, "Server is ready, IOR is in 'server.ior'\n"));
+
+
+ // Run the ORB event loop.
+ //
+ orb->run ();
+
+ root_poa->destroy (1, 1);
+ orb->destroy ();
+
+ ACE_DEBUG ((LM_DEBUG, "Event loop finished.\n"));
+
+ return 0;
+}
diff --git a/TAO/tests/Portable_Interceptors/AdvSlotExt/AdvSlotExt.mpc b/TAO/tests/Portable_Interceptors/AdvSlotExt/AdvSlotExt.mpc
new file mode 100644
index 00000000000..d53cfd5839c
--- /dev/null
+++ b/TAO/tests/Portable_Interceptors/AdvSlotExt/AdvSlotExt.mpc
@@ -0,0 +1,28 @@
+// $Id$
+project(*idl): taoidldefaults {
+ IDL_Files {
+ StateTransfer.idl
+ }
+ custom_only = 1
+}
+
+project(*Server): taoserver, pi_server, exceptions {
+ after += *idl
+ Source_Files {
+ StateTransferS.cpp
+ StateTransferC.cpp
+ server.cpp
+ }
+ IDL_Files {
+ }
+}
+
+project(*Client): taoclient, exceptions {
+ after += *idl
+ Source_Files {
+ StateTransferC.cpp
+ client.cpp
+ }
+ IDL_Files {
+ }
+}
diff --git a/TAO/tests/Portable_Interceptors/AdvSlotExt/StateTransfer.idl b/TAO/tests/Portable_Interceptors/AdvSlotExt/StateTransfer.idl
new file mode 100644
index 00000000000..663d4c57cbc
--- /dev/null
+++ b/TAO/tests/Portable_Interceptors/AdvSlotExt/StateTransfer.idl
@@ -0,0 +1,12 @@
+// file : StateTransfer.idl
+// author : Boris Kolpackov <boris@dre.vanderbilt.edu>
+// cvs-id : $Id$
+
+interface StateTransfer
+{
+ short
+ number ();
+
+ oneway void
+ shutdown ();
+};
diff --git a/TAO/tests/Portable_Interceptors/AdvSlotExt/client.cpp b/TAO/tests/Portable_Interceptors/AdvSlotExt/client.cpp
new file mode 100644
index 00000000000..0a9b7436bf1
--- /dev/null
+++ b/TAO/tests/Portable_Interceptors/AdvSlotExt/client.cpp
@@ -0,0 +1,27 @@
+// author : Boris Kolpackov <boris@dre.vanderbilt.edu>
+// cvs-id : $Id$
+
+#include "StateTransferC.h"
+
+int
+main (int argc, char *argv[])
+{
+ CORBA::ORB_var orb = CORBA::ORB_init (argc, argv);
+
+ if (argc != 2)
+ {
+ ACE_DEBUG ((LM_ERROR, "Usage: %s <ior>\n", argv[0]));
+ return -1;
+ }
+
+ CORBA::Object_var obj = orb->string_to_object (argv[1]);
+ StateTransfer_var server = StateTransfer::_narrow (obj.in ());
+
+ CORBA::Short n = server->number ();
+
+ ACE_DEBUG ((LM_ERROR, "Got number %d\n", n));
+
+ server->shutdown ();
+
+ return 0;
+}
diff --git a/TAO/tests/Portable_Interceptors/AdvSlotExt/run_test.pl b/TAO/tests/Portable_Interceptors/AdvSlotExt/run_test.pl
new file mode 100755
index 00000000000..2cfe882b1b5
--- /dev/null
+++ b/TAO/tests/Portable_Interceptors/AdvSlotExt/run_test.pl
@@ -0,0 +1,50 @@
+eval '(exit $?0)' && eval 'exec perl -S $0 ${1+"$@"}'
+ & eval 'exec perl -S $0 $argv:q'
+ if 0;
+
+# $Id$
+# -*- perl -*-
+
+use lib '../../../../bin';
+use PerlACE::Run_Test;
+
+$status = 0;
+$file = PerlACE::LocalFile ("server.ior");
+
+unlink $file;
+
+if (PerlACE::is_vxworks_test()) {
+ $SV = new PerlACE::ProcessVX ("server", "");
+}
+else {
+ $SV = new PerlACE::Process ("server", "");
+}
+$CL = new PerlACE::Process ("client", "file://$file");
+
+print STDERR "\n\n==== Running advanced slot test\n";
+
+$SV->Spawn ();
+
+if (PerlACE::waitforfile_timed ($file, 15) == -1) {
+ print STDERR "ERROR: cannot find file <$file>\n";
+ $SV->Kill ();
+ exit 1;
+}
+
+$client = $CL->SpawnWaitKill (60);
+
+if ($client != 0) {
+ print STDERR "ERROR: client returned $client\n";
+ $status = 1;
+}
+
+$server = $SV->WaitKill (5);
+
+if ($server != 0) {
+ print STDERR "ERROR: server returned $server\n";
+ $status = 1;
+}
+
+unlink $file;
+
+exit $status;
diff --git a/TAO/tests/Portable_Interceptors/AdvSlotExt/server.cpp b/TAO/tests/Portable_Interceptors/AdvSlotExt/server.cpp
new file mode 100644
index 00000000000..1a1256f6ad7
--- /dev/null
+++ b/TAO/tests/Portable_Interceptors/AdvSlotExt/server.cpp
@@ -0,0 +1,242 @@
+// author : Boris Kolpackov <boris@kolpackov.net>
+// cvs-id : $Id$
+
+#include "tao/LocalObject.h"
+#include "tao/ORBInitializer_Registry.h"
+
+#include "tao/PI/PI.h"
+#include "tao/PI_Server/PI_Server.h"
+
+#include "ace/OS_NS_stdio.h"
+
+#include "StateTransferS.h"
+
+using namespace CORBA;
+using namespace PortableServer;
+using namespace PortableInterceptor;
+
+//
+//
+PortableInterceptor::SlotId slot_id;
+
+
+//
+//
+class StateTransferImpl: public virtual POA_StateTransfer
+{
+public:
+ StateTransferImpl (ORB_ptr orb)
+ : orb_ (ORB::_duplicate (orb))
+ {
+ }
+
+ virtual Short
+ number () throw (SystemException)
+ {
+ // Prepare state update.
+ //
+ Any state;
+ CORBA::Long number = 5;
+ state <<= number;
+
+ Object_var obj (orb_->resolve_initial_references ("PICurrent"));
+ PortableInterceptor::Current_var pic (
+ PortableInterceptor::Current::_narrow (obj.in ()));
+
+ pic->set_slot (slot_id, state);
+
+ return 1;
+ }
+
+ virtual void
+ shutdown () throw (SystemException)
+ {
+ ACE_DEBUG ((LM_DEBUG, "Server is shutting down.\n"));
+ this->orb_->shutdown (0);
+ }
+
+private:
+ ORB_var orb_;
+};
+
+
+//
+//
+class ReplicaController: public virtual ServerRequestInterceptor,
+ public virtual TAO_Local_RefCounted_Object
+{
+public:
+ ReplicaController (PortableInterceptor::Current_ptr pi_current)
+ : pi_current_ (PortableInterceptor::Current::_duplicate (pi_current))
+ {
+ }
+
+ virtual char*
+ name () throw (SystemException)
+ {
+ return string_dup ("ReplicaController");
+ }
+
+ virtual void
+ destroy () throw (SystemException)
+ {
+ }
+
+#if TAO_HAS_EXTENDED_FT_INTERCEPTORS == 1
+ virtual void
+ tao_ft_interception_point (ServerRequestInfo_ptr, OctetSeq_out)
+ throw (SystemException, ForwardRequest)
+ {
+ }
+#endif /*TAO_HAS_EXTENDED_FT_INTERCEPTORS*/
+
+ virtual void
+ receive_request_service_contexts (ServerRequestInfo_ptr)
+ throw (SystemException, ForwardRequest)
+ {
+ }
+
+ virtual void
+ receive_request (ServerRequestInfo_ptr ri)
+ throw (SystemException, ForwardRequest)
+ {
+ Any state;
+ CORBA::Long number = 5;
+ state <<= number;
+
+ // After we have set things to TSC, change the value in RSC, at this
+ // moment no copy should be done anymore.
+ pi_current_->set_slot (slot_id, state);
+ CORBA::Long number6 = 6;
+ state <<= number6;
+ ri->set_slot (slot_id, state);
+
+ Any_var state_get (pi_current_->get_slot (slot_id));
+ CORBA::Long n (0);
+ state_get >>= n;
+
+ if (n == 5)
+ ACE_DEBUG ((LM_DEBUG, "State value is correctly %d.\n", n));
+ else
+ ACE_ERROR ((LM_ERROR, "ERROR: State value is incorrectly %d.\n", n));
+ }
+
+ virtual void
+ send_reply (ServerRequestInfo_ptr ri) throw (SystemException)
+ {
+ CORBA::String_var op = ri->operation (ACE_ENV_SINGLE_ARG_PARAMETER);
+
+ if (ACE_OS::strcmp (op.in (), "number") != 0)
+ return; // Don't mess with PICurrent if not invoking test method.
+
+ Any_var state (ri->get_slot (slot_id));
+ CORBA::Long n (0);
+ state >>= n;
+
+ if (n == 5)
+ ACE_DEBUG ((LM_DEBUG, "State value is correctly %d.\n", n));
+ else
+ ACE_ERROR ((LM_ERROR, "ERROR: State value is incorrectly %d.\n", n));
+ }
+
+ virtual void
+ send_exception (ServerRequestInfo_ptr)
+ throw (SystemException, ForwardRequest)
+ {
+ }
+
+ virtual void
+ send_other (ServerRequestInfo_ptr) throw (SystemException, ForwardRequest)
+ {
+ }
+ PortableInterceptor::Current_var pi_current_;
+};
+
+
+//
+//
+class ORB_Initializer : public virtual ORBInitializer,
+ public virtual TAO_Local_RefCounted_Object
+{
+public:
+ virtual void
+ pre_init (ORBInitInfo_ptr) throw (SystemException)
+ {
+ }
+
+ virtual void
+ post_init (ORBInitInfo_ptr info) throw (SystemException)
+ {
+ slot_id = info->allocate_slot_id ();
+ ACE_DEBUG ((LM_DEBUG, "Allocated slot with id %d.\n", slot_id));
+
+ CORBA::Object_var obj =
+ info->resolve_initial_references ("PICurrent");
+
+ PortableInterceptor::Current_var pi_current =
+ PortableInterceptor::Current::_narrow (obj.in ());
+
+ if (CORBA::is_nil (pi_current.in ()))
+ {
+ ACE_ERROR ((LM_ERROR,
+ "(%P|%t) ERROR: Could not resolve PICurrent object.\n"));
+
+ ACE_THROW (CORBA::INTERNAL ());
+ }
+
+ ServerRequestInterceptor_var interceptor (new ReplicaController (pi_current.in ()));
+ info->add_server_request_interceptor (interceptor.in ());
+ }
+};
+
+int
+main (int argc, char *argv[])
+{
+ ORBInitializer_var orb_initializer (new ORB_Initializer ());
+ register_orb_initializer (orb_initializer.in ());
+
+ ORB_var orb (ORB_init (argc, argv));
+
+ Object_var obj (orb->resolve_initial_references ("RootPOA"));
+
+ POA_var root_poa (POA::_narrow (obj.in ()));
+ POAManager_var poa_manager (root_poa->the_POAManager ());
+
+ StateTransferImpl* impl = new StateTransferImpl (orb.in ());
+ ServantBase_var impl_var (impl);
+
+ StateTransfer_var ref (impl->_this ());
+ String_var ior (orb->object_to_string (ref.in ()));
+
+ poa_manager->activate ();
+
+
+ // Dump the ior.
+ //
+ FILE *output_file= ACE_OS::fopen ("server.ior", "w");
+ if (output_file == 0)
+ {
+ ACE_ERROR_RETURN ((LM_ERROR,
+ "Cannot open output file <%s> for writing "
+ "IOR: %s",
+ ior.in ()),
+ 1);
+ }
+
+ ACE_OS::fprintf (output_file, "%s", ior.in ());
+ ACE_OS::fclose (output_file);
+
+ ACE_DEBUG ((LM_DEBUG, "Server is ready, IOR is in 'server.ior'\n"));
+
+
+ // Run the ORB event loop.
+ //
+ orb->run ();
+
+ root_poa->destroy (1, 1);
+ orb->destroy ();
+
+ ACE_DEBUG ((LM_DEBUG, "Event loop finished.\n"));
+
+ return 0;
+}
diff --git a/TAO/tests/Portable_Interceptors/Processing_Mode_Policy/Collocated/Client_Task.cpp b/TAO/tests/Portable_Interceptors/Processing_Mode_Policy/Collocated/Client_Task.cpp
new file mode 100644
index 00000000000..fca62b6fe50
--- /dev/null
+++ b/TAO/tests/Portable_Interceptors/Processing_Mode_Policy/Collocated/Client_Task.cpp
@@ -0,0 +1,98 @@
+//
+// $Id$
+//
+
+#include "Client_Task.h"
+#include "testC.h"
+#include "interceptors.h"
+
+ACE_RCSID(Muxing, Client_Task, "$Id$")
+
+Client_Task::Client_Task (const char *ior,
+ CORBA::ORB_ptr corb,
+ ACE_Thread_Manager *thr_mgr)
+ : ACE_Task_Base (thr_mgr)
+ , input_ (ior)
+ , corb_ (CORBA::ORB::_duplicate (corb))
+
+{
+}
+
+int
+Client_Task::svc (void)
+{
+ ACE_TRY_NEW_ENV
+ {
+
+ CORBA::Object_var object =
+ corb_->string_to_object (input_ ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ Test_Interceptors::Visual_var server =
+ Test_Interceptors::Visual::_narrow (object.in () ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ if (CORBA::is_nil (server.in ()))
+ {
+ ACE_ERROR_RETURN ((LM_ERROR,
+ "Object reference <%s> is nil\n",
+ this->input_),
+ 1);
+ }
+
+ run_test (server.in () ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ server->shutdown (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+ }
+ ACE_CATCHANY
+ {
+ ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION,
+ "Exception caught in client task:");
+ return 1;
+ }
+ ACE_ENDTRY;
+
+ return 0;
+
+}
+
+
+void
+Client_Task::run_test (Test_Interceptors::Visual_ptr server
+ ACE_ENV_ARG_DECL)
+{
+ server->normal (10 ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK;
+
+ CORBA::Long one = 1, two = 1;
+ (void) server->calculate (one,
+ two
+ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK;
+
+ ACE_TRY
+ {
+ (void) server->user (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+ }
+ ACE_CATCH (Test_Interceptors::Silly, userex)
+ {
+ ACE_DEBUG ((LM_DEBUG, "As expected, Caught Silly\n"));
+ }
+ ACE_ENDTRY;
+ ACE_CHECK;
+
+ ACE_TRY_EX (SYS)
+ {
+ server->system (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_TRY_CHECK_EX (SYS);
+ }
+ ACE_CATCH (CORBA::INV_OBJREF, sysex)
+ {
+ ACE_DEBUG ((LM_DEBUG, "As expected, Caught CORBA::INV_OBJREF\n"));
+ }
+ ACE_ENDTRY;
+ ACE_CHECK;
+}
diff --git a/TAO/tests/Portable_Interceptors/Processing_Mode_Policy/Collocated/Client_Task.h b/TAO/tests/Portable_Interceptors/Processing_Mode_Policy/Collocated/Client_Task.h
new file mode 100644
index 00000000000..49074e04e89
--- /dev/null
+++ b/TAO/tests/Portable_Interceptors/Processing_Mode_Policy/Collocated/Client_Task.h
@@ -0,0 +1,45 @@
+//
+// $Id$
+//
+
+#ifndef COLLOCATED_TEST_CLIENT_TASK_H
+#define COLLOCATED_TEST_CLIENT_TASK_H
+#include /**/ "ace/pre.h"
+#include "ace/Task.h"
+#include "testS.h"
+
+#if !defined (ACE_LACKS_PRAGMA_ONCE)
+# pragma once
+#endif /* ACE_LACKS_PRAGMA_ONCE */
+#include "tao/ORB.h"
+
+
+/// Implement a Task to run the client as a thread
+class Client_Task : public ACE_Task_Base
+{
+public:
+
+ /// Constructor
+ Client_Task (const char *input,
+ CORBA::ORB_ptr corb,
+ ACE_Thread_Manager *thr_mgr);
+
+ /// Thread entry point
+ int svc (void);
+
+ void run_test (Test_Interceptors::Visual_ptr server
+ ACE_ENV_ARG_DECL);
+
+ /// The status of the svc loop
+ int status (void) const;
+
+private:
+ const char *input_;
+
+ CORBA::ORB_var corb_;
+
+ int status_;
+};
+
+#include /**/ "ace/post.h"
+#endif /* COLLOCATED_TEST_CLIENT_TASK_H */
diff --git a/TAO/tests/Portable_Interceptors/Processing_Mode_Policy/Collocated/Collocated_Test.cpp b/TAO/tests/Portable_Interceptors/Processing_Mode_Policy/Collocated/Collocated_Test.cpp
new file mode 100644
index 00000000000..41d8c39fec7
--- /dev/null
+++ b/TAO/tests/Portable_Interceptors/Processing_Mode_Policy/Collocated/Collocated_Test.cpp
@@ -0,0 +1,226 @@
+//$Id$
+#include "Server_Task.h"
+#include "Client_Task.h"
+#include "ace/Get_Opt.h"
+#include "ace/Argv_Type_Converter.h"
+#include "ace/SString.h"
+#include "ace/Manual_Event.h"
+#include "Echo_Collocated_ORBInitializer.h"
+#include "tao/ORBInitializer_Registry.h"
+#include "interceptors.h"
+
+const char *output = "test.ior";
+const char *input = "file://test.ior";
+
+ACE_CString server_proc_mode_str;
+ACE_CString client_proc_mode_str;
+ACE_CString server_orb;
+ACE_CString client_orb;
+
+int
+parse_args (int argc, char *argv[])
+{
+ ACE_Get_Opt get_opts (argc, argv, "s:c:k:o");
+ int c;
+
+ server_proc_mode_str.set ("LOCAL_AND_REMOTE");
+ client_proc_mode_str.set ("LOCAL_AND_REMOTE");
+
+ while ((c = get_opts ()) != -1)
+ {
+ switch (c)
+ {
+ case 's':
+ server_proc_mode_str.set (get_opts.opt_arg ());
+ break;
+ case 'c':
+ client_proc_mode_str.set (get_opts.opt_arg ());
+ break;
+ case 'o':
+ output = get_opts.opt_arg ();
+ break;
+ case 'k':
+ input = get_opts.opt_arg ();
+ break;
+ case '?':
+ default:
+ return 0;
+ }
+ }
+ // Indicates sucessful parsing of the command line
+ return 0;
+}
+
+int
+main (int argc, char *argv[])
+{
+ if (parse_args (argc,
+ argv) == -1)
+ return -1;
+
+ server_orb.set ("server_orb");
+ client_orb.set ("client_orb");
+
+ ACE_DECLARE_NEW_CORBA_ENV;
+ ACE_TRY
+ {
+ PortableInterceptor::ORBInitializer_ptr temp_initializer =
+ PortableInterceptor::ORBInitializer::_nil ();
+
+ // Set up our default expectations.
+ CORBA::ULong expected_server_interceptor_check = 10;
+ CORBA::ULong expected_client_interceptor_check = 10;
+
+ PortableInterceptor::ProcessingMode client_proc_mode =
+ PortableInterceptor::LOCAL_AND_REMOTE;
+
+ if (client_proc_mode_str == "LOCAL_ONLY")
+ {
+ client_proc_mode = PortableInterceptor::LOCAL_ONLY;
+ ACE_DEBUG((LM_DEBUG,
+ "Using LOCAL_ONLY for client-side ProcessingMode.\n"));
+ }
+ else if (client_proc_mode_str == "REMOTE_ONLY")
+ {
+ client_proc_mode = PortableInterceptor::REMOTE_ONLY;
+ ACE_DEBUG((LM_DEBUG,
+ "Using REMOTE_ONLY for client-side ProcessingMode.\n"));
+
+ // Since all of the calls are collocated, setting the client-side
+ // ProcessingMode to REMOTE_ONLY will cause the client request
+ // interceptor to not fire. Thus, we expect 0 calls on the
+ // client interceptor.
+ expected_client_interceptor_check = 0;
+ }
+ else
+ {
+ ACE_DEBUG((LM_DEBUG,
+ "Using LOCAL_AND_REMOTE for client-side ProcessingMode.\n"));
+ }
+
+ PortableInterceptor::ProcessingMode server_proc_mode =
+ PortableInterceptor::LOCAL_AND_REMOTE;
+
+ if (server_proc_mode_str == "LOCAL_ONLY")
+ {
+ server_proc_mode = PortableInterceptor::LOCAL_ONLY;
+ ACE_DEBUG((LM_DEBUG,
+ "Using LOCAL_ONLY for server-side ProcessingMode.\n"));
+ }
+ else if (server_proc_mode_str == "REMOTE_ONLY")
+ {
+ server_proc_mode = PortableInterceptor::REMOTE_ONLY;
+ ACE_DEBUG((LM_DEBUG,
+ "Using REMOTE_ONLY for server-side ProcessingMode.\n"));
+
+ // Since all of the calls are collocated, setting the server-side
+ // ProcessingMode to REMOTE_ONLY will cause the server request
+ // interceptor to not fire. Thus, we expect 0 calls on the
+ // server interceptor.
+ expected_server_interceptor_check = 0;
+ }
+ else
+ {
+ ACE_DEBUG((LM_DEBUG,
+ "Using LOCAL_AND_REMOTE for server-side ProcessingMode.\n"));
+ }
+
+ ACE_NEW_RETURN (temp_initializer,
+ Echo_Collocated_ORBInitializer (server_proc_mode,
+ client_proc_mode),
+ -1); // No exceptions yet!
+ PortableInterceptor::ORBInitializer_var orb_initializer =
+ temp_initializer;
+
+ PortableInterceptor::register_orb_initializer (orb_initializer.in ()
+ ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ ACE_Argv_Type_Converter satc (argc, argv);
+ CORBA::ORB_var sorb =
+ CORBA::ORB_init (satc.get_argc (),
+ satc.get_TCHAR_argv (),
+ server_orb.c_str ()
+ ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ ACE_Manual_Event me;
+ Server_Task server_task (output,
+ sorb.in (),
+ me,
+ ACE_Thread_Manager::instance ());
+
+ if (server_task.activate (THR_NEW_LWP | THR_JOINABLE,
+ 1,
+ 1) == -1)
+ {
+ ACE_ERROR ((LM_ERROR, "Error activating server task\n"));
+ }
+
+ // Wait for the server thread to do some processing
+ me.wait ();
+
+ ACE_Argv_Type_Converter catc (argc, argv);
+ CORBA::ORB_var corb =
+ CORBA::ORB_init (catc.get_argc (),
+ catc.get_TCHAR_argv (),
+ client_orb.c_str ()
+ ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ Client_Task client_task (input,
+ corb.in (),
+ ACE_Thread_Manager::instance ());
+
+ if (client_task.activate (THR_NEW_LWP | THR_JOINABLE,
+ 1,
+ 1) == -1)
+ {
+ ACE_ERROR ((LM_ERROR, "Error activating client task\n"));
+ }
+
+ ACE_Thread_Manager::instance ()->wait ();
+
+ sorb->destroy (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ bool failed_check = false;
+
+ CORBA::ULong number_called =
+ Echo_Server_Request_Interceptor::server_interceptor_check_;
+
+ if (number_called != expected_server_interceptor_check)
+ {
+ ACE_ERROR ((LM_ERROR,
+ "(%P|%t) ERROR: Server-Side Interceptors not "
+ "called properly, called %d times, expected %d.\n",
+ number_called, expected_server_interceptor_check));
+ failed_check = true;
+ }
+
+ number_called =
+ Echo_Client_Request_Interceptor::client_interceptor_check_;
+
+ if (number_called != expected_client_interceptor_check)
+ {
+ ACE_ERROR ((LM_ERROR,
+ "(%P|%t) ERROR:Client-Side Interceptors not called "
+ "properly, called %d times, expected %d.\n",
+ number_called, expected_client_interceptor_check));
+ failed_check = true;
+ }
+
+ if (failed_check)
+ {
+ return 1;
+ }
+ }
+ ACE_CATCHANY
+ {
+ ACE_ERROR ((LM_ERROR,
+ "(%P|%t) ERROR: Some exception was caught in main().\n"));
+ return 1;
+ }
+ ACE_ENDTRY;
+ return 0;
+}
diff --git a/TAO/tests/Portable_Interceptors/Processing_Mode_Policy/Collocated/Echo_Collocated_ORBInitializer.cpp b/TAO/tests/Portable_Interceptors/Processing_Mode_Policy/Collocated/Echo_Collocated_ORBInitializer.cpp
new file mode 100644
index 00000000000..b9773fde351
--- /dev/null
+++ b/TAO/tests/Portable_Interceptors/Processing_Mode_Policy/Collocated/Echo_Collocated_ORBInitializer.cpp
@@ -0,0 +1,138 @@
+// -*- C++ -*-
+//
+// $Id$
+
+#include "Echo_Collocated_ORBInitializer.h"
+#include "interceptors.h"
+#include "tao/PI/ORBInitInfo.h"
+#include "tao/ORB_Core.h"
+#include "ace/OS_NS_string.h"
+
+Echo_Collocated_ORBInitializer::Echo_Collocated_ORBInitializer (
+ PortableInterceptor::ProcessingMode server_proc_mode,
+ PortableInterceptor::ProcessingMode client_proc_mode)
+ : server_processing_mode_(server_proc_mode),
+ client_processing_mode_(client_proc_mode)
+{
+}
+
+void
+Echo_Collocated_ORBInitializer::pre_init (
+ PortableInterceptor::ORBInitInfo_ptr
+ ACE_ENV_ARG_DECL_NOT_USED)
+ ACE_THROW_SPEC ((CORBA::SystemException))
+{
+}
+
+void
+Echo_Collocated_ORBInitializer::post_init (
+ PortableInterceptor::ORBInitInfo_ptr info
+ ACE_ENV_ARG_DECL)
+ ACE_THROW_SPEC ((CORBA::SystemException))
+{
+ CORBA::String_var orb_id =
+ info->orb_id (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK;
+
+ // TAO-Specific way to get to the ORB Core (and thus, the ORB).
+ TAO_ORBInitInfo_var tao_info =
+ TAO_ORBInitInfo::_narrow (info
+ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK;
+
+ CORBA::ORB_var orb = CORBA::ORB::_duplicate(tao_info->orb_core()->orb());
+
+ if (CORBA::is_nil(orb.in()))
+ {
+ ACE_THROW (CORBA::INTERNAL ());
+ ACE_CHECK;
+ }
+
+ PortableInterceptor::ORBInitInfo_3_1_var info_3_1 =
+ PortableInterceptor::ORBInitInfo_3_1::_narrow(info
+ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK;
+
+ if (CORBA::is_nil(info_3_1.in()))
+ {
+ ACE_THROW (CORBA::INTERNAL ());
+ ACE_CHECK;
+ }
+
+ if (!ACE_OS::strcmp (orb_id.in (), "client_orb"))
+ {
+ PortableInterceptor::ClientRequestInterceptor_ptr interceptor =
+ PortableInterceptor::ClientRequestInterceptor::_nil ();
+
+ // Install the Echo client request interceptor
+ ACE_NEW_THROW_EX (interceptor,
+ Echo_Client_Request_Interceptor,
+ CORBA::NO_MEMORY ());
+ ACE_CHECK;
+
+ PortableInterceptor::ClientRequestInterceptor_var
+ client_interceptor = interceptor;
+
+ CORBA::Any client_proc_mode_as_any;
+ client_proc_mode_as_any <<= this->client_processing_mode_;
+
+ CORBA::PolicyList policy_list (1);
+
+ policy_list.length (1);
+ policy_list[0] =
+ orb->create_policy (PortableInterceptor::PROCESSING_MODE_POLICY_TYPE,
+ client_proc_mode_as_any
+ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK;
+
+ info_3_1->add_client_request_interceptor_with_policy (
+ client_interceptor.in (),
+ policy_list
+ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK;
+
+ policy_list[0]->destroy (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK;
+ policy_list[0] = CORBA::Policy::_nil ();
+ }
+ else if (!ACE_OS::strcmp (orb_id.in (), "server_orb"))
+ {
+ PortableInterceptor::ServerRequestInterceptor_ptr interceptor =
+ PortableInterceptor::ServerRequestInterceptor::_nil ();
+
+ // Install the Echo server request interceptor
+ ACE_NEW_THROW_EX (interceptor,
+ Echo_Server_Request_Interceptor,
+ CORBA::NO_MEMORY ());
+ ACE_CHECK;
+
+ PortableInterceptor::ServerRequestInterceptor_var
+ server_interceptor = interceptor;
+
+ CORBA::Any server_proc_mode_as_any;
+ server_proc_mode_as_any <<= this->server_processing_mode_;
+
+ CORBA::PolicyList policy_list (1);
+
+ policy_list.length (1);
+ policy_list[0] =
+ orb->create_policy (PortableInterceptor::PROCESSING_MODE_POLICY_TYPE,
+ server_proc_mode_as_any
+ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK;
+
+ info_3_1->add_server_request_interceptor_with_policy (
+ server_interceptor.in (),
+ policy_list
+ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK;
+
+ policy_list[0]->destroy (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK;
+ policy_list[0] = CORBA::Policy::_nil ();
+ }
+ else
+ {
+ }
+}
+
diff --git a/TAO/tests/Portable_Interceptors/Processing_Mode_Policy/Collocated/Echo_Collocated_ORBInitializer.h b/TAO/tests/Portable_Interceptors/Processing_Mode_Policy/Collocated/Echo_Collocated_ORBInitializer.h
new file mode 100644
index 00000000000..57d361b7b9a
--- /dev/null
+++ b/TAO/tests/Portable_Interceptors/Processing_Mode_Policy/Collocated/Echo_Collocated_ORBInitializer.h
@@ -0,0 +1,59 @@
+// -*- C++ -*-
+//
+// $Id$
+
+#ifndef TAO_ECHO_CLIENT_ORB_INITIALIZER_H
+#define TAO_ECHO_CLIENT_ORB_INITIALIZER_H
+
+#include /**/ "ace/pre.h"
+
+#include "tao/orbconf.h"
+
+#if !defined (ACE_LACKS_PRAGMA_ONCE)
+# pragma once
+#endif /* ACE_LACKS_PRAGMA_ONCE */
+
+#include "tao/PI/PI.h"
+#include "tao/PI/ProcessingModePolicyC.h"
+#include "tao/LocalObject.h"
+
+// This is to remove "inherits via dominance" warnings from MSVC.
+// MSVC is being a little too paranoid.
+#if defined(_MSC_VER)
+#pragma warning(push)
+#pragma warning(disable:4250)
+#endif /* _MSC_VER */
+
+/// Echo client ORB initializer.
+class Echo_Collocated_ORBInitializer :
+ public virtual PortableInterceptor::ORBInitializer,
+ public virtual TAO_Local_RefCounted_Object
+{
+public:
+
+ Echo_Collocated_ORBInitializer
+ (PortableInterceptor::ProcessingMode server_proc_mode,
+ PortableInterceptor::ProcessingMode client_proc_mode);
+
+ virtual void pre_init (PortableInterceptor::ORBInitInfo_ptr info
+ ACE_ENV_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+ virtual void post_init (PortableInterceptor::ORBInitInfo_ptr info
+ ACE_ENV_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+private:
+
+ PortableInterceptor::ProcessingMode server_processing_mode_;
+ PortableInterceptor::ProcessingMode client_processing_mode_;
+};
+
+#if defined (_MSC_VER)
+#pragma warning(pop)
+#endif /* _MSC_VER */
+
+
+#include /**/ "ace/post.h"
+
+#endif /* TAO_ECHO_CLIENT_ORB_INITIALIZER_H */
diff --git a/TAO/tests/Portable_Interceptors/Processing_Mode_Policy/Collocated/PI_ProcMode_Collocated.mpc b/TAO/tests/Portable_Interceptors/Processing_Mode_Policy/Collocated/PI_ProcMode_Collocated.mpc
new file mode 100644
index 00000000000..0e1f9788ad5
--- /dev/null
+++ b/TAO/tests/Portable_Interceptors/Processing_Mode_Policy/Collocated/PI_ProcMode_Collocated.mpc
@@ -0,0 +1,16 @@
+// -*- MPC -*-
+// $Id$
+
+project(*Collocated): taoserver, pi, pi_server, interceptors {
+ exename = PI_ProcMode_Collocated_Test
+ Source_Files {
+ testC.cpp
+ testS.cpp
+ test_i.cpp
+ interceptors.cpp
+ Echo_Collocated_ORBInitializer.cpp
+ Collocated_Test.cpp
+ Client_Task.cpp
+ Server_Task.cpp
+ }
+}
diff --git a/TAO/tests/Portable_Interceptors/Processing_Mode_Policy/Collocated/Server_Task.cpp b/TAO/tests/Portable_Interceptors/Processing_Mode_Policy/Collocated/Server_Task.cpp
new file mode 100644
index 00000000000..a9db6a71b8a
--- /dev/null
+++ b/TAO/tests/Portable_Interceptors/Processing_Mode_Policy/Collocated/Server_Task.cpp
@@ -0,0 +1,109 @@
+//
+// $Id$
+//
+#include "Server_Task.h"
+#include "test_i.h"
+#include "interceptors.h"
+
+#include "ace/Manual_Event.h"
+
+ACE_RCSID(Collocated_Test,
+ Server_Task,
+ "$Id$")
+
+
+Server_Task::Server_Task (const char *output,
+ CORBA::ORB_ptr sorb,
+ ACE_Manual_Event &me,
+ ACE_Thread_Manager *thr_mgr)
+ : ACE_Task_Base (thr_mgr)
+ , output_ (output)
+ , me_ (me)
+ , sorb_ (CORBA::ORB::_duplicate (sorb))
+{
+}
+
+int
+Server_Task::svc (void)
+{
+ ACE_TRY_NEW_ENV
+ {
+
+ CORBA::Object_var poa_object =
+ sorb_->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;
+
+ poa_manager->activate (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ Visual_i * server_impl = 0;
+ ACE_NEW_RETURN (server_impl, Visual_i (sorb_.in ()), 1);
+
+ PortableServer::ObjectId_var id =
+ root_poa->activate_object (server_impl
+ ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ CORBA::Object_var test_obj =
+ root_poa->id_to_reference (id.in ()
+ ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ Test_Interceptors::Visual_var server =
+ Test_Interceptors::Visual::_narrow (test_obj.in ()
+ ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ CORBA::String_var ior =
+ this->sorb_->object_to_string (server.in () ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ ACE_DEBUG ((LM_DEBUG, "Test_Interceptors::Visual: <%s>\n", ior.in ()));
+
+ // If the ior_output_file exists, output the ior to it
+ if (output_ != 0)
+ {
+ FILE *output_file= ACE_OS::fopen (this->output_, "w");
+ if (output_file == 0)
+ ACE_ERROR_RETURN ((LM_ERROR,
+ "Cannot open output file for writing IOR: %s",
+ this->output_),
+ 1);
+ ACE_OS::fprintf (output_file, "%s", ior.in ());
+ ACE_OS::fclose (output_file);
+ }
+
+ // Signal the main thread before we call orb->run ();
+ this->me_.signal ();
+
+ this->sorb_->run (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ ACE_DEBUG ((LM_DEBUG, "event loop finished\n"));
+
+ root_poa->destroy (1, 1 ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+ }
+ ACE_CATCHANY
+ {
+ ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION,
+ "Exception caught in server task:");
+ return 1;
+ }
+ ACE_ENDTRY;
+
+ return 0;
+}
diff --git a/TAO/tests/Portable_Interceptors/Processing_Mode_Policy/Collocated/Server_Task.h b/TAO/tests/Portable_Interceptors/Processing_Mode_Policy/Collocated/Server_Task.h
new file mode 100644
index 00000000000..2f63a0724de
--- /dev/null
+++ b/TAO/tests/Portable_Interceptors/Processing_Mode_Policy/Collocated/Server_Task.h
@@ -0,0 +1,53 @@
+// -*- C++ -*-
+//
+// $Id$
+
+#ifndef COLLOCATED_SERVER_TASK_H
+#define COLLOCATED_SERVER_TASK_H
+
+#include /**/ "ace/pre.h"
+
+#include "ace/Task.h"
+
+#if !defined (ACE_LACKS_PRAGMA_ONCE)
+# pragma once
+#endif /* ACE_LACKS_PRAGMA_ONCE */
+
+#include "tao/ORB.h"
+
+ACE_BEGIN_VERSIONED_NAMESPACE_DECL
+class ACE_Manual_Event;
+ACE_END_VERSIONED_NAMESPACE_DECL
+
+/// Implement a Task to run the server in a single thread
+class Server_Task : public ACE_Task_Base
+{
+public:
+ /// Constructor
+ Server_Task (const char *output,
+ CORBA::ORB_ptr sorb,
+ ACE_Manual_Event &me,
+ ACE_Thread_Manager *thr_mgr);
+
+ /// Thread entry point
+ int svc (void);
+
+ /// The status of the svc loop
+ int status (void) const;
+
+private:
+ /// Output file for IOR
+ const char *output_;
+
+ /// Manual event to wake up the main thread to create a client
+ /// thread.
+ ACE_Manual_Event &me_;
+
+ CORBA::ORB_var sorb_;
+
+ int status_;
+};
+
+#include /**/ "ace/post.h"
+
+#endif /* COLLOCATED_SERVER_TASK_H */
diff --git a/TAO/tests/Portable_Interceptors/Processing_Mode_Policy/Collocated/interceptors.cpp b/TAO/tests/Portable_Interceptors/Processing_Mode_Policy/Collocated/interceptors.cpp
new file mode 100644
index 00000000000..2082c0d81c9
--- /dev/null
+++ b/TAO/tests/Portable_Interceptors/Processing_Mode_Policy/Collocated/interceptors.cpp
@@ -0,0 +1,395 @@
+// $Id$
+
+#include "interceptors.h"
+#include "tao/PI/ClientRequestInfoC.h"
+#include "tao/PI_Server/ServerRequestInfoC.h"
+#include "tao/AnyTypeCode/AnyTypeCode_Adapter_Impl.h"
+#include "tao/AnyTypeCode/DynamicC.h"
+#include "tao/AnyTypeCode/TypeCode.h"
+#include "ace/Log_Msg.h"
+#include "ace/OS_NS_string.h"
+
+ACE_RCSID (Dynamic,
+ interceptors,
+ "$Id$")
+
+const char *request_msg = "The Echo_Request_Interceptor request message";
+const char *reply_msg = "The Echo_Request_Interceptor reply message";
+CORBA::ULong Echo_Client_Request_Interceptor::client_interceptor_check_ = 0;
+CORBA::ULong Echo_Server_Request_Interceptor::server_interceptor_check_ = 0;
+
+Echo_Client_Request_Interceptor::Echo_Client_Request_Interceptor (void)
+ : myname_ ("Echo_Client_Interceptor")
+{
+}
+
+Echo_Client_Request_Interceptor::~Echo_Client_Request_Interceptor ()
+{
+}
+
+char *
+Echo_Client_Request_Interceptor::name (ACE_ENV_SINGLE_ARG_DECL_NOT_USED)
+ ACE_THROW_SPEC ((CORBA::SystemException))
+{
+ return CORBA::string_dup (this->myname_);
+}
+
+void
+Echo_Client_Request_Interceptor::destroy (ACE_ENV_SINGLE_ARG_DECL_NOT_USED)
+ ACE_THROW_SPEC ((CORBA::SystemException))
+{
+}
+
+void
+Echo_Client_Request_Interceptor::send_poll (
+ PortableInterceptor::ClientRequestInfo_ptr
+ ACE_ENV_ARG_DECL_NOT_USED
+ )
+ ACE_THROW_SPEC ((CORBA::SystemException))
+{
+ // Do nothing
+}
+
+void
+Echo_Client_Request_Interceptor::send_request (
+ PortableInterceptor::ClientRequestInfo_ptr ri
+ ACE_ENV_ARG_DECL)
+ ACE_THROW_SPEC ((CORBA::SystemException,
+ PortableInterceptor::ForwardRequest))
+{
+ CORBA::String_var op =
+ ri->operation (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK;
+
+ // Do not count the _is_a calls
+ if (ACE_OS::strcmp (op.in (), "_is_a") != 0)
+ {
+ client_interceptor_check_++;
+ }
+
+ ACE_DEBUG ((LM_DEBUG,
+ "Echo_Client_Request_Interceptor::send_request\n"));
+
+ ACE_DEBUG ((LM_DEBUG,
+ "Echo_Client_Request_Interceptor::send_request from "
+ "\"%s\"\n",
+ op.in ()));
+
+ if (ACE_OS::strcmp (op.in (), "normal") == 0)
+ {
+ Dynamic::ParameterList_var paramlist =
+ ri->arguments (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK;
+
+ CORBA::Long param;
+ CORBA::ULong i = 0; // index -- explicitly used to avoid
+ // overloaded operator ambiguity.
+ paramlist[i].argument >>= param;
+
+ ACE_DEBUG ((LM_DEBUG,
+ "The arg is %d\n",
+ param));
+ }
+}
+
+void
+Echo_Client_Request_Interceptor::receive_other (
+ PortableInterceptor::ClientRequestInfo_ptr ri
+ ACE_ENV_ARG_DECL)
+ ACE_THROW_SPEC ((CORBA::SystemException,
+ PortableInterceptor::ForwardRequest))
+{
+
+ CORBA::String_var op = ri->operation (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK;
+
+ // Do not count the _is_a calls
+ if (ACE_OS::strcmp (op.in (), "_is_a") != 0)
+ {
+ client_interceptor_check_++;
+ }
+ ACE_DEBUG ((LM_DEBUG,
+ "Echo_Client_Request_Interceptor::receive_other "
+ "from \"%s\"\n",
+ op.in ()));
+}
+
+void
+Echo_Client_Request_Interceptor::receive_reply (
+ PortableInterceptor::ClientRequestInfo_ptr ri
+ ACE_ENV_ARG_DECL)
+ ACE_THROW_SPEC ((CORBA::SystemException))
+{
+
+ CORBA::String_var op = ri->operation (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK;
+
+ // Do not count the _is_a calls
+ if (ACE_OS::strcmp (op.in (), "_is_a") != 0)
+ {
+ client_interceptor_check_++;
+ }
+
+ ACE_DEBUG ((LM_DEBUG,
+ "Echo_Client_Request_Interceptor::receive_reply "
+ "from \"%s\"\n",
+ op.in ()));
+
+ if (ACE_OS::strcmp (op.in (), "normal") == 0)
+ {
+ Dynamic::ParameterList_var paramlist =
+ ri->arguments (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK;
+
+ CORBA::Long param;
+ CORBA::ULong i = 0; // index -- explicitly used to avoid
+ // overloaded operator ambiguity.
+ paramlist[i].argument >>= param;
+
+ }
+ else if (ACE_OS::strcmp (op.in (), "calculate") == 0)
+ {
+ Dynamic::ParameterList_var paramlist =
+ ri->arguments (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK;
+
+ CORBA::Long param1, param2, result;
+ CORBA::ULong i = 0; // index -- explicitly used to avoid
+ // overloaded operator ambiguity.
+ paramlist[i++].argument >>= param1;
+ paramlist[i].argument >>= param2;
+
+ CORBA::Any_var result_any = ri->result (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK;
+
+ (result_any.in ()) >>= result;
+
+ ACE_DEBUG ((LM_DEBUG,
+ "The result of calculate is %d + %d = %d\n",
+ param1,
+ param2,
+ result));
+ }
+}
+
+void
+Echo_Client_Request_Interceptor::receive_exception (
+ PortableInterceptor::ClientRequestInfo_ptr ri
+ ACE_ENV_ARG_DECL)
+ ACE_THROW_SPEC ((CORBA::SystemException,
+ PortableInterceptor::ForwardRequest))
+{
+
+ CORBA::String_var op = ri->operation (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK;
+
+ // Do not count the _is_a calls
+ if (ACE_OS::strcmp (op.in (), "_is_a") != 0)
+ {
+ client_interceptor_check_++;
+ }
+
+ CORBA::String_var exception_id =
+ ri->received_exception_id (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK;
+
+ ACE_DEBUG ((LM_DEBUG,
+ "Echo_Client_Request_Interceptor::received_exception "
+ "from \"%s\"\n",
+ op.in ()));
+
+ ACE_DEBUG ((LM_DEBUG,
+ "Exception ID = %s\n",
+ exception_id.in ()));
+}
+
+Echo_Server_Request_Interceptor::Echo_Server_Request_Interceptor (void)
+ : myname_ ("Echo_Server_Interceptor")
+{
+}
+
+Echo_Server_Request_Interceptor::~Echo_Server_Request_Interceptor ()
+{
+}
+
+char *
+Echo_Server_Request_Interceptor::name (ACE_ENV_SINGLE_ARG_DECL_NOT_USED)
+ ACE_THROW_SPEC ((CORBA::SystemException))
+{
+ return CORBA::string_dup (this->myname_);
+}
+
+void
+Echo_Server_Request_Interceptor::destroy (ACE_ENV_SINGLE_ARG_DECL_NOT_USED)
+ ACE_THROW_SPEC ((CORBA::SystemException))
+{
+}
+
+void
+Echo_Server_Request_Interceptor::receive_request_service_contexts (
+ PortableInterceptor::ServerRequestInfo_ptr
+ ACE_ENV_ARG_DECL_NOT_USED)
+ ACE_THROW_SPEC ((CORBA::SystemException,
+ PortableInterceptor::ForwardRequest))
+{
+}
+
+void
+Echo_Server_Request_Interceptor::receive_request (
+ PortableInterceptor::ServerRequestInfo_ptr ri
+ ACE_ENV_ARG_DECL)
+ ACE_THROW_SPEC ((CORBA::SystemException,
+ PortableInterceptor::ForwardRequest))
+{
+
+ CORBA::String_var op = ri->operation (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK;
+
+ // Do not count the _is_a calls
+ if (ACE_OS::strcmp (op.in (), "_is_a") != 0)
+ {
+ ++server_interceptor_check_;
+ }
+
+ PortableInterceptor::ObjectId_var test_oid =
+ ri->object_id (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK;
+
+ ACE_DEBUG ((LM_DEBUG,
+ "Echo_Server_Request_Interceptor::receive_request from \"%s\"\n",
+ op.in ()));
+
+ if (ACE_OS::strcmp (op.in (), "normal") == 0)
+ {
+ Dynamic::ParameterList_var paramlist =
+ ri->arguments (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK;
+
+ CORBA::Long param;
+ CORBA::ULong i = 0; // index -- explicitly used to avoid
+ // overloaded operator ambiguity.
+ paramlist[i].argument >>= param;
+
+ ACE_DEBUG ((LM_DEBUG,
+ "The arg is %d\n",
+ param));
+
+ }
+
+ CORBA::String_var tmdi =
+ ri->target_most_derived_interface (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK;
+
+ ACE_DEBUG ((LM_DEBUG,
+ "Target most derived interface: %s\n",
+ tmdi.in ()));
+}
+
+void
+Echo_Server_Request_Interceptor::send_reply (
+ PortableInterceptor::ServerRequestInfo_ptr ri
+ ACE_ENV_ARG_DECL)
+ ACE_THROW_SPEC ((CORBA::SystemException))
+{
+
+ CORBA::String_var op = ri->operation (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK;
+
+ // Do not count the _is_a calls
+ if (ACE_OS::strcmp (op.in (), "_is_a") != 0)
+ {
+ ++server_interceptor_check_;
+ }
+
+ ACE_DEBUG ((LM_DEBUG,
+ "Echo_Server_Request_Interceptor::send_reply from \"%s\"\n",
+ op.in ()));
+
+ if (ACE_OS::strcmp (op.in (), "normal") == 0)
+ {
+ Dynamic::ParameterList_var paramlist =
+ ri->arguments (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK;
+
+ CORBA::Long param;
+ CORBA::ULong i = 0; // index -- explicitly used to avoid
+ // overloaded operator ambiguity.
+ paramlist[i].argument >>= param;
+ ACE_DEBUG ((LM_DEBUG,
+ "The arg is %d\n",
+ param));
+ }
+
+ if (ACE_OS::strcmp (op.in (), "calculate") == 0)
+ {
+ Dynamic::ParameterList_var paramlist =
+ ri->arguments (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK;
+
+ CORBA::Long param1, param2, result = 0;
+ CORBA::ULong i = 0; // index -- explicitly used to avoid
+ // overloaded operator ambiguity.
+ paramlist[i++].argument >>= param1;
+ paramlist[i].argument >>= param2;
+
+ CORBA::Any_var result_any = ri->result (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK;
+
+ (result_any.in ()) >>= result;
+
+ ACE_DEBUG ((LM_DEBUG,
+ "The result of calculate is %d + %d = %d\n",
+ param1,
+ param2,
+ result));
+ }
+}
+
+void
+Echo_Server_Request_Interceptor::send_exception (
+ PortableInterceptor::ServerRequestInfo_ptr ri
+ ACE_ENV_ARG_DECL)
+ ACE_THROW_SPEC ((CORBA::SystemException,
+ PortableInterceptor::ForwardRequest))
+{
+
+ CORBA::String_var op = ri->operation (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK;
+
+ // Do not count the _is_a calls
+ if (ACE_OS::strcmp (op.in (), "_is_a") != 0)
+ {
+ ++server_interceptor_check_;
+ }
+
+ ACE_DEBUG ((LM_DEBUG,
+ "Echo_Server_Request_Interceptor::send_exception "
+ "from \"%s\"\n",
+ op.in ()));
+
+
+ CORBA::Any_var any =
+ ri->sending_exception (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK;
+
+ CORBA::TypeCode_var type = any->type ();
+
+ const char *exception_id = type->id (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK;
+
+ ACE_DEBUG ((LM_DEBUG,
+ "Exception ID = %s\n",
+ exception_id));
+}
+
+void
+Echo_Server_Request_Interceptor::send_other (
+ PortableInterceptor::ServerRequestInfo_ptr
+ ACE_ENV_ARG_DECL_NOT_USED)
+ ACE_THROW_SPEC ((CORBA::SystemException,
+ PortableInterceptor::ForwardRequest))
+{
+ ++server_interceptor_check_;
+
+ // Do Nothing
+}
diff --git a/TAO/tests/Portable_Interceptors/Processing_Mode_Policy/Collocated/interceptors.h b/TAO/tests/Portable_Interceptors/Processing_Mode_Policy/Collocated/interceptors.h
new file mode 100644
index 00000000000..c136eb18144
--- /dev/null
+++ b/TAO/tests/Portable_Interceptors/Processing_Mode_Policy/Collocated/interceptors.h
@@ -0,0 +1,138 @@
+// -*- C++ -*-
+//
+// $Id$
+
+#ifndef TAO_INTERCEPTORS_H
+#define TAO_INTERCEPTORS_H
+#include /**/ "ace/pre.h"
+
+#include "tao/PI/PI.h"
+
+#if !defined (ACE_LACKS_PRAGMA_ONCE)
+# pragma once
+#endif /* ACE_LACKS_PRAGMA_ONCE */
+
+#include "tao/PI_Server/PI_Server.h"
+#include "tao/LocalObject.h"
+
+#if defined(_MSC_VER)
+#pragma warning(push)
+#pragma warning(disable:4250)
+#endif /* _MSC_VER */
+
+class Echo_Client_Request_Interceptor
+ : public virtual PortableInterceptor::ClientRequestInterceptor,
+ public virtual TAO_Local_RefCounted_Object
+{
+ // = Client-side echo interceptor. For checking interceptor visually only.
+public:
+
+ Echo_Client_Request_Interceptor (void);
+ // ctor.
+ virtual ~Echo_Client_Request_Interceptor ();
+ // dtor.
+
+ virtual char * name (ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC ((CORBA::SystemException));
+ // Canonical name of the interceptor.
+
+ virtual void destroy (ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+ virtual void send_poll (
+ PortableInterceptor::ClientRequestInfo_ptr
+ ACE_ENV_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+ virtual void send_request (PortableInterceptor::ClientRequestInfo_ptr ri
+ ACE_ENV_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC ((CORBA::SystemException,
+ PortableInterceptor::ForwardRequest));
+
+ virtual void receive_other (
+ PortableInterceptor::ClientRequestInfo_ptr
+ ACE_ENV_ARG_DECL_WITH_DEFAULTS
+ )
+ ACE_THROW_SPEC ((
+ CORBA::SystemException,
+ PortableInterceptor::ForwardRequest
+ ));
+
+ virtual void receive_reply (PortableInterceptor::ClientRequestInfo_ptr ri
+ ACE_ENV_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+ virtual void receive_exception (
+ PortableInterceptor::ClientRequestInfo_ptr ri
+ ACE_ENV_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC ((CORBA::SystemException,
+ PortableInterceptor::ForwardRequest));
+
+ // Some identifiers that are used for error checking
+ static CORBA::ULong client_interceptor_check_;
+private:
+ const char *myname_;
+};
+
+class Echo_Server_Request_Interceptor
+ : public PortableInterceptor::ServerRequestInterceptor,
+ public virtual TAO_Local_RefCounted_Object
+{
+ // = Server-side echo interceptor. For checking interceptor visually only.
+public:
+ Echo_Server_Request_Interceptor (void);
+ // cotr.
+ ~Echo_Server_Request_Interceptor ();
+ // dotr.
+
+ virtual char * name (ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC ((CORBA::SystemException));
+ // Canonical name of the interceptor.
+
+ virtual void destroy (ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+ virtual void receive_request_service_contexts (
+ PortableInterceptor::ServerRequestInfo_ptr
+ ACE_ENV_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC ((
+ CORBA::SystemException,
+ PortableInterceptor::ForwardRequest
+ ));
+
+ virtual void receive_request (PortableInterceptor::ServerRequestInfo_ptr ri
+ ACE_ENV_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC ((CORBA::SystemException,
+ PortableInterceptor::ForwardRequest));
+
+ virtual void send_reply (PortableInterceptor::ServerRequestInfo_ptr ri
+ ACE_ENV_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+ virtual void send_exception (PortableInterceptor::ServerRequestInfo_ptr ri
+ ACE_ENV_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC ((CORBA::SystemException,
+ PortableInterceptor::ForwardRequest));
+
+ virtual void send_other (
+ PortableInterceptor::ServerRequestInfo_ptr
+ ACE_ENV_ARG_DECL_WITH_DEFAULTS
+ )
+ ACE_THROW_SPEC ((
+ CORBA::SystemException,
+ PortableInterceptor::ForwardRequest
+ ));
+
+ // Some identifiers that are used for error checking
+ static CORBA::ULong server_interceptor_check_;
+
+private:
+ const char *myname_;
+};
+
+#if defined (_MSC_VER)
+#pragma warning(pop)
+#endif /* _MSC_VER */
+
+#include /**/ "ace/post.h"
+#endif /* TAO_INTERCEPTORS_H */
diff --git a/TAO/tests/Portable_Interceptors/Processing_Mode_Policy/Collocated/run_test.pl b/TAO/tests/Portable_Interceptors/Processing_Mode_Policy/Collocated/run_test.pl
new file mode 100755
index 00000000000..e877773b96e
--- /dev/null
+++ b/TAO/tests/Portable_Interceptors/Processing_Mode_Policy/Collocated/run_test.pl
@@ -0,0 +1,134 @@
+eval '(exit $?0)' && eval 'exec perl -S $0 ${1+"$@"}'
+ & eval 'exec perl -S $0 $argv:q'
+ if 0;
+
+# $Id$
+# -*- perl -*-
+
+use lib '../../../../../bin';
+use PerlACE::Run_Test;
+
+sub get_test_modes
+{
+ my $testid = shift;
+
+ my $client_mode = "LOCAL_AND_REMOTE";
+ my $server_mode = "LOCAL_AND_REMOTE";
+
+ # There are Nine Permutations.
+ if ($testid == 1)
+ {
+ $client_mode = "LOCAL_AND_REMOTE";
+ $server_mode = "LOCAL_AND_REMOTE";
+ }
+ elsif ($testid == 2)
+ {
+ $client_mode = "LOCAL_AND_REMOTE";
+ $server_mode = "LOCAL_ONLY";
+ }
+ elsif ($testid == 3)
+ {
+ $client_mode = "LOCAL_AND_REMOTE";
+ $server_mode = "REMOTE_ONLY";
+ }
+ elsif ($testid == 4)
+ {
+ $client_mode = "LOCAL_ONLY";
+ $server_mode = "LOCAL_AND_REMOTE";
+ }
+ elsif ($testid == 5)
+ {
+ $client_mode = "LOCAL_ONLY";
+ $server_mode = "LOCAL_ONLY";
+ }
+ elsif ($testid == 6)
+ {
+ $client_mode = "LOCAL_ONLY";
+ $server_mode = "REMOTE_ONLY";
+ }
+ elsif ($testid == 7)
+ {
+ $client_mode = "REMOTE_ONLY";
+ $server_mode = "LOCAL_AND_REMOTE";
+ }
+ elsif ($testid == 8)
+ {
+ $client_mode = "REMOTE_ONLY";
+ $server_mode = "LOCAL_ONLY";
+ }
+ elsif ($testid == 9)
+ {
+ $client_mode = "REMOTE_ONLY";
+ $server_mode = "REMOTE_ONLY";
+ }
+ else
+ {
+ print STDERR "ERROR: invalid testid: $testid\n";
+ exit 1;
+ }
+
+ return ($client_mode, $server_mode);
+}
+
+my $status = 0;
+my $file = PerlACE::LocalFile ("test.ior");
+
+my $testid;
+
+for ($testid = 1; $testid <= 9; ++$testid)
+{
+ unlink $file;
+
+ my $client_mode;
+ my $server_mode;
+
+ ($client_mode, $server_mode) = get_test_modes($testid);
+
+ my $SV;
+ if (PerlACE::is_vxworks_test()) {
+ $SV = new PerlACE::ProcessVX ("PI_ProcMode_Collocated_Test",
+ "-c $client_mode " .
+ "-s $server_mode " .
+ "-ORBobjrefstyle url");
+ }
+ else {
+ $SV = new PerlACE::Process ("PI_ProcMode_Collocated_Test",
+ "-c $client_mode " .
+ "-s $server_mode " .
+ "-ORBobjrefstyle url");
+ }
+
+ print STDERR "\n\n==== Starting test variant #$testid\n\n";
+
+ $SV->Spawn ();
+
+ if (PerlACE::waitforfile_timed ($file, 15) == -1) {
+ print STDERR "ERROR: cannot find file <$file>\n";
+ $SV->Kill ();
+ exit 1;
+ }
+
+ my $collocated = $SV->WaitKill (5);
+
+ if ($collocated != 0) {
+ print STDERR "ERROR: PI_ProcMode_Collocated_Test returned $collocated\n";
+ print STDERR "ERROR: For client-side mode [$client_mode],\n";
+ print STDERR "ERROR: and server-side mode [$server_mode].\n";
+ $status = 1;
+ print STDERR "\nTest variant #$testid of 9 failed!\n\n";
+ }
+ else {
+ print STDERR "\nTest variant #$testid of 9 passed!\n\n";
+ }
+}
+
+unlink $file;
+
+if ($status == 0) {
+ print STDERR "\n==== All 9 test variants were successful!\n";
+}
+else {
+ print STDERR "\n==== One or more of the 9 test variants failed!\n";
+}
+
+exit $status;
diff --git a/TAO/tests/Portable_Interceptors/Processing_Mode_Policy/Collocated/test.idl b/TAO/tests/Portable_Interceptors/Processing_Mode_Policy/Collocated/test.idl
new file mode 100644
index 00000000000..07ed4dee088
--- /dev/null
+++ b/TAO/tests/Portable_Interceptors/Processing_Mode_Policy/Collocated/test.idl
@@ -0,0 +1,42 @@
+// $Id$
+
+// ============================================================================
+//
+// = LIBRARY
+// TAO/tests/Portable_Interceptors
+//
+// = FILENAME
+// test.idl
+//
+// = DESCRIPTION
+// Simple IDL file to test portable interceptor support.
+//
+// = AUTHORS
+// Nanbor Wang <nanbor@cs.wustl.edu>
+//
+// ============================================================================
+
+module Test_Interceptors
+{
+ exception Silly
+ {};
+
+ interface Visual
+ {
+ void normal (in long arg);
+ // Normal operation.
+
+ long calculate (in long one, in long two);
+ // Normal operation with a return val.
+
+ void user ()
+ raises (Silly);
+ // throws a user exception.
+
+ void system ();
+ // thows a system exception.
+
+ oneway void shutdown ();
+ // shutdown the ORB
+ };
+};
diff --git a/TAO/tests/Portable_Interceptors/Processing_Mode_Policy/Collocated/test_i.cpp b/TAO/tests/Portable_Interceptors/Processing_Mode_Policy/Collocated/test_i.cpp
new file mode 100644
index 00000000000..31585a94528
--- /dev/null
+++ b/TAO/tests/Portable_Interceptors/Processing_Mode_Policy/Collocated/test_i.cpp
@@ -0,0 +1,60 @@
+// $Id$
+
+#include "test_i.h"
+#include "ace/OS_NS_unistd.h"
+
+ACE_RCSID(Dynamic, test_i, "$Id$")
+
+Visual_i::Visual_i (CORBA::ORB_ptr orb)
+ : orb_ (CORBA::ORB::_duplicate (orb))
+{
+}
+ // ctor
+
+void
+Visual_i::normal (CORBA::Long
+ ACE_ENV_ARG_DECL_NOT_USED)
+ ACE_THROW_SPEC ((CORBA::SystemException))
+{
+ // ACE_DEBUG ((LM_DEBUG, "Visual::normal called with %d\n", arg));
+}
+
+CORBA::Long
+Visual_i::calculate (CORBA::Long one,
+ CORBA::Long two
+ ACE_ENV_ARG_DECL_NOT_USED)
+ ACE_THROW_SPEC ((CORBA::SystemException))
+{
+ // ACE_DEBUG ((LM_DEBUG, "Visual::calculate\n"));
+ return (one + two);
+}
+
+void
+Visual_i::user (ACE_ENV_SINGLE_ARG_DECL)
+ ACE_THROW_SPEC ((CORBA::SystemException,Test_Interceptors::Silly))
+{
+ // ACE_DEBUG ((LM_DEBUG, "Visual::user, throwning Silly\n"));
+ ACE_THROW (Test_Interceptors::Silly ());
+}
+
+void
+Visual_i::system (ACE_ENV_SINGLE_ARG_DECL)
+ ACE_THROW_SPEC ((CORBA::SystemException))
+{
+ // ACE_DEBUG ((LM_DEBUG, "Visual::user, throwing INV_OBJREF\n"));
+ ACE_THROW (CORBA::INV_OBJREF ());
+}
+
+void
+Visual_i::shutdown (ACE_ENV_SINGLE_ARG_DECL)
+ ACE_THROW_SPEC ((CORBA::SystemException))
+{
+ this->_remove_ref (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK;
+
+ // Give the client thread time to return from the collocated
+ // call to this method before shutting down the ORB. We sleep
+ // to avoid BAD_INV_ORDER exceptions on fast dual processor machines.
+ ACE_OS::sleep(1);
+ this->orb_->shutdown ();
+}
diff --git a/TAO/tests/Portable_Interceptors/Processing_Mode_Policy/Collocated/test_i.h b/TAO/tests/Portable_Interceptors/Processing_Mode_Policy/Collocated/test_i.h
new file mode 100644
index 00000000000..f31756fb10a
--- /dev/null
+++ b/TAO/tests/Portable_Interceptors/Processing_Mode_Policy/Collocated/test_i.h
@@ -0,0 +1,54 @@
+// $Id$
+
+// ============================================================================
+//
+// = LIBRARY
+// TAO/tests/Portable_Interceptors/Dynamic
+//
+// = FILENAME
+// test_i.h
+//
+// = AUTHOR
+// Nanbor Wang
+//
+// ============================================================================
+
+#ifndef TAO_INTERCEPTOR_TEST_I_H
+#define TAO_INTERCEPTOR_TEST_I_H
+
+#include "testS.h"
+
+class Visual_i : public POA_Test_Interceptors::Visual
+{
+ // = DESCRIPTION
+ // Implements the Visual interface in test.idl
+
+public:
+ Visual_i (CORBA::ORB_ptr orb);
+ // ctor
+
+ void normal (CORBA::Long arg
+ ACE_ENV_ARG_DECL_NOT_USED)
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+ CORBA::Long calculate (
+ CORBA::Long one,
+ CORBA::Long two
+ ACE_ENV_ARG_DECL_NOT_USED)
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+ void user (ACE_ENV_SINGLE_ARG_DECL_NOT_USED)
+ ACE_THROW_SPEC ((CORBA::SystemException,Test_Interceptors::Silly));
+
+ void system (ACE_ENV_SINGLE_ARG_DECL_NOT_USED)
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+ void shutdown (ACE_ENV_SINGLE_ARG_DECL_NOT_USED)
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+private:
+ CORBA::ORB_var orb_;
+ // The ORB pointer (for shutdown.)
+};
+
+#endif /* TAO_INTERCEPTOR_TEST_I_H */
diff --git a/TAO/tests/Portable_Interceptors/Processing_Mode_Policy/Remote/Client_Task.cpp b/TAO/tests/Portable_Interceptors/Processing_Mode_Policy/Remote/Client_Task.cpp
new file mode 100644
index 00000000000..0990fd47209
--- /dev/null
+++ b/TAO/tests/Portable_Interceptors/Processing_Mode_Policy/Remote/Client_Task.cpp
@@ -0,0 +1,98 @@
+//
+// $Id$
+//
+
+#include "Client_Task.h"
+#include "testC.h"
+#include "client_interceptor.h"
+
+ACE_RCSID(Remote, Client_Task, "$Id$")
+
+Client_Task::Client_Task (const char *ior,
+ CORBA::ORB_ptr corb,
+ ACE_Thread_Manager *thr_mgr)
+ : ACE_Task_Base (thr_mgr)
+ , input_ (ior)
+ , corb_ (CORBA::ORB::_duplicate (corb))
+
+{
+}
+
+int
+Client_Task::svc (void)
+{
+ ACE_TRY_NEW_ENV
+ {
+
+ CORBA::Object_var object =
+ corb_->string_to_object (input_ ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ Test_Interceptors::Visual_var server =
+ Test_Interceptors::Visual::_narrow (object.in () ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ if (CORBA::is_nil (server.in ()))
+ {
+ ACE_ERROR_RETURN ((LM_ERROR,
+ "Object reference <%s> is nil\n",
+ this->input_),
+ 1);
+ }
+
+ run_test (server.in () ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ server->shutdown (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+ }
+ ACE_CATCHANY
+ {
+ ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION,
+ "Exception caught in client task:");
+ return 1;
+ }
+ ACE_ENDTRY;
+
+ return 0;
+
+}
+
+
+void
+Client_Task::run_test (Test_Interceptors::Visual_ptr server
+ ACE_ENV_ARG_DECL)
+{
+ server->normal (10 ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK;
+
+ CORBA::Long one = 1, two = 1;
+ (void) server->calculate (one,
+ two
+ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK;
+
+ ACE_TRY
+ {
+ (void) server->user (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+ }
+ ACE_CATCH (Test_Interceptors::Silly, userex)
+ {
+ ACE_DEBUG ((LM_DEBUG, "As expected, Caught Silly\n"));
+ }
+ ACE_ENDTRY;
+ ACE_CHECK;
+
+ ACE_TRY_EX (SYS)
+ {
+ server->system (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_TRY_CHECK_EX (SYS);
+ }
+ ACE_CATCH (CORBA::INV_OBJREF, sysex)
+ {
+ ACE_DEBUG ((LM_DEBUG, "As expected, Caught CORBA::INV_OBJREF\n"));
+ }
+ ACE_ENDTRY;
+ ACE_CHECK;
+}
diff --git a/TAO/tests/Portable_Interceptors/Processing_Mode_Policy/Remote/Client_Task.h b/TAO/tests/Portable_Interceptors/Processing_Mode_Policy/Remote/Client_Task.h
new file mode 100644
index 00000000000..3678e806775
--- /dev/null
+++ b/TAO/tests/Portable_Interceptors/Processing_Mode_Policy/Remote/Client_Task.h
@@ -0,0 +1,45 @@
+//
+// $Id$
+//
+
+#ifndef TEST_CLIENT_TASK_H
+#define TEST_CLIENT_TASK_H
+#include /**/ "ace/pre.h"
+#include "ace/Task.h"
+#include "testS.h"
+
+#if !defined (ACE_LACKS_PRAGMA_ONCE)
+# pragma once
+#endif /* ACE_LACKS_PRAGMA_ONCE */
+#include "tao/ORB.h"
+
+
+/// Implement a Task to run the client as a thread
+class Client_Task : public ACE_Task_Base
+{
+public:
+
+ /// Constructor
+ Client_Task (const char *input,
+ CORBA::ORB_ptr corb,
+ ACE_Thread_Manager *thr_mgr);
+
+ /// Thread entry point
+ int svc (void);
+
+ void run_test (Test_Interceptors::Visual_ptr server
+ ACE_ENV_ARG_DECL);
+
+ /// The status of the svc loop
+ int status (void) const;
+
+private:
+ const char *input_;
+
+ CORBA::ORB_var corb_;
+
+ int status_;
+};
+
+#include /**/ "ace/post.h"
+#endif /* TEST_CLIENT_TASK_H */
diff --git a/TAO/tests/Portable_Interceptors/Processing_Mode_Policy/Remote/Echo_Client_ORBInitializer.cpp b/TAO/tests/Portable_Interceptors/Processing_Mode_Policy/Remote/Echo_Client_ORBInitializer.cpp
new file mode 100644
index 00000000000..15751d6f087
--- /dev/null
+++ b/TAO/tests/Portable_Interceptors/Processing_Mode_Policy/Remote/Echo_Client_ORBInitializer.cpp
@@ -0,0 +1,90 @@
+// -*- C++ -*-
+//
+// $Id$
+
+#include "Echo_Client_ORBInitializer.h"
+#include "client_interceptor.h"
+#include "tao/PI/ORBInitInfo.h"
+#include "tao/ORB_Core.h"
+#include "ace/OS_NS_string.h"
+
+Echo_Client_ORBInitializer::Echo_Client_ORBInitializer (
+ PortableInterceptor::ProcessingMode proc_mode)
+ : processing_mode_(proc_mode)
+{
+}
+
+void
+Echo_Client_ORBInitializer::pre_init (
+ PortableInterceptor::ORBInitInfo_ptr
+ ACE_ENV_ARG_DECL_NOT_USED)
+ ACE_THROW_SPEC ((CORBA::SystemException))
+{
+}
+
+void
+Echo_Client_ORBInitializer::post_init (
+ PortableInterceptor::ORBInitInfo_ptr info
+ ACE_ENV_ARG_DECL)
+ ACE_THROW_SPEC ((CORBA::SystemException))
+{
+ // TAO-Specific way to get to the ORB Core (and thus, the ORB).
+ TAO_ORBInitInfo_var tao_info =
+ TAO_ORBInitInfo::_narrow (info
+ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK;
+
+ CORBA::ORB_var orb = CORBA::ORB::_duplicate(tao_info->orb_core()->orb());
+
+ if (CORBA::is_nil(orb.in()))
+ {
+ ACE_THROW (CORBA::INTERNAL ());
+ ACE_CHECK;
+ }
+
+ PortableInterceptor::ORBInitInfo_3_1_var info_3_1 =
+ PortableInterceptor::ORBInitInfo_3_1::_narrow(info
+ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK;
+
+ if (CORBA::is_nil(info_3_1.in()))
+ {
+ ACE_THROW (CORBA::INTERNAL ());
+ ACE_CHECK;
+ }
+
+ PortableInterceptor::ClientRequestInterceptor_ptr interceptor =
+ PortableInterceptor::ClientRequestInterceptor::_nil ();
+
+ // Install the Echo client request interceptor
+ ACE_NEW_THROW_EX (interceptor,
+ Echo_Client_Request_Interceptor,
+ CORBA::NO_MEMORY ());
+ ACE_CHECK;
+
+ PortableInterceptor::ClientRequestInterceptor_var
+ client_interceptor = interceptor;
+
+ CORBA::Any client_proc_mode_as_any;
+ client_proc_mode_as_any <<= this->processing_mode_;
+
+ CORBA::PolicyList policy_list (1);
+
+ policy_list.length (1);
+ policy_list[0] =
+ orb->create_policy (PortableInterceptor::PROCESSING_MODE_POLICY_TYPE,
+ client_proc_mode_as_any
+ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK;
+
+ info_3_1->add_client_request_interceptor_with_policy (
+ client_interceptor.in (),
+ policy_list
+ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK;
+
+ policy_list[0]->destroy (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK;
+ policy_list[0] = CORBA::Policy::_nil ();
+}
+
diff --git a/TAO/tests/Portable_Interceptors/Processing_Mode_Policy/Remote/Echo_Client_ORBInitializer.h b/TAO/tests/Portable_Interceptors/Processing_Mode_Policy/Remote/Echo_Client_ORBInitializer.h
new file mode 100644
index 00000000000..58506555153
--- /dev/null
+++ b/TAO/tests/Portable_Interceptors/Processing_Mode_Policy/Remote/Echo_Client_ORBInitializer.h
@@ -0,0 +1,58 @@
+// -*- C++ -*-
+//
+// $Id$
+
+#ifndef TAO_ECHO_CLIENT_ORB_INITIALIZER_H
+#define TAO_ECHO_CLIENT_ORB_INITIALIZER_H
+
+#include /**/ "ace/pre.h"
+
+#include "tao/orbconf.h"
+
+#if !defined (ACE_LACKS_PRAGMA_ONCE)
+# pragma once
+#endif /* ACE_LACKS_PRAGMA_ONCE */
+
+
+#include "tao/PI/PI.h"
+#include "tao/PI/ProcessingModePolicyC.h"
+#include "tao/LocalObject.h"
+
+// This is to remove "inherits via dominance" warnings from MSVC.
+// MSVC is being a little too paranoid.
+#if defined(_MSC_VER)
+#pragma warning(push)
+#pragma warning(disable:4250)
+#endif /* _MSC_VER */
+
+/// Echo client ORB initializer.
+class Echo_Client_ORBInitializer :
+ public virtual PortableInterceptor::ORBInitializer,
+ public virtual TAO_Local_RefCounted_Object
+{
+public:
+
+ Echo_Client_ORBInitializer
+ (PortableInterceptor::ProcessingMode proc_mode);
+
+ virtual void pre_init (PortableInterceptor::ORBInitInfo_ptr info
+ ACE_ENV_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+ virtual void post_init (PortableInterceptor::ORBInitInfo_ptr info
+ ACE_ENV_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+private:
+
+ PortableInterceptor::ProcessingMode processing_mode_;
+};
+
+#if defined (_MSC_VER)
+#pragma warning(pop)
+#endif /* _MSC_VER */
+
+
+#include /**/ "ace/post.h"
+
+#endif /* TAO_ECHO_CLIENT_ORB_INITIALIZER_H */
diff --git a/TAO/tests/Portable_Interceptors/Processing_Mode_Policy/Remote/Echo_Server_ORBInitializer.cpp b/TAO/tests/Portable_Interceptors/Processing_Mode_Policy/Remote/Echo_Server_ORBInitializer.cpp
new file mode 100644
index 00000000000..9136e25e126
--- /dev/null
+++ b/TAO/tests/Portable_Interceptors/Processing_Mode_Policy/Remote/Echo_Server_ORBInitializer.cpp
@@ -0,0 +1,94 @@
+// -*- C++ -*-
+//
+// $Id$
+
+#include "Echo_Server_ORBInitializer.h"
+#include "server_interceptor.h"
+#include "tao/PI/ORBInitInfo.h"
+#include "tao/ORB_Core.h"
+#include "ace/OS_NS_string.h"
+
+Echo_Server_ORBInitializer::Echo_Server_ORBInitializer (
+ PortableInterceptor::ProcessingMode proc_mode)
+ : processing_mode_(proc_mode)
+{
+}
+
+void
+Echo_Server_ORBInitializer::pre_init (
+ PortableInterceptor::ORBInitInfo_ptr
+ ACE_ENV_ARG_DECL_NOT_USED)
+ ACE_THROW_SPEC ((CORBA::SystemException))
+{
+}
+
+void
+Echo_Server_ORBInitializer::post_init (
+ PortableInterceptor::ORBInitInfo_ptr info
+ ACE_ENV_ARG_DECL)
+ ACE_THROW_SPEC ((CORBA::SystemException))
+{
+ CORBA::String_var orb_id =
+ info->orb_id (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK;
+
+ // TAO-Specific way to get to the ORB Core (and thus, the ORB).
+ TAO_ORBInitInfo_var tao_info =
+ TAO_ORBInitInfo::_narrow (info
+ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK;
+
+ CORBA::ORB_var orb = CORBA::ORB::_duplicate(tao_info->orb_core()->orb());
+
+ if (CORBA::is_nil(orb.in()))
+ {
+ ACE_THROW (CORBA::INTERNAL ());
+ ACE_CHECK;
+ }
+
+ PortableInterceptor::ORBInitInfo_3_1_var info_3_1 =
+ PortableInterceptor::ORBInitInfo_3_1::_narrow(info
+ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK;
+
+ if (CORBA::is_nil(info_3_1.in()))
+ {
+ ACE_THROW (CORBA::INTERNAL ());
+ ACE_CHECK;
+ }
+
+ PortableInterceptor::ServerRequestInterceptor_ptr interceptor =
+ PortableInterceptor::ServerRequestInterceptor::_nil ();
+
+ // Install the Echo server request interceptor
+ ACE_NEW_THROW_EX (interceptor,
+ Echo_Server_Request_Interceptor,
+ CORBA::NO_MEMORY ());
+ ACE_CHECK;
+
+ PortableInterceptor::ServerRequestInterceptor_var
+ server_interceptor = interceptor;
+
+ CORBA::Any proc_mode_as_any;
+ proc_mode_as_any <<= this->processing_mode_;
+
+ CORBA::PolicyList policy_list (1);
+
+ policy_list.length (1);
+ policy_list[0] =
+ orb->create_policy (PortableInterceptor::PROCESSING_MODE_POLICY_TYPE,
+ proc_mode_as_any
+ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK;
+
+ info_3_1->add_server_request_interceptor_with_policy (
+ server_interceptor.in (),
+ policy_list
+ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK;
+
+ policy_list[0]->destroy (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK;
+ policy_list[0] = CORBA::Policy::_nil ();
+}
+
diff --git a/TAO/tests/Portable_Interceptors/Processing_Mode_Policy/Remote/Echo_Server_ORBInitializer.h b/TAO/tests/Portable_Interceptors/Processing_Mode_Policy/Remote/Echo_Server_ORBInitializer.h
new file mode 100644
index 00000000000..f3af07cc4ae
--- /dev/null
+++ b/TAO/tests/Portable_Interceptors/Processing_Mode_Policy/Remote/Echo_Server_ORBInitializer.h
@@ -0,0 +1,57 @@
+// -*- C++ -*-
+//
+// $Id$
+
+#ifndef TAO_ECHO_SERVER_ORB_INITIALIZER_H
+#define TAO_ECHO_SERVER_ORB_INITIALIZER_H
+
+#include /**/ "ace/pre.h"
+
+#include "tao/orbconf.h"
+
+#if !defined (ACE_LACKS_PRAGMA_ONCE)
+# pragma once
+#endif /* ACE_LACKS_PRAGMA_ONCE */
+
+#include "tao/PI/PI.h"
+#include "tao/PI/ProcessingModePolicyC.h"
+#include "tao/LocalObject.h"
+
+// This is to remove "inherits via dominance" warnings from MSVC.
+// MSVC is being a little too paranoid.
+#if defined(_MSC_VER)
+#pragma warning(push)
+#pragma warning(disable:4250)
+#endif /* _MSC_VER */
+
+/// Echo client ORB initializer.
+class Echo_Server_ORBInitializer :
+ public virtual PortableInterceptor::ORBInitializer,
+ public virtual TAO_Local_RefCounted_Object
+{
+public:
+
+ Echo_Server_ORBInitializer
+ (PortableInterceptor::ProcessingMode proc_mode);
+
+ virtual void pre_init (PortableInterceptor::ORBInitInfo_ptr info
+ ACE_ENV_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+ virtual void post_init (PortableInterceptor::ORBInitInfo_ptr info
+ ACE_ENV_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+private:
+
+ PortableInterceptor::ProcessingMode processing_mode_;
+};
+
+#if defined (_MSC_VER)
+#pragma warning(pop)
+#endif /* _MSC_VER */
+
+
+#include /**/ "ace/post.h"
+
+#endif /* TAO_ECHO_SERVER_ORB_INITIALIZER_H */
diff --git a/TAO/tests/Portable_Interceptors/Processing_Mode_Policy/Remote/PI_ProcMode_Remote.mpc b/TAO/tests/Portable_Interceptors/Processing_Mode_Policy/Remote/PI_ProcMode_Remote.mpc
new file mode 100644
index 00000000000..deab03af74f
--- /dev/null
+++ b/TAO/tests/Portable_Interceptors/Processing_Mode_Policy/Remote/PI_ProcMode_Remote.mpc
@@ -0,0 +1,26 @@
+// -*- MPC -*-
+// $Id$
+
+project(*RemoteServer): taoserver, pi_server, interceptors {
+ exename = PI_ProcMode_Remote_TestServer
+ Source_Files {
+ testC.cpp
+ testS.cpp
+ test_i.cpp
+ server_interceptor.cpp
+ Echo_Server_ORBInitializer.cpp
+ server_main.cpp
+ Server_Task.cpp
+ }
+}
+
+project(*RemoteClient): taoclient, portableserver, pi, interceptors {
+ exename = PI_ProcMode_Remote_TestClient
+ Source_Files {
+ testC.cpp
+ client_interceptor.cpp
+ Echo_Client_ORBInitializer.cpp
+ client_main.cpp
+ Client_Task.cpp
+ }
+}
diff --git a/TAO/tests/Portable_Interceptors/Processing_Mode_Policy/Remote/Server_Task.cpp b/TAO/tests/Portable_Interceptors/Processing_Mode_Policy/Remote/Server_Task.cpp
new file mode 100644
index 00000000000..7fbab820892
--- /dev/null
+++ b/TAO/tests/Portable_Interceptors/Processing_Mode_Policy/Remote/Server_Task.cpp
@@ -0,0 +1,112 @@
+//
+// $Id$
+//
+#include "Server_Task.h"
+#include "test_i.h"
+#include "server_interceptor.h"
+
+#include "ace/Manual_Event.h"
+
+ACE_RCSID(Remote,
+ Server_Task,
+ "$Id$")
+
+
+Server_Task::Server_Task (const char *output,
+ CORBA::ORB_ptr sorb,
+ ACE_Manual_Event &me,
+ ACE_Thread_Manager *thr_mgr)
+ : ACE_Task_Base (thr_mgr)
+ , output_ (output)
+ , me_ (me)
+ , sorb_ (CORBA::ORB::_duplicate (sorb))
+{
+}
+
+int
+Server_Task::svc (void)
+{
+ ACE_TRY_NEW_ENV
+ {
+
+ CORBA::Object_var poa_object =
+ sorb_->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;
+
+ poa_manager->activate (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ Visual_i * server_impl = 0;
+ ACE_NEW_RETURN (server_impl, Visual_i (sorb_.in ()), 1);
+
+ PortableServer::ObjectId_var id =
+ root_poa->activate_object (server_impl
+ ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ CORBA::Object_var test_obj =
+ root_poa->id_to_reference (id.in ()
+ ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ Test_Interceptors::Visual_var server =
+ Test_Interceptors::Visual::_narrow (test_obj.in ()
+ ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ CORBA::String_var ior =
+ this->sorb_->object_to_string (server.in () ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ ACE_DEBUG ((LM_DEBUG, "Test_Interceptors::Visual: <%s>\n", ior.in ()));
+
+ // If the ior_output_file exists, output the ior to it
+ if (output_ != 0)
+ {
+ FILE *output_file= ACE_OS::fopen (this->output_, "w");
+ if (output_file == 0)
+ ACE_ERROR_RETURN ((LM_ERROR,
+ "Cannot open output file for writing IOR: %s",
+ this->output_),
+ 1);
+ ACE_OS::fprintf (output_file, "%s", ior.in ());
+ ACE_OS::fclose (output_file);
+ }
+
+ // Signal the main thread before we call orb->run ();
+ this->me_.signal ();
+
+ this->sorb_->run (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ ACE_DEBUG ((LM_DEBUG, "event loop finished\n"));
+
+ root_poa->destroy (1, 1 ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ this->sorb_->destroy (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+ }
+ ACE_CATCHANY
+ {
+ ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION,
+ "Exception caught in server task:");
+ return 1;
+ }
+ ACE_ENDTRY;
+
+ return 0;
+}
diff --git a/TAO/tests/Portable_Interceptors/Processing_Mode_Policy/Remote/Server_Task.h b/TAO/tests/Portable_Interceptors/Processing_Mode_Policy/Remote/Server_Task.h
new file mode 100644
index 00000000000..6b7b9404bd5
--- /dev/null
+++ b/TAO/tests/Portable_Interceptors/Processing_Mode_Policy/Remote/Server_Task.h
@@ -0,0 +1,53 @@
+// -*- C++ -*-
+//
+// $Id$
+
+#ifndef TEST_SERVER_TASK_H
+#define TEST_SERVER_TASK_H
+
+#include /**/ "ace/pre.h"
+
+#include "ace/Task.h"
+
+#if !defined (ACE_LACKS_PRAGMA_ONCE)
+# pragma once
+#endif /* ACE_LACKS_PRAGMA_ONCE */
+
+#include "tao/ORB.h"
+
+ACE_BEGIN_VERSIONED_NAMESPACE_DECL
+class ACE_Manual_Event;
+ACE_END_VERSIONED_NAMESPACE_DECL
+
+/// Implement a Task to run the server in a single thread
+class Server_Task : public ACE_Task_Base
+{
+public:
+ /// Constructor
+ Server_Task (const char *output,
+ CORBA::ORB_ptr sorb,
+ ACE_Manual_Event &me,
+ ACE_Thread_Manager *thr_mgr);
+
+ /// Thread entry point
+ int svc (void);
+
+ /// The status of the svc loop
+ int status (void) const;
+
+private:
+ /// Output file for IOR
+ const char *output_;
+
+ /// Manual event to wake up the main thread to create a client
+ /// thread.
+ ACE_Manual_Event &me_;
+
+ CORBA::ORB_var sorb_;
+
+ int status_;
+};
+
+#include /**/ "ace/post.h"
+
+#endif /* COLLOCATED_SERVER_TASK_H */
diff --git a/TAO/tests/Portable_Interceptors/Processing_Mode_Policy/Remote/client_interceptor.cpp b/TAO/tests/Portable_Interceptors/Processing_Mode_Policy/Remote/client_interceptor.cpp
new file mode 100644
index 00000000000..399025fa883
--- /dev/null
+++ b/TAO/tests/Portable_Interceptors/Processing_Mode_Policy/Remote/client_interceptor.cpp
@@ -0,0 +1,184 @@
+// $Id$
+
+#include "client_interceptor.h"
+#include "tao/AnyTypeCode/AnyTypeCode_Adapter_Impl.h"
+#include "tao/AnyTypeCode/DynamicC.h"
+#include "tao/AnyTypeCode/TypeCode.h"
+#include "ace/Log_Msg.h"
+#include "ace/OS_NS_string.h"
+
+ACE_RCSID (Remote,
+ client_interceptor,
+ "$Id$")
+
+const char *request_msg = "The Echo_Client_Request_Interceptor request message";
+const char *reply_msg = "The Echo_Client_Request_Interceptor reply message";
+CORBA::ULong Echo_Client_Request_Interceptor::client_interceptor_check_ = 0;
+
+Echo_Client_Request_Interceptor::Echo_Client_Request_Interceptor (void)
+ : myname_ ("Echo_Client_Interceptor")
+{
+}
+
+Echo_Client_Request_Interceptor::~Echo_Client_Request_Interceptor ()
+{
+}
+
+char *
+Echo_Client_Request_Interceptor::name (ACE_ENV_SINGLE_ARG_DECL_NOT_USED)
+ ACE_THROW_SPEC ((CORBA::SystemException))
+{
+ return CORBA::string_dup (this->myname_);
+}
+
+void
+Echo_Client_Request_Interceptor::destroy (ACE_ENV_SINGLE_ARG_DECL_NOT_USED)
+ ACE_THROW_SPEC ((CORBA::SystemException))
+{
+}
+
+void
+Echo_Client_Request_Interceptor::send_poll (
+ PortableInterceptor::ClientRequestInfo_ptr
+ ACE_ENV_ARG_DECL_NOT_USED
+ )
+ ACE_THROW_SPEC ((CORBA::SystemException))
+{
+ // Do nothing
+}
+
+void
+Echo_Client_Request_Interceptor::send_request (
+ PortableInterceptor::ClientRequestInfo_ptr ri
+ ACE_ENV_ARG_DECL)
+ ACE_THROW_SPEC ((CORBA::SystemException,
+ PortableInterceptor::ForwardRequest))
+{
+ client_interceptor_check_++;
+
+ CORBA::String_var op =
+ ri->operation (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK;
+
+ ACE_DEBUG ((LM_DEBUG,
+ "Echo_Client_Request_Interceptor::send_request\n"));
+
+ ACE_DEBUG ((LM_DEBUG,
+ "Echo_Client_Request_Interceptor::send_request from "
+ "\"%s\"\n",
+ op.in ()));
+
+ if (ACE_OS::strcmp (op.in (), "normal") == 0)
+ {
+ Dynamic::ParameterList_var paramlist =
+ ri->arguments (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK;
+
+ CORBA::Long param;
+ CORBA::ULong i = 0; // index -- explicitly used to avoid
+ // overloaded operator ambiguity.
+ paramlist[i].argument >>= param;
+
+ ACE_DEBUG ((LM_DEBUG,
+ "The arg is %d\n",
+ param));
+ }
+}
+
+void
+Echo_Client_Request_Interceptor::receive_other (
+ PortableInterceptor::ClientRequestInfo_ptr ri
+ ACE_ENV_ARG_DECL)
+ ACE_THROW_SPEC ((CORBA::SystemException,
+ PortableInterceptor::ForwardRequest))
+{
+ client_interceptor_check_++;
+
+ CORBA::String_var op = ri->operation (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK;
+
+ ACE_DEBUG ((LM_DEBUG,
+ "Echo_Client_Request_Interceptor::receive_other "
+ "from \"%s\"\n",
+ op.in ()));
+}
+
+void
+Echo_Client_Request_Interceptor::receive_reply (
+ PortableInterceptor::ClientRequestInfo_ptr ri
+ ACE_ENV_ARG_DECL)
+ ACE_THROW_SPEC ((CORBA::SystemException))
+{
+ client_interceptor_check_++;
+
+ CORBA::String_var op = ri->operation (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK;
+
+ ACE_DEBUG ((LM_DEBUG,
+ "Echo_Client_Request_Interceptor::receive_reply "
+ "from \"%s\"\n",
+ op.in ()));
+
+ if (ACE_OS::strcmp (op.in (), "normal") == 0)
+ {
+ Dynamic::ParameterList_var paramlist =
+ ri->arguments (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK;
+
+ CORBA::Long param;
+ CORBA::ULong i = 0; // index -- explicitly used to avoid
+ // overloaded operator ambiguity.
+ paramlist[i].argument >>= param;
+
+ }
+ else if (ACE_OS::strcmp (op.in (), "calculate") == 0)
+ {
+ Dynamic::ParameterList_var paramlist =
+ ri->arguments (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK;
+
+ CORBA::Long param1, param2, result;
+ CORBA::ULong i = 0; // index -- explicitly used to avoid
+ // overloaded operator ambiguity.
+ paramlist[i++].argument >>= param1;
+ paramlist[i].argument >>= param2;
+
+ CORBA::Any_var result_any = ri->result (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK;
+
+ (result_any.in ()) >>= result;
+
+ ACE_DEBUG ((LM_DEBUG,
+ "The result of calculate is %d + %d = %d\n",
+ param1,
+ param2,
+ result));
+ }
+}
+
+void
+Echo_Client_Request_Interceptor::receive_exception (
+ PortableInterceptor::ClientRequestInfo_ptr ri
+ ACE_ENV_ARG_DECL)
+ ACE_THROW_SPEC ((CORBA::SystemException,
+ PortableInterceptor::ForwardRequest))
+{
+ client_interceptor_check_++;
+
+ CORBA::String_var op = ri->operation (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK;
+
+ CORBA::String_var exception_id =
+ ri->received_exception_id (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK;
+
+ ACE_DEBUG ((LM_DEBUG,
+ "Echo_Client_Request_Interceptor::received_exception "
+ "from \"%s\"\n",
+ op.in ()));
+
+ ACE_DEBUG ((LM_DEBUG,
+ "Exception ID = %s\n",
+ exception_id.in ()));
+}
+
diff --git a/TAO/tests/Portable_Interceptors/Processing_Mode_Policy/Remote/client_interceptor.h b/TAO/tests/Portable_Interceptors/Processing_Mode_Policy/Remote/client_interceptor.h
new file mode 100644
index 00000000000..fc49396097a
--- /dev/null
+++ b/TAO/tests/Portable_Interceptors/Processing_Mode_Policy/Remote/client_interceptor.h
@@ -0,0 +1,81 @@
+// -*- C++ -*-
+//
+// $Id$
+
+#ifndef TAO_CLIENT_INTERCEPTOR_H
+#define TAO_CLIENT_INTERCEPTOR_H
+#include /**/ "ace/pre.h"
+
+#include "tao/PI/PI.h"
+
+#if !defined (ACE_LACKS_PRAGMA_ONCE)
+# pragma once
+#endif /* ACE_LACKS_PRAGMA_ONCE */
+
+#include "tao/LocalObject.h"
+
+#if defined(_MSC_VER)
+#pragma warning(push)
+#pragma warning(disable:4250)
+#endif /* _MSC_VER */
+
+class Echo_Client_Request_Interceptor
+ : public virtual PortableInterceptor::ClientRequestInterceptor,
+ public virtual TAO_Local_RefCounted_Object
+{
+ // = Client-side echo interceptor. For checking interceptor visually only.
+public:
+
+ Echo_Client_Request_Interceptor (void);
+ // ctor.
+ virtual ~Echo_Client_Request_Interceptor ();
+ // dtor.
+
+ virtual char * name (ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC ((CORBA::SystemException));
+ // Canonical name of the interceptor.
+
+ virtual void destroy (ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+ virtual void send_poll (
+ PortableInterceptor::ClientRequestInfo_ptr
+ ACE_ENV_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+ virtual void send_request (PortableInterceptor::ClientRequestInfo_ptr ri
+ ACE_ENV_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC ((CORBA::SystemException,
+ PortableInterceptor::ForwardRequest));
+
+ virtual void receive_other (
+ PortableInterceptor::ClientRequestInfo_ptr
+ ACE_ENV_ARG_DECL_WITH_DEFAULTS
+ )
+ ACE_THROW_SPEC ((
+ CORBA::SystemException,
+ PortableInterceptor::ForwardRequest
+ ));
+
+ virtual void receive_reply (PortableInterceptor::ClientRequestInfo_ptr ri
+ ACE_ENV_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+ virtual void receive_exception (
+ PortableInterceptor::ClientRequestInfo_ptr ri
+ ACE_ENV_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC ((CORBA::SystemException,
+ PortableInterceptor::ForwardRequest));
+
+ // Some identifiers that are used for error checking
+ static CORBA::ULong client_interceptor_check_;
+private:
+ const char *myname_;
+};
+
+#if defined (_MSC_VER)
+#pragma warning(pop)
+#endif /* _MSC_VER */
+
+#include /**/ "ace/post.h"
+#endif /* TAO_CLIENT_INTERCEPTOR_H */
diff --git a/TAO/tests/Portable_Interceptors/Processing_Mode_Policy/Remote/client_main.cpp b/TAO/tests/Portable_Interceptors/Processing_Mode_Policy/Remote/client_main.cpp
new file mode 100644
index 00000000000..78a62bdf25e
--- /dev/null
+++ b/TAO/tests/Portable_Interceptors/Processing_Mode_Policy/Remote/client_main.cpp
@@ -0,0 +1,136 @@
+//$Id$
+#include "Client_Task.h"
+#include "ace/Get_Opt.h"
+#include "ace/Argv_Type_Converter.h"
+#include "ace/SString.h"
+#include "ace/Manual_Event.h"
+#include "Echo_Client_ORBInitializer.h"
+#include "tao/ORBInitializer_Registry.h"
+#include "client_interceptor.h"
+
+const char *input = "file://test.ior";
+
+ACE_CString proc_mode_str;
+
+int
+parse_args (int argc, char *argv[])
+{
+ ACE_Get_Opt get_opts (argc, argv, "p:k:");
+ int c;
+
+ proc_mode_str.set ("LOCAL_AND_REMOTE");
+
+ while ((c = get_opts ()) != -1)
+ {
+ switch (c)
+ {
+ case 'p':
+ proc_mode_str.set (get_opts.opt_arg ());
+ break;
+ case 'k':
+ input = get_opts.opt_arg ();
+ break;
+ case '?':
+ default:
+ return 0;
+ }
+ }
+ // Indicates sucessful parsing of the command line
+ return 0;
+}
+
+int
+main (int argc, char *argv[])
+{
+ if (parse_args (argc,
+ argv) == -1)
+ return -1;
+
+ ACE_DECLARE_NEW_CORBA_ENV;
+ ACE_TRY
+ {
+ PortableInterceptor::ORBInitializer_ptr temp_initializer =
+ PortableInterceptor::ORBInitializer::_nil ();
+
+ // Set up our default expectations.
+ CORBA::ULong expected_interceptor_check = 12;
+
+ PortableInterceptor::ProcessingMode proc_mode =
+ PortableInterceptor::LOCAL_AND_REMOTE;
+
+ if (proc_mode_str == "LOCAL_ONLY")
+ {
+ proc_mode = PortableInterceptor::LOCAL_ONLY;
+ ACE_DEBUG((LM_DEBUG,
+ "Using LOCAL_ONLY for client-side ProcessingMode.\n"));
+
+ // Since all of the calls are remote, setting the client-side
+ // ProcessingMode to LOCAL_ONLY will cause the client request
+ // interceptor to not fire. Thus, we expect 0 calls on the
+ // client interceptor.
+ expected_interceptor_check = 0;
+ }
+ else if (proc_mode_str == "REMOTE_ONLY")
+ {
+ proc_mode = PortableInterceptor::REMOTE_ONLY;
+ ACE_DEBUG((LM_DEBUG,
+ "Using REMOTE_ONLY for client-side ProcessingMode.\n"));
+ }
+ else
+ {
+ ACE_DEBUG((LM_DEBUG,
+ "Using LOCAL_AND_REMOTE for client-side ProcessingMode.\n"));
+ }
+
+ ACE_NEW_RETURN (temp_initializer,
+ Echo_Client_ORBInitializer (proc_mode),
+ -1); // No exceptions yet!
+ PortableInterceptor::ORBInitializer_var orb_initializer =
+ temp_initializer;
+
+ PortableInterceptor::register_orb_initializer (orb_initializer.in ()
+ ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ ACE_Argv_Type_Converter atc (argc, argv);
+ CORBA::ORB_var orb =
+ CORBA::ORB_init (atc.get_argc (),
+ atc.get_TCHAR_argv (),
+ ""
+ ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ Client_Task client_task (input,
+ orb.in (),
+ ACE_Thread_Manager::instance ());
+
+ if (client_task.activate (THR_NEW_LWP | THR_JOINABLE,
+ 1,
+ 1) == -1)
+ {
+ ACE_ERROR ((LM_ERROR, "Error activating client task\n"));
+ }
+
+ ACE_Thread_Manager::instance ()->wait ();
+
+ CORBA::ULong number_called =
+ Echo_Client_Request_Interceptor::client_interceptor_check_;
+
+ if (number_called != expected_interceptor_check)
+ {
+ ACE_ERROR ((LM_ERROR,
+ "(%P|%t) ERROR:Client-Side Interceptors not called "
+ "properly, called %d times, expected %d.\n",
+ number_called, expected_interceptor_check));
+ return 1;
+ }
+ }
+ ACE_CATCHANY
+ {
+ ACE_ERROR ((LM_ERROR,
+ "(%P|%t) ERROR: Some exception was caught in main().\n"));
+ return 1;
+ }
+ ACE_ENDTRY;
+ return 0;
+}
diff --git a/TAO/tests/Portable_Interceptors/Processing_Mode_Policy/Remote/run_test.pl b/TAO/tests/Portable_Interceptors/Processing_Mode_Policy/Remote/run_test.pl
new file mode 100755
index 00000000000..b04af3c2968
--- /dev/null
+++ b/TAO/tests/Portable_Interceptors/Processing_Mode_Policy/Remote/run_test.pl
@@ -0,0 +1,154 @@
+eval '(exit $?0)' && eval 'exec perl -S $0 ${1+"$@"}'
+ & eval 'exec perl -S $0 $argv:q'
+ if 0;
+
+# $Id$
+# -*- perl -*-
+
+use lib '../../../../../bin';
+use PerlACE::Run_Test;
+
+sub get_test_modes
+{
+ my $testid = shift;
+
+ my $client_mode = "LOCAL_AND_REMOTE";
+ my $server_mode = "LOCAL_AND_REMOTE";
+
+ # There are Nine Permutations.
+ if ($testid == 1)
+ {
+ $client_mode = "LOCAL_AND_REMOTE";
+ $server_mode = "LOCAL_AND_REMOTE";
+ }
+ elsif ($testid == 2)
+ {
+ $client_mode = "LOCAL_AND_REMOTE";
+ $server_mode = "LOCAL_ONLY";
+ }
+ elsif ($testid == 3)
+ {
+ $client_mode = "LOCAL_AND_REMOTE";
+ $server_mode = "REMOTE_ONLY";
+ }
+ elsif ($testid == 4)
+ {
+ $client_mode = "LOCAL_ONLY";
+ $server_mode = "LOCAL_AND_REMOTE";
+ }
+ elsif ($testid == 5)
+ {
+ $client_mode = "LOCAL_ONLY";
+ $server_mode = "LOCAL_ONLY";
+ }
+ elsif ($testid == 6)
+ {
+ $client_mode = "LOCAL_ONLY";
+ $server_mode = "REMOTE_ONLY";
+ }
+ elsif ($testid == 7)
+ {
+ $client_mode = "REMOTE_ONLY";
+ $server_mode = "LOCAL_AND_REMOTE";
+ }
+ elsif ($testid == 8)
+ {
+ $client_mode = "REMOTE_ONLY";
+ $server_mode = "LOCAL_ONLY";
+ }
+ elsif ($testid == 9)
+ {
+ $client_mode = "REMOTE_ONLY";
+ $server_mode = "REMOTE_ONLY";
+ }
+ else
+ {
+ print STDERR "ERROR: invalid testid: $testid\n";
+ exit 1;
+ }
+
+ return ($client_mode, $server_mode);
+}
+
+my $status = 0;
+my $file = PerlACE::LocalFile ("test.ior");
+
+my $testid;
+
+for ($testid = 1; $testid <= 9; ++$testid)
+{
+ unlink $file;
+
+ my $client_mode;
+ my $server_mode;
+
+ ($client_mode, $server_mode) = get_test_modes($testid);
+
+ my $SV;
+ if (PerlACE::is_vxworks_test()) {
+ $SV = new PerlACE::ProcessVX ("PI_ProcMode_Remote_TestServer",
+ "-p $server_mode " .
+ "-ORBobjrefstyle url");
+ }
+ else {
+ $SV = new PerlACE::Process ("PI_ProcMode_Remote_TestServer",
+ "-p $server_mode " .
+ "-ORBobjrefstyle url");
+ }
+
+ print STDERR "\n\n==== Starting test variant #$testid\n\n";
+
+ $server = $SV->Spawn ();
+
+ if ($server != 0) {
+ print STDERR "ERROR: server returned $server\n";
+ exit 1;
+ }
+
+ if (PerlACE::waitforfile_timed ($file, 15) == -1) {
+ print STDERR "ERROR: cannot find file <$file>\n";
+ $SV->Kill ();
+ exit 1;
+ }
+
+ my $CLIENT;
+ $CLIENT = new PerlACE::Process ("PI_ProcMode_Remote_TestClient",
+ "-p $client_mode " .
+ "-ORBobjrefstyle url");
+
+ my $client_status = $CLIENT->SpawnWaitKill (5);
+
+ if ($client_status != 0) {
+ print STDERR "ERROR: PI_ProcMode_TestClient returned $client_status\n";
+ print STDERR "ERROR: For client-side mode [$client_mode],\n";
+ print STDERR "ERROR: and server-side mode [$server_mode].\n";
+ $status = 1;
+ }
+
+ my $server_status = $SV->WaitKill (5);
+
+ if ($server_status != 0) {
+ print STDERR "ERROR: PI_ProcMode_TestServer returned $server_status\n";
+ print STDERR "ERROR: For client-side mode [$client_mode],\n";
+ print STDERR "ERROR: and server-side mode [$server_mode].\n";
+ $status = 1;
+ }
+
+ if (($server_status == 0) && ($client_status == 0)) {
+ print STDERR "\n==== Test variant #$testid (of 9) passed!\n";
+ }
+ else {
+ print STDERR "\n==== Test variant #$testid (of 9) failed!\n";
+ }
+}
+
+unlink $file;
+
+if ($status == 0) {
+ print STDERR "\n==== All 9 test variants were successful!\n";
+}
+else {
+ print STDERR "\n==== One or more of the 9 test variants failed!\n";
+}
+
+exit $status;
diff --git a/TAO/tests/Portable_Interceptors/Processing_Mode_Policy/Remote/server_interceptor.cpp b/TAO/tests/Portable_Interceptors/Processing_Mode_Policy/Remote/server_interceptor.cpp
new file mode 100644
index 00000000000..a1928755bec
--- /dev/null
+++ b/TAO/tests/Portable_Interceptors/Processing_Mode_Policy/Remote/server_interceptor.cpp
@@ -0,0 +1,192 @@
+// $Id$
+
+#include "server_interceptor.h"
+#include "tao/AnyTypeCode/AnyTypeCode_Adapter_Impl.h"
+#include "tao/AnyTypeCode/DynamicC.h"
+#include "tao/AnyTypeCode/TypeCode.h"
+#include "ace/Log_Msg.h"
+#include "ace/OS_NS_string.h"
+
+ACE_RCSID (Remote,
+ server_interceptor,
+ "$Id$")
+
+const char *request_msg = "The Echo_Server_Request_Interceptor request message";
+const char *reply_msg = "The Echo_Server_Request_Interceptor reply message";
+CORBA::ULong Echo_Server_Request_Interceptor::server_interceptor_check_ = 0;
+
+Echo_Server_Request_Interceptor::Echo_Server_Request_Interceptor (void)
+ : myname_ ("Echo_Server_Interceptor")
+{
+}
+
+Echo_Server_Request_Interceptor::~Echo_Server_Request_Interceptor ()
+{
+}
+
+char *
+Echo_Server_Request_Interceptor::name (ACE_ENV_SINGLE_ARG_DECL_NOT_USED)
+ ACE_THROW_SPEC ((CORBA::SystemException))
+{
+ return CORBA::string_dup (this->myname_);
+}
+
+void
+Echo_Server_Request_Interceptor::destroy (ACE_ENV_SINGLE_ARG_DECL_NOT_USED)
+ ACE_THROW_SPEC ((CORBA::SystemException))
+{
+}
+
+void
+Echo_Server_Request_Interceptor::receive_request_service_contexts (
+ PortableInterceptor::ServerRequestInfo_ptr
+ ACE_ENV_ARG_DECL_NOT_USED)
+ ACE_THROW_SPEC ((CORBA::SystemException,
+ PortableInterceptor::ForwardRequest))
+{
+}
+
+void
+Echo_Server_Request_Interceptor::receive_request (
+ PortableInterceptor::ServerRequestInfo_ptr ri
+ ACE_ENV_ARG_DECL)
+ ACE_THROW_SPEC ((CORBA::SystemException,
+ PortableInterceptor::ForwardRequest))
+{
+ ++server_interceptor_check_;
+
+ CORBA::String_var op = ri->operation (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK;
+
+ PortableInterceptor::ObjectId_var test_oid =
+ ri->object_id (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK;
+
+ ACE_DEBUG ((LM_DEBUG,
+ "Echo_Server_Request_Interceptor::receive_request from \"%s\"\n",
+ op.in ()));
+
+ if (ACE_OS::strcmp (op.in (), "normal") == 0)
+ {
+ Dynamic::ParameterList_var paramlist =
+ ri->arguments (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK;
+
+ CORBA::Long param;
+ CORBA::ULong i = 0; // index -- explicitly used to avoid
+ // overloaded operator ambiguity.
+ paramlist[i].argument >>= param;
+
+ ACE_DEBUG ((LM_DEBUG,
+ "The arg is %d\n",
+ param));
+
+ }
+
+ CORBA::String_var tmdi =
+ ri->target_most_derived_interface (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK;
+
+ ACE_DEBUG ((LM_DEBUG,
+ "Target most derived interface: %s\n",
+ tmdi.in ()));
+}
+
+void
+Echo_Server_Request_Interceptor::send_reply (
+ PortableInterceptor::ServerRequestInfo_ptr ri
+ ACE_ENV_ARG_DECL)
+ ACE_THROW_SPEC ((CORBA::SystemException))
+{
+ ++server_interceptor_check_;
+
+ CORBA::String_var op = ri->operation (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK;
+
+ ACE_DEBUG ((LM_DEBUG,
+ "Echo_Server_Request_Interceptor::send_reply from \"%s\"\n",
+ op.in ()));
+
+ if (ACE_OS::strcmp (op.in (), "normal") == 0)
+ {
+ Dynamic::ParameterList_var paramlist =
+ ri->arguments (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK;
+
+ CORBA::Long param;
+ CORBA::ULong i = 0; // index -- explicitly used to avoid
+ // overloaded operator ambiguity.
+ paramlist[i].argument >>= param;
+ ACE_DEBUG ((LM_DEBUG,
+ "The arg is %d\n",
+ param));
+ }
+
+ if (ACE_OS::strcmp (op.in (), "calculate") == 0)
+ {
+ Dynamic::ParameterList_var paramlist =
+ ri->arguments (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK;
+
+ CORBA::Long param1, param2, result = 0;
+ CORBA::ULong i = 0; // index -- explicitly used to avoid
+ // overloaded operator ambiguity.
+ paramlist[i++].argument >>= param1;
+ paramlist[i].argument >>= param2;
+
+ CORBA::Any_var result_any = ri->result (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK;
+
+ (result_any.in ()) >>= result;
+
+ ACE_DEBUG ((LM_DEBUG,
+ "The result of calculate is %d + %d = %d\n",
+ param1,
+ param2,
+ result));
+ }
+}
+
+void
+Echo_Server_Request_Interceptor::send_exception (
+ PortableInterceptor::ServerRequestInfo_ptr ri
+ ACE_ENV_ARG_DECL)
+ ACE_THROW_SPEC ((CORBA::SystemException,
+ PortableInterceptor::ForwardRequest))
+{
+ ++server_interceptor_check_;
+
+ CORBA::String_var op = ri->operation (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK;
+
+ ACE_DEBUG ((LM_DEBUG,
+ "Echo_Server_Request_Interceptor::send_exception "
+ "from \"%s\"\n",
+ op.in ()));
+
+
+ CORBA::Any_var any =
+ ri->sending_exception (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK;
+
+ CORBA::TypeCode_var type = any->type ();
+
+ const char *exception_id = type->id (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK;
+
+ ACE_DEBUG ((LM_DEBUG,
+ "Exception ID = %s\n",
+ exception_id));
+}
+
+void
+Echo_Server_Request_Interceptor::send_other (
+ PortableInterceptor::ServerRequestInfo_ptr
+ ACE_ENV_ARG_DECL_NOT_USED)
+ ACE_THROW_SPEC ((CORBA::SystemException,
+ PortableInterceptor::ForwardRequest))
+{
+ ++server_interceptor_check_;
+
+ // Do Nothing
+}
diff --git a/TAO/tests/Portable_Interceptors/Processing_Mode_Policy/Remote/server_interceptor.h b/TAO/tests/Portable_Interceptors/Processing_Mode_Policy/Remote/server_interceptor.h
new file mode 100644
index 00000000000..1c6f50936a3
--- /dev/null
+++ b/TAO/tests/Portable_Interceptors/Processing_Mode_Policy/Remote/server_interceptor.h
@@ -0,0 +1,84 @@
+// -*- C++ -*-
+//
+// $Id$
+
+#ifndef TAO_SERVER_INTERCEPTOR_H
+#define TAO_SERVER_INTERCEPTOR_H
+#include /**/ "ace/pre.h"
+
+#include "tao/PI/PI.h"
+
+#if !defined (ACE_LACKS_PRAGMA_ONCE)
+# pragma once
+#endif /* ACE_LACKS_PRAGMA_ONCE */
+
+#include "tao/PI_Server/PI_Server.h"
+#include "tao/LocalObject.h"
+
+#if defined(_MSC_VER)
+#pragma warning(push)
+#pragma warning(disable:4250)
+#endif /* _MSC_VER */
+
+class Echo_Server_Request_Interceptor
+ : public PortableInterceptor::ServerRequestInterceptor,
+ public virtual TAO_Local_RefCounted_Object
+{
+ // = Server-side echo interceptor. For checking interceptor visually only.
+public:
+ Echo_Server_Request_Interceptor (void);
+ // cotr.
+ ~Echo_Server_Request_Interceptor ();
+ // dotr.
+
+ virtual char * name (ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC ((CORBA::SystemException));
+ // Canonical name of the interceptor.
+
+ virtual void destroy (ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+ virtual void receive_request_service_contexts (
+ PortableInterceptor::ServerRequestInfo_ptr
+ ACE_ENV_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC ((
+ CORBA::SystemException,
+ PortableInterceptor::ForwardRequest
+ ));
+
+ virtual void receive_request (PortableInterceptor::ServerRequestInfo_ptr ri
+ ACE_ENV_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC ((CORBA::SystemException,
+ PortableInterceptor::ForwardRequest));
+
+ virtual void send_reply (PortableInterceptor::ServerRequestInfo_ptr ri
+ ACE_ENV_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+ virtual void send_exception (PortableInterceptor::ServerRequestInfo_ptr ri
+ ACE_ENV_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC ((CORBA::SystemException,
+ PortableInterceptor::ForwardRequest));
+
+ virtual void send_other (
+ PortableInterceptor::ServerRequestInfo_ptr
+ ACE_ENV_ARG_DECL_WITH_DEFAULTS
+ )
+ ACE_THROW_SPEC ((
+ CORBA::SystemException,
+ PortableInterceptor::ForwardRequest
+ ));
+
+ // Some identifiers that are used for error checking
+ static CORBA::ULong server_interceptor_check_;
+
+private:
+ const char *myname_;
+};
+
+#if defined (_MSC_VER)
+#pragma warning(pop)
+#endif /* _MSC_VER */
+
+#include /**/ "ace/post.h"
+#endif /* TAO_SERVER_INTERCEPTOR_H */
diff --git a/TAO/tests/Portable_Interceptors/Processing_Mode_Policy/Remote/server_main.cpp b/TAO/tests/Portable_Interceptors/Processing_Mode_Policy/Remote/server_main.cpp
new file mode 100644
index 00000000000..720d51ab9ad
--- /dev/null
+++ b/TAO/tests/Portable_Interceptors/Processing_Mode_Policy/Remote/server_main.cpp
@@ -0,0 +1,138 @@
+//$Id$
+#include "Server_Task.h"
+#include "ace/Get_Opt.h"
+#include "ace/Argv_Type_Converter.h"
+#include "ace/SString.h"
+#include "ace/Manual_Event.h"
+#include "Echo_Server_ORBInitializer.h"
+#include "tao/ORBInitializer_Registry.h"
+#include "server_interceptor.h"
+
+const char *output = "test.ior";
+
+ACE_CString proc_mode_str;
+
+int
+parse_args (int argc, char *argv[])
+{
+ ACE_Get_Opt get_opts (argc, argv, "p:o:");
+ int c;
+
+ proc_mode_str.set ("LOCAL_AND_REMOTE");
+
+ while ((c = get_opts ()) != -1)
+ {
+ switch (c)
+ {
+ case 'p':
+ proc_mode_str.set (get_opts.opt_arg ());
+ break;
+ case 'o':
+ output = get_opts.opt_arg ();
+ break;
+ case '?':
+ default:
+ return 0;
+ }
+ }
+ // Indicates sucessful parsing of the command line
+ return 0;
+}
+
+int
+main (int argc, char *argv[])
+{
+ if (parse_args (argc,
+ argv) == -1)
+ return -1;
+
+ ACE_DECLARE_NEW_CORBA_ENV;
+ ACE_TRY
+ {
+ PortableInterceptor::ORBInitializer_ptr temp_initializer =
+ PortableInterceptor::ORBInitializer::_nil ();
+
+ // Set up our default expectations.
+ CORBA::ULong expected_interceptor_check = 12;
+
+ PortableInterceptor::ProcessingMode proc_mode =
+ PortableInterceptor::LOCAL_AND_REMOTE;
+
+ if (proc_mode_str == "LOCAL_ONLY")
+ {
+ proc_mode = PortableInterceptor::LOCAL_ONLY;
+ ACE_DEBUG((LM_DEBUG,
+ "Using LOCAL_ONLY for server-side ProcessingMode.\n"));
+
+ // Since all of the calls are remote, setting the server-side
+ // ProcessingMode to LOCAL_ONLY will cause the server request
+ // interceptor to not fire. Thus, we expect 0 calls on the
+ // server interceptor.
+ expected_interceptor_check = 0;
+ }
+ else if (proc_mode_str == "REMOTE_ONLY")
+ {
+ proc_mode = PortableInterceptor::REMOTE_ONLY;
+ ACE_DEBUG((LM_DEBUG,
+ "Using REMOTE_ONLY for server-side ProcessingMode.\n"));
+ }
+ else
+ {
+ ACE_DEBUG((LM_DEBUG,
+ "Using LOCAL_AND_REMOTE for server-side ProcessingMode.\n"));
+ }
+
+ ACE_NEW_RETURN (temp_initializer,
+ Echo_Server_ORBInitializer (proc_mode),
+ -1); // No exceptions yet!
+ PortableInterceptor::ORBInitializer_var orb_initializer =
+ temp_initializer;
+
+ PortableInterceptor::register_orb_initializer (orb_initializer.in ()
+ ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ ACE_Argv_Type_Converter atc (argc, argv);
+ CORBA::ORB_var orb =
+ CORBA::ORB_init (atc.get_argc (),
+ atc.get_TCHAR_argv (),
+ ""
+ ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ ACE_Manual_Event me;
+ Server_Task server_task (output,
+ orb.in (),
+ me,
+ ACE_Thread_Manager::instance ());
+
+ if (server_task.activate (THR_NEW_LWP | THR_JOINABLE,
+ 1,
+ 1) == -1)
+ {
+ ACE_ERROR ((LM_ERROR, "Error activating server task\n"));
+ }
+
+ ACE_Thread_Manager::instance ()->wait ();
+
+ CORBA::ULong number_called =
+ Echo_Server_Request_Interceptor::server_interceptor_check_;
+
+ if (number_called != expected_interceptor_check)
+ {
+ ACE_ERROR ((LM_ERROR,
+ "(%P|%t) ERROR: Server-Side Interceptors not "
+ "called properly, called %d times, expected %d.\n",
+ number_called, expected_interceptor_check));
+ return 1;
+ }
+ }
+ ACE_CATCHANY
+ {
+ ACE_ERROR ((LM_ERROR,
+ "(%P|%t) ERROR: Some exception was caught in main().\n"));
+ return 1;
+ }
+ ACE_ENDTRY;
+ return 0;
+}
diff --git a/TAO/tests/Portable_Interceptors/Processing_Mode_Policy/Remote/test.idl b/TAO/tests/Portable_Interceptors/Processing_Mode_Policy/Remote/test.idl
new file mode 100644
index 00000000000..07ed4dee088
--- /dev/null
+++ b/TAO/tests/Portable_Interceptors/Processing_Mode_Policy/Remote/test.idl
@@ -0,0 +1,42 @@
+// $Id$
+
+// ============================================================================
+//
+// = LIBRARY
+// TAO/tests/Portable_Interceptors
+//
+// = FILENAME
+// test.idl
+//
+// = DESCRIPTION
+// Simple IDL file to test portable interceptor support.
+//
+// = AUTHORS
+// Nanbor Wang <nanbor@cs.wustl.edu>
+//
+// ============================================================================
+
+module Test_Interceptors
+{
+ exception Silly
+ {};
+
+ interface Visual
+ {
+ void normal (in long arg);
+ // Normal operation.
+
+ long calculate (in long one, in long two);
+ // Normal operation with a return val.
+
+ void user ()
+ raises (Silly);
+ // throws a user exception.
+
+ void system ();
+ // thows a system exception.
+
+ oneway void shutdown ();
+ // shutdown the ORB
+ };
+};
diff --git a/TAO/tests/Portable_Interceptors/Processing_Mode_Policy/Remote/test_i.cpp b/TAO/tests/Portable_Interceptors/Processing_Mode_Policy/Remote/test_i.cpp
new file mode 100644
index 00000000000..bf5fe31c9f8
--- /dev/null
+++ b/TAO/tests/Portable_Interceptors/Processing_Mode_Policy/Remote/test_i.cpp
@@ -0,0 +1,55 @@
+// $Id$
+
+#include "test_i.h"
+
+ACE_RCSID(Remote, test_i, "$Id$")
+
+Visual_i::Visual_i (CORBA::ORB_ptr orb)
+ : orb_ (CORBA::ORB::_duplicate (orb))
+{
+}
+ // ctor
+
+void
+Visual_i::normal (CORBA::Long
+ ACE_ENV_ARG_DECL_NOT_USED)
+ ACE_THROW_SPEC ((CORBA::SystemException))
+{
+ // ACE_DEBUG ((LM_DEBUG, "Visual::normal called with %d\n", arg));
+}
+
+CORBA::Long
+Visual_i::calculate (CORBA::Long one,
+ CORBA::Long two
+ ACE_ENV_ARG_DECL_NOT_USED)
+ ACE_THROW_SPEC ((CORBA::SystemException))
+{
+ // ACE_DEBUG ((LM_DEBUG, "Visual::calculate\n"));
+ return (one + two);
+}
+
+void
+Visual_i::user (ACE_ENV_SINGLE_ARG_DECL)
+ ACE_THROW_SPEC ((CORBA::SystemException,Test_Interceptors::Silly))
+{
+ // ACE_DEBUG ((LM_DEBUG, "Visual::user, throwning Silly\n"));
+ ACE_THROW (Test_Interceptors::Silly ());
+}
+
+void
+Visual_i::system (ACE_ENV_SINGLE_ARG_DECL)
+ ACE_THROW_SPEC ((CORBA::SystemException))
+{
+ // ACE_DEBUG ((LM_DEBUG, "Visual::user, throwing INV_OBJREF\n"));
+ ACE_THROW (CORBA::INV_OBJREF ());
+}
+
+void
+Visual_i::shutdown (ACE_ENV_SINGLE_ARG_DECL)
+ ACE_THROW_SPEC ((CORBA::SystemException))
+{
+ this->_remove_ref (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK;
+
+ this->orb_->shutdown ();
+}
diff --git a/TAO/tests/Portable_Interceptors/Processing_Mode_Policy/Remote/test_i.h b/TAO/tests/Portable_Interceptors/Processing_Mode_Policy/Remote/test_i.h
new file mode 100644
index 00000000000..f31756fb10a
--- /dev/null
+++ b/TAO/tests/Portable_Interceptors/Processing_Mode_Policy/Remote/test_i.h
@@ -0,0 +1,54 @@
+// $Id$
+
+// ============================================================================
+//
+// = LIBRARY
+// TAO/tests/Portable_Interceptors/Dynamic
+//
+// = FILENAME
+// test_i.h
+//
+// = AUTHOR
+// Nanbor Wang
+//
+// ============================================================================
+
+#ifndef TAO_INTERCEPTOR_TEST_I_H
+#define TAO_INTERCEPTOR_TEST_I_H
+
+#include "testS.h"
+
+class Visual_i : public POA_Test_Interceptors::Visual
+{
+ // = DESCRIPTION
+ // Implements the Visual interface in test.idl
+
+public:
+ Visual_i (CORBA::ORB_ptr orb);
+ // ctor
+
+ void normal (CORBA::Long arg
+ ACE_ENV_ARG_DECL_NOT_USED)
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+ CORBA::Long calculate (
+ CORBA::Long one,
+ CORBA::Long two
+ ACE_ENV_ARG_DECL_NOT_USED)
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+ void user (ACE_ENV_SINGLE_ARG_DECL_NOT_USED)
+ ACE_THROW_SPEC ((CORBA::SystemException,Test_Interceptors::Silly));
+
+ void system (ACE_ENV_SINGLE_ARG_DECL_NOT_USED)
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+ void shutdown (ACE_ENV_SINGLE_ARG_DECL_NOT_USED)
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+private:
+ CORBA::ORB_var orb_;
+ // The ORB pointer (for shutdown.)
+};
+
+#endif /* TAO_INTERCEPTOR_TEST_I_H */
diff --git a/TAO/tests/Portable_Interceptors/Slot/PI_Slot.mpc b/TAO/tests/Portable_Interceptors/Slot/PI_Slot.mpc
new file mode 100644
index 00000000000..2ae15155c7b
--- /dev/null
+++ b/TAO/tests/Portable_Interceptors/Slot/PI_Slot.mpc
@@ -0,0 +1,7 @@
+// $Id$
+
+project(*driver): orbsvcsexe, pi_server, interceptors {
+ Source_Files {
+ driver.cpp
+ }
+}
diff --git a/TAO/tests/Portable_Interceptors/Slot/driver.cpp b/TAO/tests/Portable_Interceptors/Slot/driver.cpp
new file mode 100644
index 00000000000..b7d2b320500
--- /dev/null
+++ b/TAO/tests/Portable_Interceptors/Slot/driver.cpp
@@ -0,0 +1,64 @@
+// file : Slot/driver.cpp
+// author : Boris Kolpackov <boris@kolpackov.net>
+// cvs-id : $Id$
+
+#include "tao/PI/PI.h"
+#include "tao/LocalObject.h"
+#include "tao/ORBInitializer_Registry.h"
+
+PortableInterceptor::SlotId slot_id;
+
+class ORB_Initializer : public virtual PortableInterceptor::ORBInitializer,
+ public virtual TAO_Local_RefCounted_Object
+{
+public:
+ virtual void
+ pre_init (PortableInterceptor::ORBInitInfo_ptr) throw (CORBA::SystemException)
+ {
+ }
+
+ virtual void
+ post_init (PortableInterceptor::ORBInitInfo_ptr info) throw (CORBA::SystemException)
+ {
+ slot_id = info->allocate_slot_id ();
+ ACE_DEBUG ((LM_DEBUG, "Allocated slot with id %d.\n", slot_id));
+ }
+};
+
+int
+main (int argc, char *argv[])
+{
+
+ try
+ {
+ PortableInterceptor::ORBInitializer_var orb_initializer = new ORB_Initializer ();
+ PortableInterceptor::register_orb_initializer (orb_initializer.in ());
+
+ CORBA::ORB_var orb = CORBA::ORB_init (argc, argv);
+
+ CORBA::Object_var pic_obj = orb->resolve_initial_references ("PICurrent");
+ PortableInterceptor::Current_var pic (
+ PortableInterceptor::Current::_narrow (pic_obj.in ()));
+
+ CORBA::Any in;
+ in <<= CORBA::ULong (1);
+ pic->set_slot (slot_id, in);
+
+ CORBA::ULong v (0);
+ CORBA::Any_var out = pic->get_slot (slot_id);
+ out >>= v;
+
+ if (v != 1)
+ {
+ ACE_ERROR ((LM_ERROR, "ERROR: Slot value was not preserved.\n"));
+ return 1;
+ }
+ }
+ catch (PortableInterceptor::InvalidSlot const&)
+ {
+ ACE_ERROR ((LM_ERROR, "ERROR: Caught InvalidSlot exception.\n"));
+ return 1;
+ }
+
+ return 0;
+}
diff --git a/TAO/tests/Portable_Interceptors/Slot/run_test.pl b/TAO/tests/Portable_Interceptors/Slot/run_test.pl
new file mode 100755
index 00000000000..f6cd92fdcf5
--- /dev/null
+++ b/TAO/tests/Portable_Interceptors/Slot/run_test.pl
@@ -0,0 +1,26 @@
+eval '(exit $?0)' && eval 'exec perl -S $0 ${1+"$@"}'
+ & eval 'exec perl -S $0 $argv:q'
+ if 0;
+
+# $Id$
+# -*- perl -*-
+
+use lib '../../../../bin';
+use PerlACE::Run_Test;
+
+if (PerlACE::is_vxworks_test()) {
+ $CL = new PerlACE::ProcessVX ("driver");
+}
+else {
+ $CL = new PerlACE::Process ("driver");
+}
+print STDERR "\n==== Running Slot test ====\n";
+
+$client = $CL->SpawnWaitKill (5);
+
+if ($client != 0) {
+ print STDERR "ERROR: driver returned $client\n";
+ $status = 1;
+}
+
+exit $status;
diff --git a/TAO/tests/RTCORBA/Dynamic_Thread_Pool/README b/TAO/tests/RTCORBA/Dynamic_Thread_Pool/README
new file mode 100644
index 00000000000..95b07c46c2c
--- /dev/null
+++ b/TAO/tests/RTCORBA/Dynamic_Thread_Pool/README
@@ -0,0 +1,10 @@
+$Id$
+
+Description:
+This is a simple test for a RT thread-pool server. It creates a
+server process with multiple thread pools, POAs, and servants. The
+test also spawns multiple clients for each servant. The servants with
+multiple threads in their thread-pool respond faster than the servants
+with a single thread thread-pool.
+
+See run_test.pl to see how to run this test. \ No newline at end of file
diff --git a/TAO/tests/RTCORBA/Dynamic_Thread_Pool/RT_Dynamic_Thread_Pool.mpc b/TAO/tests/RTCORBA/Dynamic_Thread_Pool/RT_Dynamic_Thread_Pool.mpc
new file mode 100644
index 00000000000..ebf79370785
--- /dev/null
+++ b/TAO/tests/RTCORBA/Dynamic_Thread_Pool/RT_Dynamic_Thread_Pool.mpc
@@ -0,0 +1,18 @@
+// -*- MPC -*-
+// $Id$
+
+project(*Server): strategies, rt_server, minimum_corba {
+ Source_Files {
+ test_i.cpp
+ server.cpp
+ }
+}
+
+project(*Client): strategies, rt_client, minimum_corba {
+ after += *Server
+ Source_Files {
+ testC.cpp
+ client.cpp
+ }
+}
+
diff --git a/TAO/tests/RTCORBA/Dynamic_Thread_Pool/client.cpp b/TAO/tests/RTCORBA/Dynamic_Thread_Pool/client.cpp
new file mode 100644
index 00000000000..abe1dd456ec
--- /dev/null
+++ b/TAO/tests/RTCORBA/Dynamic_Thread_Pool/client.cpp
@@ -0,0 +1,225 @@
+// $Id$
+
+#include "ace/Get_Opt.h"
+#include "testC.h"
+#include "tao/RTCORBA/RTCORBA.h"
+#include "tao/ORB_Core.h"
+#include "ace/Task.h"
+#include "ace/OS_NS_unistd.h"
+ #include "../check_supported_priorities.cpp"
+
+ACE_RCSID(Thread_Pool, client, "$Id$")
+
+const char *ior = "file://ior_1";
+int iterations = 6;
+int shutdown_server = 0;
+bool decreased = false;
+
+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':
+ shutdown_server = 1;
+ break;
+
+ case 'k':
+ ior = get_opts.opt_arg ();
+ break;
+
+ case 'i':
+ iterations = ACE_OS::atoi (get_opts.opt_arg ());
+ break;
+
+ case '?':
+ default:
+ ACE_ERROR_RETURN ((LM_ERROR,
+ "usage: %s "
+ "-k <ior> "
+ "-i <iterations> "
+ "-x [shutdown server] "
+ "\n",
+ argv [0]),
+ -1);
+ }
+
+ // Indicates sucessful parsing of the command line
+ return 0;
+}
+
+class Task : public ACE_Task_Base
+{
+public:
+
+ Task (ACE_Thread_Manager &thread_manager,
+ CORBA::ORB_ptr orb);
+
+ int svc (void);
+
+ CORBA::ORB_var orb_;
+
+};
+
+Task::Task (ACE_Thread_Manager &thread_manager,
+ CORBA::ORB_ptr orb)
+ : ACE_Task_Base (&thread_manager),
+ orb_ (CORBA::ORB::_duplicate (orb))
+{
+}
+
+int
+Task::svc (void)
+{
+ ACE_TRY_NEW_ENV
+ {
+ CORBA::Object_var object =
+ this->orb_->string_to_object (ior ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ test_var test =
+ test::_narrow (object.in () ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ pid_t pid =
+ ACE_OS::getpid ();
+
+ CORBA::Long tc = 0;
+
+ for (int i = 0; i != iterations; ++i)
+ {
+ CORBA::Long mtc = 0;
+ CORBA::Long r =
+ test->method (pid,
+ i,
+ mtc
+ ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ // Each 2 iterations sleep 5 seconds
+ if (i % 2 == 0)
+ ACE_OS::sleep (5);
+
+ ACE_ASSERT (r == i);
+ // Assert disappears on with optimizations on.
+ ACE_UNUSED_ARG (r);
+
+ if (mtc > tc)
+ {
+ // Number of threads increased, so store this.
+ ACE_DEBUG ((LM_DEBUG, "Thread count increased to %d\n", mtc));
+ tc = mtc;
+ }
+ else if (mtc < tc)
+ {
+ // Number of threads decreased!
+ ACE_DEBUG ((LM_DEBUG, "Thread count decreased to %d\n", mtc));
+ decreased = true;
+ tc = mtc;
+ }
+ }
+
+ ACE_OS::sleep (10);
+
+ CORBA::Long end = 0;
+ CORBA::Long re =
+ test->method (pid,
+ 0,
+ end
+ ACE_ENV_ARG_PARAMETER);
+
+ ACE_ASSERT (re == 0);
+ // Assert disappears on with optimizations on.
+ ACE_UNUSED_ARG (re);
+
+ if (end != 0)
+ {
+ ACE_ERROR ((LM_ERROR, "Dynamic thread count should be 0, not %d\n", end));
+ }
+
+ if (shutdown_server)
+ {
+ test->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;
+}
+
+int
+main (int argc, char *argv[])
+{
+ ACE_TRY_NEW_ENV
+ {
+ CORBA::ORB_var orb =
+ CORBA::ORB_init (argc, argv, "" ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ int result =
+ parse_args (argc, argv);
+ if (result != 0)
+ return result;
+
+ // Thread Manager for managing task.
+ ACE_Thread_Manager thread_manager;
+
+ // Create task.
+ Task task (thread_manager,
+ orb.in ());
+
+ // Task activation flags.
+ long flags =
+ THR_NEW_LWP |
+ THR_JOINABLE |
+ orb->orb_core ()->orb_params ()->thread_creation_flags ();
+
+ // Activate task.
+ result =
+ task.activate (flags);
+ if (result == -1)
+ {
+ if (errno == EPERM)
+ {
+ ACE_ERROR_RETURN ((LM_ERROR,
+ "Cannot create thread with scheduling policy %s\n"
+ "because the user does not have the appropriate privileges, terminating program....\n"
+ "Check svc.conf options and/or run as root\n",
+ sched_policy_name (orb->orb_core ()->orb_params ()->ace_sched_policy ())),
+ 2);
+ }
+ else
+ // Unexpected error.
+ ACE_ASSERT (0);
+ }
+
+ // Wait for task to exit.
+ result =
+ thread_manager.wait ();
+ ACE_ASSERT (result != -1);
+
+ if (decreased == false)
+ {
+ ACE_ERROR_RETURN ((LM_ERROR, "ERROR: Number of threads didn't decrease\n"), -1);
+ }
+ }
+ ACE_CATCHANY
+ {
+ ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION, "Exception caught");
+ return -1;
+ }
+ ACE_ENDTRY;
+
+ return 0;
+}
diff --git a/TAO/tests/RTCORBA/Dynamic_Thread_Pool/continuous.conf b/TAO/tests/RTCORBA/Dynamic_Thread_Pool/continuous.conf
new file mode 100644
index 00000000000..41c1919a08a
--- /dev/null
+++ b/TAO/tests/RTCORBA/Dynamic_Thread_Pool/continuous.conf
@@ -0,0 +1,2 @@
+# Option for platforms where direct mapping doesn't work
+static RT_ORB_Loader "-ORBPriorityMapping continuous -RTORBDynamicThreadIdleTimeout 1000000"
diff --git a/TAO/tests/RTCORBA/Dynamic_Thread_Pool/continuous.conf.xml b/TAO/tests/RTCORBA/Dynamic_Thread_Pool/continuous.conf.xml
new file mode 100644
index 00000000000..bbb864e64b0
--- /dev/null
+++ b/TAO/tests/RTCORBA/Dynamic_Thread_Pool/continuous.conf.xml
@@ -0,0 +1,6 @@
+<?xml version='1.0'?>
+<!-- Converted from continuous.conf by svcconf-convert.pl -->
+<ACE_Svc_Conf>
+ <!-- Option for platforms where direct mapping doesn't work -->
+ <static id="RT_ORB_Loader" params="-ORBPriorityMapping continuous -RTORBDynamicThreadIdleTimeout 1000000"/>
+</ACE_Svc_Conf>
diff --git a/TAO/tests/RTCORBA/Dynamic_Thread_Pool/run_test.pl b/TAO/tests/RTCORBA/Dynamic_Thread_Pool/run_test.pl
new file mode 100644
index 00000000000..2059c01b04f
--- /dev/null
+++ b/TAO/tests/RTCORBA/Dynamic_Thread_Pool/run_test.pl
@@ -0,0 +1,117 @@
+eval '(exit $?0)' && eval 'exec perl -S $0 ${1+"$@"}'
+ & eval 'exec perl -S $0 $argv:q'
+ if 0;
+
+# $Id$
+# -*- perl -*-
+
+use lib '../../../../bin';
+use PerlACE::Run_Test;
+
+$number_of_clients = 1;
+$status = 0;
+$continuous = ($^O eq 'hpux');
+
+@configurations =
+ (
+ {
+ file => "ior_3",
+ description => "Invoking methods on servant in second RT thread pool (with lanes)",
+ },
+ );
+
+for $test (@configurations)
+{
+ unlink $test->{file};
+}
+
+sub run_clients
+{
+ my @parms = @_;
+ $arg = $parms[0];
+ $clients = $parms[1];
+
+ for ($i = 0; $i < $clients; $i++)
+ {
+ $CL[$i] = new PerlACE::Process ("client", $arg);
+ $CL[$i]->Spawn ();
+ }
+
+ for ($i = 0; $i < $clients; $i++)
+ {
+ $client = $CL[$i]->WaitKill (120);
+ if ($client != 0)
+ {
+ print STDERR "ERROR: client returned $client\n";
+ $status = 1;
+ goto kill_server;
+ }
+ }
+}
+
+if (PerlACE::is_vxworks_test()) {
+ $SV = new PerlACE::ProcessVX ("server");
+}
+else {
+ $SV = new PerlACE::Process ("server");
+}
+
+if ($continuous) {
+ $SV->Arguments ("-ORBSvcConf continuous$PerlACE::svcconf_ext");
+}
+ $SV->Arguments ("-ORBDebugLevel 10 -ORBLogFile server.log");
+
+$SV->Spawn ();
+
+for $test (@configurations)
+{
+ if (PerlACE::waitforfile_timed ($test->{file}, 10) == -1)
+ {
+ $server = $SV->TimedWait (1);
+ if ($server == 2)
+ {
+ # Mark as no longer running to avoid errors on exit.
+ $SV->{RUNNING} = 0;
+ exit $status;
+ }
+ else
+ {
+ print STDERR "ERROR: cannot find ior file: $test->{file}\n";
+ $status = 1;
+ goto kill_server;
+ }
+ }
+ }
+
+for $test (@configurations)
+ {
+ print STDERR "\n*************************************************************\n";
+ print STDERR "$test->{description}\n";
+ print STDERR "*************************************************************\n\n";
+
+ run_clients ("-k file://".PerlACE::LocalFile($test->{file}), $number_of_clients);
+ }
+
+print STDERR "\n************************\n";
+print STDERR "Shutting down the server\n";
+print STDERR "************************\n\n";
+
+run_clients ("-k file://".PerlACE::LocalFile($configurations[0]->{file})." -i 0 -x", 1);
+
+kill_server:
+
+$server = $SV->WaitKill (5);
+
+if ($server != 0)
+ {
+ print STDERR "ERROR: server returned $server\n";
+ $status = 1;
+ }
+
+for $test (@configurations)
+ {
+ unlink $test->{file};
+ }
+
+exit $status
+
diff --git a/TAO/tests/RTCORBA/Dynamic_Thread_Pool/server.cpp b/TAO/tests/RTCORBA/Dynamic_Thread_Pool/server.cpp
new file mode 100644
index 00000000000..ea5dc6db558
--- /dev/null
+++ b/TAO/tests/RTCORBA/Dynamic_Thread_Pool/server.cpp
@@ -0,0 +1,397 @@
+// $Id$
+
+#include "test_i.h"
+#include "ace/Get_Opt.h"
+#include "ace/OS_NS_unistd.h"
+#include "tao/ORB_Core.h"
+#include "ace/Task.h"
+#include "tao/RTPortableServer/RTPortableServer.h"
+#include "../check_supported_priorities.cpp"
+
+ACE_RCSID(Thread_Pool, server, "$Id$")
+
+const char *ior_output_file = "ior";
+int ior_count = 1;
+CORBA::ULong static_threads = 1;
+CORBA::ULong dynamic_threads = 25;
+long nap_time = 1000;
+
+int
+parse_args (int argc, char *argv[])
+{
+ ACE_Get_Opt get_opts (argc, argv, "o:s:d:t:h");
+ int c;
+
+ while ((c = get_opts ()) != -1)
+ switch (c)
+ {
+ case 'o':
+ ior_output_file = get_opts.opt_arg ();
+ break;
+
+ case 's':
+ static_threads = ACE_OS::atoi (get_opts.opt_arg ());
+ break;
+
+ case 'd':
+ dynamic_threads = ACE_OS::atoi (get_opts.opt_arg ());
+ break;
+
+ case 't':
+ nap_time = ACE_OS::atoi (get_opts.opt_arg ());
+ break;
+
+ case 'h':
+ ACE_ERROR_RETURN ((LM_ERROR,
+ "usage: %s "
+ "-o <iorfile> "
+ "-s <static_threads> "
+ "-d <dynamic_threads> "
+ "-t <nap_time> "
+ "\n",
+ argv [0]),
+ -1);
+ }
+
+ // Indicates sucessful parsing of the command line
+ return 0;
+}
+
+int
+write_ior_to_file (CORBA::ORB_ptr orb,
+ test_ptr test
+ ACE_ENV_ARG_DECL)
+{
+ CORBA::String_var ior =
+ orb->object_to_string (test
+ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+
+ char filename[BUFSIZ];
+ ACE_OS::sprintf (filename,
+ "%s_%d",
+ ior_output_file,
+ ior_count++);
+
+ FILE *output_file =
+ ACE_OS::fopen (filename,
+ "w");
+
+ if (output_file == 0)
+ ACE_ERROR_RETURN ((LM_ERROR,
+ "Cannot open output file for writing IOR: %s",
+ filename),
+ -1);
+
+ ACE_OS::fprintf (output_file,
+ "%s",
+ ior.in ());
+
+ ACE_OS::fclose (output_file);
+
+ return 0;
+}
+
+int
+create_POA_and_register_servant (CORBA::Policy_ptr threadpool_policy,
+ const char *poa_name,
+ PortableServer::POAManager_ptr poa_manager,
+ PortableServer::POA_ptr root_poa,
+ CORBA::ORB_ptr orb,
+ RTCORBA::RTORB_ptr rt_orb
+ ACE_ENV_ARG_DECL)
+{
+ // Policies for the firstPOA to be created.
+ CORBA::PolicyList policies (3); policies.length (3);
+
+ // Implicit_activation policy.
+ policies[0] =
+ root_poa->create_implicit_activation_policy
+ (PortableServer::IMPLICIT_ACTIVATION
+ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+
+ // Thread pool policy.
+ policies[1] =
+ CORBA::Policy::_duplicate (threadpool_policy);
+
+ // Priority Model policy.
+ policies[2] =
+ rt_orb->create_priority_model_policy (RTCORBA::CLIENT_PROPAGATED,
+ 0
+ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+
+ // Create the POA under the RootPOA.
+ PortableServer::POA_var poa =
+ root_poa->create_POA (poa_name,
+ poa_manager,
+ policies
+ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+
+ // Creation of POAs is over. Destroy the Policy objects.
+ for (CORBA::ULong i = 0;
+ i < policies.length ();
+ ++i)
+ {
+ policies[i]->destroy (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+ }
+
+ test_i *servant =
+ new test_i (orb,
+ poa.in (),
+ nap_time);
+
+ PortableServer::ServantBase_var safe_servant (servant);
+ ACE_UNUSED_ARG (safe_servant);
+
+ test_var test =
+ servant->_this (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+
+ int result =
+ write_ior_to_file (orb,
+ test.in ()
+ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+
+ return result;
+}
+
+class Task : public ACE_Task_Base
+{
+public:
+
+ Task (ACE_Thread_Manager &thread_manager,
+ CORBA::ORB_ptr orb);
+
+ int svc (void);
+
+ CORBA::ORB_var orb_;
+
+};
+
+Task::Task (ACE_Thread_Manager &thread_manager,
+ CORBA::ORB_ptr orb)
+ : ACE_Task_Base (&thread_manager),
+ orb_ (CORBA::ORB::_duplicate (orb))
+{
+}
+
+int
+Task::svc (void)
+{
+ ACE_TRY_NEW_ENV
+ {
+ CORBA::Object_var object =
+ this->orb_->resolve_initial_references ("RootPOA"
+ ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ PortableServer::POA_var root_poa =
+ PortableServer::POA::_narrow (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;
+
+ object =
+ this->orb_->resolve_initial_references ("RTORB"
+ ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ RTCORBA::RTORB_var rt_orb =
+ RTCORBA::RTORB::_narrow (object.in ()
+ ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ object =
+ this->orb_->resolve_initial_references ("RTCurrent"
+ ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ RTCORBA::Current_var current =
+ RTCORBA::Current::_narrow (object.in ()
+ ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ RTCORBA::Priority default_thread_priority =
+ current->the_priority (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ test_i servant (this->orb_.in (),
+ root_poa.in (),
+ nap_time);
+ test_var test =
+ servant._this (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ int result =
+ write_ior_to_file (this->orb_.in (),
+ test.in ()
+ ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ if (result != 0)
+ return result;
+
+ poa_manager->activate (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ CORBA::ULong stacksize = 0;
+ CORBA::Boolean allow_request_buffering = 0;
+ CORBA::ULong max_buffered_requests = 0;
+ CORBA::ULong max_request_buffer_size = 0;
+
+ RTCORBA::ThreadpoolId threadpool_id_1 =
+ rt_orb->create_threadpool (stacksize,
+ static_threads,
+ dynamic_threads,
+ default_thread_priority,
+ allow_request_buffering,
+ max_buffered_requests,
+ max_request_buffer_size
+ ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ CORBA::Policy_var threadpool_policy_1 =
+ rt_orb->create_threadpool_policy (threadpool_id_1
+ ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ CORBA::Boolean allow_borrowing = 0;
+ RTCORBA::ThreadpoolLanes lanes (1);
+ lanes.length (1);
+
+ lanes[0].lane_priority = default_thread_priority;
+ lanes[0].static_threads = static_threads;
+ lanes[0].dynamic_threads = dynamic_threads;
+
+ RTCORBA::ThreadpoolId threadpool_id_2 =
+ rt_orb->create_threadpool_with_lanes (stacksize,
+ lanes,
+ allow_borrowing,
+ allow_request_buffering,
+ max_buffered_requests,
+ max_request_buffer_size
+ ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ CORBA::Policy_var threadpool_policy_2 =
+ rt_orb->create_threadpool_policy (threadpool_id_2
+ ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ result =
+ create_POA_and_register_servant (threadpool_policy_1.in (),
+ "first_poa",
+ poa_manager.in (),
+ root_poa.in (),
+ this->orb_.in (),
+ rt_orb.in ()
+ ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+ if (result != 0)
+ return result;
+
+ result =
+ create_POA_and_register_servant (threadpool_policy_2.in (),
+ "second_poa",
+ poa_manager.in (),
+ root_poa.in (),
+ this->orb_.in (),
+ rt_orb.in ()
+ ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+ if (result != 0)
+ return result;
+
+ this->orb_->run (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ this->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;
+}
+
+int
+main (int argc, char *argv[])
+{
+ ACE_TRY_NEW_ENV
+ {
+ CORBA::ORB_var orb =
+ CORBA::ORB_init (argc,
+ argv,
+ ""
+ ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ int result =
+ parse_args (argc, argv);
+ if (result != 0)
+ return result;
+
+ // Make sure we can support multiple priorities that are required
+ // for this test.
+ if (!check_supported_priorities (orb.in ()))
+ return 2;
+
+ // Thread Manager for managing task.
+ ACE_Thread_Manager thread_manager;
+
+ // Create task.
+ Task task (thread_manager,
+ orb.in ());
+
+ // Task activation flags.
+ long flags =
+ THR_NEW_LWP |
+ THR_JOINABLE |
+ orb->orb_core ()->orb_params ()->thread_creation_flags ();
+
+ // Activate task.
+ result =
+ task.activate (flags);
+ if (result == -1)
+ {
+ if (errno == EPERM)
+ {
+ ACE_ERROR_RETURN ((LM_ERROR,
+ "Cannot create thread with scheduling policy %s\n"
+ "because the user does not have the appropriate privileges, terminating program....\n"
+ "Check svc.conf options and/or run as root\n",
+ sched_policy_name (orb->orb_core ()->orb_params ()->ace_sched_policy ())),
+ 2);
+ }
+ else
+ // Unexpected error.
+ ACE_ASSERT (0);
+ }
+
+ // Wait for task to exit.
+ result =
+ thread_manager.wait ();
+ ACE_ASSERT (result != -1);
+ }
+ ACE_CATCHANY
+ {
+ ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION, "Exception caught");
+ return -1;
+ }
+ ACE_ENDTRY;
+
+ return 0;
+}
diff --git a/TAO/tests/RTCORBA/Dynamic_Thread_Pool/svc.conf b/TAO/tests/RTCORBA/Dynamic_Thread_Pool/svc.conf
new file mode 100644
index 00000000000..c288d674567
--- /dev/null
+++ b/TAO/tests/RTCORBA/Dynamic_Thread_Pool/svc.conf
@@ -0,0 +1 @@
+static RT_ORB_Loader "-RTORBDynamicThreadIdleTimeout 1000000"
diff --git a/TAO/tests/RTCORBA/Dynamic_Thread_Pool/svc.conf.xml b/TAO/tests/RTCORBA/Dynamic_Thread_Pool/svc.conf.xml
new file mode 100644
index 00000000000..0908328040b
--- /dev/null
+++ b/TAO/tests/RTCORBA/Dynamic_Thread_Pool/svc.conf.xml
@@ -0,0 +1,5 @@
+<?xml version='1.0'?>
+<!-- Converted from svc.conf by svcconf-convert.pl -->
+<ACE_Svc_Conf>
+ <static RT_ORB_Loader "-RTORBDynamicThreadIdleTimeout 1000000">
+</ACE_Svc_Conf>
diff --git a/TAO/tests/RTCORBA/Dynamic_Thread_Pool/test.idl b/TAO/tests/RTCORBA/Dynamic_Thread_Pool/test.idl
new file mode 100644
index 00000000000..3bc8f9af25c
--- /dev/null
+++ b/TAO/tests/RTCORBA/Dynamic_Thread_Pool/test.idl
@@ -0,0 +1,12 @@
+//
+// $Id$
+//
+
+interface test
+{
+ long method (in long client_id,
+ in long iteration,
+ out long thread_count);
+
+ oneway void shutdown ();
+};
diff --git a/TAO/tests/RTCORBA/Dynamic_Thread_Pool/test_i.cpp b/TAO/tests/RTCORBA/Dynamic_Thread_Pool/test_i.cpp
new file mode 100644
index 00000000000..6fbd244dd26
--- /dev/null
+++ b/TAO/tests/RTCORBA/Dynamic_Thread_Pool/test_i.cpp
@@ -0,0 +1,71 @@
+// $Id$
+
+#include "test_i.h"
+#include "ace/OS_NS_unistd.h"
+#include "tao/ORB_Core.h"
+#include "tao/RTCORBA/Thread_Pool.h"
+
+ACE_RCSID(Thread_Pools, test_i, "$Id$")
+
+test_i::test_i (CORBA::ORB_ptr orb,
+ PortableServer::POA_ptr poa,
+ long msec_sleep)
+ : orb_ (CORBA::ORB::_duplicate (orb)),
+ poa_ (PortableServer::POA::_duplicate (poa)),
+ nap_time_ ()
+{
+ this->nap_time_.msec (msec_sleep);
+}
+
+CORBA::Long
+test_i::method (CORBA::Long client_id,
+ CORBA::Long iteration,
+ CORBA::Long_out thread_count
+ ACE_ENV_ARG_DECL_NOT_USED)
+ ACE_THROW_SPEC ((CORBA::SystemException))
+{
+ // Get the ORB_Core's TSS resources.
+ TAO_ORB_Core_TSS_Resources *tss =
+ this->orb_->orb_core ()->get_tss_resources ();
+
+ /// Get the lane attribute in TSS.
+ TAO_Thread_Lane *lane =
+ static_cast <TAO_Thread_Lane *> (tss->lane_);
+
+ if (lane)
+ ACE_DEBUG ((LM_DEBUG,
+ "Request in thread %t (pool id = %d; lane id = %d) for client %d iteration %d\n",
+ lane->pool ().id (),
+ lane->id (),
+ client_id,
+ iteration));
+ else
+ ACE_DEBUG ((LM_DEBUG,
+ "Request in thread %t (default thread pool) for client %d iteration %d\n",
+ client_id,
+ iteration));
+
+ ACE_OS::sleep (this->nap_time_);
+
+ if (lane)
+ thread_count = lane->current_threads ();
+ else
+ thread_count = 0;
+
+ return iteration;
+}
+
+PortableServer::POA_ptr
+test_i::_default_POA (ACE_ENV_SINGLE_ARG_DECL_NOT_USED)
+{
+ return PortableServer::POA::_duplicate (this->poa_.in ());
+}
+
+void
+test_i::shutdown (ACE_ENV_SINGLE_ARG_DECL)
+ ACE_THROW_SPEC ((CORBA::SystemException))
+{
+ this->orb_->shutdown (0
+ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK;
+}
diff --git a/TAO/tests/RTCORBA/Dynamic_Thread_Pool/test_i.h b/TAO/tests/RTCORBA/Dynamic_Thread_Pool/test_i.h
new file mode 100644
index 00000000000..7951ca0854c
--- /dev/null
+++ b/TAO/tests/RTCORBA/Dynamic_Thread_Pool/test_i.h
@@ -0,0 +1,45 @@
+//=============================================================================
+/**
+ * @file test_i.h
+ *
+ * $Id$
+ *
+ * @author Irfan Pyarali
+ */
+// ===================================================================
+
+#include "testS.h"
+
+class test_i :
+ public POA_test
+{
+public:
+ /// Constructor.
+ test_i (CORBA::ORB_ptr orb,
+ PortableServer::POA_ptr poa,
+ long msec_sleep);
+
+ /// Test method.
+ CORBA::Long method (CORBA::Long client_id,
+ CORBA::Long iteration,
+ CORBA::Long_out thread_count
+ ACE_ENV_ARG_DECL_NOT_USED)
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+ /// Shutdown the server.
+ void shutdown (ACE_ENV_SINGLE_ARG_DECL_NOT_USED)
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+ /// Our POA.
+ PortableServer::POA_ptr _default_POA (ACE_ENV_SINGLE_ARG_DECL);
+
+private:
+ /// ORB.
+ CORBA::ORB_var orb_;
+
+ /// Our POA.
+ PortableServer::POA_var poa_;
+
+ /// Time spent in executing the upcall.
+ ACE_Time_Value nap_time_;
+};
diff --git a/TAO/tests/Sequence_Unit_Tests/bounded_sequence_cdr.hpp b/TAO/tests/Sequence_Unit_Tests/bounded_sequence_cdr.hpp
new file mode 100644
index 00000000000..fba15efe71f
--- /dev/null
+++ b/TAO/tests/Sequence_Unit_Tests/bounded_sequence_cdr.hpp
@@ -0,0 +1,59 @@
+#ifndef guard_bounded_sequence_cdr
+#define guard_bounded_sequence_cdr
+/**
+ * @file
+ *
+ * @brief Extract the sequence
+ *
+ * $Id$
+ *
+ * @author Carlos O'Ryan
+ * @author Johnny Willemsen
+ */
+
+TAO_BEGIN_VERSIONED_NAMESPACE_DECL
+
+namespace TAO {
+ namespace details {
+ template <typename stream, typename sequence>
+ bool extract_bounded_sequence(stream & strm, sequence & target) {
+ ::CORBA::ULong new_length;
+ if (!(strm >> new_length)) {
+ return false;
+ }
+ if (new_length > strm.length()) {
+ return false;
+ }
+ if (new_length > target.maximum ()) {
+ return false;
+ }
+ sequence tmp;
+ tmp.length(new_length);
+ typename sequence::value_type * buffer = tmp.get_buffer();
+ for(CORBA::ULong i = 0; i < new_length; ++i) {
+ if (!(strm >> buffer[i])) {
+ return false;
+ }
+ }
+ tmp.swap(target);
+ return true;
+ }
+
+ template <typename stream, typename sequence>
+ bool insert_bounded_sequence(stream & strm, const sequence & source) {
+ const ::CORBA::ULong length = source.length ();
+ if (!(strm << length)) {
+ return false;
+ }
+ for(CORBA::ULong i = 0; i < length; ++i) {
+ if (!(strm << source[i])) {
+ return false;
+ }
+ }
+ return true;
+ }
+ }
+}
+
+TAO_END_VERSIONED_NAMESPACE_DECL
+#endif /* guard_bounded_sequence_cdr */
diff --git a/TAO/tests/Sequence_Unit_Tests/fwd_mock_reference.cpp b/TAO/tests/Sequence_Unit_Tests/fwd_mock_reference.cpp
new file mode 100644
index 00000000000..0dfe597f7a1
--- /dev/null
+++ b/TAO/tests/Sequence_Unit_Tests/fwd_mock_reference.cpp
@@ -0,0 +1,42 @@
+/**
+ * @file
+ *
+ * $Id$
+ *
+ * @author Carlos O'Ryan <coryan@atdesk.com>
+ */
+#include "fwd_mock_reference.hpp"
+
+TAO_BEGIN_VERSIONED_NAMESPACE_DECL
+
+fwd_mock_reference *
+TAO::Objref_Traits<fwd_mock_reference>::duplicate (
+ fwd_mock_reference_ptr
+ )
+{
+ return 0;
+}
+
+void
+TAO::Objref_Traits<fwd_mock_reference>::release (
+ fwd_mock_reference_ptr
+ )
+{
+}
+
+fwd_mock_reference_ptr
+TAO::Objref_Traits<fwd_mock_reference>::nil (void)
+{
+ return 0;
+}
+
+CORBA::Boolean
+TAO::Objref_Traits<fwd_mock_reference>::marshal (
+ fwd_mock_reference_ptr,
+ TAO_OutputCDR &
+ )
+{
+ return true;
+}
+
+TAO_END_VERSIONED_NAMESPACE_DECL
diff --git a/TAO/tests/Sequence_Unit_Tests/fwd_mock_reference.hpp b/TAO/tests/Sequence_Unit_Tests/fwd_mock_reference.hpp
new file mode 100644
index 00000000000..a808d674fc4
--- /dev/null
+++ b/TAO/tests/Sequence_Unit_Tests/fwd_mock_reference.hpp
@@ -0,0 +1,39 @@
+#ifndef guard_fwd_mock_reference_hpp
+#define guard_fwd_mock_reference_hpp
+/**
+ * @file
+ *
+ * @brief Mock an forward declared object reference so we can test the sequences
+ * in isolation.
+ *
+ * $Id$
+ *
+ * @author Johnny Willemsen <jwillemsen@remedy.nl>
+ */
+#include "ace/config-all.h"
+
+#include "testing_counters.hpp"
+
+#include "tao/Objref_VarOut_T.h"
+
+TAO_BEGIN_VERSIONED_NAMESPACE_DECL
+
+class fwd_mock_reference;
+typedef fwd_mock_reference * fwd_mock_reference_ptr;
+typedef TAO_Objref_Var_T<fwd_mock_reference> fwd_mock_reference_var;
+typedef TAO_Objref_Out_T<fwd_mock_reference> fwd_mock_reference_out;
+
+namespace TAO
+{
+template<>
+struct Objref_Traits< fwd_mock_reference>
+{
+ static fwd_mock_reference_ptr duplicate (fwd_mock_reference_ptr);
+ static void release (fwd_mock_reference_ptr);
+ static fwd_mock_reference_ptr nil (void);
+ static CORBA::Boolean marshal (const fwd_mock_reference_ptr p, TAO_OutputCDR & cdr);
+};
+}
+
+TAO_END_VERSIONED_NAMESPACE_DECL
+#endif // guard_fwd_mock_reference_hpp
diff --git a/TAO/tests/Sequence_Unit_Tests/unbounded_sequence_cdr.hpp b/TAO/tests/Sequence_Unit_Tests/unbounded_sequence_cdr.hpp
new file mode 100644
index 00000000000..fd1e9aac05b
--- /dev/null
+++ b/TAO/tests/Sequence_Unit_Tests/unbounded_sequence_cdr.hpp
@@ -0,0 +1,56 @@
+#ifndef guard_unbounded_sequence_cdr
+#define guard_unbounded_sequence_cdr
+/**
+ * @file
+ *
+ * @brief Extract the sequence
+ *
+ * $Id$
+ *
+ * @author Carlos O'Ryan
+ * @author Johnny Willemsen
+ */
+
+#include "tao/Basic_Types.h"
+TAO_BEGIN_VERSIONED_NAMESPACE_DECL
+namespace TAO {
+ namespace details {
+ template <typename stream, typename sequence>
+ bool extract_unbounded_sequence(stream & strm, sequence & target) {
+ ::CORBA::ULong new_length;
+ if (!(strm >> new_length)) {
+ return false;
+ }
+ if (new_length > strm.length()) {
+ return false;
+ }
+ sequence tmp(new_length);
+ tmp.length(new_length);
+ typename sequence::value_type * buffer = tmp.get_buffer();
+ for(CORBA::ULong i = 0; i < new_length; ++i) {
+ if (!(strm >> buffer[i])) {
+ return false;
+ }
+ }
+ tmp.swap(target);
+ return true;
+ }
+
+ template <typename stream, typename sequence>
+ bool insert_unbounded_sequence(stream & strm, const sequence & source) {
+ const CORBA::ULong length = source.length ();
+ if (!(strm << length)) {
+ return false;
+ }
+ for(CORBA::ULong i = 0; i < length; ++i) {
+ if (!(strm << source[i])) {
+ return false;
+ }
+ }
+ return true;
+ }
+ }
+}
+
+TAO_END_VERSIONED_NAMESPACE_DECL
+#endif /* guard_unbounded_sequence_cdr */
diff --git a/ace/Assert.cpp b/ace/Assert.cpp
new file mode 100644
index 00000000000..c46d30793ab
--- /dev/null
+++ b/ace/Assert.cpp
@@ -0,0 +1,24 @@
+// $Id$
+
+#include "ace/Assert.h"
+#include "ace/Log_Msg.h"
+
+ACE_RCSID(ace, Assert, "$Id$")
+
+ACE_BEGIN_VERSIONED_NAMESPACE_DECL
+
+// The following ASSERT macro is courtesy of Alexandre Karev
+// <akg@na47sun05.cern.ch>.
+void
+__ace_assert(const char *file, int line, const ACE_TCHAR *expression)
+{
+ int error = ACE_Log_Msg::last_error_adapter ();
+ ACE_Log_Msg *log = ACE_Log_Msg::instance ();
+
+ log->set (file, line, -1, error, log->restart (),
+ log->msg_ostream (), log->msg_callback ());
+
+ log->log (LM_ERROR, ACE_LIB_TEXT ("ACE_ASSERT: file %N, line %l assertion failed for '%s'.%a\n"), expression, -1);
+}
+
+ACE_END_VERSIONED_NAMESPACE_DECL
diff --git a/ace/Assert.h b/ace/Assert.h
new file mode 100644
index 00000000000..a8830394d52
--- /dev/null
+++ b/ace/Assert.h
@@ -0,0 +1,38 @@
+// -*- C++ -*-
+
+//=============================================================================
+/**
+ * @file Assert.h
+ *
+ * $Id$
+ *
+ * @author Douglas C. Schmidt <schmidt@cs.wustl.edu>
+ */
+//=============================================================================
+
+#ifndef ACE_ASSERT_H
+#define ACE_ASSERT_H
+
+#include /**/ "ace/pre.h"
+
+#include "ace/ACE_export.h"
+
+#include "ace/config-all.h"
+
+ACE_BEGIN_VERSIONED_NAMESPACE_DECL
+ACE_Export void __ace_assert(const char *file, int line, const ACE_TCHAR *expression);
+ACE_END_VERSIONED_NAMESPACE_DECL
+
+#if defined (ACE_NDEBUG)
+#define ACE_ASSERT(x) \
+ (static_cast<void>(0))
+#else
+#define ACE_ASSERT(X) \
+ ((X) \
+ ? static_cast<void>(0) \
+ : ACE_VERSIONED_NAMESPACE_NAME::__ace_assert(__FILE__, __LINE__, ACE_TEXT_CHAR_TO_TCHAR (#X)))
+#endif /* ACE_NDEBUG */
+
+#include /**/ "ace/post.h"
+
+#endif /* ACE_ASSERT */
diff --git a/ace/Encoding_Converter.cpp b/ace/Encoding_Converter.cpp
new file mode 100644
index 00000000000..60e561ea534
--- /dev/null
+++ b/ace/Encoding_Converter.cpp
@@ -0,0 +1,12 @@
+// $Id$
+#include "ace/Encoding_Converter.h"
+
+#if defined (ACE_USES_WCHAR)
+ACE_BEGIN_VERSIONED_NAMESPACE_DECL
+
+ACE_Encoding_Converter::~ACE_Encoding_Converter (void)
+{
+}
+
+ACE_END_VERSIONED_NAMESPACE_DECL
+#endif /* ACE_USES_WCHAR */
diff --git a/ace/Encoding_Converter.h b/ace/Encoding_Converter.h
new file mode 100644
index 00000000000..72cce176244
--- /dev/null
+++ b/ace/Encoding_Converter.h
@@ -0,0 +1,70 @@
+// -*- C++ -*-
+
+//=========================================================================
+/**
+ * @file Encoding_Converter.h
+ *
+ * $Id$
+ *
+ * This class is the base class for all encoding converters that convert
+ * to and from UTF-8.
+ *
+ * @author Chad Elliott <elliott_c@ociweb.com>
+ */
+//=========================================================================
+
+#ifndef ACE_ENCODING_CONVERTER_H
+#define ACE_ENCODING_CONVERTER_H
+
+#include /**/ "ace/pre.h"
+
+#include "ace/Basic_Types.h"
+
+#if defined (ACE_USES_WCHAR)
+#include "ace/ACE_export.h"
+
+ACE_BEGIN_VERSIONED_NAMESPACE_DECL
+
+/** The base class for all ACE UTF Encoding Converters.
+ * This class provides a generic interface that is used to implement
+ * various UTF encoding conversion classes.
+ */
+class ACE_Export ACE_Encoding_Converter
+{
+public:
+ /// This enum describes the various states that can be returned
+ /// from the to_utf8() and from_utf8() methods which depends on
+ /// both the source buffer and the size of the target buffer.
+ enum Result {CONVERSION_OK,
+ SOURCE_EXHAUSTED,
+ TARGET_EXHAUSTED,
+ SOURCE_ILLEGAL
+ };
+
+ /// This destructor is here (and virtual) because we have virtual
+ /// functions.
+ virtual ~ACE_Encoding_Converter (void);
+
+ /// Convert the source (which can be in any encoding) to UTF-8 and
+ /// store it in the provided target buffer.
+ virtual Result to_utf8 (const void* source,
+ size_t source_size,
+ ACE_Byte* target,
+ size_t target_size,
+ bool strict = true) = 0;
+
+ /// Convert the UTF-8 source into an alternate encoding and store it
+ /// in the provided target buffer.
+ virtual Result from_utf8 (const ACE_Byte* source,
+ size_t source_size,
+ void* target,
+ size_t target_size,
+ bool strict = true) = 0;
+};
+
+ACE_END_VERSIONED_NAMESPACE_DECL
+#endif /* ACE_USES_WCHAR */
+
+#include /**/ "ace/post.h"
+
+#endif /* ACE_ENCODING_CONVERTER_H */
diff --git a/ace/Encoding_Converter_Factory.cpp b/ace/Encoding_Converter_Factory.cpp
new file mode 100644
index 00000000000..d0c99599870
--- /dev/null
+++ b/ace/Encoding_Converter_Factory.cpp
@@ -0,0 +1,74 @@
+// $Id$
+#include "ace/Encoding_Converter_Factory.h"
+
+#if defined (ACE_USES_WCHAR)
+#include "ace/UTF32_Encoding_Converter.h"
+#include "ace/UTF16_Encoding_Converter.h"
+#include "ace/UTF8_Encoding_Converter.h"
+#include "ace/OS_Memory.h"
+
+ACE_BEGIN_VERSIONED_NAMESPACE_DECL
+
+ACE_Encoding_Converter*
+ACE_Encoding_Converter_Factory::create (
+ const ACE_Byte* source,
+ size_t source_size,
+ ACE_Encoding_Converter_Factory::Encoding_Hint hint)
+{
+#if defined (ACE_BIG_ENDIAN)
+ bool convert_for_bigendian = true;
+#else
+ bool convert_for_bigendian = false;
+#endif /* ACE_BIG_ENDIAN */
+ ACE_Encoding_Converter* converter = 0;
+
+ switch (hint)
+ {
+ case ACE_UTF_32BE:
+ ACE_NEW_RETURN (converter,
+ ACE_UTF32_Encoding_Converter (!convert_for_bigendian),
+ 0);
+ break;
+ case ACE_UTF_32LE:
+ ACE_NEW_RETURN (converter,
+ ACE_UTF32_Encoding_Converter (convert_for_bigendian),
+ 0);
+ break;
+ case ACE_UTF_16BE:
+ ACE_NEW_RETURN (converter,
+ ACE_UTF16_Encoding_Converter (!convert_for_bigendian),
+ 0);
+ break;
+ case ACE_UTF_16LE:
+ ACE_NEW_RETURN (converter,
+ ACE_UTF16_Encoding_Converter (convert_for_bigendian),
+ 0);
+ break;
+ case ACE_UTF_8:
+ ACE_NEW_RETURN (converter,
+ ACE_UTF8_Encoding_Converter,
+ 0);
+ break;
+ default:
+ // First check for ASCII since much of ASCII text will appear to
+ // convert from UTF-16 to UTF-8.
+ converter = ACE_UTF8_Encoding_Converter::encoded (source, source_size);
+ if (converter != 0)
+ return converter;
+
+ // Check for UTF-32
+ converter = ACE_UTF32_Encoding_Converter::encoded (source, source_size);
+ if (converter != 0)
+ return converter;
+
+ // Check for UTF-16
+ converter = ACE_UTF16_Encoding_Converter::encoded (source, source_size);
+ if (converter != 0)
+ return converter;
+ }
+
+ return converter;
+}
+
+ACE_END_VERSIONED_NAMESPACE_DECL
+#endif /* ACE_USES_WCHAR */
diff --git a/ace/Encoding_Converter_Factory.h b/ace/Encoding_Converter_Factory.h
new file mode 100644
index 00000000000..c4505ec8300
--- /dev/null
+++ b/ace/Encoding_Converter_Factory.h
@@ -0,0 +1,54 @@
+// -*- C++ -*-
+
+//=========================================================================
+/**
+ * @file Encoding_Converter_Factory.h
+ *
+ * $Id$
+ *
+ * This class can be used to create encoding converters of various types.
+ *
+ * @author Chad Elliott <elliott_c@ociweb.com>
+ */
+//=========================================================================
+
+#ifndef ACE_ENCODING_CONVERTER_FACTORY_H
+#define ACE_ENCODING_CONVERTER_FACTORY_H
+
+#include /**/ "ace/pre.h"
+
+#include "ace/Basic_Types.h"
+
+#if defined (ACE_USES_WCHAR)
+#include "ace/ACE_export.h"
+
+ACE_BEGIN_VERSIONED_NAMESPACE_DECL
+
+class ACE_Encoding_Converter;
+
+/** Create an encoding converter based on the source or hint.
+ * This class allows users to avoid knowing any concrete converter types.
+ */
+class ACE_Export ACE_Encoding_Converter_Factory
+{
+public:
+ /// This enum is used to tell what type of converter to create.
+ enum Encoding_Hint { ACE_UTF_32BE, ACE_UTF_32LE,
+ ACE_UTF_16BE, ACE_UTF_16LE,
+ ACE_UTF_8, ACE_NONE
+ };
+
+ /// Create an encoding converter based on the source. If a hint is
+ /// given, it just creates the specified type of converter without looking
+ /// at the source.
+ static ACE_Encoding_Converter* create (const ACE_Byte* source,
+ size_t source_size,
+ Encoding_Hint hint = ACE_NONE);
+};
+
+ACE_END_VERSIONED_NAMESPACE_DECL
+#endif /* ACE_USES_WCHAR */
+
+#include /**/ "ace/post.h"
+
+#endif /* ACE_ENCODING_CONVERTER_FACTORY_H */
diff --git a/ace/Svc_Conf_Lexer.cpp b/ace/Svc_Conf_Lexer.cpp
new file mode 100644
index 00000000000..cf50a4a5789
--- /dev/null
+++ b/ace/Svc_Conf_Lexer.cpp
@@ -0,0 +1,656 @@
+// $Id$
+#include "ace/Svc_Conf_Lexer.h"
+
+#if (ACE_USES_CLASSIC_SVC_CONF == 1)
+
+#if defined (ACE_USES_WCHAR)
+#include "ace/Encoding_Converter.h"
+#include "ace/Encoding_Converter_Factory.h"
+#endif /* ACE_USES_WCHAR */
+
+#include "ace/Svc_Conf_Tokens.h"
+#include "ace/Recursive_Thread_Mutex.h"
+#include "ace/Static_Object_Lock.h"
+#include "ace/OS_NS_stdio.h"
+#include "ace/OS_NS_ctype.h"
+#include "ace/Guard_T.h"
+#include "ace/Synch_Traits.h"
+#include "ace/os_include/os_ctype.h"
+
+#if !defined (__GNUG__)
+# include "ace/Auto_Ptr.h"
+#endif
+
+ACE_BEGIN_VERSIONED_NAMESPACE_DECL
+
+#define ACE_YY_BUF_SIZE 4096
+#define ACE_MAX_BYTES_PER_CHAR 4
+#define ACE_YY_CONVERSION_SPACE ACE_YY_BUF_SIZE * ACE_MAX_BYTES_PER_CHAR
+
+#if defined (__GNUG__)
+# define ACE_TEMPORARY_STRING(X,SIZE) \
+ __extension__ char X[SIZE]
+#else
+# define ACE_TEMPORARY_STRING(X,SIZE) \
+ char* X = 0; \
+ char X ## buf[ACE_YY_BUF_SIZE]; \
+ ACE_Auto_Ptr<char> X ## bufp (0); \
+ if (SIZE > ACE_YY_BUF_SIZE) { \
+ X ## bufp.reset (new char[SIZE]); \
+ X = X ## bufp.get (); \
+ } \
+ else { \
+ X = X ## buf; \
+ }
+#endif /* __GNUG__ */
+
+// These are states not covered by the tokens in Svc_Conf_Tokens.h
+#define ACE_NO_STATE -1
+#define ACE_COMMENT 0
+
+struct ace_yy_buffer_state
+{
+ ace_yy_buffer_state (void)
+ : input_ (),
+ index_ (0),
+ size_ (0),
+ start_ (0),
+ need_more_ (true),
+ eof_ (false),
+ state_ (ACE_NO_STATE),
+ string_start_ (0)
+#if defined (ACE_USES_WCHAR)
+ , converter_ (0)
+#endif /* ACE_USES_WCHAR */
+ {
+ }
+
+ ~ace_yy_buffer_state (void)
+ {
+#if defined (ACE_USES_WCHAR)
+ delete converter_;
+#endif /* ACE_USES_WCHAR */
+ }
+
+ // Input related
+ char input_[ACE_YY_CONVERSION_SPACE];
+ size_t index_;
+ size_t size_;
+ size_t start_;
+ bool need_more_;
+ bool eof_;
+
+ // Parsing related
+ int state_;
+ char string_start_;
+
+#if defined (ACE_USES_WCHAR)
+ // Code set conversion related
+ ACE_Encoding_Converter* converter_;
+#endif /* ACE_USES_WCHAR */
+};
+
+// ******************************************************************
+// Global functions
+// ******************************************************************
+
+int
+ace_yylex (ACE_YYSTYPE *ace_yylval, void *ACE_YYLEX_PARAM)
+{
+ ACE_MT (ACE_GUARD_RETURN (ACE_SYNCH_RECURSIVE_MUTEX,
+ ace_mon,
+ *ACE_Static_Object_Lock::instance (),
+ -1));
+
+ return ACE_Svc_Conf_Lexer::yylex (ace_yylval, ACE_SVC_CONF_PARAM);
+
+}
+
+void
+ace_yy_delete_buffer (ace_yy_buffer_state *buffer)
+{
+ delete buffer;
+}
+
+// ******************************************************************
+// Inline methods
+// ******************************************************************
+
+inline size_t
+normalize (size_t length)
+{
+ return (length >= ACE_MAX_BYTES_PER_CHAR ?
+ (length / ACE_MAX_BYTES_PER_CHAR) * ACE_MAX_BYTES_PER_CHAR :
+ length);
+}
+
+// ******************************************************************
+// Static class methods
+// ******************************************************************
+
+int
+ACE_Svc_Conf_Lexer::yylex (ACE_YYSTYPE* ace_yylval,
+ ACE_Svc_Conf_Param* param)
+{
+#if defined (ACE_USES_WCHAR)
+ bool look_for_bom = false;
+ ACE_Encoding_Converter_Factory::Encoding_Hint hint =
+ ACE_Encoding_Converter_Factory::ACE_NONE;
+#endif /* ACE_USES_WCHAR */
+ if (param->buffer == 0)
+ {
+#if defined (ACE_USES_WCHAR)
+ look_for_bom = true;
+#endif /* ACE_USES_WCHAR */
+ ACE_NEW_RETURN (param->buffer,
+ ace_yy_buffer_state,
+ -1);
+ }
+
+ int token = ACE_NO_STATE;
+ do {
+ if (param->buffer->need_more_)
+ {
+ size_t skip_bytes = 0;
+ param->buffer->need_more_ = false;
+ size_t amount =
+ input (param,
+ param->buffer->input_ + param->buffer->size_,
+ normalize (ACE_YY_BUF_SIZE -
+ param->buffer->size_));
+ if (amount == 0)
+ {
+ param->buffer->eof_ = true;
+ skip_bytes = param->buffer->size_;
+ }
+ else
+ {
+#if defined (ACE_USES_WCHAR)
+ if (look_for_bom)
+ {
+ size_t read_more = 0;
+
+ look_for_bom = false;
+ hint = locate_bom (param->buffer->input_, amount, read_more);
+
+ if (read_more != 0)
+ {
+ input (param,
+ param->buffer->input_ + amount,
+ read_more);
+ ACE_OS::memmove (param->buffer->input_,
+ param->buffer->input_ + read_more,
+ amount);
+ }
+ }
+#endif /* ACE_USES_WCHAR */
+ skip_bytes = param->buffer->size_;
+ param->buffer->size_ += amount;
+ }
+
+#if defined (ACE_USES_WCHAR)
+ if (!convert_to_utf8 (param, skip_bytes, hint))
+ {
+ ace_yyerror (++param->yyerrno,
+ param->yylineno,
+ "Unable to convert input stream to UTF-8");
+ return ACE_NO_STATE;
+ }
+#endif /* ACE_USES_WCHAR */
+ }
+
+ token = scan (ace_yylval, param);
+ } while (token == ACE_NO_STATE && param->buffer->need_more_);
+
+ return token;
+}
+
+size_t
+ACE_Svc_Conf_Lexer::input (ACE_Svc_Conf_Param* param,
+ char* buf, size_t max_size)
+{
+ size_t result = 0;
+
+ switch (param->type)
+ {
+ case ACE_Svc_Conf_Param::SVC_CONF_FILE:
+ errno = 0;
+ while ((result = ACE_OS::fread (buf, 1,
+ max_size, param->source.file)) == 0 &&
+ ferror (param->source.file))
+ {
+ if (errno == EINTR)
+ {
+ errno = 0;
+#if !defined (ACE_LACKS_CLEARERR)
+ ACE_OS::clearerr (param->source.file);
+#endif /* !ACE_LACKS_CLEARERR */
+ }
+ else
+ {
+ ACE_OS::fprintf (stderr, "ERROR: input in scanner failed\n");
+ ACE_OS::exit (2);
+ }
+ }
+ break;
+ case ACE_Svc_Conf_Param::SVC_CONF_DIRECTIVE:
+ result = ACE_OS::strlen (param->source.directive +
+ param->buffer->start_) * sizeof (ACE_TCHAR);
+ if (result != 0)
+ {
+ // Make sure that the amount we are going to copy
+ // fits in the buffer
+ if (result > max_size)
+ {
+ result = max_size;
+ }
+ ACE_OS::memcpy (buf,
+ param->source.directive + param->buffer->start_,
+ result);
+ param->buffer->start_ += (result / sizeof (ACE_TCHAR));
+ }
+ break;
+ default:
+ ace_yyerror (++param->yyerrno,
+ param->yylineno,
+ "Invalid Service Configurator type in "
+ "ACE_Svc_Conf_Lexer::input");
+ }
+
+ return result;
+}
+
+int
+ACE_Svc_Conf_Lexer::scan (ACE_YYSTYPE* ace_yylval,
+ ACE_Svc_Conf_Param* param)
+
+{
+ ace_yy_buffer_state* buffer = param->buffer;
+
+ // If we are not currently in any state, skip over whitespace
+ if (buffer->state_ == ACE_NO_STATE)
+ {
+ while (buffer->index_ < buffer->size_ &&
+ isspace (buffer->input_[buffer->index_]))
+ {
+ // Make sure that we count all of the new lines
+ if (buffer->input_[buffer->index_] == '\n')
+ {
+ ++param->yylineno;
+ }
+ ++buffer->index_;
+ }
+ }
+
+ size_t current;
+ size_t last = buffer->size_ + (buffer->eof_ ? 1 : 0);
+ for (current = buffer->index_; current < last; current++)
+ {
+ static const char* separators = " \t\r\n:*(){}";
+ char c = (buffer->eof_ && current == buffer->size_ ?
+ '\n' : buffer->input_[current]);
+ switch (buffer->state_)
+ {
+ case ACE_COMMENT:
+ if (c == '\n')
+ {
+ buffer->state_ = ACE_NO_STATE;
+ buffer->index_ = current + 1;
+ ++param->yylineno;
+ }
+ break;
+ case ACE_STRING:
+ if (!(c >= ' ' && c <= '~'))
+ {
+ // The character at currrent is definitely not part of
+ // the string so we need to move current back one.
+ --current;
+
+ // Get the starting point of our string (skipping the quote)
+ char* source = buffer->input_ + buffer->index_ + 1;
+
+ // Now, we need to move back in the string until we find the
+ // same character that started the string
+ bool string_end_found = false;
+ for(ssize_t i = (current - 1) - buffer->index_; i >= 0; i--)
+ {
+ if (source[i] == buffer->string_start_)
+ {
+ current = buffer->index_ + i + 1;
+ string_end_found = true;
+ break;
+ }
+ }
+
+ if (!string_end_found)
+ {
+ ace_yyerror (++param->yyerrno,
+ param->yylineno,
+ "Unable to find the end of the string");
+ return ACE_NO_STATE;
+ }
+
+ size_t amount = (current - buffer->index_) - 1;
+#if defined (ACE_USES_WCHAR)
+ ACE_TCHAR target[ACE_YY_CONVERSION_SPACE] = ACE_TEXT ("");
+ size_t length = 0;
+ if (!convert_from_utf8 (buffer->converter_,
+ source,
+ amount,
+ target,
+ ACE_YY_CONVERSION_SPACE,
+ length))
+ {
+ ace_yyerror (++param->yyerrno,
+ param->yylineno,
+ "Unable to convert string from UTF-8");
+ return ACE_NO_STATE;
+ }
+ amount = length;
+#else
+ char* target = source;
+#endif /* ACE_USES_WCHAR */
+ ace_yylval->ident_ = param->obstack.copy (target, amount);
+ buffer->state_ = ACE_NO_STATE;
+ buffer->index_ = current + 1;
+ return ACE_STRING;
+ }
+ break;
+ case ACE_NO_STATE:
+ if (c == '"' || c == '\'')
+ {
+ buffer->string_start_ = c;
+ buffer->state_ = ACE_STRING;
+ }
+ else if (c == '#')
+ {
+ buffer->state_ = ACE_COMMENT;
+ }
+ else if (ACE_OS::strchr (separators, c) != 0)
+ {
+ if (c == '\n')
+ {
+ ++param->yylineno;
+ }
+
+ if (current == buffer->index_ + 1)
+ {
+ int lower = ACE_OS::ace_tolower (
+ buffer->input_[current - 1]);
+ if (c == ':' &&
+ (buffer->input_[current - 1] == '%' ||
+ (lower >= 'a' && lower <= 'z')))
+ {
+ // This is considered a path, so we need to
+ // skip over the ':' and go around the loop
+ // again
+ break;
+ }
+ }
+
+ if (current == buffer->index_)
+ {
+ buffer->index_ = current + 1;
+ if (isspace (c))
+ {
+ // This is an empty line.
+ // Let's look for something else.
+ break;
+ }
+ else
+ {
+ return c;
+ }
+ }
+
+ // String from buffer->index_ to current (inclusive)
+ size_t size = (current - buffer->index_) + 1;
+ ACE_TEMPORARY_STRING (str, size);
+ ACE_OS::strncpy (str, buffer->input_ + buffer->index_,
+ size - 1);
+ str[size - 1] = '\0';
+
+
+ if (ACE_OS::strcmp (str, "dynamic") == 0)
+ {
+ buffer->index_ = current;
+ return ACE_DYNAMIC;
+ }
+ else if (ACE_OS::strcmp (str, "static") == 0)
+ {
+ buffer->index_ = current;
+ return ACE_STATIC;
+ }
+ else if (ACE_OS::strcmp (str, "suspend") == 0)
+ {
+ buffer->index_ = current;
+ return ACE_SUSPEND;
+ }
+ else if (ACE_OS::strcmp (str, "resume") == 0)
+ {
+ buffer->index_ = current;
+ return ACE_RESUME;
+ }
+ else if (ACE_OS::strcmp (str, "remove") == 0)
+ {
+ buffer->index_ = current;
+ return ACE_REMOVE;
+ }
+ else if (ACE_OS::strcmp (str, "stream") == 0)
+ {
+ buffer->index_ = current;
+ return ACE_USTREAM;
+ }
+ else if (ACE_OS::strcmp (str, "Module") == 0)
+ {
+ buffer->index_ = current;
+ return ACE_MODULE_T;
+ }
+ else if (ACE_OS::strcmp (str, "Service_Object") == 0)
+ {
+ buffer->index_ = current;
+ return ACE_SVC_OBJ_T;
+ }
+ else if (ACE_OS::strcmp (str, "STREAM") == 0)
+ {
+ buffer->index_ = current;
+ return ACE_STREAM_T;
+ }
+ else if (ACE_OS::strcmp (str, "active") == 0)
+ {
+ buffer->index_ = current;
+ return ACE_ACTIVE;
+ }
+ else if (ACE_OS::strcmp (str, "inactive") == 0)
+ {
+ buffer->index_ = current;
+ return ACE_INACTIVE;
+ }
+ else
+ {
+ // Get the string and save it in ace_yylval
+ int token = ACE_IDENT;
+ size_t amount = size - 1;
+#if defined (ACE_USES_WCHAR)
+ ACE_TCHAR target[ACE_YY_CONVERSION_SPACE] = ACE_TEXT ("");
+ size_t length = 0;
+ if (!convert_from_utf8 (buffer->converter_,
+ str,
+ amount,
+ target,
+ ACE_YY_CONVERSION_SPACE,
+ length))
+ {
+ ace_yyerror (++param->yyerrno,
+ param->yylineno,
+ "Unable to convert "
+ "identifier from UTF-8");
+ return ACE_NO_STATE;
+ }
+ amount = length;
+#else
+ char* target = str;
+#endif /* ACE_USES_WCHAR */
+ ace_yylval->ident_ = param->obstack.copy (target, amount);
+
+ // Determine the difference between pathname and ident
+ if (ACE_OS::ace_isdigit (ace_yylval->ident_[0]))
+ {
+ token = ACE_PATHNAME;
+ }
+ else
+ {
+ static const ACE_TCHAR* path_parts =
+ ACE_TEXT ("/\\:%.~-");
+ for (const ACE_TCHAR* p = path_parts; *p != '\0'; p++)
+ {
+ if (ACE_OS::strchr (ace_yylval->ident_, *p) != 0)
+ {
+ token = ACE_PATHNAME;
+ break;
+ }
+ }
+ }
+
+ buffer->state_ = ACE_NO_STATE;
+ buffer->index_ = current;
+ return token;
+ }
+ }
+ break;
+ default:
+ ace_yyerror (++param->yyerrno,
+ param->yylineno,
+ "Unexpected state in ACE_Svc_Conf_Lexer::scan");
+ return ACE_NO_STATE;
+ }
+ }
+
+ // We need more from the input source so, we will move the remainder of
+ // the buffer to the front and signal that we need more
+ if (!buffer->eof_)
+ {
+ buffer->need_more_ = true;
+ if (buffer->state_ == ACE_COMMENT)
+ {
+ buffer->index_ = 0;
+ buffer->size_ = 0;
+ }
+ else
+ {
+ buffer->size_ = current - buffer->index_;
+ if (buffer->size_ != 0 && buffer->index_ != 0)
+ ACE_OS::memmove (buffer->input_,
+ buffer->input_ + buffer->index_, buffer->size_);
+ buffer->index_ = 0;
+ buffer->state_ = ACE_NO_STATE;
+ }
+ }
+ return ACE_NO_STATE;
+}
+
+#if defined (ACE_USES_WCHAR)
+
+bool
+ACE_Svc_Conf_Lexer::convert_to_utf8 (
+ ACE_Svc_Conf_Param* param,
+ size_t skip_bytes,
+ ACE_Encoding_Converter_Factory::Encoding_Hint hint)
+{
+ bool status = false;
+ if (param->buffer->converter_ == 0)
+ {
+ param->buffer->converter_ =
+ ACE_Encoding_Converter_Factory::create (
+ reinterpret_cast<ACE_Byte*> (param->buffer->input_ + skip_bytes),
+ param->buffer->size_ - skip_bytes,
+ hint);
+ }
+
+ if (param->buffer->converter_ != 0)
+ {
+ char target[ACE_YY_CONVERSION_SPACE] = "";
+ if (param->buffer->converter_->to_utf8 (
+ param->buffer->input_ + skip_bytes,
+ param->buffer->size_ - skip_bytes,
+ reinterpret_cast<ACE_Byte*> (target),
+ ACE_YY_CONVERSION_SPACE) == ACE_Encoding_Converter::CONVERSION_OK)
+ {
+ ACE_OS::strcpy (param->buffer->input_ + skip_bytes, target);
+ param->buffer->size_ = ACE_OS::strlen (target) + skip_bytes;
+ status = true;
+ }
+ }
+
+ return status;
+}
+
+bool
+ACE_Svc_Conf_Lexer::convert_from_utf8 (ACE_Encoding_Converter* converter,
+ const char* source,
+ size_t source_size,
+ ACE_TCHAR* target,
+ size_t target_size,
+ size_t& length)
+{
+ if (converter != 0)
+ {
+ if (converter->from_utf8 (
+ reinterpret_cast <const ACE_Byte*> (source),
+ source_size,
+ target,
+ target_size) != ACE_Encoding_Converter::CONVERSION_OK)
+ {
+ return false;
+ }
+ }
+ else
+ {
+ ACE_OS::strncpy (target, ACE_TEXT_CHAR_TO_TCHAR (source), source_size);
+ target[source_size] = 0;
+ }
+
+ length = ACE_OS::strlen (target);
+ return true;
+}
+
+ACE_Encoding_Converter_Factory::Encoding_Hint
+ACE_Svc_Conf_Lexer::locate_bom (char* source,
+ size_t source_size,
+ size_t& bytes_used)
+{
+ struct bom {
+ size_t length_;
+ const char* data_;
+ ACE_Encoding_Converter_Factory::Encoding_Hint hint_;
+ };
+ static const bom boms[] = {
+ { 4, "\x00\x00\xfe\xff", ACE_Encoding_Converter_Factory::ACE_UTF_32BE },
+ { 4, "\xff\xfe\x00\x00", ACE_Encoding_Converter_Factory::ACE_UTF_32LE },
+ { 2, "\xfe\xff", ACE_Encoding_Converter_Factory::ACE_UTF_16BE },
+ { 2, "\xff\xfe", ACE_Encoding_Converter_Factory::ACE_UTF_16LE },
+ { 3, "\xef\xbb\xbf", ACE_Encoding_Converter_Factory::ACE_UTF_8 },
+ };
+
+ for (size_t i = 0; i < sizeof (boms) / sizeof (bom); i++)
+ {
+ if (source_size >= boms[i].length_)
+ {
+ if (ACE_OS::memcmp (source,
+ boms[i].data_, boms[i].length_) == 0)
+ {
+ bytes_used = boms[i].length_;
+ return boms[i].hint_;
+ }
+ }
+ }
+
+ // No BOM was found
+ bytes_used = 0;
+ return ACE_Encoding_Converter_Factory::ACE_NONE;
+}
+
+#endif /* ACE_USES_WCHAR */
+
+ACE_END_VERSIONED_NAMESPACE_DECL
+#endif /* ACE_USES_CLASSIC_SVC_CONF = 1 */
diff --git a/ace/Svc_Conf_Lexer.h b/ace/Svc_Conf_Lexer.h
new file mode 100644
index 00000000000..387e7b7611f
--- /dev/null
+++ b/ace/Svc_Conf_Lexer.h
@@ -0,0 +1,70 @@
+// -*- C++ -*-
+
+//=========================================================================
+/**
+ * @file Svc_Conf_Lexer.h
+ *
+ * $Id$
+ *
+ * This class is a hand-coded replacement for the lexer generated from
+ * Svc_Conf.l that correctly supports Unicode.
+ *
+ * @author Chad Elliott <elliott_c@ociweb.com>
+ */
+//=========================================================================
+
+#ifndef SVC_CONF_LEXER_H
+#define SVC_CONF_LEXER_H
+
+#include /**/ "ace/pre.h"
+#include "ace/Svc_Conf.h"
+
+#if (ACE_USES_CLASSIC_SVC_CONF == 1)
+#include "ace/Encoding_Converter_Factory.h"
+
+class ACE_Encoding_Converter;
+
+ACE_BEGIN_VERSIONED_NAMESPACE_DECL
+
+/** This class lexes the classic ACE Service Configurator language.
+ * The entry point is similar to what flex would generate. However, it
+ * is a static method in this class (which is really just name space).
+ */
+class ACE_Svc_Conf_Lexer
+{
+public:
+ /// This is similar to the C function, ace_yylex, which a bison
+ /// generated parser expects. It returns information in the ace_yylval
+ /// parameter and uses input stored in the param parameter.
+ static int yylex (ACE_YYSTYPE* ace_yylval,
+ ACE_Svc_Conf_Param* param);
+
+private:
+ static size_t input(ACE_Svc_Conf_Param* param, char* buf, size_t max_size);
+
+ static int scan (ACE_YYSTYPE* ace_yylval, ACE_Svc_Conf_Param* param);
+
+#if defined (ACE_USES_WCHAR)
+ static bool convert_to_utf8 (
+ ACE_Svc_Conf_Param* param,
+ size_t skip_bytes,
+ ACE_Encoding_Converter_Factory::Encoding_Hint hint);
+ static bool convert_from_utf8 (ACE_Encoding_Converter* converter,
+ const char* source,
+ size_t source_size,
+ ACE_TCHAR* target,
+ size_t target_size,
+ size_t& length);
+ static ACE_Encoding_Converter_Factory::Encoding_Hint
+ locate_bom (char* source,
+ size_t source_size,
+ size_t& bytes_used);
+#endif /* ACE_USES_WCHAR */
+};
+
+ACE_END_VERSIONED_NAMESPACE_DECL
+#endif /* ACE_USES_CLASSIC_SVC_CONF = 1 */
+
+#include /**/ "ace/post.h"
+
+#endif /* SVC_CONF_LEXER_H */
diff --git a/ace/Truncate.h b/ace/Truncate.h
new file mode 100644
index 00000000000..de347d1dc06
--- /dev/null
+++ b/ace/Truncate.h
@@ -0,0 +1,84 @@
+// -*- C++ -*-
+//=============================================================================
+/**
+ * @file Truncate.h
+ *
+ * $Id$
+ *
+ * @author Steve Huston <shuston@riverace.com>
+ */
+//=============================================================================
+#ifndef ACE_TRUNCATE_H
+#define ACE_TRUNCATE_H
+#include /**/ "ace/pre.h"
+
+#include "ace/config-all.h"
+
+#if !defined (ACE_LACKS_PRAGMA_ONCE)
+# pragma once
+#endif /* ACE_LACKS_PRAGMA_ONCE */
+
+#include "ace/Global_Macros.h"
+
+#if !defined(ACE_LACKS_NUMERIC_LIMITS)
+// some platforms pollute the namespace by defining max() and min() macros
+# ifdef max
+# undef max
+# endif
+# ifdef min
+# undef min
+# endif
+# include <limits>
+#else
+# include "ace/os_include/os_limits.h"
+#endif /* ACE_LACKS_NUMERIC_LIMITS */
+
+ACE_BEGIN_VERSIONED_NAMESPACE_DECL
+
+namespace ACE_Utils
+{
+/**
+ * @class Truncate
+ *
+ * @brief Helper function to truncate an integral value to an int.
+ *
+ * Very useful since ACE methods return int very often and the value's
+ * source is often a different-size integral type, such as size_t.
+ * This function hides the truncation logic and resolves compiler
+ * diagnostics.
+ *
+ * @internal Internal use only.
+ */
+template<typename X>
+inline int Truncate (const X& val)
+{
+#if !defined (ACE_LACKS_NUMERIC_LIMITS)
+ if (val > static_cast<X> (std::numeric_limits<int>::max ()))
+ return std::numeric_limits<int>::max ();
+#else
+ if (val > static_cast<X> (INT_MAX))
+ return INT_MAX;
+#endif /* ACE_LACKS_NUMERIC_LIMITS */
+ return static_cast<int> (val);
+}
+
+// Specialize one for size_t to alleviate the explicit instantiation pain.
+template<>
+inline int Truncate<size_t> (const size_t& val)
+{
+#if !defined (ACE_LACKS_NUMERIC_LIMITS)
+ if (val > static_cast<size_t> (std::numeric_limits<int>::max ()))
+ return std::numeric_limits<int>::max ();
+#else
+ if (val > static_cast<size_t> (INT_MAX))
+ return INT_MAX;
+#endif /* ACE_LACKS_NUMERIC_LIMITS */
+ return static_cast<int> (val);
+}
+
+} // namespace ACE_Utils
+
+ACE_END_VERSIONED_NAMESPACE_DECL
+
+#include /**/ "ace/post.h"
+#endif /* ACE_TRUNCATE_H*/
diff --git a/ace/UTF16_Encoding_Converter.cpp b/ace/UTF16_Encoding_Converter.cpp
new file mode 100644
index 00000000000..d57ab9e5154
--- /dev/null
+++ b/ace/UTF16_Encoding_Converter.cpp
@@ -0,0 +1,364 @@
+// $Id$
+
+// ======================================================================
+//
+// The actual conversion methods are covered by the copyright information
+// below. It is not the actual code provided by Unicode, Inc. but is an
+// ACE-ified and only slightly modified version.
+// Chad Elliott 4/28/2005
+//
+// Copyright 2001-2004 Unicode, Inc.
+//
+// Limitations on Rights to Redistribute This Code
+//
+// Unicode, Inc. hereby grants the right to freely use the information
+// supplied in this file in the creation of products supporting the
+// Unicode Standard, and to make copies of this file in any form
+// for internal or external distribution as long as this notice
+// remains attached.
+//
+// ======================================================================
+
+#include "ace/UTF16_Encoding_Converter.h"
+
+#if defined (ACE_USES_WCHAR)
+#include "ace/OS_NS_stdio.h"
+#include "ace/OS_Memory.h"
+#include "ace/Min_Max.h"
+
+#if !defined (__ACE_INLINE__)
+#include "ace/UTF16_Encoding_Converter.inl"
+#endif /* __ACE_INLINE__ */
+
+ACE_BEGIN_VERSIONED_NAMESPACE_DECL
+
+static const ACE_UINT32 halfShift = 10;
+static const ACE_UINT32 halfBase = 0x00010000;
+static const ACE_UINT32 halfMask = 0x000003FF;
+
+static const ACE_UINT32 UNI_SUR_HIGH_START = 0x0000D800;
+static const ACE_UINT32 UNI_SUR_HIGH_END = 0x0000DBFF;
+static const ACE_UINT32 UNI_SUR_LOW_START = 0x0000DC00;
+static const ACE_UINT32 UNI_SUR_LOW_END = 0x0000DFFF;
+static const ACE_UINT32 UNI_REPLACEMENT_CHAR = 0x0000FFFD;
+static const ACE_UINT32 UNI_MAX_BMP = 0x0000FFFF;
+static const ACE_UINT32 UNI_MAX_UTF16 = 0x0010FFFF;
+
+// Once the bits are split out into bytes of UTF-8, this is a mask OR-ed
+// into the first byte, depending on how many bytes follow. There are
+// as many entries in this table as there are UTF-8 sequence types.
+// (I.e., one byte sequence, two byte... etc.). Remember that sequencs
+// for *legal* UTF-8 will be 4 or fewer bytes total.
+static const ACE_Byte firstByteMark[7] = { 0x00, 0x00, 0xC0,
+ 0xE0, 0xF0, 0xF8, 0xFC };
+
+// Index into the table below with the first byte of a UTF-8 sequence to
+// get the number of trailing bytes that are supposed to follow it.
+// Note that *legal* UTF-8 values can't have 4 or 5-bytes. The table is
+// left as-is for anyone who may want to do such conversion, which was
+// allowed in earlier algorithms.
+static const ACE_Byte trailingBytesForUTF8[256] = {
+ 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,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,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,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,
+ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+ 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, 3,3,3,3,3,3,3,3,4,4,4,4,5,5,5,5
+};
+
+// Magic values subtracted from a buffer value during UTF8 conversion.
+// This table contains as many values as there might be trailing bytes
+// in a UTF-8 sequence.
+static const ACE_UINT32 offsetsFromUTF8[6] = { 0x00000000, 0x00003080,
+ 0x000E2080, 0x03C82080,
+ 0xFA082080, 0x82082080 };
+
+
+ACE_UTF16_Encoding_Converter::ACE_UTF16_Encoding_Converter (bool swap)
+ : swap_ (swap)
+{
+}
+
+ACE_UTF16_Encoding_Converter::~ACE_UTF16_Encoding_Converter (void)
+{
+}
+
+ACE_UTF16_Encoding_Converter::Result
+ACE_UTF16_Encoding_Converter::to_utf8 (const void* source,
+ size_t source_size,
+ ACE_Byte* target,
+ size_t target_size,
+ bool strict)
+{
+ static const ACE_UINT32 byteMask = 0xBF;
+ static const ACE_UINT32 byteMark = 0x80;
+ Result result = CONVERSION_OK;
+
+ ACE_Byte* targetEnd = target + target_size;
+ const ACE_UINT16* sourceStart = static_cast<const ACE_UINT16*> (source);
+ const ACE_UINT16* sourceEnd = sourceStart +
+ (source_size / sizeof (ACE_UINT16));
+
+ while (sourceStart < sourceEnd)
+ {
+ ACE_UINT16 nw = *sourceStart++;
+ ACE_UINT32 ch = (this->swap_ ? ACE_SWAP_WORD (nw) : nw);
+
+ // If we have a surrogate pair, convert to ACE_UINT32 first.
+ if (ch >= UNI_SUR_HIGH_START && ch <= UNI_SUR_HIGH_END)
+ {
+ // If the 16 bits following the high surrogate are in the
+ // sourceStart buffer...
+ if (sourceStart < sourceEnd)
+ {
+ ACE_UINT32 ch2 = (this->swap_ ? ACE_SWAP_WORD (*sourceStart) :
+ *sourceStart);
+ // If it's a low surrogate, convert to ACE_UINT32.
+ if (ch2 >= UNI_SUR_LOW_START && ch2 <= UNI_SUR_LOW_END)
+ {
+ ch = ((ch - UNI_SUR_HIGH_START) << halfShift)
+ + (ch2 - UNI_SUR_LOW_START) + halfBase;
+ ++sourceStart;
+ }
+ else if (strict)
+ {
+ // it's an unpaired high surrogate
+ result = SOURCE_ILLEGAL;
+ break;
+ }
+ }
+ else
+ {
+ // We don't have the 16 bits following the high surrogate.
+ result = SOURCE_EXHAUSTED;
+ break;
+ }
+ }
+ else if (strict)
+ {
+ // UTF-16 surrogate values are illegal in UTF-32
+ if (ch >= UNI_SUR_LOW_START && ch <= UNI_SUR_LOW_END)
+ {
+ result = SOURCE_ILLEGAL;
+ break;
+ }
+ }
+
+ // Figure out how many bytes the result will require
+ unsigned short bytesToWrite = 0;
+ if (ch < 0x80)
+ bytesToWrite = 1;
+ else if (ch < 0x800)
+ bytesToWrite = 2;
+ else if (ch < 0x10000)
+ bytesToWrite = 3;
+ else if (ch < 0x110000)
+ bytesToWrite = 4;
+ else
+ {
+ bytesToWrite = 3;
+ ch = UNI_REPLACEMENT_CHAR;
+ }
+
+ target += bytesToWrite;
+ if (target > targetEnd)
+ {
+ result = TARGET_EXHAUSTED;
+ break;
+ }
+
+ // NOTE: Everything falls through for efficiency purposes.
+ switch (bytesToWrite)
+ {
+ case 4:
+ *--target = (ACE_Byte)((ch | byteMark) & byteMask);
+ ch >>= 6;
+ case 3:
+ *--target = (ACE_Byte)((ch | byteMark) & byteMask);
+ ch >>= 6;
+ case 2:
+ *--target = (ACE_Byte)((ch | byteMark) & byteMask);
+ ch >>= 6;
+ case 1:
+ *--target = (ACE_Byte)(ch | firstByteMark[bytesToWrite]);
+ }
+ target += bytesToWrite;
+ }
+
+ return result;
+}
+
+ACE_UTF16_Encoding_Converter::Result
+ACE_UTF16_Encoding_Converter::from_utf8 (const ACE_Byte* source,
+ size_t source_size,
+ void* target,
+ size_t target_size,
+ bool strict)
+{
+ Result result = CONVERSION_OK;
+ const ACE_Byte* sourceEnd = source + source_size;
+ ACE_UINT16* targetStart = static_cast<ACE_UINT16*> (target);
+ ACE_UINT16* targetEnd = targetStart + target_size;
+
+ while (source < sourceEnd)
+ {
+ ACE_UINT32 ch = 0;
+ unsigned short extraBytesToRead = trailingBytesForUTF8[*source];
+ if (source + extraBytesToRead >= sourceEnd)
+ {
+ result = SOURCE_EXHAUSTED;
+ break;
+ }
+
+ // Do this check whether lenient or strict
+ if (!this->is_legal_utf8 (source, extraBytesToRead + 1))
+ {
+ result = SOURCE_ILLEGAL;
+ break;
+ }
+
+ // The cases all fall through. See "Note A" below.
+ switch (extraBytesToRead)
+ {
+ case 5: // remember, illegal UTF-8
+ ch += *source++;
+ ch <<= 6;
+ case 4: // remember, illegal UTF-8
+ ch += *source++;
+ ch <<= 6;
+ case 3:
+ ch += *source++;
+ ch <<= 6;
+ case 2:
+ ch += *source++;
+ ch <<= 6;
+ case 1:
+ ch += *source++;
+ ch <<= 6;
+ case 0:
+ ch += *source++;
+ }
+ ch -= offsetsFromUTF8[extraBytesToRead];
+
+ if (targetStart >= targetEnd)
+ {
+ result = TARGET_EXHAUSTED;
+ break;
+ }
+
+ if (ch <= UNI_MAX_BMP) // Target is a character <= 0xFFFF
+ {
+ // UTF-16 surrogate values are illegal in UTF-32
+ if (ch >= UNI_SUR_HIGH_START && ch <= UNI_SUR_LOW_END)
+ {
+ if (strict)
+ {
+ result = SOURCE_ILLEGAL;
+ break;
+ }
+ else
+ {
+ *targetStart++ = UNI_REPLACEMENT_CHAR;
+ }
+ }
+ else
+ {
+ *targetStart++ = (ACE_UINT16)ch;
+ }
+ }
+ else if (ch > UNI_MAX_UTF16)
+ {
+ if (strict)
+ {
+ result = SOURCE_ILLEGAL;
+ break;
+ }
+ else
+ {
+ *targetStart++ = UNI_REPLACEMENT_CHAR;
+ }
+ }
+ else
+ {
+ // targetStart is a character in range 0xFFFF - 0x10FFFF.
+ if (targetStart + 1 >= targetEnd)
+ {
+ result = TARGET_EXHAUSTED;
+ break;
+ }
+ ch -= halfBase;
+ *targetStart++ = (ACE_UINT16)((ch >> halfShift) + UNI_SUR_HIGH_START);
+ *targetStart++ = (ACE_UINT16)((ch & halfMask) + UNI_SUR_LOW_START);
+ }
+ }
+
+ return result;
+}
+
+ACE_UTF16_Encoding_Converter*
+ACE_UTF16_Encoding_Converter::encoded (const ACE_Byte* source,
+ size_t source_size)
+{
+ static const size_t begin = 16;
+ static const size_t converted = begin * 4;
+
+ ACE_Byte target[converted];
+ ACE_UTF16_Encoding_Converter* converter;
+ ACE_NEW_RETURN (converter,
+ ACE_UTF16_Encoding_Converter (false),
+ 0);
+ if (converter->to_utf8 (source,
+ ACE_MIN (begin, source_size),
+ target,
+ converted) == CONVERSION_OK)
+ {
+ return converter;
+ }
+ else
+ {
+ delete converter;
+ }
+
+ return 0;
+}
+
+ACE_UINT32
+ACE_UTF16_Encoding_Converter::get_UNI_SUR_HIGH_START (void)
+{
+ return UNI_SUR_HIGH_START;
+}
+
+ACE_UINT32
+ACE_UTF16_Encoding_Converter::get_UNI_SUR_LOW_END (void)
+{
+ return UNI_SUR_LOW_END;
+}
+
+ACE_UINT32
+ACE_UTF16_Encoding_Converter::get_UNI_REPLACEMENT_CHAR (void)
+{
+ return UNI_REPLACEMENT_CHAR;
+}
+
+const ACE_Byte*
+ACE_UTF16_Encoding_Converter::get_first_byte_mark (void)
+{
+ return firstByteMark;
+}
+
+const ACE_Byte*
+ACE_UTF16_Encoding_Converter::get_trailing_bytes_for_utf8 (void)
+{
+ return trailingBytesForUTF8;
+}
+
+const ACE_UINT32*
+ACE_UTF16_Encoding_Converter::get_offsets_from_utf8 (void)
+{
+ return offsetsFromUTF8;
+}
+
+ACE_END_VERSIONED_NAMESPACE_DECL
+#endif /* ACE_USES_WCHAR */
diff --git a/ace/UTF16_Encoding_Converter.h b/ace/UTF16_Encoding_Converter.h
new file mode 100644
index 00000000000..82d8255b286
--- /dev/null
+++ b/ace/UTF16_Encoding_Converter.h
@@ -0,0 +1,86 @@
+// -*- C++ -*-
+
+//=========================================================================
+/**
+ * @file UTF16_Encoding_Converter.h
+ *
+ * $Id$
+ *
+ * This class contains declarations for methods that convert between
+ * UTF-16 (both BE and LE) and UTF-8
+ *
+ * @author Chad Elliott <elliott_c@ociweb.com>
+ */
+//=========================================================================
+
+#ifndef ACE_UTF16_ENCODING_CONVERTER_H
+#define ACE_UTF16_ENCODING_CONVERTER_H
+
+#include /**/ "ace/pre.h"
+
+#include "ace/Encoding_Converter.h"
+
+#if defined (ACE_USES_WCHAR)
+ACE_BEGIN_VERSIONED_NAMESPACE_DECL
+
+/** Convert from UTF-16 to UTF-8 and from UTF-8 to UTF-16.
+ * This class implements the ACE_Encoding_Converter interface.
+ */
+class ACE_UTF16_Encoding_Converter: public ACE_Encoding_Converter
+{
+public:
+ /// The swap parameter determines whether we need to swap byte order on
+ /// the stream as each word is pulled off when converting to UTF-8.
+ ACE_UTF16_Encoding_Converter (bool swap = false);
+
+ /// This is a do nothing destructor.
+ virtual ~ACE_UTF16_Encoding_Converter (void);
+
+ /// Convert the source from UTF-16 to UTF-8 and store it in the
+ /// provided target buffer.
+ virtual Result to_utf8 (const void* source,
+ size_t source_size,
+ ACE_Byte* target,
+ size_t target_size,
+ bool strict = true);
+
+ /// Convert the UTF-8 source into a UTF-16 encoding and store it
+ /// in the provided target buffer.
+ virtual Result from_utf8 (const ACE_Byte* source,
+ size_t source_size,
+ void* target,
+ size_t target_size,
+ bool strict = true);
+
+ /// This factory helper method determines if the source stream is UTF-16
+ /// encoded. If it is, allocate an ACE_UTF16_Encoding_Converter and
+ /// return it. The caller then owns the allocated object.
+ static ACE_UTF16_Encoding_Converter* encoded (const ACE_Byte* source,
+ size_t source_size);
+
+protected:
+ /// Determines if the source buffer is legal UTF-8
+ bool is_legal_utf8 (const ACE_Byte* source,
+ size_t length) const;
+
+ static ACE_UINT32 get_UNI_SUR_HIGH_START (void);
+ static ACE_UINT32 get_UNI_SUR_LOW_END (void);
+ static ACE_UINT32 get_UNI_REPLACEMENT_CHAR (void);
+ static const ACE_Byte* get_first_byte_mark (void);
+ static const ACE_Byte* get_trailing_bytes_for_utf8 (void);
+ static const ACE_UINT32* get_offsets_from_utf8 (void);
+
+ bool swap_;
+};
+
+ACE_END_VERSIONED_NAMESPACE_DECL
+
+#if defined (__ACE_INLINE__)
+#include "ace/UTF16_Encoding_Converter.inl"
+#endif /* __ACE_INLINE__ */
+
+#endif /* ACE_USES_WCHAR */
+
+#include /**/ "ace/post.h"
+
+#endif /* ACE_UTF16_ENCODING_CONVERTER_H */
diff --git a/ace/UTF16_Encoding_Converter.inl b/ace/UTF16_Encoding_Converter.inl
new file mode 100644
index 00000000000..1c716092092
--- /dev/null
+++ b/ace/UTF16_Encoding_Converter.inl
@@ -0,0 +1,76 @@
+/* -*- C++ -*- */
+// $Id$
+
+// ======================================================================
+//
+// The actual conversion methods are covered by the copyright information
+// below.
+// Chad Elliott 4/28/2005
+//
+// Copyright 2001-2004 Unicode, Inc.
+//
+// Limitations on Rights to Redistribute This Code
+//
+// Unicode, Inc. hereby grants the right to freely use the information
+// supplied in this file in the creation of products supporting the
+// Unicode Standard, and to make copies of this file in any form
+// for internal or external distribution as long as this notice
+// remains attached.
+//
+// ======================================================================
+
+ACE_BEGIN_VERSIONED_NAMESPACE_DECL
+
+ACE_INLINE bool
+ACE_UTF16_Encoding_Converter::is_legal_utf8 (const ACE_Byte* source,
+ size_t length) const
+{
+ ACE_Byte a;
+ const ACE_Byte* srcptr = source + length;
+
+ switch (length)
+ {
+ default:
+ return false;
+
+ // Everything else falls through when "true"...
+ case 4: if ((a = (*--srcptr)) < 0x80 || a > 0xBF) return false;
+ case 3: if ((a = (*--srcptr)) < 0x80 || a > 0xBF) return false;
+ case 2: if ((a = (*--srcptr)) > 0xBF) return false;
+
+ switch (*source)
+ {
+ // no fall-through in this inner switch
+ case 0xE0:
+ if (a < 0xA0)
+ return false;
+ break;
+ case 0xED:
+ if (a > 0x9F)
+ return false;
+ break;
+ case 0xF0:
+ if (a < 0x90)
+ return false;
+ break;
+ case 0xF4:
+ if (a > 0x8F)
+ return false;
+ break;
+ default:
+ if (a < 0x80)
+ return false;
+ }
+
+ case 1:
+ if (*source >= 0x80 && *source < 0xC2)
+ return false;
+ }
+
+ if (*source > 0xF4)
+ return false;
+
+ return true;
+}
+
+ACE_END_VERSIONED_NAMESPACE_DECL
diff --git a/ace/UTF32_Encoding_Converter.cpp b/ace/UTF32_Encoding_Converter.cpp
new file mode 100644
index 00000000000..2280232e58a
--- /dev/null
+++ b/ace/UTF32_Encoding_Converter.cpp
@@ -0,0 +1,254 @@
+// $Id$
+
+// ======================================================================
+//
+// The actual conversion methods are covered by the copyright information
+// below. It is not the actual code provided by Unicode, Inc. but is an
+// ACE-ified and only slightly modified version.
+//
+// Chad Elliott 4/28/2005
+//
+// Copyright 2001-2004 Unicode, Inc.
+//
+// Limitations on Rights to Redistribute This Code
+//
+// Unicode, Inc. hereby grants the right to freely use the information
+// supplied in this file in the creation of products supporting the
+// Unicode Standard, and to make copies of this file in any form
+// for internal or external distribution as long as this notice
+// remains attached.
+//
+// ======================================================================
+
+#include "ace/UTF32_Encoding_Converter.h"
+
+#if defined (ACE_USES_WCHAR)
+#include "ace/OS_NS_stdio.h"
+#include "ace/OS_Memory.h"
+#include "ace/Min_Max.h"
+
+ACE_BEGIN_VERSIONED_NAMESPACE_DECL
+
+static const ACE_UINT32 UNI_MAX_LEGAL_UTF32 = 0x0010FFFF;
+
+ACE_UTF32_Encoding_Converter::ACE_UTF32_Encoding_Converter (bool swap)
+ : ACE_UTF16_Encoding_Converter (swap)
+{
+}
+
+ACE_UTF32_Encoding_Converter::~ACE_UTF32_Encoding_Converter (void)
+{
+}
+
+ACE_UTF32_Encoding_Converter::Result
+ACE_UTF32_Encoding_Converter::to_utf8 (const void* source,
+ size_t source_size,
+ ACE_Byte* target,
+ size_t target_size,
+ bool strict)
+{
+ static const ACE_UINT32 byteMask = 0xBF;
+ static const ACE_UINT32 byteMark = 0x80;
+ static const ACE_UINT32 UNI_SUR_HIGH_START = get_UNI_SUR_HIGH_START ();
+ static const ACE_UINT32 UNI_SUR_LOW_END = get_UNI_SUR_LOW_END ();
+ static const ACE_Byte* firstByteMark = get_first_byte_mark ();
+
+ Result result = CONVERSION_OK;
+ ACE_Byte* targetEnd = target + target_size;
+ const ACE_UINT32* sourceStart = static_cast<const ACE_UINT32*> (source);
+ const ACE_UINT32* sourceEnd = sourceStart + (source_size / sizeof (ACE_UINT32));
+
+ while (sourceStart < sourceEnd)
+ {
+ ACE_UINT32 nw = *sourceStart++;
+ ACE_UINT32 ch = (this->swap_ ? ACE_SWAP_LONG (nw) : nw);
+ unsigned short bytesToWrite = 0;
+
+ if (strict)
+ {
+ // UTF-16 surrogate values are illegal in UTF-32
+ if (ch >= UNI_SUR_HIGH_START && ch <= UNI_SUR_LOW_END)
+ {
+ result = SOURCE_ILLEGAL;
+ break;
+ }
+ }
+
+ // Figure out how many bytes the result will require. Turn any
+ // illegally large ACE_UINT32 things (> Plane 17) into replacement
+ // chars.
+ if (ch < 0x80)
+ {
+ bytesToWrite = 1;
+ }
+ else if (ch < 0x800)
+ {
+ bytesToWrite = 2;
+ }
+ else if (ch < 0x10000)
+ {
+ bytesToWrite = 3;
+ }
+ else if (ch <= UNI_MAX_LEGAL_UTF32)
+ {
+ bytesToWrite = 4;
+ }
+ else
+ {
+ result = SOURCE_ILLEGAL;
+ break;
+ }
+
+ target += bytesToWrite;
+ if (target > targetEnd)
+ {
+ result = TARGET_EXHAUSTED;
+ break;
+ }
+
+ // NOTE: everything falls through.
+ switch (bytesToWrite)
+ {
+ case 4:
+ *--target = (ACE_Byte)((ch | byteMark) & byteMask);
+ ch >>= 6;
+ case 3:
+ *--target = (ACE_Byte)((ch | byteMark) & byteMask);
+ ch >>= 6;
+ case 2:
+ *--target = (ACE_Byte)((ch | byteMark) & byteMask);
+ ch >>= 6;
+ case 1:
+ *--target = (ACE_Byte) (ch | firstByteMark[bytesToWrite]);
+ }
+ target += bytesToWrite;
+ }
+
+ return result;
+}
+
+ACE_UTF32_Encoding_Converter::Result
+ACE_UTF32_Encoding_Converter::from_utf8 (const ACE_Byte* source,
+ size_t source_size,
+ void* target,
+ size_t target_size,
+ bool strict)
+{
+ static const ACE_UINT32 UNI_SUR_HIGH_START = get_UNI_SUR_HIGH_START ();
+ static const ACE_UINT32 UNI_SUR_LOW_END = get_UNI_SUR_LOW_END ();
+ static const ACE_UINT32 UNI_REPLACEMENT_CHAR = get_UNI_REPLACEMENT_CHAR ();
+ static const ACE_Byte* trailingBytesForUTF8 = get_trailing_bytes_for_utf8 ();
+ static const ACE_UINT32* offsetsFromUTF8 = get_offsets_from_utf8 ();
+
+ Result result = CONVERSION_OK;
+ const ACE_Byte* sourceEnd = source + source_size;
+ ACE_UINT32* targetStart = static_cast<ACE_UINT32*> (target);
+ ACE_UINT32* targetEnd = targetStart + target_size;
+
+ while (source < sourceEnd)
+ {
+ ACE_UINT32 ch = 0;
+ unsigned short extraBytesToRead = trailingBytesForUTF8[*source];
+ if (source + extraBytesToRead >= sourceEnd)
+ {
+ result = SOURCE_EXHAUSTED;
+ break;
+ }
+
+ // Do this check whether lenient or strict
+ if (!this->is_legal_utf8 (source, extraBytesToRead + 1))
+ {
+ result = SOURCE_ILLEGAL;
+ break;
+ }
+
+ // The cases all fall through. See "Note A" below.
+ switch (extraBytesToRead)
+ {
+ case 5:
+ ch += *source++;
+ ch <<= 6;
+ case 4:
+ ch += *source++;
+ ch <<= 6;
+ case 3:
+ ch += *source++;
+ ch <<= 6;
+ case 2:
+ ch += *source++;
+ ch <<= 6;
+ case 1:
+ ch += *source++;
+ ch <<= 6;
+ case 0:
+ ch += *source++;
+ }
+ ch -= offsetsFromUTF8[extraBytesToRead];
+
+ if (targetStart >= targetEnd)
+ {
+ result = TARGET_EXHAUSTED;
+ break;
+ }
+
+ if (ch <= UNI_MAX_LEGAL_UTF32)
+ {
+ // UTF-16 surrogate values are illegal in UTF-32, and anything
+ // over Plane 17 (> 0x10FFFF) is illegal.
+ if (ch >= UNI_SUR_HIGH_START && ch <= UNI_SUR_LOW_END)
+ {
+ if (strict)
+ {
+ result = SOURCE_ILLEGAL;
+ break;
+ }
+ else
+ {
+ *targetStart++ = UNI_REPLACEMENT_CHAR;
+ }
+ }
+ else
+ {
+ *targetStart++ = ch;
+ }
+ }
+ else
+ {
+ result = SOURCE_ILLEGAL;
+ break;
+ }
+ }
+
+ return result;
+}
+
+ACE_UTF32_Encoding_Converter*
+ACE_UTF32_Encoding_Converter::encoded (const ACE_Byte* source,
+ size_t source_size)
+{
+ static const size_t begin = 16;
+ static const size_t converted = begin * 4;
+
+ ACE_Byte target[converted];
+ ACE_UTF32_Encoding_Converter* converter = 0;
+ ACE_NEW_RETURN (converter,
+ ACE_UTF32_Encoding_Converter (false),
+ 0);
+
+ if (converter->to_utf8 (source,
+ ACE_MIN (begin, source_size),
+ target,
+ converted) == CONVERSION_OK)
+ {
+ return converter;
+ }
+ else
+ {
+ delete converter;
+ }
+
+ return 0;
+}
+
+ACE_END_VERSIONED_NAMESPACE_DECL
+#endif /* ACE_USES_WCHAR */
diff --git a/ace/UTF32_Encoding_Converter.h b/ace/UTF32_Encoding_Converter.h
new file mode 100644
index 00000000000..3777d2eff0a
--- /dev/null
+++ b/ace/UTF32_Encoding_Converter.h
@@ -0,0 +1,67 @@
+// -*- C++ -*-
+
+//=========================================================================
+/**
+ * @file UTF32_Encoding_Converter.h
+ *
+ * $Id$
+ *
+ * This class contains declarations for methods that convert between
+ * UTF-32 (both BE and LE) and UTF-8
+ *
+ * @author Chad Elliott <elliott_c@ociweb.com>
+ */
+//=========================================================================
+
+#ifndef ACE_UTF32_ENCODING_CONVERTER_H
+#define ACE_UTF32_ENCODING_CONVERTER_H
+
+#include /**/ "ace/pre.h"
+
+#include "ace/UTF16_Encoding_Converter.h"
+
+#if defined (ACE_USES_WCHAR)
+ACE_BEGIN_VERSIONED_NAMESPACE_DECL
+
+/** Convert from UTF-32 to UTF-8 and from UTF-8 to UTF-32.
+ * This class implements the ACE_Encoding_Converter interface.
+ */
+class ACE_UTF32_Encoding_Converter: public ACE_UTF16_Encoding_Converter
+{
+public:
+ /// This class has some similarities to the UTF16 converter, so
+ /// we just construct our base class and pass the swap parameter.
+ ACE_UTF32_Encoding_Converter (bool swap = false);
+
+ /// This is a do nothing destructor.
+ virtual ~ACE_UTF32_Encoding_Converter (void);
+
+ /// Convert the source from UTF-32 to UTF-8 and store it in the
+ /// provided target buffer.
+ virtual Result to_utf8 (const void* source,
+ size_t source_size,
+ ACE_Byte* target,
+ size_t target_size,
+ bool strict = true);
+
+ /// Convert the UTF-8 source into a UTF-32 encoding and store it
+ /// in the provided target buffer.
+ virtual Result from_utf8 (const ACE_Byte* source,
+ size_t source_size,
+ void* target,
+ size_t target_size,
+ bool strict = true);
+
+ /// This factory helper method determines if the source stream is UTF-32
+ /// encoded. If it is, allocate an ACE_UTF32_Encoding_Converter and
+ /// return it. The caller then owns the allocated object.
+ static ACE_UTF32_Encoding_Converter* encoded (const ACE_Byte* source,
+ size_t source_size);
+};
+
+ACE_END_VERSIONED_NAMESPACE_DECL
+#endif /* ACE_USES_WCHAR */
+
+#include /**/ "ace/post.h"
+
+#endif /* ACE_UTF32_ENCODING_CONVERTER_H */
diff --git a/ace/UTF8_Encoding_Converter.cpp b/ace/UTF8_Encoding_Converter.cpp
new file mode 100644
index 00000000000..0a6ee6e54f5
--- /dev/null
+++ b/ace/UTF8_Encoding_Converter.cpp
@@ -0,0 +1,92 @@
+// $Id$
+
+#include "ace/UTF8_Encoding_Converter.h"
+
+#if defined (ACE_USES_WCHAR)
+#include "ace/UTF16_Encoding_Converter.h"
+#include "ace/UTF32_Encoding_Converter.h"
+#include "ace/OS_NS_string.h"
+#include "ace/OS_Memory.h"
+
+ACE_BEGIN_VERSIONED_NAMESPACE_DECL
+
+ACE_UTF8_Encoding_Converter::ACE_UTF8_Encoding_Converter (void)
+ : native_ (0)
+{
+ // Choose a converter for the ASCII or UTF-8 string to a wide character
+ // string which we will use in from_utf8. We have to make an
+ // assumption here about the encoding based on the size of ACE_TCHAR.
+ switch (sizeof (ACE_TCHAR))
+ {
+ case 4:
+ ACE_NEW(this->native_, ACE_UTF32_Encoding_Converter);
+ break;
+ case 2:
+ ACE_NEW(this->native_, ACE_UTF16_Encoding_Converter);
+ break;
+ }
+}
+
+ACE_UTF8_Encoding_Converter::~ACE_UTF8_Encoding_Converter (void)
+{
+ delete native_;
+}
+
+ACE_UTF8_Encoding_Converter::Result
+ACE_UTF8_Encoding_Converter::to_utf8 (const void* source,
+ size_t source_size,
+ ACE_Byte* target,
+ size_t target_size,
+ bool /*strict*/)
+{
+ if (target_size >= source_size)
+ {
+ ACE_OS::memcpy (target, source, source_size);
+ return CONVERSION_OK;
+ }
+
+ return TARGET_EXHAUSTED;
+}
+
+ACE_UTF8_Encoding_Converter::Result
+ACE_UTF8_Encoding_Converter::from_utf8 (const ACE_Byte* source,
+ size_t source_size,
+ void* target,
+ size_t target_size,
+ bool strict)
+{
+ if (this->native_ != 0)
+ {
+ return this->native_->from_utf8(source, source_size,
+ target, target_size, strict);
+ }
+
+ ACE_TCHAR* targetStart = static_cast<ACE_TCHAR*> (target);
+ ACE_OS::strncpy (targetStart,
+ ACE_TEXT_CHAR_TO_TCHAR (
+ reinterpret_cast<const char*> (source)),
+ source_size);
+ targetStart[source_size] = 0;
+ return CONVERSION_OK;
+}
+
+ACE_UTF8_Encoding_Converter*
+ACE_UTF8_Encoding_Converter::encoded (const ACE_Byte* source,
+ size_t source_size)
+{
+ for(size_t i = 0; i < source_size; i++)
+ {
+ if (source[i] < 0x01 || source[i] > 0x7f)
+ return 0;
+ }
+
+ // All characters are "valid" ASCII
+ ACE_UTF8_Encoding_Converter* converter = 0;
+ ACE_NEW_RETURN (converter,
+ ACE_UTF8_Encoding_Converter,
+ 0);
+ return converter;
+}
+
+ACE_END_VERSIONED_NAMESPACE_DECL
+#endif /* ACE_USES_WCHAR */
diff --git a/ace/UTF8_Encoding_Converter.h b/ace/UTF8_Encoding_Converter.h
new file mode 100644
index 00000000000..4ef6fb7fad3
--- /dev/null
+++ b/ace/UTF8_Encoding_Converter.h
@@ -0,0 +1,72 @@
+// -*- C++ -*-
+
+//=========================================================================
+/**
+ * @file UTF8_Encoding_Converter.h
+ *
+ * $Id$
+ *
+ * This class contains declarations for methods that convert between
+ * UTF-8 and the native ACE_TCHAR representation.
+ *
+ * @author Chad Elliott <elliott_c@ociweb.com>
+ */
+//=========================================================================
+
+#ifndef ACE_UTF8_ENCODING_CONVERTER_H
+#define ACE_UTF8_ENCODING_CONVERTER_H
+
+#include /**/ "ace/pre.h"
+
+#include "ace/Encoding_Converter.h"
+
+#if defined (ACE_USES_WCHAR)
+ACE_BEGIN_VERSIONED_NAMESPACE_DECL
+
+/** Convert from UTF-16 or UTF-32 to UTF-8.
+ * This class implements the ACE_Encoding_Converter interface.
+ */
+class ACE_UTF8_Encoding_Converter: public ACE_Encoding_Converter
+{
+public:
+ /// Allocate the converter to be used by the from_utf8() method based
+ /// on the size of the native wide character.
+ ACE_UTF8_Encoding_Converter (void);
+
+ /// De-allocate the native converter.
+ virtual ~ACE_UTF8_Encoding_Converter (void);
+
+ /// Since the source *must be* UTF-8, there is no conversion required.
+ /// This method just copies the source to the target given that there
+ /// is enough space.
+ virtual Result to_utf8 (const void* source,
+ size_t source_size,
+ ACE_Byte* target,
+ size_t target_size,
+ bool strict = true);
+
+ /// Utilize the native converter to convert the UTF-8 source into an
+ /// alternate encoding and store it in the provided target buffer.
+ virtual Result from_utf8 (const ACE_Byte* source,
+ size_t source_size,
+ void* target,
+ size_t target_size,
+ bool strict = true);
+
+
+ /// This factory helper method determines if the source stream is UTF-8
+ /// encoded. If it is, allocate an ACE_UTF8_Encoding_Converter and
+ /// return it. The caller then owns the allocated object.
+ static ACE_UTF8_Encoding_Converter* encoded (const ACE_Byte* source,
+ size_t source_size);
+
+private:
+ ACE_Encoding_Converter* native_;
+};
+
+ACE_END_VERSIONED_NAMESPACE_DECL
+#endif /* ACE_USES_WCHAR */
+
+#include /**/ "ace/post.h"
+
+#endif /* ACE_UTF8_ENCODING_CONVERTER_H */
diff --git a/ace/config-vxworks6.2.h b/ace/config-vxworks6.2.h
new file mode 100644
index 00000000000..10490e6dc20
--- /dev/null
+++ b/ace/config-vxworks6.2.h
@@ -0,0 +1,307 @@
+/* -*- C++ -*- */
+// $Id$
+
+// The following configuration file is designed to work for VxWorks
+// 6.2 platforms using one of these compilers:
+// 1) The GNU g++ compiler that is shipped with VxWorks 6.2
+
+#ifndef ACE_CONFIG_H
+#define ACE_CONFIG_H
+#include /**/ "ace/pre.h"
+
+#if ! defined (VXWORKS)
+# define VXWORKS
+#endif /* ! VXWORKS */
+
+#if ! defined (ACE_VXWORKS)
+# define ACE_VXWORKS 0x620
+#endif /* ! ACE_VXWORKS */
+
+#if ! defined (__ACE_INLINE__)
+# define __ACE_INLINE__
+#endif /* ! __ACE_INLINE__ */
+
+// Compiler-specific configuration.
+#if defined (__GNUG__)
+# include "ace/config-g++-common.h"
+
+# define ACE_LACKS_IOSTREAM_FX
+# define ACE_LACKS_LINEBUFFERED_STREAMBUF
+
+# if (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 3))
+ // GNU 3.3+ toolchain supports long long types but fails to define this so STL
+ // skips some definitions
+# if !defined (_GLIBCPP_USE_LONG_LONG)
+# define _GLIBCPP_USE_LONG_LONG
+# endif
+# endif /* (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 3)) */
+
+#elif defined (ghs)
+ // Processor type, if necessary. Green Hills defines "ppc".
+# if defined (ppc)
+# define ACE_HAS_POWERPC_TIMER
+# define ACE_LACKS_CLEARERR
+# endif /* ppc */
+
+# define ACE_CONFIG_INCLUDE_GHS_COMMON
+# include "ace/config-ghs-common.h"
+
+# define ACE_LACKS_UNISTD_H
+# define ACE_LACKS_IOSTREAM_TOTALLY
+
+// Short-circuit the include of <arpa/inet.h>
+// Green Hills has a problem with multiply defined functions
+// with different parameters.
+# define __INCineth
+
+#elif defined (__DCPLUSPLUS__) || defined (__DCC__)
+ // Diab 4.2a or later.
+# if !defined (ACE_LACKS_PRAGMA_ONCE)
+ // We define it with a -D with make depend.
+# define ACE_LACKS_PRAGMA_ONCE
+# endif /* ! ACE_LACKS_PRAGMA_ONCE */
+
+# define ACE_HAS_STANDARD_CPP_LIBRARY 1
+# define ACE_USES_STD_NAMESPACE_FOR_STDCPP_LIB 1
+# define ACE_TEMPLATES_REQUIRE_SOURCE
+
+#else /* ! __GNUG__ && ! ghs && !__DCC__ */
+# ifdef __cplusplus /* Let it slide for C compilers. */
+# error unsupported compiler on VxWorks
+# endif /* __cplusplus */
+#endif /* ! __GNUG__ && ! ghs */
+
+// OS-specific configuration
+#define ACE_HAS_4_4BSD_SENDMSG_RECVMSG
+#define ACE_HAS_NONCONST_GETBY
+#define ACE_HAS_NONCONST_SWAB
+#define ACE_HAS_NONCONST_READV
+#define ACE_LACKS_UNIX_SYSLOG
+#define ACE_DEFAULT_MAX_SOCKET_BUFSIZ 32768
+#define ACE_DEFAULT_THREAD_KEYS 16
+#define ACE_HAS_BROKEN_ACCEPT_ADDR
+#define ACE_HAS_NONCONST_SENDMSG
+#define ACE_HAS_NONCONST_WRITEV
+#define ACE_HAS_CHARPTR_DL
+#define ACE_HAS_CLOCK_GETTIME
+#define ACE_HAS_CLOCK_SETTIME
+#define ACE_HAS_CONSISTENT_SIGNAL_PROTOTYPES
+#define ACE_HAS_CPLUSPLUS_HEADERS
+#define ACE_HAS_DIRENT
+#define ACE_HAS_DLL 0
+#define ACE_HAS_HANDLE_SET_OPTIMIZED_FOR_SELECT
+#define ACE_HAS_MSG
+#define ACE_HAS_NONCONST_READV
+#define ACE_HAS_NONCONST_SELECT_TIMEVAL
+#define ACE_HAS_NONSTATIC_OBJECT_MANAGER
+#define ACE_HAS_POSIX_NONBLOCK
+#define ACE_HAS_POSIX_TIME
+#define ACE_HAS_REENTRANT_FUNCTIONS
+#define ACE_HAS_SIGINFO_T
+#define ACE_HAS_SIGWAIT
+#define ACE_HAS_SIG_ATOMIC_T
+#define ACE_HAS_SNPRINTF
+#define ACE_HAS_STRERROR
+#define ACE_HAS_THREADS
+#define ACE_HAS_STRPTIME
+#define ACE_HAS_SYSCTL
+#define ACE_LACKS_EXEC
+#define ACE_LACKS_FILELOCKS
+#define ACE_LACKS_FORK
+#define ACE_LACKS_GETHOSTENT
+#define ACE_LACKS_GETSERVBYNAME
+#define ACE_LACKS_GETPROTOBYNAME
+#define ACE_LACKS_GETPROTOBYNUMBER
+#define ACE_LACKS_KEY_T
+#define ACE_LACKS_LSTAT
+#define ACE_LACKS_MADVISE
+#define ACE_LACKS_MALLOC_H
+#define ACE_LACKS_MEMORY_H
+#define ACE_LACKS_MKFIFO
+#define ACE_LACKS_MKSTEMP
+#define ACE_LACKS_MKTEMP
+#define ACE_LACKS_MSYNC
+#define ACE_LACKS_NETDB_REENTRANT_FUNCTIONS
+#define ACE_LACKS_SYS_PARAM_H
+#define ACE_LACKS_PWD_FUNCTIONS
+#define ACE_LACKS_READDIR_R
+#define ACE_LACKS_READLINK
+#define ACE_LACKS_REALPATH
+#define ACE_LACKS_PIPE
+#define ACE_LACKS_RLIMIT
+#define ACE_LACKS_RWLOCK_T
+#define ACE_LACKS_SBRK
+#define ACE_LACKS_SEEKDIR
+#define ACE_LACKS_SEMBUF_T
+#define ACE_LACKS_SIGINFO_H
+#define ACE_LACKS_SI_ADDR
+#define ACE_LACKS_SOCKETPAIR
+#define ACE_LACKS_STRRECVFD
+#define ACE_LACKS_SYSV_SHMEM
+#define ACE_LACKS_TELLDIR
+#define ACE_LACKS_TEMPNAM
+#define ACE_LACKS_TIMESPEC_T
+#define ACE_LACKS_TRUNCATE
+#define ACE_LACKS_UCONTEXT_H
+#define ACE_LACKS_UMASK
+#define ACE_LACKS_NATIVE_STRPTIME
+#define ACE_PAGE_SIZE 4096
+#define ACE_THR_PRI_FIFO_DEF 101
+#define ACE_THR_PRI_OTHER_DEF ACE_THR_PRI_FIFO_DEF
+#define ACE_HAS_SIGTIMEDWAIT
+#define ACE_HAS_SIGSUSPEND
+#if !defined (ACE_VXWORKS_SPARE)
+# define ACE_VXWORKS_SPARE spare4
+#endif /* ! ACE_VXWORKS_SPARE */
+
+#define ACE_LACKS_SETEGID
+#define ACE_LACKS_SETPGID
+#define ACE_LACKS_SETREGID
+#define ACE_LACKS_SETREUID
+#define ACE_LACKS_SETSID
+#define ACE_LACKS_SETUID
+#define ACE_LACKS_SETEUID
+#define ACE_LACKS_GETEUID
+#define ACE_LACKS_GETUID
+#define ACE_LACKS_GETPGID
+#define ACE_LACKS_GETEGID
+#define ACE_LACKS_GETGID
+#define ACE_LACKS_SETGID
+
+#define ACE_LACKS_SYS_UIO_H
+#define ACE_LACKS_SYS_IPC_H
+#define ACE_LACKS_SYS_SEM_H
+#define ACE_LACKS_STROPTS_H
+#define ACE_LACKS_SYS_MSG_H
+#define ACE_LACKS_PWD_H
+#define ACE_LACKS_SYS_SHM_H
+#define ACE_LACKS_TERMIOS_H
+#define ACE_LACKS_POLL_H
+
+// Some string things
+#define ACE_LACKS_STRCASECMP
+#define ACE_LACKS_ITOW
+#define ACE_LACKS_WCSDUP
+#define ACE_LACKS_WCSICMP
+#define ACE_LACKS_WCSNICMP
+
+#define ACE_HAS_CHARPTR_SOCKOPT
+#define ACE_LACKS_SYMLINKS
+
+#if defined __RTP__
+ // We are building for RTP mode
+ #define ACE_HAS_SVR4_DYNAMIC_LINKING
+ #define ACE_HAS_2_PARAM_ASCTIME_R_AND_CTIME_R
+ #define ACE_LACKS_REGEX_H
+ #define ACE_LACKS_PUTENV
+ #define ACE_HAS_3_PARAM_WCSTOK
+ #define ACE_HAS_WCHAR
+#else
+ // We are building for kernel mode
+ #define ACE_LACKS_SUSECONDS_T
+ #define ACE_LACKS_INTTYPES_H
+ #define ACE_LACKS_STDINT_H
+ #define ACE_LACKS_UNAME
+ #define ACE_LACKS_UTSNAME_T
+ #define ACE_LACKS_RAND_REENTRANT_FUNCTIONS
+ #define ACE_LACKS_DLFCN_H
+ #define ACE_LACKS_WAIT
+ #define ACE_LACKS_WAITPID
+ #define ACE_LACKS_SYS_TIME_H
+ #define ACE_LACKS_SYS_SELECT_H
+ #define ACE_LACKS_STRINGS_H
+ #define ACE_MKDIR_LACKS_MODE
+ #define ACE_HAS_SIZET_PTR_ASCTIME_R_AND_CTIME_R
+ #define ACE_LACKS_SEARCH_H
+ #define ACE_LACKS_SYSCONF
+ #define ACE_LACKS_GETPID
+ #define ACE_LACKS_GETPPID
+ #define ACE_LACKS_WCHAR_H
+ #define ACE_LACKS_WCTYPE_H
+ #define ACE_LACKS_WCSCAT
+ #define ACE_LACKS_WCSCHR
+ #define ACE_LACKS_WCSCMP
+ #define ACE_LACKS_WCSCPY
+ #define ACE_LACKS_WCSCSPN
+ #define ACE_LACKS_WCSLEN
+ #define ACE_LACKS_WCSNCAT
+ #define ACE_LACKS_WCSNCMP
+ #define ACE_LACKS_WCSNCPY
+ #define ACE_LACKS_WCSPBRK
+ #define ACE_LACKS_WCSRCHR
+ #define ACE_LACKS_WCSSPN
+ #define ACE_LACKS_WCSSTR
+ #define ACE_LACKS_WCSTOK
+ #define ACE_LACKS_TOWLOWER
+ #define ACE_LACKS_TOWUPPER
+ #define ACE_LACKS_WCSTOD
+ #define ACE_LACKS_WCSTOL
+ #define ACE_LACKS_WCSTOUL
+ #define ACE_LACKS_FGETWC
+ #define ACE_LACKS_FGETWS
+ #define ACE_LACKS_FPUTWS
+ #if !defined (ACE_MAIN)
+ # define ACE_MAIN ace_main
+ #endif /* ! ACE_MAIN */
+#endif
+
+// It is possible to enable pthread support with VxWorks, when the user decides
+// to use this, we need some more defines
+#if defined ACE_HAS_PTHREADS
+# define ACE_HAS_PTHREADS_STD
+# define ACE_HAS_THREAD_SPECIFIC_STORAGE
+# define ACE_HAS_POSIX_SEM
+# define ACE_LACKS_MUTEXATTR_PSHARED
+# define ACE_LACKS_CONDATTR_PSHARED
+// Include this file, the sys/stat.h file shipped with VxWorks has old types
+// and without this include we get a lot of compile errors. A TSR has been filed
+// so that hopefully in the future we can zap this include
+#include "types/vxTypesOld.h"
+#else
+# define ACE_LACKS_PTHREAD_H
+# if !defined __RTP__
+// Only when building for kernel mode we can use TSS emulation, in rtp mode
+// we can't use the WIND_TCB struct anymore
+# define ACE_HAS_TSS_EMULATION
+# endif
+// VxWorks has no recursive mutexes. This was set in the past but it doesn't
+// work with the pthread support, so only set it for the time being when pthread
+// is disabled
+# define ACE_HAS_RECURSIVE_MUTEXES
+# define ACE_LACKS_COND_T
+# define ACE_HAS_MUTEX_TIMEOUTS
+#endif
+
+#if !defined (ACE_MT_SAFE)
+# define ACE_MT_SAFE 1
+#endif
+
+// Needed include to get all VxWorks CPU types
+#include "types/vxCpu.h"
+#if (CPU == PENTIUM || CPU == PENTIUM2 || CPU == PENTIUM3 || CPU == PENTIUM4)
+// If running an Intel Pentium the
+// ACE_OS::gethrtime () can use the RDTSC instruction.
+# define ACE_HAS_PENTIUM
+#endif
+
+// VxWorks defines the CPU define MAP, undef it to prevent problems with
+// application code
+#if defined (MAP)
+#undef MAP
+#endif /* MAP */
+
+#if !defined (ACE_NEEDS_HUGE_THREAD_STACKSIZE)
+# define ACE_NEEDS_HUGE_THREAD_STACKSIZE 65536
+#endif /* ACE_NEEDS_HUGE_THREAD_STACKSIZE */
+
+#if !defined (ACE_NTRACE)
+# define ACE_NTRACE 1
+#endif /* ACE_NTRACE */
+
+// By default, don't include RCS Id strings in object code.
+#if !defined (ACE_USE_RCSID)
+#define ACE_USE_RCSID 0
+#endif /* !ACE_USE_RCSID */
+
+#include /**/ "ace/post.h"
+#endif /* ACE_CONFIG_H */
diff --git a/ace/os_include/sys/os_sysctl.h b/ace/os_include/sys/os_sysctl.h
new file mode 100644
index 00000000000..680c2562cbf
--- /dev/null
+++ b/ace/os_include/sys/os_sysctl.h
@@ -0,0 +1,41 @@
+// -*- C++ -*-
+
+//=============================================================================
+/**
+ * @file os_sysctl.h
+ *
+ * declarations for sysctl
+ *
+ * $Id$
+ *
+ * @author Johnny Willemsen <jwillemsen@remedy.nl>
+ */
+//=============================================================================
+
+#ifndef ACE_OS_INCLUDE_SYS_OS_SYSCTL_H
+#define ACE_OS_INCLUDE_SYS_OS_SYSCTL_H
+
+#include /**/ "ace/pre.h"
+
+#include "ace/config-lite.h"
+
+#if !defined (ACE_LACKS_PRAGMA_ONCE)
+# pragma once
+#endif /* ACE_LACKS_PRAGMA_ONCE */
+
+#if !defined (ACE_LACKS_SYS_SYSCTL_H)
+# include /**/ <sys/sysctl.h>
+#endif /* !ACE_LACKS_SYS_SYSCTL_H */
+
+// Place all additions (especially function declarations) within extern "C" {}
+#ifdef __cplusplus
+extern "C"
+{
+#endif /* __cplusplus */
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#include /**/ "ace/post.h"
+#endif /* ACE_OS_INCLUDE_SYS_OS_SYSCTL_H */
diff --git a/apps/gperf/gperf.mpc b/apps/gperf/gperf.mpc
new file mode 100644
index 00000000000..446f0f4c0a3
--- /dev/null
+++ b/apps/gperf/gperf.mpc
@@ -0,0 +1,9 @@
+// -*- MPC -*-
+// $Id$
+
+project (gperf_docs) : man {
+
+ Man_Files {
+ gperf.1
+ }
+}
diff --git a/bin/ChangeLogEditor/CVSFileLocator.pm b/bin/ChangeLogEditor/CVSFileLocator.pm
new file mode 100644
index 00000000000..d5cc9ff5cbe
--- /dev/null
+++ b/bin/ChangeLogEditor/CVSFileLocator.pm
@@ -0,0 +1,117 @@
+package CVSFileLocator;
+
+# ************************************************************
+# Description : Use CVS to determine the list of modified files.
+# Author : Chad Elliott
+# Create Date : 11/29/2005
+# ************************************************************
+
+# ************************************************************
+# Pragmas
+# ************************************************************
+
+use strict;
+use FileHandle;
+
+use FileLocator;
+
+use vars qw(@ISA);
+@ISA = qw(FileLocator);
+
+# ************************************************************
+# Subroutine Section
+# ************************************************************
+
+sub locate {
+ my($self) = shift;
+ my(@dirs) = @_;
+ my($fh) = new FileHandle();
+ my(@modified) = ();
+ my(@removed) = ();
+ my(@conflicts) = ();
+ my(@unknown) = ();
+ my($cvsroot) = $self->obtainCVSROOT();
+ my($nul) = ($^O eq 'MSWin32' ? 'nul' : '/dev/null');
+
+ if (open($fh, 'cvs -q ' . (defined $cvsroot ? "-d $cvsroot " : '') .
+ "-n update @dirs 2> $nul |")) {
+ while(<$fh>) {
+ my($line) = $_;
+ if ($line =~ /^[AM]\s+(.*)/) {
+ push(@modified, $1);
+ }
+ elsif ($line =~ /^[R]\s+(.*)/) {
+ push(@removed, $1);
+ }
+ elsif ($line =~ /^[C]\s+(.*)/) {
+ push(@conflicts, $1);
+ }
+ elsif ($line =~ /^[\?]\s+(.*)/) {
+ push(@unknown, $1);
+ }
+ }
+ close($fh);
+ }
+ return \@modified, \@removed, \@conflicts, \@unknown;
+}
+
+
+sub obtainCVSROOT {
+ my($self) = shift;
+ my($fh) = new FileHandle();
+ my($croot) = undef;
+
+ if (open($fh, 'CVS/Root')) {
+ while(<$fh>) {
+ my($line) = $_;
+ $line =~ s/\s+$//;
+ if ($line =~ /^:pserver/ || $line =~ /^:ext/) {
+ if (defined $ENV{CVSROOT} && $line eq $ENV{CVSROOT}) {
+ last;
+ }
+ else {
+ my($check) = $line;
+ $check =~ s/:\w+\@/:\@/;
+ $check =~ s/\.\w+\.\w+:/:/;
+ my($clen) = length($check);
+ foreach my $key (keys %ENV) {
+ my($echeck) = $ENV{$key};
+ $echeck =~ s/:\w+\@/:\@/;
+ $echeck =~ s/\.\w+\.\w+:/:/;
+ if ($check eq $echeck) {
+ $croot = $ENV{$key};
+ last;
+ }
+ else {
+ my($len) = length($echeck);
+ if ($len > 0 &&
+ substr($check, $clen - $len, $len) eq $echeck) {
+ $croot = $ENV{$key};
+ last;
+ }
+ }
+ }
+ if (defined $croot) {
+ last;
+ }
+ }
+ if (!defined $croot) {
+ $croot = $line;
+ }
+ }
+ else {
+ $croot = $line;
+ last;
+ }
+ }
+ close($fh);
+ }
+ else {
+ $croot = $ENV{CVSROOT};
+ }
+
+ return $croot;
+}
+
+
+1;
diff --git a/bin/ChangeLogEditor/FileLocatorFactory.pm b/bin/ChangeLogEditor/FileLocatorFactory.pm
new file mode 100644
index 00000000000..bbd4652cdc3
--- /dev/null
+++ b/bin/ChangeLogEditor/FileLocatorFactory.pm
@@ -0,0 +1,33 @@
+package FileLocatorFactory;
+
+# ************************************************************
+# Description : Create FileLocator objects.
+# Author : Chad Elliott
+# Create Date : 11/29/2005
+# ************************************************************
+
+# ************************************************************
+# Pragmas
+# ************************************************************
+
+use strict;
+
+use CVSFileLocator;
+use SVNFileLocator;
+
+# ************************************************************
+# Subroutine Section
+# ************************************************************
+
+sub create {
+ switch: {
+ -d 'CVS' && do { return new CVSFileLocator(); };
+ -d '.svn' && do { return new SVNFileLocator(); };
+ print STDERR "WARNING: Unsupported revision control protocol\n";
+ }
+
+ return new FileLocator();
+}
+
+
+1;
diff --git a/bin/ChangeLogEditor/SVNFileLocator.pm b/bin/ChangeLogEditor/SVNFileLocator.pm
new file mode 100644
index 00000000000..246b9dc9c7f
--- /dev/null
+++ b/bin/ChangeLogEditor/SVNFileLocator.pm
@@ -0,0 +1,53 @@
+package SVNFileLocator;
+
+# ************************************************************
+# Description : Use SVN to determine the list of modified files.
+# Author : Chad Elliott
+# Create Date : 11/29/2005
+# ************************************************************
+
+# ************************************************************
+# Pragmas
+# ************************************************************
+
+use strict;
+use FileHandle;
+
+use FileLocator;
+
+use vars qw(@ISA);
+@ISA = qw(FileLocator);
+
+# ************************************************************
+# Subroutine Section
+# ************************************************************
+
+sub locate {
+ my($self) = shift;
+ my(@dirs) = @_;
+ my($fh) = new FileHandle();
+ my(@modified) = ();
+ my(@removed) = ();
+ my(@conflicts) = ();
+ my(@unknown) = ();
+ my($nul) = ($^O eq 'MSWin32' ? 'nul' : '/dev/null');
+
+ if (open($fh, "svn diff @dirs 2> $nul |")) {
+ while(<$fh>) {
+ my($line) = $_;
+ if ($line =~ /^Index:\s+(.*)/) {
+ if (-r $1) {
+ push(@modified, $1);
+ }
+ else {
+ push(@removed, $1);
+ }
+ }
+ }
+ close($fh);
+ }
+ return \@modified, \@removed, \@conflicts, \@unknown;
+}
+
+
+1;
diff --git a/bin/MakeProjectCreator/config/ciao_container_dnc.mpb b/bin/MakeProjectCreator/config/ciao_container_dnc.mpb
new file mode 100644
index 00000000000..7875cd5d088
--- /dev/null
+++ b/bin/MakeProjectCreator/config/ciao_container_dnc.mpb
@@ -0,0 +1,7 @@
+// -*- MPC -*-
+// $Id$
+
+project : portableserver, ciao_client_dnc {
+ after += CIAO_DnC_Container
+ libs += CIAO_DnC_Container
+}
diff --git a/bin/MakeProjectCreator/config/ciao_domainapplicationmanager_dnc.mpb b/bin/MakeProjectCreator/config/ciao_domainapplicationmanager_dnc.mpb
new file mode 100644
index 00000000000..31731a84d5d
--- /dev/null
+++ b/bin/MakeProjectCreator/config/ciao_domainapplicationmanager_dnc.mpb
@@ -0,0 +1,8 @@
+// -*- MPC -*-
+// $Id$
+
+project : ciao_deployment_svnt {
+ includes += $(CIAO_ROOT)/DomainApplicationManager
+ libs += DomainApplicationManager
+ after += DomainApplicationManager
+}
diff --git a/bin/MakeProjectCreator/config/ciao_events_base_dnc.mpb b/bin/MakeProjectCreator/config/ciao_events_base_dnc.mpb
new file mode 100644
index 00000000000..de2c8d5a7b9
--- /dev/null
+++ b/bin/MakeProjectCreator/config/ciao_events_base_dnc.mpb
@@ -0,0 +1,7 @@
+// -*- MPC -*-
+// $Id$
+
+project : orbsvcslib, ciao_container_dnc, ciao_client_dnc {
+ libs += CIAO_DnC_Events_Base
+ after += CIAO_DnC_Events_Base
+}
diff --git a/bin/MakeProjectCreator/config/ciao_events_dnc.mpb b/bin/MakeProjectCreator/config/ciao_events_dnc.mpb
new file mode 100644
index 00000000000..d7abd936f0c
--- /dev/null
+++ b/bin/MakeProjectCreator/config/ciao_events_dnc.mpb
@@ -0,0 +1,9 @@
+// -*- MPC -*-
+// $Id$
+
+project : security, ifr_client, valuetype, pi, codecfactory, ciao_container_dnc, ciao_client_dnc, ciao_rtevent_dnc {
+ includes += $(CIAO_ROOT)/ciaosvcs/Events
+ idlflags += -I$(CIAO_ROOT)/ciaosvcs/Events -Sc
+ libs += CIAO_DnC_Events
+ after += CIAO_DnC_Events
+}
diff --git a/bin/MakeProjectCreator/config/ciao_rtevent_dnc.mpb b/bin/MakeProjectCreator/config/ciao_rtevent_dnc.mpb
new file mode 100644
index 00000000000..baf9252d0c2
--- /dev/null
+++ b/bin/MakeProjectCreator/config/ciao_rtevent_dnc.mpb
@@ -0,0 +1,9 @@
+// -*- MPC -*-
+// $Id$
+
+project : rtevent_serv, ciao_events_base_dnc {
+ includes += $(CIAO_ROOT)/ciaosvcs/Events
+ idlflags += -I$(CIAO_ROOT)/ciaosvcs/Events -Sc
+ libs += CIAO_RTEvent
+ after += CIAO_RTEvent
+}
diff --git a/bin/MakeProjectCreator/config/ciaocidldefaults.mpb b/bin/MakeProjectCreator/config/ciaocidldefaults.mpb
new file mode 100644
index 00000000000..59521cbb44b
--- /dev/null
+++ b/bin/MakeProjectCreator/config/ciaocidldefaults.mpb
@@ -0,0 +1,24 @@
+// -*- MPC -*-
+// $Id$
+
+project {
+ // Set the cidl compiler and flags as template values
+ specific {
+ cidlc = $(CIAO_ROOT)/bin/cidlc
+ cidlc_dep = $(CIAO_ROOT)/bin/cidlc
+ cidlc_flags = -I $(CIAO_ROOT) -I$(CIAO_ROOT)/DAnCE -I$(CIAO_ROOT)/ciao -I$(TAO_ROOT) -I$(TAO_ROOT)/tao -I$(TAO_ROOT)/orbsvcs --
+ }
+
+ Define_Custom(CIDL) {
+ automatic = 0
+ dependent = $(CIDLC_DEP)
+ command = $(CIDLC)
+ commandflags = $(CIDLC_FLAGS)
+ inputext = .cidl
+ source_outputext = _svnt.cpp
+ header_outputext = _svnt.h
+ generic_outputext = E.idl
+ keyword cidlflags = commandflags
+ }
+
+}
diff --git a/bin/MakeProjectCreator/config/concurrency_serv.mpb b/bin/MakeProjectCreator/config/concurrency_serv.mpb
new file mode 100644
index 00000000000..0d1a4092e57
--- /dev/null
+++ b/bin/MakeProjectCreator/config/concurrency_serv.mpb
@@ -0,0 +1,7 @@
+// -*- MPC -*-
+// $Id$
+
+project : orbsvcslib, concurrency_skel {
+ after += CosConcurrency_Serv
+ libs += TAO_CosConcurrency_Serv
+}
diff --git a/bin/MakeProjectCreator/config/concurrency_skel.mpb b/bin/MakeProjectCreator/config/concurrency_skel.mpb
new file mode 100644
index 00000000000..0806aa30cbb
--- /dev/null
+++ b/bin/MakeProjectCreator/config/concurrency_skel.mpb
@@ -0,0 +1,7 @@
+// -*- MPC -*-
+// $Id$
+
+project : orbsvcslib, concurrency, portableserver {
+ after += CosConcurrency_Skel
+ libs += TAO_CosConcurrency_Skel
+}
diff --git a/bin/MakeProjectCreator/config/csd_framework.mpb b/bin/MakeProjectCreator/config/csd_framework.mpb
new file mode 100644
index 00000000000..27dd3f56694
--- /dev/null
+++ b/bin/MakeProjectCreator/config/csd_framework.mpb
@@ -0,0 +1,7 @@
+// -*- MPC -*-
+//$Id$
+
+project : taolib, portableserver, pi, codecfactory {
+ after += CSD_Framework
+ libs += TAO_CSD_Framework
+}
diff --git a/bin/MakeProjectCreator/config/csd_pt_test_exe.mpb b/bin/MakeProjectCreator/config/csd_pt_test_exe.mpb
new file mode 100644
index 00000000000..5641add5436
--- /dev/null
+++ b/bin/MakeProjectCreator/config/csd_pt_test_exe.mpb
@@ -0,0 +1,4 @@
+// -*- MPC -*-
+//$Id$
+project : csd_pt_testinf_lib, csd_pt_testservant_lib, taoexe, pi {
+}
diff --git a/bin/MakeProjectCreator/config/dance_extension_stub.mpb b/bin/MakeProjectCreator/config/dance_extension_stub.mpb
new file mode 100644
index 00000000000..4f5353b87bb
--- /dev/null
+++ b/bin/MakeProjectCreator/config/dance_extension_stub.mpb
@@ -0,0 +1,6 @@
+// -*- MPC -*-
+// $Id$
+
+project : ciao_deployment_stub {
+ includes += $(CIAO_ROOT)/DAnCE/Interfaces
+}
diff --git a/bin/MakeProjectCreator/config/messaging_optional.mpb b/bin/MakeProjectCreator/config/messaging_optional.mpb
new file mode 100644
index 00000000000..ee8637a4d1b
--- /dev/null
+++ b/bin/MakeProjectCreator/config/messaging_optional.mpb
@@ -0,0 +1,8 @@
+// -*- MPC -*-
+// $Id$
+
+feature(corba_messaging) : valuetype, portableserver, pi {
+ libs += TAO_Messaging
+ after += Messaging
+}
+
diff --git a/bin/MakeProjectCreator/config/property_serv.mpb b/bin/MakeProjectCreator/config/property_serv.mpb
new file mode 100644
index 00000000000..95588edd33a
--- /dev/null
+++ b/bin/MakeProjectCreator/config/property_serv.mpb
@@ -0,0 +1,7 @@
+// -*- MPC -*-
+// $Id$
+
+project : orbsvcslib, property_skel {
+ after += CosProperty_Serv
+ libs += TAO_CosProperty_Serv
+}
diff --git a/bin/MakeProjectCreator/config/property_skel.mpb b/bin/MakeProjectCreator/config/property_skel.mpb
new file mode 100644
index 00000000000..6904c4f9cbc
--- /dev/null
+++ b/bin/MakeProjectCreator/config/property_skel.mpb
@@ -0,0 +1,7 @@
+// -*- MPC -*-
+// $Id$
+
+project : orbsvcslib, property, portableserver {
+ after += CosProperty_Skel
+ libs += TAO_CosProperty_Skel
+}
diff --git a/bin/MakeProjectCreator/config/rteventlogadmin_serv.mpb b/bin/MakeProjectCreator/config/rteventlogadmin_serv.mpb
new file mode 100644
index 00000000000..dbc14cf067f
--- /dev/null
+++ b/bin/MakeProjectCreator/config/rteventlogadmin_serv.mpb
@@ -0,0 +1,7 @@
+// -*- MPC -*-
+// $Id$
+
+project : orbsvcslib, rteventlogadmin_skel, dslogadmin_serv, rtevent_serv, rtsched {
+ after += RTEventLogAdmin_Serv
+ libs += TAO_RTEventLogAdmin_Serv
+}
diff --git a/bin/MakeProjectCreator/config/rteventlogadmin_skel.mpb b/bin/MakeProjectCreator/config/rteventlogadmin_skel.mpb
new file mode 100644
index 00000000000..920e65f4ab6
--- /dev/null
+++ b/bin/MakeProjectCreator/config/rteventlogadmin_skel.mpb
@@ -0,0 +1,7 @@
+// -*- MPC -*-
+// $Id$
+
+project : orbsvcslib, rteventlogadmin, dslogadmin_skel, rtevent_skel, portableserver {
+ after += RTEventLogAdmin_Skel
+ libs += TAO_RTEventLogAdmin_Skel
+}
diff --git a/bin/MakeProjectCreator/config/tao_versioning_idl_defaults.mpb b/bin/MakeProjectCreator/config/tao_versioning_idl_defaults.mpb
new file mode 100644
index 00000000000..0d0352fa5fa
--- /dev/null
+++ b/bin/MakeProjectCreator/config/tao_versioning_idl_defaults.mpb
@@ -0,0 +1,14 @@
+// -*- MPC -*-
+//
+// $Id$
+
+// This base project is only meant to be used by the core TAO
+// libraries and the orbsvcs libraries.
+
+project : taoidldefaults {
+
+ after += TAO_IDL_EXE
+ idlflags += -Wb,versioning_begin=TAO_BEGIN_VERSIONED_NAMESPACE_DECL \
+ -Wb,versioning_end=TAO_END_VERSIONED_NAMESPACE_DECL
+
+}
diff --git a/bin/MakeProjectCreator/config/vc8nmake.mpb b/bin/MakeProjectCreator/config/vc8nmake.mpb
new file mode 100644
index 00000000000..562d73f7317
--- /dev/null
+++ b/bin/MakeProjectCreator/config/vc8nmake.mpb
@@ -0,0 +1,10 @@
+// -*- MPC -*-
+// $Id$
+
+project {
+ specific(nmake) {
+ compile_flags -= /EHs
+ compile_flags += /EHa
+ }
+}
+
diff --git a/bin/MakeProjectCreator/config/vcl.mpb b/bin/MakeProjectCreator/config/vcl.mpb
new file mode 100644
index 00000000000..4c523e673f0
--- /dev/null
+++ b/bin/MakeProjectCreator/config/vcl.mpb
@@ -0,0 +1,16 @@
+// -*- MPC -*-
+// $Id$
+
+project {
+ requires += vcl
+ macros += ACE_HAS_VCL=1
+ specific(bmake, borland, bds) {
+ use_vcl = 1
+ lit_libs += rtl vcl
+ compile_flags += -tW -tWV
+ linkflags += -aa
+ }
+ verbatim(borland,macros) {
+ VCL=1
+ }
+}
diff --git a/bin/MakeProjectCreator/config/versioned_namespace.mpb b/bin/MakeProjectCreator/config/versioned_namespace.mpb
new file mode 100644
index 00000000000..502c8139ceb
--- /dev/null
+++ b/bin/MakeProjectCreator/config/versioned_namespace.mpb
@@ -0,0 +1,13 @@
+// -*- MPC -*-
+//
+// $Id$
+
+feature(versioned_namespace) {
+
+ macros += ACE_HAS_VERSIONED_NAMESPACE=1
+
+ // Users, define the ACE_VERSIONED_NAMESPACE_NAME preprocessor
+ // symbol in your ace/config.h to override the default versioned
+ // namespace name of the form ACE_5_4_7.
+
+}
diff --git a/docs/Symbol_Versioning.html b/docs/Symbol_Versioning.html
new file mode 100644
index 00000000000..6d4dcdddd51
--- /dev/null
+++ b/docs/Symbol_Versioning.html
@@ -0,0 +1,230 @@
+<!-- $Id$ -->
+
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+ <head>
+ <title>Symbol Versioning in ACE</title>
+ </head>
+
+ <body>
+ <h1>Symbol Versioning in ACE</h1>
+
+ <p>
+ To provide a means for ACE-based application developers to avoid
+ symbol conflicts when multiple versions of ACE are linked to an
+ application ACE supports <em>versioned namespaces</em>. When
+ enabled (disabled by default), ACE's versioned namespace support
+ causes all ACE symbols (classes, free functions, etc) to be
+ placed within a C++ namespace of the form "<code>namespace
+ ACE_5_5_1</code>". For example, the <code>ACE_Reactor</code>
+ would end up being placed in the versioned namespace like so:
+ </p>
+
+ <blockquote>
+ <code>
+<pre>
+ namespace ACE_5_5_1
+ {
+ class ACE_Reactor
+ {
+ ...
+ };
+ }
+ using namespace ACE_5_5_1;
+</pre>
+ </code>
+ </blockquote>
+
+ <p>
+ Notice that a <code>using</code> clause exposes the ACE types
+ embedded in the versioned namespace back to the global
+ namespace. This maximizes source code compatibility. ACE
+ itself does this through the use of two macros:
+ </p>
+ <ul>
+ <li>
+ <code>ACE_BEGIN_VERSIONED_NAMESPACE_DECL</code><br>
+ <ul>
+ <li>
+ Expands to "<code>namespace ACE_VERSIONED_NAMESPACE NAME
+ {</code>", where
+ <code>ACE_VERSIONED_NAMESPACE_NAME</code> by defaults to
+ namespace name of the form
+ <code>ACE_<em>major</em>_<em>minor</em>_<em>beta</em></code>.
+ Users may override the default by defining the
+ <code>ACE_VERSIONED_NAMESPACE_NAME</code> preprocessor
+ symbol in their <code><strong>ace/config.h</strong></code>
+ header file.
+ </li>
+ </ul>
+ </li>
+ <li>
+ <code>ACE_END_VERSIONED_NAMESPACE_DECL</code>
+ <ul>
+ <li>
+ Expands to "<code>} using namespace
+ ACE_VERSIONED_NAMESPACE_NAME;</code>", where
+ <code>ACE_VERSIONED_NAMESPACE_NAME</code> is described
+ above.
+ </li>
+ </ul>
+ </li>
+ </ul>
+ <h2>Things ACE-based Application Developers Should Know</h2>
+ <p>
+ Every effort has been made to make the versioned namespace
+ support in ACE as transparent as possible, including transparent
+ versioned symbol support in the ACE_Service_Configurator when
+ the ACE_Service_Configurator macros, such as <em>e.g.</em>,
+ <code>ACE_FACTORY_DECLARE</code>, are used appropriately. No
+ changes to service configurator directives are necessary. For
+ example, the <code>ACE_Service_Configurator</code> will
+ transparently mangle the factory function name in a service
+ configurator directive on-the-fly, meaning it will only load a
+ "versioned" factory function name. This allows multiple service
+ object factory functions, for example, to coexist in the same
+ process space.
+ </p>
+ <p>
+ There is, however, at least one caveat with respect to source
+ code compatibility: any forward declarations of ACE symbols must
+ also be placed within the versioned namespace. For example, if
+ you have a forward declaration for <code>ACE_Reactor</code> in
+ your application code, you will need to place it within the
+ configured ACE versioned namespace as follows:
+ </p>
+ <blockquote>
+ <code>
+<pre>
+ ACE_BEGIN_VERSIONED_NAMESPACE_DECL
+ class ACE_Reactor;
+ ACE_END_VERSIONED_NAMESPACE_DECL
+</pre>
+ </code>
+ </blockquote>
+ <p>
+ This must only be done once, as these macros hide the versioned
+ namespace name details from the application. Alternatively, you
+ could place the forward declaration in a namespace that is an
+ alias of the ACE versioned namespace, <em>e.g.</em>:
+ </p>
+ <blockquote>
+ <code>
+<pre>
+ namespace Foo = ACE_VERSIONED_NAMESPACE_NAME;</code>
+ namespace Foo {
+ class ACE_Reactor;
+ }
+ using namespace Foo;
+</pre>
+ </code>
+ </blockquote>
+ <p>
+ Versioned namespace support in ACE may be enabled by adding
+ <code>versioned_namespace=1</code> to your MPC
+ <code><strong>default.features</strong></code> file.
+ </p>
+
+ <h2>Things ACE Developers Should Know</h2>
+ <p>
+ ACE developers should place all ACE symbols that are potentially
+ exposed to the user, including forward declarations in a
+ versioned namespace using the
+ <code>ACE_BEGIN_VERSIONED_NAMESSPACE_DECL</code> and
+ <code>ACE_END_VERSIONED_NAMESPACE_DECL</code> macros. Free
+ functions that are declared to have a C calling convention
+ (<em>i.e.</em>, <code>extern "C"</code>) should have their names
+ mangled using the <code>ACE_PREPROC_CONCATENATE</code>
+ preprocessor. For example:
+ </p>
+ <blockquote>
+ <code>
+<pre>
+ void ACE_func (void) { ... }
+ ...
+ ACE_func(); // Call ACE_func()
+</pre>
+ </code>
+ </blockquote>
+ <p>
+ becomes:
+ </p>
+ <blockquote>
+ <code>
+<pre>
+ #if (defined (ACE_HAS_VERSIONED_NAMESPACE) \
+ && ACE_HAS_VERSIONED_NAMESPACE == 1) \
+ && !(defined (_MSC_VER) && _MSC_VER <= 1200)
+ // MSVC++ 6's preprocessor can't handle macro expansions
+ // required by the versioned namespace support. *sigh*
+
+ # define ACE_FOO_FUNC_NAME ACE_PREPROC_CONCATENATE(ACE_VERSIONED_NAMESPACE_NAME, _ACE_foo_func)
+
+ #else
+
+ # define ACE_FOO_FUNC_NAME ACE_foo_func
+
+ #endif /* ACE_HAS_VERSIONED_NAMESPACE == 1 */
+
+ ...
+ void ACE_FOO_FUNC_NAME (void) { ... }
+
+ ACE_FOO_FUNC_NAME(); // Call mangled ACE_foo_func().
+</pre>
+ </code>
+ </blockquote>
+ <p>
+ The <code>ACE_PREPROC_CONCATENATE</code> is used rather than a
+ straight <code>##</code> preprocessor concatenation since in the
+ latter case preprocessor symbols like
+ <code>ACE_VERSIONED_NAMESPACE_NAME</code> will not be expanded
+ if they are concatenated. <code>ACE_PREPROCE_CONCATENATE</code>
+ forces the preprocessor to expand them during the argument
+ prescan by calling a macro that itself calls another that
+ performs the actual concatenation.
+ </p>
+ <h3>General Guidelines</h3>
+ <ul>
+ <li>
+ Versioned namespace macro/support must be added to all new files
+ added to ACE.
+ </li>
+ <li>
+ Do not place include directives between
+ <code>ACE_BEGIN_VERSIONED_NAMESPACE_DECL</code> and
+ <code>ACE_END_VERSIONED_NAMESPACE_DECL</code> macros. Doing
+ so will cause nested namespace to be created, which is not
+ the desired affect.
+ </li>
+ <li>Be aware of preprocessor conditional blocks when placing the
+ versioned namespace macros. For example, if you open
+ versioned namespace within a given preprocessor condition
+ block, you'll most likely want to close it in the same
+ block.
+ </li>
+ <li>
+ If necessary, reopen and close the versioned namespace
+ multiple times in the same file by using the macros multiple
+ times to address the concerns described in the above two
+ items.
+ </li>
+ <li>
+ The <code>$ACE_ROOT/bin/fuzz.pl</code> script has a sanity
+ checking test for versioned namespaces that may be of use when
+ debugging nested namespace issues, and for detecting
+ <code>BEGIN</code>/<code>END</code> mismatches.
+ </li>
+ </ul>
+ <p>
+ Versioned namespace support in ACE may be enabled by adding
+ <code>versioned_namespace=1</code> to your MPC
+ <code><strong>default.features</strong></code> file.
+ </p>
+ <hr>
+ <address><a href="mailto:ossama@dre.vanderbilt.edu">Ossama Othman</a></address>
+<!-- Created: Fri Mar 17 08:35:50 PST 2006 -->
+<!-- hhmts start -->
+Last modified: Fri Mar 17 20:47:41 PST 2006
+<!-- hhmts end -->
+ </body>
+</html>
diff --git a/docs/ace_guidelines.vsmacros b/docs/ace_guidelines.vsmacros
new file mode 100644
index 00000000000..2218c1a14ba
--- /dev/null
+++ b/docs/ace_guidelines.vsmacros
Binary files differ
diff --git a/examples/C++NPv2/Reactor_Logging_Server_T.h b/examples/C++NPv2/Reactor_Logging_Server_T.h
new file mode 100644
index 00000000000..ee16f8a061e
--- /dev/null
+++ b/examples/C++NPv2/Reactor_Logging_Server_T.h
@@ -0,0 +1,29 @@
+/*
+** $Id$
+**
+** Copyright 2002 Addison Wesley. All Rights Reserved.
+*/
+
+#ifndef _REACTOR_LOGGING_SERVER_T_H
+#define _REACTOR_LOGGING_SERVER_T_H
+
+#include "ace/ACE.h"
+#include "ace/Reactor.h"
+
+template <class ACCEPTOR>
+class Reactor_Logging_Server : public ACCEPTOR
+{
+public:
+ Reactor_Logging_Server (int argc, char *argv[],
+ ACE_Reactor *reactor);
+};
+
+#if defined (ACE_TEMPLATES_REQUIRE_SOURCE)
+#include "Reactor_Logging_Server_T.cpp"
+#endif /* ACE_TEMPLATES_REQUIRE_SOURCE */
+
+#if defined (ACE_TEMPLATES_REQUIRE_PRAGMA)
+#pragma implementation ("Reactor_Logging_Server_T.cpp")
+#endif /* ACE_TEMPLATES_REQUIRE_PRAGMA */
+
+#endif /* _REACTOR_LOGGING_SERVER_T_H */
diff --git a/examples/Map_Manager/Map_Manager.mpc b/examples/Map_Manager/Map_Manager.mpc
new file mode 100644
index 00000000000..3a433cab0d4
--- /dev/null
+++ b/examples/Map_Manager/Map_Manager.mpc
@@ -0,0 +1,6 @@
+// -*- MPC -*-
+// $Id$
+
+project: aceexe {
+ exename = Map_Manager
+}
diff --git a/examples/Reactor/TP_Reactor/AcceptHandler.cpp b/examples/Reactor/TP_Reactor/AcceptHandler.cpp
new file mode 100644
index 00000000000..7ae34d2b2b4
--- /dev/null
+++ b/examples/Reactor/TP_Reactor/AcceptHandler.cpp
@@ -0,0 +1,106 @@
+/*
+ * $Id$
+ *
+ * ACE reactor demonstration
+ *
+ * Date: 26-Jan-2006
+ */
+
+#include <ace/Auto_Ptr.h>
+#include <ace/INET_Addr.h>
+
+#include "common.h"
+#include "AcceptHandler.h"
+#include "ReadHandler.h"
+
+AcceptHandler:: AcceptHandler(ACE_Reactor *reactor) :
+ ACE_Event_Handler(),
+ mReactor(reactor == 0 ? ACE_Reactor::instance() : reactor),
+ mAcceptor() {
+ ACE_TRACE("AcceptHandler:: AcceptHandler(ACE_Reactor *)");
+}
+
+AcceptHandler::~AcceptHandler() {
+ ACE_TRACE("AcceptHandler::~AcceptHandler()");
+}
+
+int AcceptHandler::open(void) {
+ ACE_TRACE("AcceptHandler::open(void)");
+
+ // create the local address used for the service (PORT is from common.h)
+ ACE_INET_Addr addr(PORT);
+
+ // open a port using the acceptor; reuse the address later
+ if (mAcceptor.open(addr, 1) == -1)
+ ACE_ERROR_RETURN((LM_ERROR, ACE_TEXT("%N:%l: Failed to open ")
+ ACE_TEXT ("listening socket. (errno = %i: %m)\n"), errno), -1);
+
+ // register the handler with the reactor
+ if (mReactor->register_handler(this,
+ ACE_Event_Handler::ACCEPT_MASK) == -1) {
+ ACE_ERROR((LM_ERROR, ACE_TEXT("%N:%l: Failed to register accept ")
+ ACE_TEXT ("handler. (errno = %i: %m)\n"), errno));
+
+ // don't leave the acceptor open
+ if (mAcceptor.close() == -1)
+ ACE_ERROR((LM_ERROR, ACE_TEXT("%N:%l: Failed to close the socket ")
+ ACE_TEXT ("after previous error. (errno = %i: %m)\n"),
+ errno));
+ return -1;
+ }
+
+ return 0;
+}
+
+ACE_HANDLE AcceptHandler::get_handle(void) const {
+ ACE_TRACE("AcceptHandler::get_handle(void)");
+ return mAcceptor.get_handle();
+}
+
+int AcceptHandler::handle_input(ACE_HANDLE) {
+ ACE_TRACE("AcceptHandler::handle_input(ACE_HANDLE)");
+
+ ACE_INET_Addr clientAddr;
+
+ // create a new ReadHandler
+ ReadHandler *reader = 0;
+ ACE_NEW_NORETURN (reader, ReadHandler());
+ if (reader == 0)
+ ACE_ERROR_RETURN((LM_ERROR, ACE_TEXT("%N:%l: Failed to allocate ")
+ ACE_TEXT ("reader. (errno = %i: %m)\n"), errno), -1);
+
+ // put reader in an auto pointer so we can use ACE_ERROR_RETURN safely
+ auto_ptr<ReadHandler> pReader(reader);
+
+ // accept the connection using the reader's stream
+ if (mAcceptor.accept(reader->getStream(), &clientAddr) == -1)
+ ACE_ERROR_RETURN((LM_ERROR, ACE_TEXT("%N:%l: Failed to accept ")
+ ACE_TEXT ("client connection. (errno = %i: %m)\n"), errno), -1);
+
+ // register the reader with the reactor
+ if (mReactor->register_handler(reader,
+ ACE_Event_Handler::READ_MASK) == -1)
+ ACE_ERROR_RETURN((LM_ERROR, ACE_TEXT("%N:%l: Failed to register ")
+ ACE_TEXT ("read handler. (errno = %i: %m)\n"), errno), -1);
+
+ // from now on the read handler takes care of itself
+ pReader.release();
+
+ return 0; // keep going
+}
+
+int AcceptHandler::handle_close(ACE_HANDLE, ACE_Reactor_Mask) {
+ ACE_TRACE("AcceptHandler::handle_close(ACE_HANDLE, ACE_Reactor_Mask)");
+
+ // close the listening socket
+ if (mAcceptor.close() == -1)
+ ACE_ERROR((LM_ERROR, ACE_TEXT("%N:%l: Failed to close the ")
+ ACE_TEXT ("socket. (errno = %i: %m)\n"), errno));
+
+ // no need to distinguish between error during close and normal close
+ // since ACE does not evaluate the return value of handle_close()
+
+ delete this;
+ return 0;
+}
+
diff --git a/examples/Reactor/TP_Reactor/AcceptHandler.h b/examples/Reactor/TP_Reactor/AcceptHandler.h
new file mode 100644
index 00000000000..036f7a36f5a
--- /dev/null
+++ b/examples/Reactor/TP_Reactor/AcceptHandler.h
@@ -0,0 +1,75 @@
+/*
+ * ACE reactor demonstration
+ *
+ * $Id$
+ * Date: 26-Jan-2006
+ */
+
+#ifndef __ACCEPTHANDLER_H__
+#define __ACCEPTHANDLER_H__
+
+#include <ace/Event_Handler.h>
+#include <ace/Reactor.h>
+#include <ace/SOCK_Acceptor.h>
+
+/**
+ * This accept handler is based on the provided solution from the ACE course.
+ */
+class AcceptHandler : public ACE_Event_Handler {
+
+ private:
+
+ /**
+ * The reactor to which the accept handler belongs.
+ */
+ ACE_Reactor *mReactor;
+
+ /**
+ * The socket used for incoming conections.
+ */
+ ACE_SOCK_Acceptor mAcceptor;
+
+ public:
+
+ /**
+ * @param reactor The reactor which will use this accept handler.
+ */
+ AcceptHandler(ACE_Reactor *reactor = 0);
+
+ /**
+ * The destructor exists for tracing purposes.
+ */
+ virtual ~AcceptHandler();
+
+ /**
+ * Open the listening socket and register the handler with the reactor.
+ *
+ * @return 0 on success, -1 on failure
+ */
+ int open(void);
+
+ /**
+ * @name Overridden methods from the ACE_Event_Handler
+ */
+ // @{
+
+ /**
+ * Provides the handle of mAcceptor.
+ */
+ virtual ACE_HANDLE get_handle(void) const;
+
+ /**
+ * Create a read handler for the new connection and register that
+ * handler with the reactor.
+ */
+ virtual int handle_input(ACE_HANDLE = ACE_INVALID_HANDLE);
+
+ /**
+ * Close the listening socket.
+ */
+ virtual int handle_close(ACE_HANDLE, ACE_Reactor_Mask);
+ // @}
+};
+
+#endif /* __ACCEPTHANDLER_H__ */
+
diff --git a/examples/Reactor/TP_Reactor/README b/examples/Reactor/TP_Reactor/README
new file mode 100644
index 00000000000..32fbc15aca9
--- /dev/null
+++ b/examples/Reactor/TP_Reactor/README
@@ -0,0 +1,86 @@
+ACE reactor demonstration
+=========================
+
+Martin Kolleck
+Tino Riethmuller
+
+
+
+1. Introduction
+
+This program demonstrates what we think is a bug in the ACE library. The
+affected component is the ACE_TP_Reactor. According to the documentation, the
+reactor ensures that only one of the handle_*() methods of an event handler is
+called at a time. Tino found this to be not true and I wrote this example
+program showing the behavior. I do not exclude the possibility that we are
+using the ACE library in an unintended/wrong way. So comments on the code as
+well as any other remarks are welcome.
+
+
+
+2. The program
+
+The program consists of a client and a server. The general implementation is
+taken from the example solution to exercise 4c of the ACE course. The client
+will send a request to the server. This request is interpreted to be the size
+of the following data. The server allocates the memory required to hold the
+client's data and then sends a confirmation to the client, that it may
+proceed. The the client sends the large data chunk and the server again
+confirms it.
+
+The client runs in a loop which can be configured to run indefinitely or a
+previously set amount of times. The configuration i done from the command
+line. To invoke the client type:
+
+ $ ./client size [count]
+
+<size> sets the size (in MiB) of the buffer sent to the server. Depending on
+the systems, values between 60 and 100 have been used for testing. <count>
+determines how often the buffer is sent. If left out, the clients send the
+buffer until interrupted.
+
+The server is started without arguments. Both programs will print a dot for
+each successful connection. I found this an easy and unintrusive way of showing
+progress whithout flooding the console too fast. This also makes it easier to
+see when an error has occurred.
+
+
+
+3. Building the program
+
+This example was created on a Linux box. You will need the environment
+variable ACE_ROOT set up to the location where ACE is installed. It might be
+possible, that the path where the ACE libraries are found, needs to be adjusted
+in the Makefile.
+
+To compile simply type 'make' on the command prompt.
+
+ $ make
+
+This will create two executable files. One for the server and one for the
+client. (named respectively)
+
+
+
+4. Running the program
+
+The error seems to be of statistical nature. Occurring only under certain
+conditions (which I am not sure of, what they are). I successfully produced
+the error on the four machines given below (architecture, ACE and compiler
+version). I tested the program with localhost connections, as well as over
+a real network connection and could always reproduce the error.
+
+To detect the error I introduced a member variable to the read event handler.
+This counter is initialized to zero in the constructor. When handle_input() of
+the event handler is called, the counter is increased and decreased, when
+handle_input() returns. Before increasing the counter, It is compared to zero
+(which it should alway be, if only one invocation to handle_input() is made
+at a time) and an error message is printed if it is not zero.
+
+To test for the error, I ran one instance of the server program and TWO
+instances of the client program. The sizes of the buffers were between 60 and
+100 MiB and no count was given (running until stopped) The three Linux boxes
+showed the error within one minute of starting both clients. For the Windows
+box I decreased the buffer size to 15 and 20 MiB (Windows does not seem to have
+very performant localhost connectivity) and it took about half an
+hour until the error occurred the first time.
diff --git a/examples/Reactor/TP_Reactor/ReadHandler.cpp b/examples/Reactor/TP_Reactor/ReadHandler.cpp
new file mode 100644
index 00000000000..06c6c953046
--- /dev/null
+++ b/examples/Reactor/TP_Reactor/ReadHandler.cpp
@@ -0,0 +1,151 @@
+/*
+ * ACE reactor demonstration
+ *
+ * $Id$
+ * Date: 26-Jan-2006
+ */
+
+#include <ace/streams.h>
+#include <ace/Time_Value.h>
+
+#include "common.h"
+#include "ReadHandler.h"
+
+/**
+ * This macro is used to increase the invocation counter by one when entering
+ * handle_input(). It also checks wether the counter is greater than zero
+ * indicating, that handle_input() has been called before.
+ */
+#define INVOCATION_ENTER() do { if (mInvocationCounter > 0) \
+ ACE_ERROR((LM_ERROR, ACE_TEXT("Multiple invocations detected.\n"))); \
+ mInvocationCounter++; } while (0)
+
+/**
+ * THis macro is the counter part to INVOCATION_ENTER(). It decreases the
+ * invocation counter and then returns the given value. This macro is
+ * here for convenience to decrease the invocation counter also when returning
+ * due to errors.
+ */
+#define INVOCATION_RETURN(retval) do { mInvocationCounter--; \
+ return retval; } while(0)
+
+ReadHandler::ReadHandler() : ACE_Event_Handler(), mStream(), mDataSize(0),
+ mData(0), mCallCounter(0), mInvocationCounter(0) {
+ ACE_TRACE(ACE_TEXT("ReadHandler::ReadHandler()"));
+}
+
+ReadHandler::~ReadHandler() {
+ ACE_TRACE(ACE_TEXT("ReadHandler::~ReadHandler()"));
+
+ if (mStream.close() == -1)
+ ACE_ERROR((LM_ERROR, ACE_TEXT("%N:%l: Failed to close socket. ")
+ ACE_TEXT ("(errno = %i: %m)\n"), errno));
+
+ delete[] mData;
+}
+
+ACE_SOCK_Stream &ReadHandler::getStream(void) {
+ ACE_TRACE(ACE_TEXT("ReadHandler::getStream(void)"));
+ return mStream;
+}
+
+ACE_HANDLE ReadHandler::get_handle(void) const {
+ ACE_TRACE(ACE_TEXT("ReadHandler::get_handle(void)"));
+ return mStream.get_handle();
+}
+
+int ReadHandler::handle_input(ACE_HANDLE) {
+ ACE_TRACE(ACE_TEXT("ReadHandler::handle_input(ACE_HANDLE)"));
+
+ INVOCATION_ENTER();
+
+ // the response sent to the client
+ char response = 0;
+
+ if (mCallCounter == 0) {
+
+ /*
+ * This is the first request from the client.
+ */
+
+ // increase the call counter so the next client request goes to else-if
+ mCallCounter++;
+
+ // get the desired size from the client
+ // Note: only use the sizeof and pointer to int on compatible
+ // platforms (i.e. little-endian/big-endian, data type size)
+ if (mStream.recv_n(&mDataSize, sizeof(mDataSize),
+ &connTimeout) != sizeof(mDataSize)) {
+ ACE_ERROR((LM_ERROR, ACE_TEXT("%N:%l: Failed to receive ")
+ ACE_TEXT ("request. (errno = %i: %m)\n"), errno));
+ INVOCATION_RETURN(-1);
+ }
+
+ // The verbose debug output is replaced with some unintrusive dots.
+ // This increases visibility of the desired effect.
+ // ACE_DEBUG((LM_DEBUG, ACE_TEXT("%@: Data size: %i\n"), this, mDataSize));
+ ACE_DEBUG((LM_DEBUG, ACE_TEXT(".")));
+
+ // check mDataSize for plausability then allocate memory
+ if (mDataSize > 0) {
+ mData = new (std::nothrow) char[mDataSize];
+ if (mData == 0)
+ ACE_DEBUG((LM_DEBUG, ACE_TEXT("%N:%l: Failed to allocate ")
+ ACE_TEXT ("data buffer.\n")));
+ else
+ response = 'K';
+ }
+
+ // send the response to the client (which is still 0, if the
+ // allocation did not succeed)
+ if (mStream.send_n(&response, sizeof(response), &connTimeout) != 1) {
+ ACE_ERROR((LM_ERROR, ACE_TEXT("%N:%l: Failed to send ")
+ ACE_TEXT ("response. (errno = %i: %m)\n"), errno));
+ INVOCATION_RETURN(-1);
+ }
+
+ if (response == 'K')
+ INVOCATION_RETURN(0); // get another request from the same client
+ else
+ INVOCATION_RETURN(-1); // the client will not send data if response != 'K'
+
+ } else if (mCallCounter == 1) {
+
+ /*
+ * This is the second request from the client.
+ */
+
+ // increase the call counter, this read handler should not be called
+ // again
+ mCallCounter++;
+
+ // receive the data from the client
+ if (mStream.recv_n(mData, mDataSize, &connTimeout) != mDataSize) {
+ ACE_ERROR((LM_ERROR, ACE_TEXT("%N:%l: Failed to receive data.")
+ ACE_TEXT ("(errno = %i: %m)\n"), errno));
+ INVOCATION_RETURN(-1);
+ }
+
+ response = 'K';
+
+ if (mStream.send_n(&response, 1, &connTimeout) != 1) {
+ ACE_ERROR((LM_ERROR, ACE_TEXT("%N:%l: Failed to send ")
+ ACE_TEXT ("confirmation. (errno = %i: %m)\n"), errno));
+ INVOCATION_RETURN(-1);
+ }
+
+ INVOCATION_RETURN(-1); // ask for removal, since client does not send any more data
+ }
+
+ // this is to find strange actions with the call counter
+ ACE_ERROR((LM_ERROR, ACE_TEXT("%N:%l: We should not get here.")));
+ INVOCATION_RETURN(-1);
+}
+
+int ReadHandler::handle_close(ACE_HANDLE, ACE_Reactor_Mask) {
+ ACE_TRACE("ReadHandler::handle_close(ACE_HANDLE, ACE_Reactor_Mask)");
+
+ delete this;
+ return 0;
+}
+
diff --git a/examples/Reactor/TP_Reactor/ReadHandler.h b/examples/Reactor/TP_Reactor/ReadHandler.h
new file mode 100644
index 00000000000..41d58b6008a
--- /dev/null
+++ b/examples/Reactor/TP_Reactor/ReadHandler.h
@@ -0,0 +1,92 @@
+/*
+ * ACE reactor demonstration
+ *
+ * $Id$
+ * Date: 26-Jan-2006
+ */
+
+#ifndef __READHANDLER_H__
+#define __READHANDLER_H__
+
+#include <ace/Event_Handler.h>
+#include <ace/SOCK_Stream.h>
+
+/**
+ * This read handler is created by the accept handler and handles all the data
+ * exchange between client and server. The client makes two requests to the
+ * server. The first asks the server to create a buffer which will hold the
+ * data sent in the second call.
+ */
+class ReadHandler : public ACE_Event_Handler {
+
+ private:
+
+ /**
+ * The stream socket used for data exchange.
+ */
+ ACE_SOCK_Stream mStream;
+
+ /**
+ * The size of the data array.
+ */
+ int mDataSize;
+
+ /**
+ * The array containing the client's data.
+ */
+ char *mData;
+
+ /**
+ * The call counter to distinguish between first and second call.
+ */
+ int mCallCounter;
+
+ /**
+ * Count the numer of invocations of handle_*(). According to the
+ * docs, there should be only one invocation at any given time.
+ */
+ int mInvocationCounter;
+
+ public:
+
+ /**
+ * Initialization.
+ */
+ ReadHandler(void);
+
+ /**
+ * Clean up data.
+ */
+ virtual ~ReadHandler();
+
+ /**
+ * Provide access to the internal stream socket.
+ */
+ ACE_SOCK_Stream &getStream(void);
+
+ /**
+ * @name Overridden methods from the ACE_Event_Handler
+ */
+ // @{
+
+ /**
+ * Provides the handle of mStream;
+ */
+ virtual ACE_HANDLE get_handle(void) const;
+
+ /**
+ * Handles the data excahnge between client and server. On the first
+ * invocation, mData is allocated to the requested size and on the
+ * second invocation, that buffer is filled with the client's data.
+ */
+ virtual int handle_input(ACE_HANDLE = ACE_INVALID_HANDLE);
+
+ /**
+ * Deletes this instance of the read handler.
+ */
+ virtual int handle_close(ACE_HANDLE, ACE_Reactor_Mask);
+ // @}
+};
+
+#endif /* __READHANDLER_H__ */
+
diff --git a/examples/Reactor/TP_Reactor/TP_Reactor.mpc b/examples/Reactor/TP_Reactor/TP_Reactor.mpc
new file mode 100644
index 00000000000..03d8de2e7aa
--- /dev/null
+++ b/examples/Reactor/TP_Reactor/TP_Reactor.mpc
@@ -0,0 +1,18 @@
+// -*- MPC -*-
+// $Id$
+
+project (*client) : aceexe {
+ exename = client
+ Source_Files {
+ client.cpp
+ }
+}
+
+project (*server) : aceexe {
+ exename = server
+ Source_Files {
+ server.cpp
+ AcceptHandler.cpp
+ ReadHandler.cpp
+ }
+}
diff --git a/examples/Reactor/TP_Reactor/client.cpp b/examples/Reactor/TP_Reactor/client.cpp
new file mode 100644
index 00000000000..509f2e9c457
--- /dev/null
+++ b/examples/Reactor/TP_Reactor/client.cpp
@@ -0,0 +1,141 @@
+/*
+ * ACE reactor demonstration
+ *
+ * $Id$
+ * Date: 26-Jan-2006
+ */
+
+#include <ace/Auto_Ptr.h>
+#include <ace/INET_Addr.h>
+#include <ace/Log_Msg.h>
+#include <ace/OS.h>
+#include <ace/SOCK_Acceptor.h>
+#include <ace/SOCK_Connector.h>
+#include <ace/SOCK_Stream.h>
+#include <ace/streams.h>
+
+#include "common.h"
+
+/**
+ * Print usage information for the client.
+ *
+ * @param arg The progams name (argv[0]).
+ */
+int printUsage(ACE_TCHAR *arg) {
+ cerr << "Usage: " << arg << " size [count]" << endl;
+ cerr << "\tSends <size> MiB to the server and optionally repeats that "
+ << "<count> times." << endl;
+ cerr << "\tAll arguments must be positive numbers. If no <count> is "
+ << "given, the\n\tclient runs until interrupted." << endl;
+ return -1;
+}
+
+int ACE_TMAIN(int argc, ACE_TCHAR **argv) {
+
+ // size and count for transmissions
+ int size = 0, count = -1;
+
+ // the server's answer is a single byte
+ char answer;
+
+ // parse the <size> argument
+ if ((argc < 2) || (((size = ACE_OS::strtol(argv[1], 0, 10)) < 1) ||
+ (errno == EINVAL)))
+ return printUsage(argv[0]);
+
+ // take size as the number of MiB and create appropriate buffer
+ size *= BASE;
+ char *someData = new (std::nothrow) char[size];
+
+ if (someData == 0)
+ ACE_ERROR_RETURN ((LM_ERROR,
+ ACE_TEXT ("%N:%l: Failed to allocate ")
+ ACE_TEXT ("data buffer.\n")), -1);
+
+ // put someData in an auto_ptr so it gets deleted automatically
+ auto_ptr<char> pSomeData(someData);
+
+ // parse the <count> argument if available
+ if ((argc == 3) && (((count = ACE_OS::strtol(argv[2], 0, 10)) < 1) ||
+ (errno == EINVAL)))
+ return printUsage(argv[0]);
+
+ // the server listens on localhost on default port (from common.h)
+ ACE_INET_Addr serverAddr(PORT, "localhost");
+
+ ACE_SOCK_Stream stream;
+ ACE_SOCK_Connector connector;
+
+ // -1 is running indefinitely
+ while ((count == -1) || (count-- != 0)) {
+
+ // some output, that we know something is happening
+ //ACE_DEBUG((LM_DEBUG, ACE_TEXT("%N:%l: Passes left: %i\n"), count));
+ ACE_DEBUG((LM_DEBUG, ACE_TEXT(".")));
+
+ // connect to the server and get the stream
+ if (connector.connect(stream, serverAddr) == -1) {
+ ACE_ERROR((LM_ERROR,
+ ACE_TEXT("%N:%l: Failed to connect to ")
+ ACE_TEXT ("server. (errno = %i: %m)\n"), errno));
+ break;
+ }
+
+ try {
+
+ // send the request to the server (number of MiB in the next call)
+ // Note: only use the sizeof and pointer to int on compatible
+ // platforms (i.e. little-endian/big-endian, data type size)
+ if (stream.send_n(&size, sizeof(size), &connTimeout) != sizeof(size)) {
+ ACE_ERROR((LM_ERROR, ACE_TEXT("%N:%l: Failed to send ")
+ ACE_TEXT ("request. (errno = %i: %m)\n"), errno));
+ throw(1);
+ }
+
+ // receive the answer
+ if (stream.recv_n(&answer, sizeof(answer), &connTimeout) != 1) {
+ ACE_ERROR((LM_ERROR, ACE_TEXT("%N: %l: Failed to receive ")
+ ACE_TEXT ("1st response. (errno = %i: %m)\n"), errno));
+ throw(1);
+ }
+
+ // server answer, 'K" indicates a positive answer
+ if (answer == 'K') {
+
+ // send a huge message to the server
+ if (stream.send_n(someData, size, &connTimeout) != size) {
+ ACE_ERROR((LM_ERROR, ACE_TEXT("%N:%l: Failed to send ")
+ ACE_TEXT ("someData. (errno = %i: %m)\n"), errno));
+ throw(1);
+ }
+
+ // get an answer
+ if (stream.recv_n(&answer, sizeof(answer), &connTimeout) != 1) {
+ ACE_ERROR((LM_ERROR, ACE_TEXT("%N: %l: Failed to receive ")
+ ACE_TEXT ("2nd response. (errno = %i: %m)\n"), errno));
+ throw(1);
+ }
+
+ // check the answer
+ if (answer != 'K') {
+ cout << "The server was unable to process the data."
+ << endl;
+ }
+ }
+ } catch (...) {
+ // ok we know an error occurred, we need to close the socket.
+ // The we'll try again.
+ }
+
+ // close the current stream
+ if (stream.close() == -1) {
+ ACE_ERROR((LM_ERROR, ACE_TEXT("%N:%l: Failed to close ")
+ ACE_TEXT ("socket. (errno = %i: %m)\n"), errno));
+ break;
+ }
+ } // while
+
+ cout << "Bye. Bye" << endl;
+ return 0;
+}
+
diff --git a/examples/Reactor/TP_Reactor/common.h b/examples/Reactor/TP_Reactor/common.h
new file mode 100644
index 00000000000..c9661027923
--- /dev/null
+++ b/examples/Reactor/TP_Reactor/common.h
@@ -0,0 +1,29 @@
+/*
+ * ACE reactor demonstration
+ *
+ * $Id$
+ * Date: 26-Jan-2006
+ */
+
+#ifndef __COMMON_H__
+#define __COMMON_H__
+
+#include <ace/Time_Value.h>
+
+/**
+ * The port number used by client and server.
+ */
+static const int PORT = 4711;
+
+/**
+ * The base size. 0x100000 = 1 MiB
+ */
+static const int BASE = 0x100000;
+
+/**
+ * The timeout value for connections. (30 seconds)
+ */
+static const ACE_Time_Value connTimeout(30);
+
+#endif /* __COMMON_H__ */
+
diff --git a/examples/Reactor/TP_Reactor/run_test.pl b/examples/Reactor/TP_Reactor/run_test.pl
new file mode 100644
index 00000000000..ac07295a735
--- /dev/null
+++ b/examples/Reactor/TP_Reactor/run_test.pl
@@ -0,0 +1,41 @@
+eval '(exit $?0)' && eval 'exec perl -S $0 ${1+"$@"}'
+ & eval 'exec perl -S $0 $argv:q'
+ if 0;
+
+# $Id$
+# -*- perl -*-
+
+use lib '../../../bin';
+use PerlACE::Run_Test;
+
+$status = 0;
+
+$SV = new PerlACE::Process ("server", "");
+$CL1 = new PerlACE::Process ("client", "80 100");
+$CL2 = new PerlACE::Process ("client", "80 100");
+$SV->Spawn ();
+
+sleep (1);
+
+$client1 = $CL1->Spawn ();
+
+if ($client1 != 0) {
+ print STDERR "ERROR: client 1 returned $client1\n";
+ $status = 1;
+}
+
+$client2 = $CL2->Spawn ();
+
+if ($client2 != 0) {
+ print STDERR "ERROR: client 2 returned $client2\n";
+ $status = 1;
+}
+
+$server = $SV->WaitKill (1000);
+
+if ($server != 0) {
+ print STDERR "ERROR: server returned $server\n";
+ $status = 1;
+}
+
+exit $status;
diff --git a/examples/Reactor/TP_Reactor/server.cpp b/examples/Reactor/TP_Reactor/server.cpp
new file mode 100644
index 00000000000..0c147818424
--- /dev/null
+++ b/examples/Reactor/TP_Reactor/server.cpp
@@ -0,0 +1,66 @@
+/*
+ * ACE reactor demonstration
+ *
+ * $Id$
+ * Date: 26-Jan-2006
+ */
+
+#include <ace/Event_Handler.h>
+#include <ace/Log_Msg.h>
+#include <ace/OS.h>
+#include <ace/Reactor.h>
+#include <ace/Signal.h>
+#include <ace/streams.h>
+#include <ace/Thread_Manager.h>
+#include <ace/TP_Reactor.h>
+
+#include "AcceptHandler.h"
+
+/**
+ * This is the function run by all threads in the thread pool.
+ *
+ * @param arg is expected to be of type (ACE_Reactor *)
+ */
+ACE_THR_FUNC_RETURN threadFunc(void *arg) {
+ ACE_TRACE("threadFunc(void *)");
+
+ ACE_Reactor *reactor = (ACE_Reactor *) arg;
+ reactor->run_reactor_event_loop();
+
+ return 0;
+}
+
+/**
+ * The main function sets up the TP reactor. The code is basically taken from
+ * the solution to exercise 4c of the ACE course.
+ */
+int ACE_TMAIN(int, ACE_TCHAR **) {
+
+ // create a reactor from a TP reactor
+ ACE_TP_Reactor tpReactor;
+ ACE_Reactor reactor(&tpReactor);
+
+ // create a new accept handler using that reactor
+ AcceptHandler *acceptHandler = 0;
+ ACE_NEW_NORETURN (acceptHandler, AcceptHandler(&reactor));
+ if (acceptHandler == 0)
+ ACE_ERROR_RETURN((LM_ERROR, ACE_TEXT("%N:%l: Failed to allocate ")
+ ACE_TEXT ("accept handler. (errno = %i: %m)\n"), errno), -1);
+
+ // open the accept handler
+ if (acceptHandler->open() == -1) {
+ delete acceptHandler;
+ ACE_ERROR_RETURN((LM_ERROR, ACE_TEXT("%N:%l: Failed to open accept ")
+ ACE_TEXT ("handler. Exiting.\n")), -1);
+ }
+
+ // spawn some threads which run the reactor event loop(s)
+ ACE_Thread_Manager::instance()->spawn_n(9, threadFunc, &reactor);
+
+ // let the thread manager wait for all threads
+ ACE_Thread_Manager::instance()->wait();
+
+ ACE_DEBUG((LM_DEBUG, ACE_TEXT("Bye. Bye.\n")));
+ return 0;
+}
+
diff --git a/include/makeinclude/platform_macosx_tiger.GNU b/include/makeinclude/platform_macosx_tiger.GNU
new file mode 100644
index 00000000000..91afd7421df
--- /dev/null
+++ b/include/makeinclude/platform_macosx_tiger.GNU
@@ -0,0 +1,60 @@
+# $Id$
+# platform_macosx.GNU
+# support for Mac OS X 10.4 (Tiger)
+# By default, this uses the default compiler selected using gcc_select.
+
+cidl = 1
+boost = 1
+zzip = 1
+zlib = 1
+ifndef exceptions
+ exceptions = 1
+endif
+ifeq (,$(threads))
+ threads = 1
+endif
+ifeq (,$(debug))
+ debug = 1
+endif
+ifeq (,$(optimize))
+ optimize = 0
+endif
+ifeq (,$(ssl))
+ ssl = 1
+endif
+ifeq (,$(versioned_so))
+ versioned_so = 0
+endif
+ifeq (,$(no_hidden_visibility))
+# Disable symbol visibility support by default.
+#
+# Apple's g++ 4 compiler doesn't appear to correctly support
+# visibility attributes, at least as well as the vanilla g++.
+ no_hidden_visibility = 1
+endif
+with_ld = macosx
+
+pipes ?= 1
+
+CC = gcc
+CXX = g++
+CFLAGS += -Wall -Wpointer-arith -Wno-long-double
+
+DCFLAGS += -g
+DLD = $(CXX)
+LD = $(CXX)
+#LIBS += -lstdc++.6 -lSystem -lSystemStubs
+
+OCFLAGS += -O2 -mcpu=G3 -mtune=G4
+RANLIB = ranlib
+SOEXT = dylib
+SOFLAGS += -dynamiclib
+SOBUILD = -o $(VSHDIR)$*.dylib $<
+
+# Test for template instantiation, add to SOFLAGS if versioned_so set,
+# add -E to LDFLAGS if using GNU ld
+#
+include $(ACE_ROOT)/include/makeinclude/platform_g++_common.GNU
+
+LDFLAGS += -flat_namespace
+CCFLAGS += $(CFLAGS) $(TEMPLATES_FLAG)
diff --git a/include/makeinclude/platform_vxworks6.2.GNU b/include/makeinclude/platform_vxworks6.2.GNU
new file mode 100644
index 00000000000..f3e8a9bafab
--- /dev/null
+++ b/include/makeinclude/platform_vxworks6.2.GNU
@@ -0,0 +1,351 @@
+# $Id$
+# VxWorks 6.2
+
+#### Notes:
+#### 1) This file requires that the WIND_BASE and WIND_HOST_TYPE environment
+#### variables be set. If the target CPU is not SIMNT, then your CPU
+#### environment variable must be set.
+#### 2) If you have problems with munch output not being compilable
+#### because it contains identifiers with ".", e.g., ".cpp", in them:
+#### add a global variable or function to that .cpp file. See
+#### ace/IOStream_T.cpp for an explanation and example.
+#### 3) The TOOL environment variable may be set to "diab" (default is "gnu").
+#### 4) If perl is not on your path, you'll also need to set your PERL_PATH
+#### environment variable to the full path to perl.
+
+VXWORKS = 1
+CROSS-COMPILE = 1
+
+ifneq (,$(HOST_ROOT))
+ TAO_IDL ?= $(HOST_ROOT)/bin/tao_idl$(EXEEXT)
+ TAO_IDL_DEP ?= $(TAO_IDL)
+ TAO_IDLFLAGS += -g $(HOST_ROOT)/bin/gperf
+endif
+
+ifeq ("$(OS)", "Windows_NT")
+ifneq ($(MAKE_MODE), unix)
+vxworks_ntbuild = 1
+MKDIR_NTSTYLE = 1
+endif
+endif
+
+debug ?= 1
+optimize ?= 1
+rtti ?= 1
+threads ?= 1
+exceptions ?= 1
+rtp ?= 1
+pthread ?= 1
+
+ifeq ($(static_libs),1)
+ shared_libs = 0
+else
+ static_libs = 0
+endif
+versioned_so ?= 0
+
+# VxWorks doesn't have rwho
+rwho = 0
+
+ifeq (,$(WIND_BASE))
+ default:
+ @ERROR: you must set your WIND_BASE environment variable
+endif # WIND_BASE
+
+ifeq (,$(WIND_HOST_TYPE))
+ default:
+ @ERROR: you must set your WIND_HOST_TYPE environment variable
+endif # WIND_HOST_TYPE
+
+ifeq ($(DIAB_HOST_TYPE),)
+ifeq ("$(OS)", "Windows_NT")
+ DIAB_HOST_TYPE = WIN32
+else
+ DIAB_HOST_TYPE = UNIX
+endif
+endif
+
+HOST_DIR = $(WIND_BASE)/host/$(WIND_HOST_TYPE)
+
+ifeq (,$(PERL_PATH))
+ PERL_PATH = perl
+endif # ! PERL_PATH
+
+ifeq ($(VXWORKS_VERSION_FLAG),)
+ VXWORKS_VERSION_FLAG = -DACE_VXWORKS=0x620
+endif # VXWORKS_VERSION_FLAG
+
+ifeq ($(TOOL),)
+ override TOOL = gnu
+else
+ override TOOL := $(TOOL)
+endif
+override TOOL_FAMILY := $(TOOL)
+
+ifeq ("$(TOOL)","gnu")
+ templates ?= automatic
+endif
+
+ifeq ($(rtp),0)
+ PRJ_TYPE = vxApp
+endif
+
+ifeq ($(rtp),1)
+ TARGET_DIR = $(WIND_BASE)/target/usr
+else
+ TARGET_DIR = $(WIND_BASE)/target/h
+endif
+TGT_DIR = $(WIND_BASE)/target
+
+ifeq ($(CPU),)
+ # default CPU
+ CPU = SIMNT
+else
+ override CPU := $(CPU)
+endif
+
+ifeq ($(shared_libs),1)
+ SHARED_LIBS = 1
+endif
+ifeq ($(shared_libs_only),1)
+ SHARED_LIBS = 1
+endif
+
+ifeq ($(rtp),0)
+ ifeq ($(SHARED_LIBS),1)
+ ACELIB = -L./
+ #### There's no difference between non-shared and shared object code.
+ VSHDIR = $(VDIR)
+ endif # shared_libs
+endif
+
+BIN_UNCHECKED ?=
+SHLIB_UNCHECKED ?=
+
+ifneq ("$(BIN_UNCHECKED)","")
+VX_APP_BUILD := 1
+else
+ ifeq ($(SHARED_LIBS),1)
+ ifneq ("$(SHLIB_UNCHECKED)","")
+ VX_SO_BUILD := 1
+ endif
+ endif
+ ifneq ($(VX_SO_BUILD),1)
+ VX_LIB_BUILD := 1
+ endif
+endif
+
+ifneq ($(VX_LIB_BUILD),1)
+ ifeq ($(rtp),0)
+ VXWORKSLINK = true
+ endif
+ ifeq ($(VX_APP_BUILD),1)
+ ## set variables for VxWorks linktarget identification
+ ifeq ($(rtp),0)
+ EXEEXT = .out
+ PRJ_FILE = $(basename $(notdir $(BIN_UNCHECKED))).vxworks
+ else
+ PRJ_FILE = $(basename $(notdir $(BIN_UNCHECKED))).vxe
+ EXEEXT = .vxe
+ VXE_DIR := $(OUTPUT_DIRECTORY)
+ EXE = $(BIN_UNCHECKED)
+ GENERATED_DIRTY += $(PRJ_DIR)/$(PRJ_FILE)
+ endif
+ PRJ_DIR = .
+ CLEANUP_OBJS := ctdt.c $(PRJ_DIR)/$(PRJ_FILE) $(CLEANUP_OBJS)
+ else
+ ## set variables for VxWorks .SO linktarget identification
+ PRJ_FILE = $(basename $(notdir $(SHLIB_UNCHECKED))).vxworks
+ PRJ_DIR = .
+ CLEANUP_OBJS := ctdt.c $(PRJ_DIR)/$(PRJ_FILE) *.out $(CLEANUP_OBJS)
+ endif
+endif
+
+ifeq ($(rtp),1)
+ include $(WIND_USR)/make/defs.default
+ include $(WIND_USR)/make/defs.$(WIND_HOST_TYPE)
+ include $(WIND_USR)/tool/$(TOOL_FAMILY)/make.$(CPU)$(TOOL)
+ CPPFLAGS += -mrtp
+ LDFLAGS := $(filter-out -X, $(LDFLAGS))
+ LD := $(CPLUS)
+ DLD := $(CPLUS)
+ LDFLAGS += -L$(WIND_USR)/lib/$(VX_CPU_FAMILY)/$(CPU)/common
+ LDLIBS += -ldl
+else
+ include $(TGT_DIR)/h/make/defs.default
+ include $(TGT_DIR)/h/make/defs.$(WIND_HOST_TYPE)
+ include $(TGT_DIR)/h/make/defs.$(PRJ_TYPE)
+ include $(TGT_DIR)/h/tool/$(TOOL_FAMILY)/make.$(CPU)$(TOOL)
+endif
+
+## make sure we don't use that stupid, crippled vxrm.bat script.
+override RM=rm -f
+
+ifeq ("$(VXWORKSLINK)","true")
+ # prevent possible clash with static LIB rules
+ # in VxWorks make includes and rules.lib.GNU
+ override ARCHIVE =
+ override LARGE_PROJECT =
+ PRJ_OBJS = $(addprefix $(VDIR), $(OBJS)) $(VSHOBJS)
+ ifeq ($(SHARED_LIBS),1)
+ ##LD_PARTIAL += -L$(ACE_ROOT)/lib -L./ $(LDLIBPATH) $(LD_LINK_PATH)
+ PRJ_OBJS_FOR_LD_PARTIAL=$(addprefix $(VDIR), $(OBJS)) $(VSHOBJS)
+ ifeq ($(VX_SO_BUILD),1)
+ ## Shared lib builds for VxWorks will also build 'import' libraries
+ LIB_INSTALL += $(VLIB:%=$(INSLIB)/%)
+ CLEANUP_INSTALL += $(CLEANUP_VLIB:%=$(INSLIB)/%)
+ REALCLEAN_FILES += $(CLEANUP_LIB:%=%) $(CLEANUP_LIB:%=%_debug) $(CLEANUP_LIB:%=%_profile) $(CLEANUP_LIB:%=%_optimize)
+ endif
+ else
+ LD_PARTIAL += -L$(ACE_ROOT)/ace -L./ $(LDLIBPATH) $(LD_LINK_PATH)
+ PRJ_OBJS_FOR_LD_PARTIAL=$(addprefix $(VDIR), $(OBJS)) $(VSHOBJS) $(VLDLIBS) $(ACE_SHLIBS) $(LIBS)
+ endif
+ PRJ_OBJS_FOR_LD=$(addprefix $(VDIR), $(OBJS)) $(VSHOBJS)
+ PRJ_OBJS_FOR_NM=$(addprefix $(VDIR), $(OBJS)) $(VSHOBJS)
+ PRJ_OBJS_FOR_AR=$(addprefix $(VDIR), $(OBJS)) $(VSHOBJS)
+ POST_BUILD_RULE = $(POSTLINK)
+ COMPILE_TRADITIONAL = $(CC) $(OPTION_OBJECT_ONLY) $(OPTION_DOLLAR_SYMBOLS)\
+ $(filter-out -ansi, $(CFLAGS))
+
+ ## make sure default target stays the ACE/TAO default target
+ ##
+default: all
+
+endif
+
+CPPFLAGS += $(VXWORKS_VERSION_FLAG)
+
+ifeq ($(debug),1)
+ DCFLAGS += -g
+ DCCFLAGS += -g
+ CPPFLAGS +=
+endif
+
+ifeq ($(pthread),1)
+ CPPFLAGS += -DACE_HAS_PTHREADS
+endif
+
+ifeq ("$(TOOL)","gnu")
+# Test for template instantiation, add to SOFLAGS if SONAME set,
+# add -E to LDFLAGS if using GNU ld
+include $(ACE_ROOT)/include/makeinclude/platform_g++_common.GNU
+
+ifeq ("$(templates)","automatic")
+ifdef repo
+ifeq ("$(VXWORKSLINK)","true")
+ ifeq ($(VX_APP_BUILD),1)
+ ifneq ($(SHARED_LIBS),1)
+ LD_PARTIAL += -frepo
+ endif
+ endif
+else
+ ifeq ($(rtp),0)
+ ace_lib_prelink := 1
+ LINK.cc = override
+ LINK.cc.override = $(LD_PARTIAL) -frepo -L$(ACE_ROOT)/ace -L$(INSLIB) -L./ $(LDLIBPATH) $(LD_LINK_PATH)
+ LDFLAGS = $(ACE_SHLIBS)
+ endif
+endif
+else
+ C++FLAGS += -fmerge-templates
+endif
+endif
+
+# TEMPLATES_FLAG is set by platform_g++_common.GNU
+ifneq ($(TEMPLATES_FLAG),) # If specified, add it to the CCFLAGS
+ CPPFLAGS += $(TEMPLATES_FLAG)
+endif
+endif # TOOL == gnu
+
+ifeq ("$(TOOL)","diab")
+ifeq ($(exceptions),1)
+ C++FLAGS += -Xexceptions
+else
+ C++FLAGS += -Xexceptions-off
+endif
+else
+ifeq ("$(TOOL)","gnu")
+ifeq ($(exceptions),1)
+ C++FLAGS += -fexceptions
+else
+ C++FLAGS += -fno-exceptions
+endif
+endif
+endif
+
+ifeq (0,$(rtti))
+C++FLAGS += -DACE_LACKS_RTTI
+ifeq ("$(TOOL)","gnu")
+ C++FLAGS += -fno-rtti
+else
+ C++FLAGS += -Xrtti-off
+endif
+endif # rtti
+
+ifneq ($(findstring $(VX_CPU_FAMILY),ppc arm),)
+ifeq ("$(TOOL)","diab")
+ C++FLAGS += -Xchar-signed
+else
+ifeq ("$(TOOL)","gnu")
+ C++FLAGS += -fsigned-char
+endif
+endif
+endif
+
+ifeq ($(CPU),SIMNT)
+override MUNCH_FLAGS := -asm $(TOOLENV)
+endif
+
+ifneq ($(optimize),1)
+ CC_OPTIM_NORMAL =
+endif
+
+CCFLAGS += $(C++FLAGS)
+
+ifeq (0,$(rtp))
+PIC =
+else
+ ifeq ("$(TOOL)","diab")
+ PIC = -Xpic
+ else
+ ifeq ("$(TOOL)","gnu")
+ PIC = -fpic
+ endif
+endif
+endif
+
+ifeq ("$(VXWORKSLINK)","true")
+
+ ifdef repo
+ ifeq ($(SHARED_LIBS),1)
+ BACKUP_RPO_RULE = for %f in ($(basename $(addprefix $(VDIR), $(OBJS)) $(VSHOBJS))) do if exist %f.rpo mv %f.rpo %f.rpobak $(ACE_NUL_STDERR)
+ POST_BUILD_RULE = for %f in ($(basename $(addprefix $(VDIR), $(OBJS)) $(VSHOBJS))) do if exist %f.rpobak mv %f.rpobak %f.rpo $(ACE_NUL_STDERR)
+ endif
+ endif
+
+.PHONY: $(PRJ_DIR)/$(PRJ_FILE)
+ ## special target to satisfy VxWorks dependencies for images
+$(PRJ_DIR)/$(PRJ_FILE):
+ ifdef repo
+ ifeq ($(SHARED_LIBS),1)
+ #### execute prelink step to make compiler instantiate all needed
+ #### templates; discard image and repo files (*.rpo) after linkstep
+ #### this step holds for both .SO as well as 'app' images so use both VSHOBJS and OBJS
+ -$(LD_PARTIAL) -frepo -L$(ACE_ROOT)/ace -L./ $(LDLIBPATH) $(LD_LINK_PATH)$(LINK_OUTPUT_FLAG) ace-templ_inst $? $(ACE_SHLIBS) $(addprefix $(VDIR), $(OBJS)) $(VSHOBJS)
+ -$(RM) ace-templ_inst
+ #### We need to backup the .RPO files or otherwise the link step of the final image will
+ #### start instantiating templates again even if we do not specify '-frepo'!
+ -$(BACKUP_RPO_RULE)
+ ifeq ($(VX_SO_BUILD),1)
+ #### build library of objects in .SO to use as a sort of import library for VxWorks
+ echo $(filter %.o, $(VSHOBJS)) | xargs $(AR) $(ARFLAGS) $(VLIB) $(AREXTRA)
+ -chmod a+r $(VLIB)
+ ifneq (,$(RANLIB))
+ -$(RANLIB) $(VLIB)
+ endif # RANLIB
+ endif # VX_SO_BUILD
+ endif
+ endif
+ @echo 1>$@
+
+endif
diff --git a/m4/ace_func.m4 b/m4/ace_func.m4
new file mode 100644
index 00000000000..52ff1a0b2c1
--- /dev/null
+++ b/m4/ace_func.m4
@@ -0,0 +1,148 @@
+# ACE_FUNC_STRCASECMP
+# + Defines ACE_LACKS_STRCASECMP to 1 if platform lacks strcasecmp()
+# + Defines ACE_STRCASECMP_EQUIVALENT to identifier name if platform
+# has a equivalent function that differs in name only.
+# + Defines ACE_LACKS_STRCASECMP_PROTOTYPE to 1 if platform lacks
+# declaration for strcasecmp().
+#---------------------------------------------------------------------------
+AC_DEFUN([ACE_FUNC_STRCASECMP],
+[ACE_CHECK_LACKS_FUNCS(strcasecmp)
+if test "$ac_cv_func_strcasecmp" = yes; then
+ AC_CHECK_DECL([strcasecmp],
+ [],
+ [AC_DEFINE([ACE_LACKS_STRCASECMP_PROTOTYPE], 1,
+ [Define to 1 if platform lacks a declaration for strcasecmp()])],
+ [
+#if !defined(ACE_LACKS_STRINGS_H)
+#include <strings.h>
+#endif
+#if !defined(ACE_LACKS_STRING_H)
+#include <string.h>
+#endif
+ ])
+else
+ AC_CHECK_FUNC(stricmp)
+ if test "$ac_cv_func_stricmp" = yes; then
+ AC_DEFINE(ACE_STRCASECMP_EQUIVALENT, [::stricmp],
+ [Define to function that is equivalent to strcasecmp()])
+ else
+ AC_CHECK_FUNC(_stricmp)
+ if test "$ac_cv_func__stricmp" = yes; then
+ AC_DEFINE(ACE_STRCASECMP_EQUIVALENT, [::_stricmp])
+ fi
+ fi
+fi
+])
+
+# ACE_FUNC_STRNCASECMP
+# + Defines ACE_LACKS_STRCASECMP to 1 if platform lacks strcasecmp()
+# + Defines ACE_STRCASECMP_EQUIVALENT to identifier name if platform
+# has a equivalent function that differs in name only.
+# + Defines ACE_LACKS_STRNCASECMP_PROTOTYPE to 1 if platform lacks
+# declaration for strncasecmp().
+#---------------------------------------------------------------------------
+AC_DEFUN([ACE_FUNC_STRNCASECMP],
+[ACE_CHECK_LACKS_FUNCS(strncasecmp)
+if test "$ac_cv_func_strncasecmp" = yes; then
+ AC_CHECK_DECL([strncasecmp],
+ [],
+ [AC_DEFINE([ACE_LACKS_STRNCASECMP_PROTOTYPE], 1,
+ [Define to 1 if platform lacks a declaration for strncasecmp()])],
+ [
+#if !defined(ACE_LACKS_STRINGS_H)
+#include <strings.h>
+#endif
+#if !defined(ACE_LACKS_STRING_H)
+#include <string.h>
+#endif
+ ])
+else
+ AC_CHECK_FUNC(strnicmp)
+ if test "$ac_cv_func_strnicmp" = yes; then
+ AC_DEFINE(ACE_STRNCASECMP_EQUIVALENT, [::strnicmp],
+ [Define to function that is equivalent to strncasecmp()])
+ else
+ AC_CHECK_FUNC(_strnicmp)
+ if test "$ac_cv_func__strnicmp" = yes; then
+ AC_DEFINE(ACE_STRNCASECMP_EQUIVALENT, [::_strnicmp])
+ fi
+ fi
+fi
+])
+
+# ACE_FUNC_STRDUP
+# + Defines ACE_LACKS_STRDUP to 1 if platform lacks strdup()
+# + Defines ACE_STRDUP_EQUIVALENT to identifier name if platform
+# has a equivalent function that differs in name only.
+# + Defines ACE_HAS_NONCONST_STRDUP if argument is char*. (TODO)
+#---------------------------------------------------------------------------
+AC_DEFUN([ACE_FUNC_STRDUP],
+[ACE_CHECK_LACKS_FUNCS(strdup)
+if test "$ac_cv_func_strdup" = no; then
+ AC_CHECK_FUNC(_strdup)
+ if test "$ac_cv_func__strdup" = yes; then
+ AC_DEFINE(ACE_STRDUP_EQUIVALENT, [::_strdup],
+ [Define to function that is equivalent to strdup()])
+ fi
+fi
+])
+
+
+# ACE_FUNC_WCSCASECMP
+# + Defines ACE_LACKS_WCSCASECMP to 1 if platform lacks strcasecmp()
+# + Defines ACE_WCSCASECMP_EQUIVALENT to identifier name if platform
+# has a equivalent function that differs in name only.
+#---------------------------------------------------------------------------
+AC_DEFUN([ACE_FUNC_WCSCASECMP],
+[ACE_CHECK_LACKS_FUNCS(wcscasecmp)
+if test "$ac_cv_func_wcscasecmp" = no; then
+ AC_CHECK_FUNC(wcsicmp)
+ if test "$ac_cv_func_wcsicmp" = yes; then
+ AC_DEFINE(ACE_WCSCASECMP_EQUIVALENT, [::wcsicmp],
+ [Define to function that is equivalent to wcscasecmp()])
+ else
+ AC_CHECK_FUNC(_wcsicmp)
+ if test "$ac_cv_func__wcsicmp" = yes; then
+ AC_DEFINE(ACE_WCSCASECMP_EQUIVALENT, [::_wcsicmp])
+ fi
+ fi
+fi
+])
+
+# ACE_FUNC_WCSNCASECMP
+# + Defines ACE_LACKS_WCSNCASECMP to 1 if platform lacks strcasecmp()
+# + Defines ACE_WCSNCASECMP_EQUIVALENT to identifier name if platform
+# has a equivalent function that differs in name only.
+#---------------------------------------------------------------------------
+AC_DEFUN([ACE_FUNC_WCSNCASECMP],
+[ACE_CHECK_LACKS_FUNCS(wcsncasecmp)
+if test "$ac_cv_func_wcsncasecmp" = no; then
+ AC_CHECK_FUNC(wcsnicmp)
+ if test "$ac_cv_func_wcsnicmp" = yes; then
+ AC_DEFINE(ACE_WCSNCASECMP_EQUIVALENT, [::wcsnicmp],
+ [Define to function that is equivalent to wcsncasecmp()])
+ else
+ AC_CHECK_FUNC(_wcsnicmp)
+ if test "$ac_cv_func__wcsnicmp" = yes; then
+ AC_DEFINE(ACE_WCSNCASECMP_EQUIVALENT, [::_wcsnicmp])
+ fi
+ fi
+fi
+])
+
+# ACE_FUNC_WCSDUP
+# + Defines ACE_LACKS_WCSDUP to 1 if platform lacks wcsdup()
+# + Defines ACE_WCSDUP_EQUIVALENT to identifier name if platform
+# has a equivalent function that differs in name only.
+# + Defines ACE_HAS_NONCONST_WCSDUP if argument is char*. (TODO)
+#---------------------------------------------------------------------------
+AC_DEFUN([ACE_FUNC_WCSDUP],
+[ACE_CHECK_LACKS_FUNCS(wcsdup)
+if test "$ac_cv_func_wcsdup" = no; then
+ AC_CHECK_FUNC(_wcsdup)
+ if test "$ac_cv_func__wcsdup" = yes; then
+ AC_DEFINE(ACE_WCSDUP_EQUIVALENT, [::_wcsdup],
+ [Define to function that is equivalent to wcsdup()])
+ fi
+fi
+])
diff --git a/m4/pkg.m4 b/m4/pkg.m4
new file mode 100644
index 00000000000..cbb46dbf832
--- /dev/null
+++ b/m4/pkg.m4
@@ -0,0 +1,156 @@
+# pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*-
+#
+# Copyright © 2004 Scott James Remnant <scott@netsplit.com>.
+#
+# 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 of the License, 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 to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# PKG_PROG_PKG_CONFIG([MIN-VERSION])
+# ----------------------------------
+AC_DEFUN([PKG_PROG_PKG_CONFIG],
+[m4_pattern_forbid([^_?PKG_[A-Z_]+$])
+m4_pattern_allow([^PKG_CONFIG(_PATH)?$])
+AC_ARG_VAR([PKG_CONFIG], [path to pkg-config utility])dnl
+if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then
+ AC_PATH_TOOL([PKG_CONFIG], [pkg-config])
+fi
+if test -n "$PKG_CONFIG"; then
+ _pkg_min_version=m4_default([$1], [0.9.0])
+ AC_MSG_CHECKING([pkg-config is at least version $_pkg_min_version])
+ if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then
+ AC_MSG_RESULT([yes])
+ else
+ AC_MSG_RESULT([no])
+ PKG_CONFIG=""
+ fi
+
+fi[]dnl
+])# PKG_PROG_PKG_CONFIG
+
+# PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
+#
+# Check to see whether a particular set of modules exists. Similar
+# to PKG_CHECK_MODULES(), but does not set variables or print errors.
+#
+#
+# Similar to PKG_CHECK_MODULES, make sure that the first instance of
+# this or PKG_CHECK_MODULES is called, or make sure to call
+# PKG_CHECK_EXISTS manually
+# --------------------------------------------------------------
+AC_DEFUN([PKG_CHECK_EXISTS],
+[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
+if test -n "$PKG_CONFIG" && \
+ AC_RUN_LOG([$PKG_CONFIG --exists --print-errors "$1"]); then
+ m4_ifval([$2], [$2], [:])
+m4_ifvaln([$3], [else
+ $3])dnl
+fi])
+
+
+# _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES])
+# ---------------------------------------------
+m4_define([_PKG_CONFIG],
+[if test -n "$PKG_CONFIG"; then
+ if test -n "$$1"; then
+ pkg_cv_[]$1="$$1"
+ else
+ PKG_CHECK_EXISTS([$3],
+ [pkg_cv_[]$1=`$PKG_CONFIG --[]$2 "$3" 2>/dev/null`],
+ [pkg_failed=yes])
+ fi
+else
+ pkg_failed=untried
+fi[]dnl
+])# _PKG_CONFIG
+
+# _PKG_SHORT_ERRORS_SUPPORTED
+# -----------------------------
+AC_DEFUN([_PKG_SHORT_ERRORS_SUPPORTED],
+[AC_REQUIRE([PKG_PROG_PKG_CONFIG])
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+ _pkg_short_errors_supported=yes
+else
+ _pkg_short_errors_supported=no
+fi[]dnl
+])# _PKG_SHORT_ERRORS_SUPPORTED
+
+
+# PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND],
+# [ACTION-IF-NOT-FOUND])
+#
+#
+# Note that if there is a possibility the first call to
+# PKG_CHECK_MODULES might not happen, you should be sure to include an
+# explicit call to PKG_PROG_PKG_CONFIG in your configure.ac
+#
+#
+# --------------------------------------------------------------
+AC_DEFUN([PKG_CHECK_MODULES],
+[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
+AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl
+AC_ARG_VAR([$1][_LIBS], [linker flags for $1, overriding pkg-config])dnl
+
+pkg_failed=no
+AC_MSG_CHECKING([for $1])
+
+_PKG_CONFIG([$1][_CFLAGS], [cflags], [$2])
+_PKG_CONFIG([$1][_LIBS], [libs], [$2])
+
+m4_define([_PKG_TEXT], [Alternatively, you may set the environment variables $1[]_CFLAGS
+and $1[]_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details.])
+
+if test $pkg_failed = yes; then
+ _PKG_SHORT_ERRORS_SUPPORTED
+ if test $_pkg_short_errors_supported = yes; then
+ $1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "$2"`
+ else
+ $1[]_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "$2"`
+ fi
+ # Put the nasty error message in config.log where it belongs
+ echo "$$1[]_PKG_ERRORS" >&AS_MESSAGE_LOG_FD
+
+ ifelse([$4], , [AC_MSG_ERROR(dnl
+[Package requirements ($2) were not met:
+
+$$1_PKG_ERRORS
+
+Consider adjusting the PKG_CONFIG_PATH environment variable if you
+installed software in a non-standard prefix.
+
+_PKG_TEXT
+])],
+ [$4])
+elif test $pkg_failed = untried; then
+ ifelse([$4], , [AC_MSG_FAILURE(dnl
+[The pkg-config script could not be found or is too old. Make sure it
+is in your PATH or set the PKG_CONFIG environment variable to the full
+path to pkg-config.
+
+_PKG_TEXT
+
+To get pkg-config, see <http://www.freedesktop.org/software/pkgconfig>.])],
+ [$4])
+else
+ $1[]_CFLAGS=$pkg_cv_[]$1[]_CFLAGS
+ $1[]_LIBS=$pkg_cv_[]$1[]_LIBS
+ AC_MSG_RESULT([yes])
+ ifelse([$3], , :, [$3])
+fi[]dnl
+])# PKG_CHECK_MODULES
diff --git a/tests/Bug_2497_Regression_Test.cpp b/tests/Bug_2497_Regression_Test.cpp
new file mode 100644
index 00000000000..2cd1a92e66c
--- /dev/null
+++ b/tests/Bug_2497_Regression_Test.cpp
@@ -0,0 +1,75 @@
+/**
+ * @file Bug_2497_Regression_Test.cpp
+ *
+ * $Id$
+ *
+ * Reproduces the problems reported in bug 2497
+ * http://deuce.doc.wustl.edu/bugzilla/show_bug.cgi?id=2497
+ *
+ * @author sergant128@mail.ru
+ */
+
+#include "test_config.h"
+#include "ace/Module.h"
+#include "ace/Task.h"
+#include "ace/Stream.h"
+
+ACE_RCSID (tests,
+ Bug_2497_Regression_Test,
+ "$Id$")
+
+class Test_Task : public ACE_Task<ACE_SYNCH>
+{
+public:
+ Test_Task( void ) :
+ _destructorCalled(0)
+ {
+ }
+
+ virtual ~Test_Task( void )
+ {
+ ++_destructorCalled;
+ if (_destructorCalled > 1)
+ ACE_ERROR ((LM_ERROR,
+ ACE_TEXT ("Test_Task::~Test_Task() should be called once!!!\n")));
+ }
+
+private:
+ int _destructorCalled;
+};
+
+
+class Test_Module : public ACE_Module<ACE_SYNCH>
+{
+public:
+ Test_Module( void )
+ {
+ this->open( ACE_TEXT("Test module"),
+ &_writerTask,
+ &_readerTask,
+ NULL,
+ M_DELETE_NONE );
+ }
+
+private:
+ Test_Task _writerTask, _readerTask;
+};
+
+
+int
+run_main (int, ACE_TCHAR *[])
+{
+ ACE_START_TEST (ACE_TEXT ("Bug_2497_Regression_Test"));
+
+ ACE_Stream<ACE_SYNCH> stream;
+
+ if (stream.push(new Test_Module()) == -1)
+ {
+ ACE_ERROR ((LM_ERROR,
+ ACE_TEXT ("Error: push failed\n")));
+ }
+
+ ACE_END_TEST;
+
+ return 0;
+}
diff --git a/tests/Unload_libACE.cpp b/tests/Unload_libACE.cpp
new file mode 100644
index 00000000000..a9c52e30c4c
--- /dev/null
+++ b/tests/Unload_libACE.cpp
@@ -0,0 +1,259 @@
+// $Id$
+
+// ============================================================================
+//
+// = LIBRARY
+// tests
+//
+// = FILENAME
+// Unload_libACE.cpp
+//
+// = DESCRIPTION
+// This is a simple test of library unloading that uses
+// an application which has _not_ been linked with libACE
+// but uses dlopen() to dynamically load libACE
+// and then uses dlclose() to unload it.
+//
+// = AUTHORS
+// David Smith <dts@prismtech.com> and Don Sharp <Donald.Sharp@prismtech.com>
+//
+// ============================================================================
+
+#include <stdio.h>
+
+#undef UNLOAD_LIBACE_TEST
+
+#if defined (__GNUC__)
+#if !defined (ACE_VXWORKS) && !defined (__MINGW32__) && !defined (__CYGWIN32__)
+#define UNLOAD_LIBACE_TEST 1
+#endif /* !ACE_VXWORKS && !__MINGW32__ && !CYGWIN32 */
+#endif /* __GNUC__ */
+
+#if defined (__hpux) || defined (__SUNPRO_CC)
+#define UNLOAD_LIBACE_TEST 1
+#endif /* (__hpux) || (__SUNPRO_CC) */
+
+#if defined (ACE_AS_STATIC_LIBS)
+#undef UNLOAD_LIBACE_TEST
+#endif /* ACE_AS_STATIC_LIBS */
+
+#ifdef UNLOAD_LIBACE_TEST
+
+#include <errno.h>
+#include <dlfcn.h>
+#include <unistd.h>
+#include <stdlib.h>
+#include <string.h>
+#include <time.h>
+
+#define TIME_STAMP_FIELD_WIDTH 32
+
+static char *
+time_stamp ( char date_and_time[], int date_and_timelen, int format )
+{
+ static char const *const month_name[] =
+ {
+ "Jan",
+ "Feb",
+ "Mar",
+ "Apr",
+ "May",
+ "Jun",
+ "Jul",
+ "Aug",
+ "Sep",
+ "Oct",
+ "Nov",
+ "Dec"
+ };
+
+ static char const *const day_of_week_name[] =
+ {
+ "Sun",
+ "Mon",
+ "Tue",
+ "Wed",
+ "Thu",
+ "Fri",
+ "Sat"
+ };
+
+ char *ts = NULL;
+
+ if ( date_and_timelen >= TIME_STAMP_FIELD_WIDTH )
+ {
+ time_t timeval;
+ struct tm *now;
+
+ time ( &timeval );
+ now = localtime ( &timeval ); /* Get current local time. */
+
+ if ( format == 'Y' )
+ {
+ sprintf ( date_and_time,
+ "%3s %3s %2d %04d %02d:%02d:%02d.%06d",
+ day_of_week_name[now->tm_wday],
+ month_name[now->tm_mon],
+ ( int ) now->tm_mday,
+ ( int ) now->tm_year + 1900,
+ ( int ) now->tm_hour,
+ ( int ) now->tm_min, ( int ) now->tm_sec, ( int ) 0 );
+ }
+ else /* 'T' */
+ {
+ sprintf ( date_and_time,
+ "%3s %2d %02d:%02d:%02d.%03d %04d",
+ month_name[now->tm_mon],
+ ( int ) now->tm_mday,
+ ( int ) now->tm_hour,
+ ( int ) now->tm_min,
+ ( int ) now->tm_sec, ( int ) 0,
+ ( int ) now->tm_year + 1900 );
+ }
+
+ ts = date_and_time;
+ }
+ return ts;
+}
+
+int
+main ( int, char ** )
+{
+ char const *const program = "UnloadLibACE";
+
+ int status = 0;
+ void *handle = NULL;
+ char *ace_root = NULL;
+ char tbuf[BUFSIZ];
+ char ybuf[BUFSIZ];
+ FILE *logfp = NULL;
+
+ if (( logfp = fopen ( "log/UnloadLibACE.log", "w" )) != NULL )
+ {
+ setvbuf ( logfp, NULL, _IONBF, 0 );
+ // reassign stdout/stderr to log file
+ int fdno = fileno ( logfp );
+
+ dup2 ( fdno, fileno ( stdout ));
+ dup2 ( fdno, fileno ( stderr ));
+ setvbuf ( stdout, NULL, _IONBF, 0 );
+ setvbuf ( stderr, NULL, _IONBF, 0 );
+ fflush ( stdout );
+ fflush ( stderr );
+
+ printf ( "%s@LM_DEBUG@ Starting %s test at %s\n",
+ time_stamp ( tbuf, BUFSIZ, 'T' ),
+ program, time_stamp ( ybuf, BUFSIZ, 'Y' ));
+
+ if (( ace_root = getenv ( "ACE_ROOT" )) != NULL )
+ {
+ char buf[BUFSIZ];
+
+ strcpy ( buf, ace_root );
+#if defined (__hpux)
+ strcat ( buf, "/lib/libACE.sl" );
+#else
+ strcat ( buf, "/lib/libACE.so" );
+#endif /* (__hpux) */
+
+ handle = dlopen ( buf, RTLD_LAZY );
+ if ( handle == NULL )
+ {
+ // is it because of "No such file or directory" ?
+ if ( errno != ENOENT )
+ {
+ fprintf ( stderr,
+ "%s@LM_ERROR@ dlopen() returned NULL\n",
+ time_stamp ( tbuf, BUFSIZ, 'T' ));
+ fprintf ( stderr,
+ "%s@LM_ERROR@ dlerror() says: %s\n",
+ time_stamp ( tbuf, BUFSIZ, 'T' ), dlerror ());
+ status = 1;
+ }
+ else
+ {
+ printf ( "%s@LM_DEBUG@ dlopen() did not find %s\n",
+ time_stamp ( tbuf, BUFSIZ, 'T' ), buf);
+ status = 0;
+ }
+ }
+ else if ( dlclose ( handle ) != 0 )
+ {
+ fprintf ( stderr,
+ "%s@LM_ERROR@ dlclose() failed : %s\n",
+ time_stamp ( tbuf, BUFSIZ, 'T' ), strerror ( errno ));
+ status = 1;
+ }
+ }
+ else
+ {
+ fprintf ( stderr,
+ "%s@LM_ERROR@ ACE_ROOT environment variable not set\n",
+ time_stamp ( tbuf, BUFSIZ, 'T' ));
+ status = 1;
+ }
+
+ fflush ( stdout );
+ fflush ( stderr );
+ fflush ( logfp );
+
+ fclose ( logfp );
+ }
+ else
+ {
+ // Couldn't go into the log file !!!
+ printf ( "%s@LM_DEBUG@ Starting %s test at %s\n",
+ time_stamp ( tbuf, BUFSIZ, 'T' ),
+ program, time_stamp ( ybuf, BUFSIZ, 'Y' ));
+
+ fprintf ( stderr,
+ "%s@LM_ERROR@ Could not open log/UnloadLibACE.log : %s\n",
+ time_stamp ( tbuf, BUFSIZ, 'T' ), strerror ( errno ));
+ status = 1;
+ }
+
+ printf ( "%s@LM_DEBUG@ Ending %s test at %s\n",
+ time_stamp ( tbuf, BUFSIZ, 'T' ),
+ program, time_stamp ( ybuf, BUFSIZ, 'Y' ));
+
+ fflush ( stderr );
+ fflush ( stdout );
+ fclose ( stdout );
+ fclose ( stderr );
+
+ exit ( status );
+ return 0;
+}
+#else
+# if defined (WIN32) && defined (ACE_USES_WCHAR)
+// Borrow include list from ace_wchar.h
+# if defined (ACE_HAS_WINCE)
+# include /**/ <wtypes.h>
+# elif !defined (__BORLANDC__)
+# include /**/ <wchar.h>
+# endif /* ACE_HAS_WINCE || __BORLANDC__ */
+
+int
+wmain ( int, wchar_t ** )
+#else
+int
+main ( int, char ** )
+#endif /* (WIN32) && (ACE_USES_WCHAR) */
+{
+ char const *const program = "UnloadLibACE";
+
+ FILE *logfp = NULL;
+
+ if (( logfp = fopen ( "log/UnloadLibACE.log", "w" )) != NULL )
+ {
+ fprintf ( logfp, "@LM_DEBUG@ Starting %s test\n", program);
+ fprintf ( logfp, "@LM_DEBUG@ %s test not implemented for this platform\n",
+ program);
+ fprintf ( logfp, "@LM_DEBUG@ Ending %s test\n", program);
+
+ fflush ( logfp );
+ fclose ( logfp );
+ }
+ return 0;
+}
+#endif /* UNLOAD_LIBACE_TEST */