summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoriliyan <iliyan@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>2008-02-08 16:49:17 +0000
committeriliyan <iliyan@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>2008-02-08 16:49:17 +0000
commit2e9abcf8f59f5d5facbfb3c42fd9743995f94699 (patch)
treea94a7cdcd8a5d8d378d809c5f5d5d0a9cbbe2abb
parent4b7fdbaddc9b0ad919c8db3276f67c4a92612455 (diff)
downloadATCD-2e9abcf8f59f5d5facbfb3c42fd9743995f94699.tar.gz
Merged revisions 80556-80558,80560,80562,80572-80573,80577-80579,80585-80587 via svnmerge from
https://svn.dre.vanderbilt.edu/DOC/Middleware/trunk/TAO ........ r80556 | johnnyw | 2008-02-03 13:49:32 -0600 (Sun, 03 Feb 2008) | 1 line Sun Feb 3 19:48:41 UTC 2008 Johnny Willemsen <jwillemsen@remedy.nl> ........ r80557 | schmidt | 2008-02-03 14:58:58 -0600 (Sun, 03 Feb 2008) | 1 line ChangeLogTag:Sat ........ r80558 | smcqueen | 2008-02-04 06:46:28 -0600 (Mon, 04 Feb 2008) | 1 line ChangeLogTag: Mon Feb 4 12:35:07 UTC 2008 Simon McQueen <sm@prismtech.com> ........ r80560 | smcqueen | 2008-02-04 07:42:31 -0600 (Mon, 04 Feb 2008) | 1 line ChangeLogTag: Mon Feb 4 13:42:29 UTC 2008 Simon McQueen <sm@prismtech.com> ........ r80562 | johnnyw | 2008-02-04 09:03:26 -0600 (Mon, 04 Feb 2008) | 1 line Mon Feb 4 15:02:41 UTC 2008 Johnny Willemsen <jwillemsen@remedy.nl> ........ r80572 | johnnyw | 2008-02-05 14:02:46 -0600 (Tue, 05 Feb 2008) | 1 line Tue Feb 5 19:56:41 UTC 2008 Johnny Willemsen <jwillemsen@remedy.nl> ........ r80573 | smcqueen | 2008-02-05 16:02:41 -0600 (Tue, 05 Feb 2008) | 1 line ChangeLogTag: Tue Feb 5 21:59:02 UTC 2008 Simon McQueen <sm@prismtech.com> ........ r80577 | johnnyw | 2008-02-06 04:24:05 -0600 (Wed, 06 Feb 2008) | 1 line Wed Feb 6 10:05:41 UTC 2008 Johnny Willemsen <jwillemsen@remedy.nl> ........ r80578 | johnnyw | 2008-02-06 04:34:29 -0600 (Wed, 06 Feb 2008) | 1 line Wed Feb 6 10:34:41 UTC 2008 Johnny Willemsen <jwillemsen@remedy.nl> ........ r80579 | smcqueen | 2008-02-06 05:07:17 -0600 (Wed, 06 Feb 2008) | 1 line ChangeLogTag: Wed Feb 6 11:00:38 UTC 2008 Simon McQueen <sm@prismtech.com> ........ r80585 | smcqueen | 2008-02-07 03:59:40 -0600 (Thu, 07 Feb 2008) | 1 line ChangeLogTag: Thu Feb 7 10:00:22 UTC 2008 Simon McQueen <sm@prismtech.com> ........ r80586 | vzykov | 2008-02-07 04:39:04 -0600 (Thu, 07 Feb 2008) | 1 line ChangeLogTag: Thu Feb 7 10:33:29 UTC 2008 Vladimir Zykov <vladimir.zykov@prismtech.com> ........ r80587 | johnnyw | 2008-02-07 04:50:39 -0600 (Thu, 07 Feb 2008) | 1 line Thu Feb 7 10:49:41 UTC 2008 Johnny Willemsen <jwillemsen@remedy.nl> ........
-rw-r--r--TAO/ChangeLog193
-rw-r--r--TAO/orbsvcs/examples/Log/Basic/TLS_Client.cpp4
-rw-r--r--TAO/orbsvcs/orbsvcs/DsLogAdmin.idl10
-rw-r--r--TAO/orbsvcs/orbsvcs/FaultTolerance/FT_ClientORBInitializer.cpp16
-rw-r--r--TAO/orbsvcs/orbsvcs/FaultTolerance/FT_ClientRequest_Interceptor.cpp96
-rw-r--r--TAO/orbsvcs/orbsvcs/FaultTolerance/FT_ClientRequest_Interceptor.h6
-rw-r--r--TAO/orbsvcs/orbsvcs/IFRService/IFR_Service_Utils_T.cpp2
-rw-r--r--TAO/orbsvcs/orbsvcs/Log/BasicLog_i.h2
-rw-r--r--TAO/orbsvcs/orbsvcs/Log/EventLogConsumer.h3
-rw-r--r--TAO/orbsvcs/orbsvcs/Log/EventLogFactory_i.h18
-rw-r--r--TAO/orbsvcs/orbsvcs/Log/Hash_Iterator_i.cpp5
-rw-r--r--TAO/orbsvcs/orbsvcs/Log/Hash_LogRecordStore.h66
-rw-r--r--TAO/orbsvcs/orbsvcs/Log/LogRecordStore.h15
-rw-r--r--TAO/orbsvcs/orbsvcs/Log/NotifyLogConsumer.h7
-rw-r--r--TAO/orbsvcs/orbsvcs/Log/NotifyLogFactory_i.h12
-rw-r--r--TAO/orbsvcs/orbsvcs/Log/NotifyLogNotification.cpp3
-rw-r--r--TAO/orbsvcs/orbsvcs/Log/NotifyLogNotification.h6
-rw-r--r--TAO/orbsvcs/orbsvcs/Log/RTEventLog_i.cpp12
-rw-r--r--TAO/orbsvcs/orbsvcs/Log/RTEventLog_i.h12
-rw-r--r--TAO/orbsvcs/orbsvcs/Trader/Trader.h4
-rwxr-xr-xTAO/orbsvcs/tests/Bug_2777_Regression/README28
-rwxr-xr-xTAO/orbsvcs/tests/Bug_2777_Regression/run_test.pl72
-rw-r--r--TAO/orbsvcs/tests/Bug_3215_Regression/Bug_3215_Regression.mpc41
-rw-r--r--TAO/orbsvcs/tests/Bug_3215_Regression/Hello.cpp29
-rw-r--r--TAO/orbsvcs/tests/Bug_3215_Regression/Hello.h42
-rw-r--r--TAO/orbsvcs/tests/Bug_3215_Regression/README55
-rw-r--r--TAO/orbsvcs/tests/Bug_3215_Regression/ServerORBInitializer2.cpp49
-rw-r--r--TAO/orbsvcs/tests/Bug_3215_Regression/ServerORBInitializer2.h48
-rw-r--r--TAO/orbsvcs/tests/Bug_3215_Regression/ServerRequest_Interceptor2.cpp183
-rw-r--r--TAO/orbsvcs/tests/Bug_3215_Regression/ServerRequest_Interceptor2.h87
-rw-r--r--TAO/orbsvcs/tests/Bug_3215_Regression/Test.idl24
-rw-r--r--TAO/orbsvcs/tests/Bug_3215_Regression/client.cpp110
-rwxr-xr-xTAO/orbsvcs/tests/Bug_3215_Regression/run_test.pl49
-rw-r--r--TAO/orbsvcs/tests/Bug_3215_Regression/server.cpp240
-rw-r--r--TAO/orbsvcs/tests/Bug_3216_Regression/Bug_3216_Regression.mpc39
-rw-r--r--TAO/orbsvcs/tests/Bug_3216_Regression/Hello.cpp37
-rw-r--r--TAO/orbsvcs/tests/Bug_3216_Regression/Hello.h46
-rw-r--r--TAO/orbsvcs/tests/Bug_3216_Regression/README23
-rw-r--r--TAO/orbsvcs/tests/Bug_3216_Regression/ServerORBInitializer.cpp49
-rw-r--r--TAO/orbsvcs/tests/Bug_3216_Regression/ServerORBInitializer.h48
-rw-r--r--TAO/orbsvcs/tests/Bug_3216_Regression/ServerRequest_Interceptor.cpp122
-rw-r--r--TAO/orbsvcs/tests/Bug_3216_Regression/ServerRequest_Interceptor.h80
-rw-r--r--TAO/orbsvcs/tests/Bug_3216_Regression/Test.idl25
-rw-r--r--TAO/orbsvcs/tests/Bug_3216_Regression/client.cpp147
-rwxr-xr-xTAO/orbsvcs/tests/Bug_3216_Regression/run_test.pl49
-rw-r--r--TAO/orbsvcs/tests/Bug_3216_Regression/server.cpp238
-rw-r--r--TAO/tao/AnyTypeCode/Any_Unknown_IDL_Type.h8
-rw-r--r--TAO/tao/Incoming_Message_Stack.h2
-rw-r--r--TAO/tao/LocalObject.cpp16
-rw-r--r--TAO/tao/LocalObject.h5
-rw-r--r--TAO/tao/ORB_Core.cpp25
-rw-r--r--TAO/tao/ORB_Core.h12
-rw-r--r--TAO/tao/ORB_Core.inl6
-rw-r--r--TAO/tao/Object.cpp6
-rw-r--r--TAO/tao/Object.h7
-rw-r--r--TAO/tao/Parser_Registry.cpp7
-rw-r--r--TAO/tao/PortableServer/Active_Policy_Strategies.cpp3
-rw-r--r--TAO/tao/PortableServer/POA.pidl2
-rw-r--r--TAO/tao/PortableServer/RequestProcessingStrategy.h45
-rw-r--r--TAO/tao/PortableServer/RequestProcessingStrategyAOMOnly.cpp6
-rw-r--r--TAO/tao/PortableServer/RequestProcessingStrategyAOMOnly.h33
-rw-r--r--TAO/tao/PortableServer/RequestProcessingStrategyDefaultServant.cpp12
-rw-r--r--TAO/tao/PortableServer/RequestProcessingStrategyDefaultServant.h29
-rw-r--r--TAO/tao/PortableServer/RequestProcessingStrategyServantActivator.h18
-rw-r--r--TAO/tao/PortableServer/RequestProcessingStrategyServantManager.h3
-rw-r--r--TAO/tao/RTCORBA/RT_ORBInitializer.cpp24
-rw-r--r--TAO/tao/Strategies/SHMIOP_Profile.cpp4
-rw-r--r--TAO/tao/Strategies/advanced_resource.cpp6
-rw-r--r--TAO/tao/Stub.cpp4
-rw-r--r--TAO/tao/Stub.inl21
-rw-r--r--TAO/tao/TAO_Internal.cpp2
-rw-r--r--TAO/tao/default_resource.h2
-rw-r--r--TAO/tests/Portable_Interceptors/Bug_3080/client.cpp2
73 files changed, 2429 insertions, 333 deletions
diff --git a/TAO/ChangeLog b/TAO/ChangeLog
index 7cd0ce35e9b..4fd34b664eb 100644
--- a/TAO/ChangeLog
+++ b/TAO/ChangeLog
@@ -1,8 +1,196 @@
+Thu Feb 7 10:49:41 UTC 2008 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * orbsvcs/examples/Log/Basic/TLS_Client.cpp:
+ * orbsvcs/orbsvcs/DsLogAdmin.idl:
+ * orbsvcs/orbsvcs/Log/BasicLog_i.h:
+ * orbsvcs/orbsvcs/Log/EventLogConsumer.h:
+ * orbsvcs/orbsvcs/Log/EventLogFactory_i.h:
+ * orbsvcs/orbsvcs/Log/Hash_Iterator_i.cpp:
+ * orbsvcs/orbsvcs/Log/Hash_LogRecordStore.h:
+ * orbsvcs/orbsvcs/Log/LogRecordStore.h:
+ * orbsvcs/orbsvcs/Log/NotifyLogConsumer.h:
+ * orbsvcs/orbsvcs/Log/NotifyLogFactory_i.h:
+ * orbsvcs/orbsvcs/Log/NotifyLogNotification.cpp:
+ * orbsvcs/orbsvcs/Log/NotifyLogNotification.h:
+ * orbsvcs/orbsvcs/Log/RTEventLog_i.cpp:
+ * orbsvcs/orbsvcs/Log/RTEventLog_i.h:
+ Layout and doxygen changes
+
+Thu Feb 7 10:33:29 UTC 2008 Vladimir Zykov <vladimir.zykov@prismtech.com>
+
+ * tao/RTCORBA/RT_ORBInitializer.cpp:
+ Fixed a potential bug after refactor where an object was
+ checked for nil after it was actually used.
+
+Thu Feb 7 10:00:22 UTC 2008 Simon McQueen <sm@prismtech.com>
+
+ * orbsvcs/tests/Bug_3215_Regression/ServerRequest_Interceptor2.cpp:
+ * orbsvcs/tests/Bug_3215_Regression/server.cpp:
+
+ As below.
+
+Wed Feb 6 11:00:38 UTC 2008 Simon McQueen <sm@prismtech.com>
+
+ * orbsvcs/tests/Bug_3216_Regression/Bug_3216_Regression.mpc:
+ * orbsvcs/tests/Bug_3216_Regression/Hello.cpp:
+ * orbsvcs/tests/Bug_3216_Regression/ServerRequest_Interceptor.cpp:
+ * orbsvcs/tests/Bug_3216_Regression/server.cpp:
+
+ Fix deprecated macros and remove explicit solaris compile flags.
+
+Wed Feb 6 10:34:41 UTC 2008 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tests/Portable_Interceptors/Bug_3080/client.cpp:
+ Fixed compile errors when interceptors are disabled
+
+Wed Feb 6 10:05:41 UTC 2008 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tao/LocalObject.cpp:
+ * tao/LocalObject.h:
+ * tao/Object.cpp:
+ * tao/Object.h:
+ Removed _get_implementation, it is deprecated with CORBA 2.2 and we
+ always just return 0.
+
+ * tao/Strategies/advanced_resource.cpp:
+ Added TAO_DEFAULT_REACTOR_TYPE which is ACE_TP_Reactor by default. This
+ way we can easily change the default reactor at the moment the
+ strategies library is used.
+
+Tue Feb 5 21:59:02 UTC 2008 Simon McQueen <sm@prismtech.com>
+
+ * tao/ORB_Core.h:
+ * tao/ORB_Core.inl:
+ * tao/ORB_Core.cpp:
+ * orbsvcs/orbsvcs/FaultTolerance/FT_ClientORBInitializer.cpp:
+ * orbsvcs/orbsvcs/FaultTolerance/FT_ClientRequest_Interceptor.h:
+ * orbsvcs/orbsvcs/FaultTolerance/FT_ClientRequest_Interceptor.cpp:
+
+ Add a new ORB initialisation option '-ORBFTSendFullGroupTC'.
+ When FT support is enabled this property controls the format of data
+ transmitted in the IOP::FT_GROUP_VERSION service context in GIOP
+ messages to IOGRs. The value '0' (this is the default value if the
+ option is not supplied) transmits the group version only as per the
+ CORBA spec (i.e. as defined in the IDL for
+ FT::FTGroupVersionServiceContext). The value '1' will transmit
+ instead the whole data found in the server IOGR's
+ FT::TagFTGroupTaggedComponent tagged component in the context body.
+
+ This fixes bugzilla bug #3216.
+
+ * orbsvcs/tests/Bug_3216_Regression:
+ * orbsvcs/tests/Bug_3216_Regression/Bug_3216_Regression.mpc:
+ * orbsvcs/tests/Bug_3216_Regression/Hello.h:
+ * orbsvcs/tests/Bug_3216_Regression/Hello.cpp:
+ * orbsvcs/tests/Bug_3216_Regression/README:
+ * orbsvcs/tests/Bug_3216_Regression/ServerORBInitializer.h:
+ * orbsvcs/tests/Bug_3216_Regression/ServerORBInitializer.cpp:
+ * orbsvcs/tests/Bug_3216_Regression/ServerRequest_Interceptor.h:
+ * orbsvcs/tests/Bug_3216_Regression/ServerRequest_Interceptor.cpp:
+ * orbsvcs/tests/Bug_3216_Regression/Test.idl:
+ * orbsvcs/tests/Bug_3216_Regression/client.cpp:
+ * orbsvcs/tests/Bug_3216_Regression/run_test.pl:
+ * orbsvcs/tests/Bug_3216_Regression/server.cpp:
+
+ Regression test for the above.
+
+Tue Feb 5 19:56:41 UTC 2008 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tao/default_resource.h:
+ Layout change
+
+ * tao/LocalObject.cpp:
+ * tao/LocalObject.h:
+ Improved CORBA/e support
+
+ * tao/ORB_Core.cpp:
+ Updated a few ACE_DEBUG statements to have the normal formatting
+
+ * tao/Parser_Registry.cpp:
+ Guard against the fact that the resource factory could be zero. This
+ could happen when there are issues with static initialisation
+
+ * tao/PortableServer/Active_Policy_Strategies.cpp:
+ Layout changes
+
+ * tao/PortableServer/POA.pidl:
+ * tao/PortableServer/RequestProcessingStrategy.h
+ * tao/PortableServer/RequestProcessingStrategyAOMOnly.cpp
+ * tao/PortableServer/RequestProcessingStrategyAOMOnly.h
+ * tao/PortableServer/RequestProcessingStrategyDefaultServant.cpp
+ * tao/PortableServer/RequestProcessingStrategyDefaultServant.h
+ * tao/PortableServer/RequestProcessingStrategyServantActivator.h
+ * tao/PortableServer/RequestProcessingStrategyServantManager.h
+ CORBA/e and layout improvements
+
+ * tao/TAO_Internal.cpp:
+ Use prefix decrement
+
+Mon Feb 4 15:02:41 UTC 2008 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tao/AnyTypeCode/Any_Unknown_IDL_Type.h:
+ Fixed compile warning with VxWorks 5.5
+
+Mon Feb 4 13:42:29 UTC 2008 Simon McQueen <sm@prismtech.com>
+
+ * orbsvcs/tests/Bug_3215_Regression/Bug_3215_Regression.mpc:
+ * orbsvcs/tests/Bug_3215_Regression/Hello.h:
+ * orbsvcs/tests/Bug_3215_Regression/Hello.cpp:
+ * orbsvcs/tests/Bug_3215_Regression/ServerORBInitializer2.h:
+ * orbsvcs/tests/Bug_3215_Regression/ServerORBInitializer2.cpp:
+ * orbsvcs/tests/Bug_3215_Regression/ServerRequest_Interceptor2.h:
+ * orbsvcs/tests/Bug_3215_Regression/ServerRequest_Interceptor2.cpp:
+ * orbsvcs/tests/Bug_3215_Regression/run_test.pl:
+
+ Fix fuzz errors and weirdness involving disappearing run_test.pl
+ contents.
+
+Mon Feb 4 12:35:07 UTC 2008 Simon McQueen <sm@prismtech.com>
+
+ * orbsvcs/tests/Bug_2777_Regression:
+ * orbsvcs/tests/Bug_2777_Regression/README:
+ * orbsvcs/tests/Bug_2777_Regression/run_test.pl:
+
+ Regression test for bug #2777.
+
+ * tao/Strategies/SHMIOP_Profile.cpp:
+
+ Avoid double incrment of object key pointer. This fixes bug #2777.
+
+ * orbsvcs/tests/Bug_3215_Regression:
+ * orbsvcs/tests/Bug_3215_Regression/Bug_3215_Regression.mpc:
+ * orbsvcs/tests/Bug_3215_Regression/Hello.h:
+ * orbsvcs/tests/Bug_3215_Regression/Hello.cpp:
+ * orbsvcs/tests/Bug_3215_Regression/README:
+ * orbsvcs/tests/Bug_3215_Regression/ServerORBInitializer2.h:
+ * orbsvcs/tests/Bug_3215_Regression/ServerORBInitializer2.cpp:
+ * orbsvcs/tests/Bug_3215_Regression/ServerRequest_Interceptor2.h:
+ * orbsvcs/tests/Bug_3215_Regression/ServerRequest_Interceptor2.cpp:
+ * orbsvcs/tests/Bug_3215_Regression/Test.idl:
+ * orbsvcs/tests/Bug_3215_Regression/client.cpp:
+ * orbsvcs/tests/Bug_3215_Regression/run_test.pl:
+ * orbsvcs/tests/Bug_3215_Regression/server.cpp:
+
+ Regression test for bug #3215.
+
+ * tao/Stub.inl:
+ * tao/Stub.cpp:
+
+ Prevent deletion of permanent location forward profiles when unwinding
+ the forward stack on exception. This fixes bug #3215.
+
+Sun Feb 3 19:48:41 UTC 2008 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tao/Incoming_Message_Stack.h:
+ * orbsvcs/orbsvcs/Trader.h:
+ * orbsvcs/orbsvcs/IFR_Service_Utils_T.cpp:
+ Fixes for CodeGear C++ Builder 2007 December 2007 update
+
Fri Feb 1 21:57:41 UTC 2008 Jeff Parsons <j.parsons@vanderbilt.edu>
* AnyTypeCode/Any_Unknown_IDL_Type.cpp:
* AnyTypeCode/Any_Unknown_IDL_Type.h:
-
+
Patch submitted by Russell Mora
<russell_mora at symantec dot com> to address the problem
of Unknown_IDL_Type's static local lock object sometimes being
@@ -18,7 +206,7 @@ Fri Feb 1 15:01:11 UTC 2008 Chris Cleeland <cleeland@ociweb.com>
* orbsvcs/tests/InterfaceRepo/Duplicate_Typedef_Test/test1.idl:
* orbsvcs/tests/InterfaceRepo/Duplicate_Typedef_Test/test2.idl:
* orbsvcs/tests/InterfaceRepo/Duplicate_Typedef_Test/test3.idl:
-
+
Fixed missing RCS/CVS/SVN keywords that caused fuzz errors.
Fri Feb 01 14:15:00 UTC 2008 Simon Massey <sma@prismtech.com>
@@ -133,7 +321,6 @@ Wed Jan 30 20:13:18 UTC 2008 Jeff Parsons <j.parsons@vanderbilt.edu>
Cleeland <cleeland at ociweb dot com> for helpful input
on this issue.
->>>>>>> .r80528
Wed Jan 30 18:34:02 UTC 2008 Chris Cleeland <cleeland@ociweb.com>
* TAO_IDL/tao_idl.cpp (main):
diff --git a/TAO/orbsvcs/examples/Log/Basic/TLS_Client.cpp b/TAO/orbsvcs/examples/Log/Basic/TLS_Client.cpp
index b69c80ac456..9e709a7db2e 100644
--- a/TAO/orbsvcs/examples/Log/Basic/TLS_Client.cpp
+++ b/TAO/orbsvcs/examples/Log/Basic/TLS_Client.cpp
@@ -36,9 +36,7 @@ void
TLS_Client::init_ORB (int argc,
char *argv [])
{
- this->orb_ = CORBA::ORB_init (argc,
- argv,
- "");
+ this->orb_ = CORBA::ORB_init (argc, argv);
}
void
diff --git a/TAO/orbsvcs/orbsvcs/DsLogAdmin.idl b/TAO/orbsvcs/orbsvcs/DsLogAdmin.idl
index 9e5fa09bae9..b127f0cb222 100644
--- a/TAO/orbsvcs/orbsvcs/DsLogAdmin.idl
+++ b/TAO/orbsvcs/orbsvcs/DsLogAdmin.idl
@@ -68,15 +68,15 @@ module DsLogAdmin
struct LogRecord
{
+ /// Unique number assigned by the log
RecordId id;
- // Unique number assigned by the log
+ /// Time when the event is logged
TimeT time;
- // Time when the event is logged
+ /// List of user defined name/value pairs. Not part of the event
+ /// received by the log. Optional.
NVList attr_list;
- // List of user defined name/value pairs. Not part of the event
- // received by the log. Optional.
+ /// Event content
any info;
- // Event content
};
typedef sequence<LogRecord> RecordList;
diff --git a/TAO/orbsvcs/orbsvcs/FaultTolerance/FT_ClientORBInitializer.cpp b/TAO/orbsvcs/orbsvcs/FaultTolerance/FT_ClientORBInitializer.cpp
index 3ebdb7ef8b2..940a7596935 100644
--- a/TAO/orbsvcs/orbsvcs/FaultTolerance/FT_ClientORBInitializer.cpp
+++ b/TAO/orbsvcs/orbsvcs/FaultTolerance/FT_ClientORBInitializer.cpp
@@ -9,6 +9,8 @@
#include "tao/ORB_Core.h"
#include "tao/Exception.h"
#include "tao/ORB_Constants.h"
+#include "tao/ORB_Core.h"
+#include "tao/PI/ORBInitInfo.h"
ACE_RCSID (FaultTolerance,
FT_ClientORBInitializer,
@@ -79,15 +81,21 @@ void
TAO_FT_ClientORBInitializer::register_client_request_interceptors (
PortableInterceptor::ORBInitInfo_ptr info)
{
- PortableInterceptor::ClientRequestInterceptor_ptr cri =
- PortableInterceptor::ClientRequestInterceptor::_nil ();
+ TAO::FT_ClientRequest_Interceptor* ftcri = 0;
- ACE_NEW_THROW_EX (cri,
+ ACE_NEW_THROW_EX (ftcri,
TAO::FT_ClientRequest_Interceptor,
CORBA::NO_MEMORY ());
PortableInterceptor::ClientRequestInterceptor_var
- client_interceptor = cri;
+ client_interceptor = ftcri;
+
+ TAO_ORBInitInfo* real_info = dynamic_cast<TAO_ORBInitInfo*> (info);
+
+ if (real_info)
+ {
+ ftcri->ft_send_extended_sc (real_info->orb_core ()->ft_send_extended_sc ());
+ }
info->add_client_request_interceptor (client_interceptor.in ());
}
diff --git a/TAO/orbsvcs/orbsvcs/FaultTolerance/FT_ClientRequest_Interceptor.cpp b/TAO/orbsvcs/orbsvcs/FaultTolerance/FT_ClientRequest_Interceptor.cpp
index bb186614eb8..9d516f16ca3 100644
--- a/TAO/orbsvcs/orbsvcs/FaultTolerance/FT_ClientRequest_Interceptor.cpp
+++ b/TAO/orbsvcs/orbsvcs/FaultTolerance/FT_ClientRequest_Interceptor.cpp
@@ -29,6 +29,7 @@ namespace TAO
, uuid_ (0)
, lock_ (0)
, retention_id_ (0)
+ , ft_send_extended_sc_ (false)
{
ACE_Utils::UUID_GENERATOR::instance ()->init ();
@@ -226,48 +227,53 @@ namespace TAO
{
try
{
- // Grab the object group version
- // @@ NOTE: This involves an allocation and a dellocation. This is
- // really bad.
- TAO_InputCDR cdr (reinterpret_cast<const char*> (tp->component_data.get_buffer ()),
- tp->component_data.length ());
- CORBA::Boolean byte_order;
-
- if ((cdr >> ACE_InputCDR::to_boolean (byte_order)) == 0)
- return;
-
- cdr.reset_byte_order (static_cast<int> (byte_order));
-
- FT::TagFTGroupTaggedComponent gtc;
-
- if ((cdr >> gtc) == 0)
- throw CORBA::BAD_PARAM (CORBA::OMGVMCID | 28, CORBA::COMPLETED_NO);
-
IOP::ServiceContext sc;
sc.context_id = IOP::FT_GROUP_VERSION;
-
- TAO_OutputCDR ocdr;
- if (!(ocdr << ACE_OutputCDR::from_boolean (TAO_ENCAP_BYTE_ORDER)))
- return;
- //ACE_THROW (CORBA::MARSHAL ());
-
- if (!(ocdr << gtc.object_group_ref_version))
- return;
- //ACE_THROW (CORBA::MARSHAL ());
-
- CORBA::ULong length =
- static_cast<CORBA::ULong> (ocdr.total_length ());
- sc.context_data.length (length);
- CORBA::Octet *buf = sc.context_data.get_buffer ();
-
- for (const ACE_Message_Block *i = ocdr.begin ();
- i != 0;
- i = i->cont ())
- {
- ACE_OS::memcpy (buf, i->rd_ptr (), i->length ());
- buf += i->length ();
- }
-
+
+ if (this->ft_send_extended_sc_)
+ {
+ // We send the whole tagged component as a service context.
+ sc.context_data.length (tp->component_data.length ());
+ CORBA::Octet *sc_buf = sc.context_data.get_buffer ();
+ ACE_OS::memcpy (sc_buf, tp->component_data.get_buffer (), tp->component_data.length ());
+ }
+ else
+ {
+ // Grab the object group version
+ TAO_InputCDR cdr (reinterpret_cast<const char*> (tp->component_data.get_buffer ()),
+ tp->component_data.length ());
+ CORBA::Boolean byte_order;
+
+ if ((cdr >> ACE_InputCDR::to_boolean (byte_order)) == 0)
+ return;
+
+ cdr.reset_byte_order (static_cast<int> (byte_order));
+
+ FT::TagFTGroupTaggedComponent gtc;
+
+ if ((cdr >> gtc) == 0)
+ throw CORBA::BAD_PARAM (CORBA::OMGVMCID | 28, CORBA::COMPLETED_NO);
+
+ TAO_OutputCDR ocdr;
+ if (!(ocdr << ACE_OutputCDR::from_boolean (TAO_ENCAP_BYTE_ORDER)))
+ return;
+
+ if (!(ocdr << gtc.object_group_ref_version))
+ return;
+
+ CORBA::ULong length =
+ static_cast<CORBA::ULong> (ocdr.total_length ());
+ sc.context_data.length (length);
+ CORBA::Octet *buf = sc.context_data.get_buffer ();
+
+ for (const ACE_Message_Block *i = ocdr.begin ();
+ i != 0;
+ i = i->cont ())
+ {
+ ACE_OS::memcpy (buf, i->rd_ptr (), i->length ());
+ buf += i->length ();
+ }
+ }
// Add this context to the service context list.
ri->add_request_service_context (sc,
0);
@@ -276,7 +282,6 @@ namespace TAO
catch (const CORBA::Exception&)
{
// Not much can be done anyway. Just keep quiet
- // ACE_RE_THROW;
}
return;
@@ -327,11 +332,9 @@ namespace TAO
TAO_OutputCDR ocdr;
if (!(ocdr << ACE_OutputCDR::from_boolean (TAO_ENCAP_BYTE_ORDER)))
return;
- //ACE_THROW (CORBA::MARSHAL ());
if (!(ocdr << ftrsc))
return;
- // ACE_THROW (CORBA::MARSHAL ());
// Make a *copy* of the CDR stream...
CORBA::ULong length =
@@ -353,7 +356,6 @@ namespace TAO
}
catch (const CORBA::Exception&)
{
- // ACE_RE_THROW;
}
return;
}
@@ -392,6 +394,12 @@ namespace TAO
return t;
}
+
+ void
+ FT_ClientRequest_Interceptor::ft_send_extended_sc (CORBA::Boolean send)
+ {
+ this->ft_send_extended_sc_ = send;
+ }
}
TAO_END_VERSIONED_NAMESPACE_DECL
diff --git a/TAO/orbsvcs/orbsvcs/FaultTolerance/FT_ClientRequest_Interceptor.h b/TAO/orbsvcs/orbsvcs/FaultTolerance/FT_ClientRequest_Interceptor.h
index 8cef31a964b..aa61223e197 100644
--- a/TAO/orbsvcs/orbsvcs/FaultTolerance/FT_ClientRequest_Interceptor.h
+++ b/TAO/orbsvcs/orbsvcs/FaultTolerance/FT_ClientRequest_Interceptor.h
@@ -90,6 +90,8 @@ namespace TAO
virtual void receive_other (PortableInterceptor::ClientRequestInfo_ptr);
virtual void receive_exception (PortableInterceptor::ClientRequestInfo_ptr ri);
+
+ void ft_send_extended_sc (CORBA::Boolean send);
protected:
@@ -117,6 +119,10 @@ namespace TAO
/// Retention id generated by the client
CORBA::Long retention_id_;
+
+ /// Transmit a TAG_FT_GROUP component in place of the
+ /// FT_GROUP_VERSION data required by the spec.
+ CORBA::Boolean ft_send_extended_sc_;
};
}
diff --git a/TAO/orbsvcs/orbsvcs/IFRService/IFR_Service_Utils_T.cpp b/TAO/orbsvcs/orbsvcs/IFRService/IFR_Service_Utils_T.cpp
index 07a898a774c..93dfefbd691 100644
--- a/TAO/orbsvcs/orbsvcs/IFRService/IFR_Service_Utils_T.cpp
+++ b/TAO/orbsvcs/orbsvcs/IFRService/IFR_Service_Utils_T.cpp
@@ -344,7 +344,7 @@ TAO_Port_Utils<T>::create_entry (const char *id,
return T::_narrow (obj.in ());
}
-#if defined (__BORLANDC__) && (__BORLANDC__ <= 0x592)
+#if defined (__BORLANDC__) && (__BORLANDC__ <= 0x593)
// Borland gives warnings about argument not used on the construct as used
// for the other compilers. This has been reported to Borland, adding
// a workaround to suppress these warnings so that the real important ones
diff --git a/TAO/orbsvcs/orbsvcs/Log/BasicLog_i.h b/TAO/orbsvcs/orbsvcs/Log/BasicLog_i.h
index 4d95d4cd916..a7309f71702 100644
--- a/TAO/orbsvcs/orbsvcs/Log/BasicLog_i.h
+++ b/TAO/orbsvcs/orbsvcs/Log/BasicLog_i.h
@@ -46,7 +46,7 @@ class TAO_LogMgr_i;
*
* @brief It allows clients to write, query and delete records from the log.
*
- * The class supports the @c destroy> method to destroy the Log.
+ * The class supports the @c destroy method to destroy the Log.
*/
class TAO_Log_Serv_Export TAO_BasicLog_i :
public TAO_Log_i,
diff --git a/TAO/orbsvcs/orbsvcs/Log/EventLogConsumer.h b/TAO/orbsvcs/orbsvcs/Log/EventLogConsumer.h
index cd922828479..b2f0a87275a 100644
--- a/TAO/orbsvcs/orbsvcs/Log/EventLogConsumer.h
+++ b/TAO/orbsvcs/orbsvcs/Log/EventLogConsumer.h
@@ -65,8 +65,7 @@ public:
~TAO_Event_LogConsumer (void);
/// Connect to EventLog.
- void
- connect (CosEventChannelAdmin::ConsumerAdmin_ptr consumer_admin);
+ void connect (CosEventChannelAdmin::ConsumerAdmin_ptr consumer_admin);
private:
diff --git a/TAO/orbsvcs/orbsvcs/Log/EventLogFactory_i.h b/TAO/orbsvcs/orbsvcs/Log/EventLogFactory_i.h
index 3577180e6a8..9d7308b413c 100644
--- a/TAO/orbsvcs/orbsvcs/Log/EventLogFactory_i.h
+++ b/TAO/orbsvcs/orbsvcs/Log/EventLogFactory_i.h
@@ -69,35 +69,29 @@ public:
/// Activate this servant with the ORB and POA passed in.
DsEventLogAdmin::EventLogFactory_ptr
- activate (CORBA::ORB_ptr orb,
- PortableServer::POA_ptr poa);
+ activate (CORBA::ORB_ptr orb, PortableServer::POA_ptr poa);
/// Used to create an EventLog.
DsEventLogAdmin::EventLog_ptr create (
DsLogAdmin::LogFullActionType full_action,
CORBA::ULongLong max_size,
const DsLogAdmin::CapacityAlarmThresholdList & thresholds,
- DsLogAdmin::LogId_out id
- );
+ DsLogAdmin::LogId_out id);
/// Same as create (), but allows clients to specify the id.
DsEventLogAdmin::EventLog_ptr create_with_id (
DsLogAdmin::LogId id,
DsLogAdmin::LogFullActionType full_action,
CORBA::ULongLong max_size,
- const DsLogAdmin::CapacityAlarmThresholdList & thresholds
- );
+ const DsLogAdmin::CapacityAlarmThresholdList & thresholds);
// = Implementation of the CosEventChannelAdmin::ConsumerAdmin methods.
- CosEventChannelAdmin::ProxyPushSupplier_ptr obtain_push_supplier (
- );
+ CosEventChannelAdmin::ProxyPushSupplier_ptr obtain_push_supplier (void);
- CosEventChannelAdmin::ProxyPullSupplier_ptr obtain_pull_supplier (
- );
+ CosEventChannelAdmin::ProxyPullSupplier_ptr obtain_pull_supplier (void);
protected:
- virtual CORBA::RepositoryId
- create_repositoryid ();
+ virtual CORBA::RepositoryId create_repositoryid ();
virtual PortableServer::ServantBase*
create_log_servant (DsLogAdmin::LogId id);
diff --git a/TAO/orbsvcs/orbsvcs/Log/Hash_Iterator_i.cpp b/TAO/orbsvcs/orbsvcs/Log/Hash_Iterator_i.cpp
index 5fd34c41fe8..1c4c6de1c49 100644
--- a/TAO/orbsvcs/orbsvcs/Log/Hash_Iterator_i.cpp
+++ b/TAO/orbsvcs/orbsvcs/Log/Hash_Iterator_i.cpp
@@ -35,8 +35,7 @@ TAO_Hash_Iterator_i::~TAO_Hash_Iterator_i (void)
DsLogAdmin::RecordList*
-TAO_Hash_Iterator_i::get (CORBA::ULong position,
- CORBA::ULong how_many)
+TAO_Hash_Iterator_i::get (CORBA::ULong position, CORBA::ULong how_many)
{
ACE_READ_GUARD_THROW_EX (ACE_SYNCH_RW_MUTEX,
guard,
@@ -60,7 +59,7 @@ TAO_Hash_Iterator_i::get (CORBA::ULong position,
// meet the constraints.
// Allocate the list of <how_many> length.
- DsLogAdmin::RecordList* rec_list;
+ DsLogAdmin::RecordList* rec_list = 0;
ACE_NEW_THROW_EX (rec_list,
DsLogAdmin::RecordList (how_many),
CORBA::NO_MEMORY ());
diff --git a/TAO/orbsvcs/orbsvcs/Log/Hash_LogRecordStore.h b/TAO/orbsvcs/orbsvcs/Log/Hash_LogRecordStore.h
index f297a0a2980..b6309bb812b 100644
--- a/TAO/orbsvcs/orbsvcs/Log/Hash_LogRecordStore.h
+++ b/TAO/orbsvcs/orbsvcs/Log/Hash_LogRecordStore.h
@@ -70,8 +70,7 @@ class TAO_Log_Serv_Export TAO_Hash_LogRecordStore
DsLogAdmin::LogId id,
DsLogAdmin::LogFullActionType log_full_action,
CORBA::ULongLong max_size,
- const DsLogAdmin::CapacityAlarmThresholdList* thresholds
- );
+ const DsLogAdmin::CapacityAlarmThresholdList* thresholds);
/// Destructor.
virtual ~TAO_Hash_LogRecordStore (void);
@@ -110,87 +109,68 @@ class TAO_Log_Serv_Export TAO_Hash_LogRecordStore
set_forwarding_state (DsLogAdmin::ForwardingState state);
/// Get the log duration
- virtual DsLogAdmin::TimeInterval
- get_interval (void) const;
+ virtual DsLogAdmin::TimeInterval get_interval (void) const;
/// Set the log duration.
virtual void
set_interval (const DsLogAdmin::TimeInterval & interval);
/// Gets the log full action
- virtual DsLogAdmin::LogFullActionType
- get_log_full_action (void) const;
+ virtual DsLogAdmin::LogFullActionType get_log_full_action (void) const;
/// Sets the log full action
- virtual void
- set_log_full_action(DsLogAdmin::LogFullActionType action);
+ virtual void set_log_full_action(DsLogAdmin::LogFullActionType action);
/// Get the list of the QoS properties supported by the log.
- virtual DsLogAdmin::QoSList*
- get_log_qos (void) const;
+ virtual DsLogAdmin::QoSList* get_log_qos (void) const;
/// Set the list of the QoS properties supported by the log.
- virtual void
- set_log_qos (const DsLogAdmin::QoSList& qos);
+ virtual void set_log_qos (const DsLogAdmin::QoSList& qos);
/// Gets the max record life
- virtual CORBA::ULong
- get_max_record_life (void) const;
+ virtual CORBA::ULong get_max_record_life (void) const;
/// Sets the max record life
- virtual void
- set_max_record_life (CORBA::ULong life);
+ virtual void set_max_record_life (CORBA::ULong life);
/// Get the current set value of the max size of the log data.
- virtual CORBA::ULongLong
- get_max_size (void) const;
+ virtual CORBA::ULongLong get_max_size (void) const;
/// Set the max size of log data. size == 0, => infinite.
- virtual void
- set_max_size (CORBA::ULongLong size);
+ virtual void set_max_size (CORBA::ULongLong size);
/// Get the weekly scheduling parameters
- virtual DsLogAdmin::WeekMask*
- get_week_mask (void);
+ virtual DsLogAdmin::WeekMask* get_week_mask (void);
/// Set the weekly scheduling parameters.
- virtual void
- set_week_mask (const DsLogAdmin::WeekMask & masks);
-
+ virtual void set_week_mask (const DsLogAdmin::WeekMask & masks);
// = LogRecordStore status methods
/// Gets the current size of the log data.
- virtual CORBA::ULongLong
- get_current_size (void);
+ virtual CORBA::ULongLong get_current_size (void);
/// Get the number of records in the log right now.
- virtual CORBA::ULongLong
- get_n_records (void);
+ virtual CORBA::ULongLong get_n_records (void);
// = LogRecordStore gauge
/// Gets the current value of the "gauge" that measures the total
/// size of the records written to the log.
- virtual CORBA::ULongLong
- get_gauge(void);
+ virtual CORBA::ULongLong get_gauge(void);
/// Resets the "gauge" to 0
- virtual void
- reset_gauge(void);
-
+ virtual void reset_gauge(void);
// = Record logging, retrieval, update and removal methods.
/// Insert rec into storage. Returns 0 on success -1 on failure and 1
/// if the log is full.
- virtual int
- log (const DsLogAdmin::LogRecord &rec);
+ virtual int log (const DsLogAdmin::LogRecord &rec);
/// Deletes "old" records from the store.
- virtual int
- purge_old_records (void);
+ virtual int purge_old_records (void);
/// Set single record attributes.
virtual void
@@ -211,8 +191,7 @@ class TAO_Log_Serv_Export TAO_Hash_LogRecordStore
/// Ensure changes have been flushed to persistent media
/// Returns 0 on success, -1 on failure.
- virtual int
- flush (void);
+ virtual int flush (void);
/// Returns all records in the log that match the given constraint
/// <c>.
@@ -229,9 +208,7 @@ class TAO_Log_Serv_Export TAO_Hash_LogRecordStore
DsLogAdmin::Iterator_out i);
/// Returns the number of records matching constraint <c>.
- virtual CORBA::ULong
- match (const char * grammar,
- const char * c);
+ virtual CORBA::ULong match (const char * grammar, const char * c);
/// Delete records matching constraint <c>.
virtual CORBA::ULong
@@ -242,8 +219,7 @@ class TAO_Log_Serv_Export TAO_Hash_LogRecordStore
virtual CORBA::ULong
delete_records_by_id (const DsLogAdmin::RecordIdList & ids);
- virtual CORBA::ULong
- remove_old_records (void);
+ virtual CORBA::ULong remove_old_records (void);
/// Read-Write Lock
virtual ACE_SYNCH_RW_MUTEX& lock();
diff --git a/TAO/orbsvcs/orbsvcs/Log/LogRecordStore.h b/TAO/orbsvcs/orbsvcs/Log/LogRecordStore.h
index f66b8c1681f..48221c095ac 100644
--- a/TAO/orbsvcs/orbsvcs/Log/LogRecordStore.h
+++ b/TAO/orbsvcs/orbsvcs/Log/LogRecordStore.h
@@ -45,10 +45,10 @@ class TAO_Log_Serv_Export TAO_LogRecordStore
virtual ~TAO_LogRecordStore (void);
/// Initialization.
- virtual int open (void) = 0;
+ virtual int open (void) = 0;
/// Close the record store.
- virtual int close (void) = 0;
+ virtual int close (void) = 0;
// = Log Parameters
@@ -59,7 +59,7 @@ class TAO_Log_Serv_Export TAO_LogRecordStore
/// Sets the administrative state of the log
virtual void
- set_administrative_state (DsLogAdmin::AdministrativeState state) = 0;
+ set_administrative_state (DsLogAdmin::AdministrativeState state) = 0;
/// Get the capacity alarm thresholds
virtual DsLogAdmin::CapacityAlarmThresholdList*
@@ -67,7 +67,7 @@ class TAO_Log_Serv_Export TAO_LogRecordStore
/// Set the capacity alarm thresholds
virtual void
- set_capacity_alarm_thresholds (const DsLogAdmin::CapacityAlarmThresholdList& thresholds) = 0;
+ set_capacity_alarm_thresholds (const DsLogAdmin::CapacityAlarmThresholdList& thresholds) = 0;
/// Gets the forwarding state
virtual DsLogAdmin::ForwardingState
@@ -75,11 +75,10 @@ class TAO_Log_Serv_Export TAO_LogRecordStore
/// Sets the forwarding state
virtual void
- set_forwarding_state (DsLogAdmin::ForwardingState state) = 0;
+ set_forwarding_state (DsLogAdmin::ForwardingState state) = 0;
/// Get the log duration
- virtual DsLogAdmin::TimeInterval
- get_interval (void) const = 0;
+ virtual DsLogAdmin::TimeInterval get_interval (void) const = 0;
/// Set the log duration.
virtual void
@@ -87,7 +86,7 @@ class TAO_Log_Serv_Export TAO_LogRecordStore
/// Get the log full action
virtual DsLogAdmin::LogFullActionType
- get_log_full_action (void) const = 0;
+ get_log_full_action (void) const = 0;
/// Set the log full action
virtual void
diff --git a/TAO/orbsvcs/orbsvcs/Log/NotifyLogConsumer.h b/TAO/orbsvcs/orbsvcs/Log/NotifyLogConsumer.h
index ae88fcff8aa..7b3cc8bd1c6 100644
--- a/TAO/orbsvcs/orbsvcs/Log/NotifyLogConsumer.h
+++ b/TAO/orbsvcs/orbsvcs/Log/NotifyLogConsumer.h
@@ -75,12 +75,9 @@ protected:
);
// = PushSupplier methods
- virtual void push (
- const CORBA::Any & event
- );
+ virtual void push (const CORBA::Any & event);
- virtual void disconnect_push_consumer (
- );
+ virtual void disconnect_push_consumer (void);
/// ProxyPushSupplier used to connect to NotifyLog.
CosNotifyChannelAdmin::ProxyPushSupplier_var proxy_supplier_;
diff --git a/TAO/orbsvcs/orbsvcs/Log/NotifyLogFactory_i.h b/TAO/orbsvcs/orbsvcs/Log/NotifyLogFactory_i.h
index d883bec416b..fbd0c08036a 100644
--- a/TAO/orbsvcs/orbsvcs/Log/NotifyLogFactory_i.h
+++ b/TAO/orbsvcs/orbsvcs/Log/NotifyLogFactory_i.h
@@ -61,8 +61,7 @@ public:
/// Activate this servant with the ORB and POA passed in.
DsNotifyLogAdmin::NotifyLogFactory_ptr
- activate (CORBA::ORB_ptr orb,
- PortableServer::POA_ptr poa);
+ activate (CORBA::ORB_ptr orb, PortableServer::POA_ptr poa);
/// Used to create an NotifyLog.
DsNotifyLogAdmin::NotifyLog_ptr create (
@@ -71,8 +70,7 @@ public:
const DsLogAdmin::CapacityAlarmThresholdList & thresholds,
const CosNotification::QoSProperties & initial_qos,
const CosNotification::AdminProperties & initial_admin,
- DsLogAdmin::LogId_out id
- );
+ DsLogAdmin::LogId_out id);
/// Same as create (), but allows clients to specify the id.
DsNotifyLogAdmin::NotifyLog_ptr create_with_id (
@@ -112,11 +110,9 @@ public:
CosNotifyChannelAdmin::ClientType ctype,
CosNotifyChannelAdmin::ProxyID& id);
- CosEventChannelAdmin::ProxyPushSupplier_ptr obtain_push_supplier (
- );
+ CosEventChannelAdmin::ProxyPushSupplier_ptr obtain_push_supplier (void);
- CosEventChannelAdmin::ProxyPullSupplier_ptr obtain_pull_supplier (
- );
+ CosEventChannelAdmin::ProxyPullSupplier_ptr obtain_pull_supplier (void);
void destroy (void);
diff --git a/TAO/orbsvcs/orbsvcs/Log/NotifyLogNotification.cpp b/TAO/orbsvcs/orbsvcs/Log/NotifyLogNotification.cpp
index fb5cf40bf1a..dc4b8179b12 100644
--- a/TAO/orbsvcs/orbsvcs/Log/NotifyLogNotification.cpp
+++ b/TAO/orbsvcs/orbsvcs/Log/NotifyLogNotification.cpp
@@ -60,8 +60,7 @@ TAO_NotifyLogNotification::subscription_change
}
void
-TAO_NotifyLogNotification::disconnect_push_supplier
- (void)
+TAO_NotifyLogNotification::disconnect_push_supplier (void)
{
ACE_ASSERT (!CORBA::is_nil (this->proxy_consumer_.in ()));
diff --git a/TAO/orbsvcs/orbsvcs/Log/NotifyLogNotification.h b/TAO/orbsvcs/orbsvcs/Log/NotifyLogNotification.h
index cc49f39e868..22c2b19e0d7 100644
--- a/TAO/orbsvcs/orbsvcs/Log/NotifyLogNotification.h
+++ b/TAO/orbsvcs/orbsvcs/Log/NotifyLogNotification.h
@@ -67,12 +67,10 @@ protected:
// = NotifySubscribe
virtual void subscription_change (
const CosNotification::EventTypeSeq & added,
- const CosNotification::EventTypeSeq & removed
- );
+ const CosNotification::EventTypeSeq & removed);
// = StructuredPushSupplier method
- virtual void disconnect_push_supplier (
- );
+ virtual void disconnect_push_supplier (void);
/// Send the event on the event channel.
virtual void send_notification (const CORBA::Any& any);
diff --git a/TAO/orbsvcs/orbsvcs/Log/RTEventLog_i.cpp b/TAO/orbsvcs/orbsvcs/Log/RTEventLog_i.cpp
index 3b09d9d207b..1fe576e2d96 100644
--- a/TAO/orbsvcs/orbsvcs/Log/RTEventLog_i.cpp
+++ b/TAO/orbsvcs/orbsvcs/Log/RTEventLog_i.cpp
@@ -54,8 +54,7 @@ TAO_RTEventLog_i::copy (DsLogAdmin::LogId &id)
RTEventLogAdmin::EventLogFactory::_narrow (factory_.in ());
RTEventLogAdmin::EventLog_var log =
- eventLogFactory->create (DsLogAdmin::halt, 0, thresholds_,
- id);
+ eventLogFactory->create (DsLogAdmin::halt, 0, thresholds_, id);
copy_attributes (log.in ());
@@ -69,8 +68,7 @@ TAO_RTEventLog_i::copy_with_id (DsLogAdmin::LogId id)
RTEventLogAdmin::EventLogFactory::_narrow (factory_.in ());
RTEventLogAdmin::EventLog_var log =
- eventLogFactory->create_with_id (id, DsLogAdmin::halt, 0,
- thresholds_);
+ eventLogFactory->create_with_id (id, DsLogAdmin::halt, 0, thresholds_);
copy_attributes (log.in ());
@@ -86,8 +84,7 @@ TAO_RTEventLog_i::destroy (void)
this->logmgr_i_.remove (this->logid_);
// Deregister with POA.
- PortableServer::ObjectId_var id =
- this->log_poa_->servant_to_id (this);
+ PortableServer::ObjectId_var id = this->log_poa_->servant_to_id (this);
this->log_poa_->deactivate_object (id.in ());
}
@@ -109,8 +106,7 @@ TAO_RTEventLog_i::for_consumers (void)
}
RtecEventChannelAdmin::SupplierAdmin_ptr
-TAO_RTEventLog_i::for_suppliers (
- )
+TAO_RTEventLog_i::for_suppliers (void)
{
return this->event_channel_->for_suppliers();
}
diff --git a/TAO/orbsvcs/orbsvcs/Log/RTEventLog_i.h b/TAO/orbsvcs/orbsvcs/Log/RTEventLog_i.h
index de0a2a0f37d..f20c9274170 100644
--- a/TAO/orbsvcs/orbsvcs/Log/RTEventLog_i.h
+++ b/TAO/orbsvcs/orbsvcs/Log/RTEventLog_i.h
@@ -78,19 +78,15 @@ public:
virtual DsLogAdmin::Log_ptr copy_with_id (DsLogAdmin::LogId id);
/// Destroy the log object and all contained records.
- void
- destroy (void);
+ void destroy (void);
/// Activate the RTEventLog.
- void
- activate (void);
+ void activate (void);
// = The RtecEventChannelAdmin::EventChannel interface methods.
- RtecEventChannelAdmin::ConsumerAdmin_ptr
- for_consumers (void);
+ RtecEventChannelAdmin::ConsumerAdmin_ptr for_consumers (void);
- RtecEventChannelAdmin::SupplierAdmin_ptr
- for_suppliers (void);
+ RtecEventChannelAdmin::SupplierAdmin_ptr for_suppliers (void);
virtual RtecEventChannelAdmin::Observer_Handle
append_observer (RtecEventChannelAdmin::Observer_ptr);
diff --git a/TAO/orbsvcs/orbsvcs/Trader/Trader.h b/TAO/orbsvcs/orbsvcs/Trader/Trader.h
index 6db0038d362..307dc4c279e 100644
--- a/TAO/orbsvcs/orbsvcs/Trader/Trader.h
+++ b/TAO/orbsvcs/orbsvcs/Trader/Trader.h
@@ -124,7 +124,7 @@ private:
* Class used to remove the circular dependencies between the
* Attribute classes and the Trader class.
*/
-#if defined (__BORLANDC__) && (__BORLANDC__ <= 0x592)
+#if defined (__BORLANDC__) && (__BORLANDC__ <= 0x593)
// Work around Borland unresolved symbol errors concerning the
// out-of-line virtual destructor. The virtual destructor should
// not be inlined, nor should we have to export TAO_Lockable from the
@@ -132,7 +132,7 @@ private:
class TAO_Trading_Serv_Export TAO_Lockable
#else
class TAO_Lockable
-#endif /* __BORLANDC__ <= 0x591 */
+#endif /* __BORLANDC__ <= 0x593 */
{
public:
virtual ~TAO_Lockable (void);
diff --git a/TAO/orbsvcs/tests/Bug_2777_Regression/README b/TAO/orbsvcs/tests/Bug_2777_Regression/README
new file mode 100755
index 00000000000..22bdc29a667
--- /dev/null
+++ b/TAO/orbsvcs/tests/Bug_2777_Regression/README
@@ -0,0 +1,28 @@
+// $Id$
+
+This test checks that a shmiop corbaloc reference can be parsed correctly and connected correctly. It uses the NameService and nslist because they are compatible already built pairing of client and server. Their use is not relevent otherwise. This would work just as well with hello world. This is actually a test for TAO/tao/Strategies *not* TAO/orbsvcs but as it uses the NS it's here rather than in TAO/tests.
+
+The name service is started with only a shmiop endpoint on a random port and the -ORBObjRefStyle URL directive is used to make the IOR that is exported be in the corbaloc form. nslist is used to query the service using this IOR.
+
+shmiop must (of course) be available.
+
+Regression output looks like:
+
+C:\worcvs\tao151\prism\tests\tao470_regression>run_test.pl
+(3252|1076) EXCEPTION, Exception in nslist
+system exception, ID 'IDL:omg.org/CORBA/OBJECT_NOT_EXIST:1.0'
+Unknown vendor minor code id (0), minor code = 0, completed = NO
+
+ERROR: Regression - nslist returned
+INFO: ../../../TAO/orbsvcs/Naming_Service/Naming_Service being killed.
+
+... or indeed anything that doesn't look like the success output which is:
+
+C:\worcvs\tao151\prism\tests\tao470_regression>run_test.pl
+Naming Service: IOR:01000000010000000000000001000000024f41545c000000010102cd0c00
+00003139322e3136382e302e32009a04cdcd3a00000014010f004e55500000001c00000000010000
+00526f6f74504f41004e616d65536572766963650000000000010000004e616d6553657276696365
+cdcd00000000
+---------------
+INFO: ../../../TAO/orbsvcs/Naming_Service/Naming_Service being killed.
+Test passed !!
diff --git a/TAO/orbsvcs/tests/Bug_2777_Regression/run_test.pl b/TAO/orbsvcs/tests/Bug_2777_Regression/run_test.pl
new file mode 100755
index 00000000000..9dffedb56b4
--- /dev/null
+++ b/TAO/orbsvcs/tests/Bug_2777_Regression/run_test.pl
@@ -0,0 +1,72 @@
+# $Id$
+
+eval '(exit $?0)' && eval 'exec perl -S $0 ${1+"$@"}'
+ & eval 'exec perl -S $0 $argv:q'
+ if 0;
+
+# -*- perl -*-
+
+use lib "$ENV{ACE_ROOT}/bin";
+use PerlACE::Run_Test;
+
+$nsiorfile = PerlACE::LocalFile("ns.ior");
+unlink $nsiorfile;
+
+my $exec_extn="";
+if ($^O eq "MSWin32") {
+ $exec_extn=".exe";
+}
+
+$nslist = "../../../../bin/nslist";
+if (! -e $nslist . $exec_extn ) {
+ $nslist = "../../../../TAO/utils/nslist/nslist";
+ if (! -e $nslist . $exec_extn ) {
+ print STDERR "ERROR: nslist utility not found.\n";
+ exit 1;
+ }
+}
+
+$status = 0;
+
+# Fire up the Name Service
+$NS = new PerlACE::Process ("../../../../TAO/orbsvcs/Naming_Service/Naming_Service");
+$NS->Arguments("-o $nsiorfile -ORBObjRefStyle URL -ORBEndpoint shmiop:// -ORBSvcConfDirective \"dynamic SHMIOP_Factory Service_Object *TAO_Strategies:_make_TAO_SHMIOP_Protocol_Factory () ''\"");
+$NS->Spawn ();
+
+if (PerlACE::waitforfile_timed ($nsiorfile, 10) == -1)
+{
+ print STDERR "ERROR: cannot find Name Service IOR file <$nsiorfile>\n";
+ $NS->Kill (); $NS->TimedWait (1);
+ exit 1;
+}
+
+# Call nslist
+$NSLIST = new PerlACE::Process ($nslist);
+$NSLIST->Arguments("-ORBSvcConfDirective \"dynamic SHMIOP_Factory Service_Object *TAO_Strategies:_make_TAO_SHMIOP_Protocol_Factory () ''\" -ORBInitRef NameService=file://$nsiorfile --ior --ctxior --node \"\" --tree \"\"");
+
+$list_result = $NSLIST->SpawnWaitKill (300);
+
+# Check return
+if ($list_result != 0)
+{
+ print STDERR "ERROR: Regression - nslist returned $listresult\n";
+ $status = 1;
+}
+
+# Shutting down NameService and clean up
+$server = $NS->TerminateWaitKill (5);
+
+if ($server != 0)
+{
+ print STDERR "ERROR: Closing Name Service returned $server\n";
+ $status = 1;
+}
+
+unlink $nsiorfile;
+
+if ($status == 0)
+{
+ print "Test passed !!\n";
+}
+
+exit $status;
diff --git a/TAO/orbsvcs/tests/Bug_3215_Regression/Bug_3215_Regression.mpc b/TAO/orbsvcs/tests/Bug_3215_Regression/Bug_3215_Regression.mpc
new file mode 100644
index 00000000000..4ca7b20773f
--- /dev/null
+++ b/TAO/orbsvcs/tests/Bug_3215_Regression/Bug_3215_Regression.mpc
@@ -0,0 +1,41 @@
+// -*- 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_3215_Regression/Hello.cpp b/TAO/orbsvcs/tests/Bug_3215_Regression/Hello.cpp
new file mode 100644
index 00000000000..b838677dfdc
--- /dev/null
+++ b/TAO/orbsvcs/tests/Bug_3215_Regression/Hello.cpp
@@ -0,0 +1,29 @@
+//
+// $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 ()
+{
+ this->orb_->shutdown (0 );
+}
+
+void
+Hello::ping ()
+{
+ return;
+}
+
+void
+Hello::throw_location_forward ()
+{
+ return;
+}
diff --git a/TAO/orbsvcs/tests/Bug_3215_Regression/Hello.h b/TAO/orbsvcs/tests/Bug_3215_Regression/Hello.h
new file mode 100644
index 00000000000..44a4638aaf5
--- /dev/null
+++ b/TAO/orbsvcs/tests/Bug_3215_Regression/Hello.h
@@ -0,0 +1,42 @@
+//
+// $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 ();
+
+ virtual void ping ();
+
+ virtual void throw_location_forward ();
+
+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_3215_Regression/README b/TAO/orbsvcs/tests/Bug_3215_Regression/README
new file mode 100644
index 00000000000..05a4a358c40
--- /dev/null
+++ b/TAO/orbsvcs/tests/Bug_3215_Regression/README
@@ -0,0 +1,55 @@
+// $Id$
+
+N.B. This test is a rip off of the bug #2287 regression test. The only significant change is that after throwing an
+initial location forward perm back to the client, redirecting it to the same server, the server then starts throwing transients up to (or indeed past) the expiration time. At this poin the client ORB should cease retrying and report the transient to the application.
+
+This was instead causing infinite retries of the forwarded IOR taking us past the expiration time and a seg fault after this expiration time.
+
+__Regression Output__
+
+sm@beatrice:~/tmp/ACE_wrappers/TAO/orbsvcs/tests/Bug_NNNN_Regression> ./run_test.pl
+On [re-]invocation #1 throwing a ForwardRequest back to the client
+On re-invocation #1000 throwing a TRANSIENT back to the client
+On re-invocation #2000 throwing a TRANSIENT back to the client
+On re-invocation #3000 throwing a TRANSIENT back to the client
+On re-invocation #4000 throwing a TRANSIENT back to the client
+On re-invocation #5000 throwing a TRANSIENT back to the client
+The expiration time has now passed !! The next exception must NOT prompt reinvocation.
+Expiration time : 134214167846110410
+Time now : 134214167846112890
+On re-invocation #5140 throwing a TRANSIENT back to the client
+ERROR: <client> exited with coredump from signal 11 : SEGV
+ERROR: client returned 255
+ERROR: server timedout
+ERROR: server returned -1
+
+__Successful Output__
+
+sm@beatrice:~/tmp/ACE_wrappers/TAO/orbsvcs/tests/Bug_NNNN_Regression> ./run_test.pl
+On [re-]invocation #1 throwing a ForwardRequest back to the client
+On re-invocation #1000 throwing a TRANSIENT back to the client
+On re-invocation #2000 throwing a TRANSIENT back to the client
+On re-invocation #3000 throwing a TRANSIENT back to the client
+On re-invocation #4000 throwing a TRANSIENT back to the client
+On re-invocation #5000 throwing a TRANSIENT back to the client
+The expiration time has now passed !! The next exception must NOT prompt reinvocation.
+Expiration time : 134214184616960030
+Time now : 134214184616961330
+On re-invocation #5056 throwing a TRANSIENT back to the client
+Client catches a TRANSIENT, as expected. No problem !
+Test passed !!!
+(1705|3075533024) server - event loop finished
+
+The below is the original documentation for the bug #2287 test between []'s for reference:
+
+[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.]
diff --git a/TAO/orbsvcs/tests/Bug_3215_Regression/ServerORBInitializer2.cpp b/TAO/orbsvcs/tests/Bug_3215_Regression/ServerORBInitializer2.cpp
new file mode 100644
index 00000000000..10fca204f29
--- /dev/null
+++ b/TAO/orbsvcs/tests/Bug_3215_Regression/ServerORBInitializer2.cpp
@@ -0,0 +1,49 @@
+// -*- 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
+ )
+{
+
+}
+
+void
+Server_ORBInitializer2::post_init (
+ PortableInterceptor::ORBInitInfo_ptr info
+ )
+{
+ this->register_server_request_interceptors (info
+ );
+
+}
+
+void
+Server_ORBInitializer2::register_server_request_interceptors (
+ PortableInterceptor::ORBInitInfo_ptr info
+ )
+{
+ 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 ()
+ );
+
+}
+
+
diff --git a/TAO/orbsvcs/tests/Bug_3215_Regression/ServerORBInitializer2.h b/TAO/orbsvcs/tests/Bug_3215_Regression/ServerORBInitializer2.h
new file mode 100644
index 00000000000..71fc032b9d5
--- /dev/null
+++ b/TAO/orbsvcs/tests/Bug_3215_Regression/ServerORBInitializer2.h
@@ -0,0 +1,48 @@
+// -*- 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
+ );
+
+ virtual void post_init (PortableInterceptor::ORBInitInfo_ptr info
+ );
+
+private:
+
+ /// Register the necessary interceptors.
+ void register_server_request_interceptors (
+ PortableInterceptor::ORBInitInfo_ptr info
+ );
+
+};
+
+#include /**/ "ace/post.h"
+
+#endif /* TAO249_SERVER_ORBINITIALIZER2_H */
+
diff --git a/TAO/orbsvcs/tests/Bug_3215_Regression/ServerRequest_Interceptor2.cpp b/TAO/orbsvcs/tests/Bug_3215_Regression/ServerRequest_Interceptor2.cpp
new file mode 100644
index 00000000000..cd6a53a5fe0
--- /dev/null
+++ b/TAO/orbsvcs/tests/Bug_3215_Regression/ServerRequest_Interceptor2.cpp
@@ -0,0 +1,183 @@
+// -*- 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"
+
+int invocation_count = 0;
+
+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 ()
+{
+ return CORBA::string_dup ("TAO_TAO249_ServerRequest_Interceptor2");
+}
+
+void
+TAO249_ServerRequest_Interceptor2::destroy ()
+{
+}
+
+void
+TAO249_ServerRequest_Interceptor2::receive_request_service_contexts (
+ PortableInterceptor::ServerRequestInfo_ptr
+ )
+{
+}
+
+void
+TAO249_ServerRequest_Interceptor2::receive_request (
+ PortableInterceptor::ServerRequestInfo_ptr ri
+ )
+{
+ CORBA::String_var op = ri->operation ();
+
+ 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
+ );
+
+
+ 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)
+ {
+ throw CORBA::BAD_PARAM (CORBA::OMGVMCID | 28,
+ CORBA::COMPLETED_NO);
+ }
+
+
+ cdr.reset_byte_order (static_cast <int>(byte_order));
+
+ FT::FTRequestServiceContext ftrsc;
+
+ if ((cdr >> ftrsc) == 0)
+ throw CORBA::BAD_PARAM (CORBA::OMGVMCID | 28,
+ CORBA::COMPLETED_NO);
+
+
+ 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 more than once after the expiration time. This is a regression
+ ACE_DEBUG ((LM_ERROR, "Test Failed - REGRESSION !!! Client ORB is still retrying LOCATION_FORWARDs / TRANSIENTS after the expiration time as re-invocation # %d has been received!!\n", invocation_count + 1));
+ 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 !! The next exception must NOT prompt reinvocation.\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));
+ }
+ }
+
+ if (invocation_count == 0)
+ {
+ ++invocation_count;
+
+ ACE_DEBUG ((LM_DEBUG, "On [re-]invocation #%d throwing a ForwardRequest back to the client\n", invocation_count));
+
+ // Throw a forward back to ourselves on the first try
+ // This means that we are testing the exception handling after a forward perm...
+ throw PortableInterceptor::ForwardRequest (server_iogr_.in ());
+ }
+ else
+ {
+ ++invocation_count;
+ if (expired_ || invocation_count % 1000 == 0)
+ {
+ ACE_DEBUG ((LM_DEBUG, "On re-invocation #%d throwing a TRANSIENT back to the client\n", invocation_count));
+ }
+ // Thaen throw a transient on all subsequent invocations
+ throw CORBA::TRANSIENT (0, CORBA::COMPLETED_NO);
+ }
+}
+
+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
+ )
+{
+}
+
+void
+TAO249_ServerRequest_Interceptor2::send_exception (
+ PortableInterceptor::ServerRequestInfo_ptr
+ )
+{
+}
+
+void
+TAO249_ServerRequest_Interceptor2::send_other (
+ PortableInterceptor::ServerRequestInfo_ptr
+ )
+{
+}
+
diff --git a/TAO/orbsvcs/tests/Bug_3215_Regression/ServerRequest_Interceptor2.h b/TAO/orbsvcs/tests/Bug_3215_Regression/ServerRequest_Interceptor2.h
new file mode 100644
index 00000000000..1e5af4cc2d5
--- /dev/null
+++ b/TAO/orbsvcs/tests/Bug_3215_Regression/ServerRequest_Interceptor2.h
@@ -0,0 +1,87 @@
+// -*- 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 ();
+
+virtual void destroy ();
+
+virtual void receive_request_service_contexts (
+ PortableInterceptor::ServerRequestInfo_ptr ri
+ );
+
+virtual void receive_request (
+ PortableInterceptor::ServerRequestInfo_ptr ri
+ );
+
+virtual void send_reply (
+ PortableInterceptor::ServerRequestInfo_ptr ri
+ );
+
+virtual void send_exception (
+ PortableInterceptor::ServerRequestInfo_ptr ri
+ );
+
+virtual void send_other (
+ PortableInterceptor::ServerRequestInfo_ptr ri
+ );
+//@}
+
+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_3215_Regression/Test.idl b/TAO/orbsvcs/tests/Bug_3215_Regression/Test.idl
new file mode 100644
index 00000000000..9e1fa22e0be
--- /dev/null
+++ b/TAO/orbsvcs/tests/Bug_3215_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_3215_Regression/client.cpp b/TAO/orbsvcs/tests/Bug_3215_Regression/client.cpp
new file mode 100644
index 00000000000..22b7c893501
--- /dev/null
+++ b/TAO/orbsvcs/tests/Bug_3215_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;
+ try
+ {
+ CORBA::ORB_var orb =
+ CORBA::ORB_init (argc, argv, "" );
+
+
+ if (parse_args (argc, argv) != 0)
+ return 1;
+
+ CORBA::Object_var tmp =
+ orb->string_to_object(ior );
+
+
+ Test::Hello_var hello =
+ Test::Hello::_narrow(tmp.in () );
+
+
+ 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 ();
+
+
+
+ try
+ {
+ hello->throw_location_forward ();
+
+
+ ACE_DEBUG ((LM_ERROR, "REGRESSION - Test has failed !!!\n"));
+ result = 1;
+ }
+ catch (CORBA::TRANSIENT my_ex)
+ {
+ ACE_UNUSED_ARG (my_ex);
+ ACE_DEBUG ((LM_DEBUG, "Client catches a TRANSIENT, as expected. No problem !\n"));
+ }
+
+
+ hello->shutdown ();
+
+
+ orb->destroy ();
+
+ }
+ catch (const CORBA::Exception& ex)
+ {
+ ex._tao_print_exception (
+ "Test failed (Not regression) because unexpected exception caught:");
+ return 1;
+ }
+
+
+ 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_3215_Regression/run_test.pl b/TAO/orbsvcs/tests/Bug_3215_Regression/run_test.pl
new file mode 100755
index 00000000000..fee5bc7bc29
--- /dev/null
+++ b/TAO/orbsvcs/tests/Bug_3215_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", "-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_3215_Regression/server.cpp b/TAO/orbsvcs/tests/Bug_3215_Regression/server.cpp
new file mode 100644
index 00000000000..883b65c4fd2
--- /dev/null
+++ b/TAO/orbsvcs/tests/Bug_3215_Regression/server.cpp
@@ -0,0 +1,240 @@
+// $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 )
+{
+ 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 );
+
+ // 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 ()
+ );
+
+ // 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 ()
+ );
+ }
+
+ return new_ref._retn ();
+}
+
+int
+main (int argc, char *argv[])
+{
+ try
+ {
+ 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 ()
+ );
+
+
+ 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 () );
+
+
+ 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 ();
+
+
+ CORBA::PolicyList policies (2);
+ policies.length (2);
+
+ policies[0] =
+ root_poa->create_id_assignment_policy (PortableServer::USER_ID
+ );
+
+
+ policies[1] =
+ root_poa->create_lifespan_policy (PortableServer::PERSISTENT
+ );
+
+
+ PortableServer::POA_var my_poa =
+ root_poa->create_POA ("my_poa",
+ poa_manager.in (),
+ policies
+ );
+
+
+ // 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 ();
+
+ }
+
+
+ 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
+ );
+
+
+ CORBA::Object_var hello =
+ my_poa->id_to_reference (server_id.in () );
+
+
+ CORBA::String_var ior =
+ orb->object_to_string (hello.in () );
+
+
+ // Get a ref to the IORManipulation object
+ CORBA::Object_var IORM =
+ orb->resolve_initial_references (TAO_OBJID_IORMANIPULATION,
+ 0
+ );
+
+
+ // Narrow
+ iorm =
+ TAO_IOP::TAO_IOR_Manipulation::_narrow (IORM.in() );
+
+
+ CORBA::Object_var iogr = make_iogr ("Domain_1", 1, 1, orb->string_to_object (ior.in ()) );
+
+
+ CORBA::String_var iorgr_string =
+ orb->object_to_string (iogr.in () );
+
+
+ // 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 ();
+
+
+ orb->run ();
+
+
+ ACE_DEBUG ((LM_DEBUG, "(%P|%t) server - event loop finished\n"));
+
+ root_poa->destroy (1, 1 );
+
+
+ orb->destroy ();
+
+ }
+ catch (const CORBA::Exception& ex)
+ {
+ ex._tao_print_exception (
+ "Exception caught:");
+ return 1;
+ }
+
+
+ return 0;
+}
diff --git a/TAO/orbsvcs/tests/Bug_3216_Regression/Bug_3216_Regression.mpc b/TAO/orbsvcs/tests/Bug_3216_Regression/Bug_3216_Regression.mpc
new file mode 100644
index 00000000000..09375538ff5
--- /dev/null
+++ b/TAO/orbsvcs/tests/Bug_3216_Regression/Bug_3216_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
+ 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 {
+ }
+}
diff --git a/TAO/orbsvcs/tests/Bug_3216_Regression/Hello.cpp b/TAO/orbsvcs/tests/Bug_3216_Regression/Hello.cpp
new file mode 100644
index 00000000000..73c4c9fe95e
--- /dev/null
+++ b/TAO/orbsvcs/tests/Bug_3216_Regression/Hello.cpp
@@ -0,0 +1,37 @@
+//
+// $Id$
+//
+#include "Hello.h"
+
+ACE_RCSID(Hello, Hello, "$Id$")
+
+CORBA::Boolean
+Hello::normal_context_ok_ = 0;
+
+CORBA::Boolean
+Hello::extended_context_ok_ = 0;
+
+Hello::Hello (CORBA::ORB_ptr orb)
+ : orb_ (CORBA::ORB::_duplicate (orb))
+{
+}
+
+void
+Hello::shutdown ()
+{
+ this->orb_->shutdown (0 );
+}
+
+void
+Hello::check_normal_context ()
+{
+ if (! normal_context_ok_)
+ throw Test::MyException ();
+}
+
+void
+Hello::check_extended_context ()
+{
+ if (! extended_context_ok_)
+ throw Test::MyException ();
+}
diff --git a/TAO/orbsvcs/tests/Bug_3216_Regression/Hello.h b/TAO/orbsvcs/tests/Bug_3216_Regression/Hello.h
new file mode 100644
index 00000000000..44b5353a49d
--- /dev/null
+++ b/TAO/orbsvcs/tests/Bug_3216_Regression/Hello.h
@@ -0,0 +1,46 @@
+//
+// $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);
+
+ // = The skeleton methods
+ virtual void shutdown ();
+
+ virtual void check_normal_context ();
+
+ virtual void check_extended_context ();
+
+ static CORBA::Boolean normal_context_ok_;
+
+ static CORBA::Boolean extended_context_ok_;
+
+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_3216_Regression/README b/TAO/orbsvcs/tests/Bug_3216_Regression/README
new file mode 100644
index 00000000000..4d2dc9729d4
--- /dev/null
+++ b/TAO/orbsvcs/tests/Bug_3216_Regression/README
@@ -0,0 +1,23 @@
+// $Id$
+
+This test checks that the -ORBFTSendFullGroupTC property switches between sending only the IOGR group version as an FTGroupVersionServiceContext on requests or instead the complete FTGroupTaggedComponent data.
+
+_Success Looks Like_
+
+(20413|3074066112) server - event loop finished
+Test passed !!!
+
+_Regression looks like_
+
+[sm@beatrice tao431_regression]$ ./run_test.pl
+Error - REGRESSION - ORB doesn't even accept the config option
+ERROR: client returned 1
+ERROR: server timedout
+ERROR: server returned -1
+
+... or some message like:
+Error - REGRESSION - normal format service context not transmitted
+
+... and / or:
+
+Error - REGRESSION - extended format service context not transmitted \ No newline at end of file
diff --git a/TAO/orbsvcs/tests/Bug_3216_Regression/ServerORBInitializer.cpp b/TAO/orbsvcs/tests/Bug_3216_Regression/ServerORBInitializer.cpp
new file mode 100644
index 00000000000..78df0a897f3
--- /dev/null
+++ b/TAO/orbsvcs/tests/Bug_3216_Regression/ServerORBInitializer.cpp
@@ -0,0 +1,49 @@
+// -*- 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
+ )
+{
+
+}
+
+void
+Server_ORBInitializer::post_init (
+ PortableInterceptor::ORBInitInfo_ptr info
+ )
+{
+ this->register_server_request_interceptors (info
+ );
+
+}
+
+void
+Server_ORBInitializer::register_server_request_interceptors (
+ PortableInterceptor::ORBInitInfo_ptr info
+ )
+{
+ 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 ()
+ );
+
+}
+
+
diff --git a/TAO/orbsvcs/tests/Bug_3216_Regression/ServerORBInitializer.h b/TAO/orbsvcs/tests/Bug_3216_Regression/ServerORBInitializer.h
new file mode 100644
index 00000000000..a4e8ed8baa5
--- /dev/null
+++ b/TAO/orbsvcs/tests/Bug_3216_Regression/ServerORBInitializer.h
@@ -0,0 +1,48 @@
+// -*- 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
+ );
+
+ virtual void post_init (PortableInterceptor::ORBInitInfo_ptr info
+ );
+
+private:
+
+ /// Register the necessary interceptors.
+ void register_server_request_interceptors (
+ PortableInterceptor::ORBInitInfo_ptr info
+ );
+
+};
+
+#include /**/ "ace/post.h"
+
+#endif /* TAO249_SERVER_ORBINITIALIZER_H */
+
diff --git a/TAO/orbsvcs/tests/Bug_3216_Regression/ServerRequest_Interceptor.cpp b/TAO/orbsvcs/tests/Bug_3216_Regression/ServerRequest_Interceptor.cpp
new file mode 100644
index 00000000000..ae47c0dc3c7
--- /dev/null
+++ b/TAO/orbsvcs/tests/Bug_3216_Regression/ServerRequest_Interceptor.cpp
@@ -0,0 +1,122 @@
+// -*- 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 ()
+{
+ return CORBA::string_dup ("TAO_TAO249_ServerRequest_Interceptor");
+}
+
+void
+TAO249_ServerRequest_Interceptor::destroy ()
+{
+}
+
+void
+TAO249_ServerRequest_Interceptor::receive_request_service_contexts (
+ PortableInterceptor::ServerRequestInfo_ptr
+ )
+{
+}
+
+void
+TAO249_ServerRequest_Interceptor::receive_request (
+ PortableInterceptor::ServerRequestInfo_ptr ri
+ )
+{
+ CORBA::String_var op = ri->operation ();
+
+ try
+ {
+ IOP::ServiceContext_var sc =
+ ri->get_request_service_context (IOP::FT_GROUP_VERSION
+ );
+
+
+ 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)
+ {
+ throw CORBA::BAD_PARAM (CORBA::OMGVMCID | 28,
+ CORBA::COMPLETED_NO);
+ }
+
+
+ cdr.reset_byte_order (static_cast <int> (byte_order));
+
+ Hello::normal_context_ok_ = 0;
+ Hello::extended_context_ok_ = 0;
+
+ if (! ACE_OS::strcmp (op.in (), "check_normal_context"))
+ {
+ FT::FTGroupVersionServiceContext ftrsc;
+ Hello::normal_context_ok_ = (cdr >> ftrsc) != 0;
+ }
+ else if (! ACE_OS::strcmp (op.in (), "check_extended_context"))
+ {
+ FT::TagFTGroupTaggedComponent tftgtc;
+ Hello::extended_context_ok_ = (cdr >> tftgtc) != 0;
+ }
+ }
+catch (const CORBA::Exception& ex)
+ {
+ ACE_DEBUG ((LM_ERROR, "Unexpected (non regression) error - test failed\n"));
+ ex._tao_print_exception (
+ "Exception in TAO249_ServerRequest_Interceptor::receive_request \n");
+ throw;
+ }
+
+
+
+}
+
+void
+TAO249_ServerRequest_Interceptor::send_reply (
+ PortableInterceptor::ServerRequestInfo_ptr
+ )
+{
+}
+
+void
+TAO249_ServerRequest_Interceptor::send_exception (
+ PortableInterceptor::ServerRequestInfo_ptr
+ )
+{
+}
+
+void
+TAO249_ServerRequest_Interceptor::send_other (
+ PortableInterceptor::ServerRequestInfo_ptr
+ )
+{
+}
+
diff --git a/TAO/orbsvcs/tests/Bug_3216_Regression/ServerRequest_Interceptor.h b/TAO/orbsvcs/tests/Bug_3216_Regression/ServerRequest_Interceptor.h
new file mode 100644
index 00000000000..bf87427ba9b
--- /dev/null
+++ b/TAO/orbsvcs/tests/Bug_3216_Regression/ServerRequest_Interceptor.h
@@ -0,0 +1,80 @@
+// -*- 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 ();
+
+virtual void destroy ();
+
+virtual void receive_request_service_contexts (
+ PortableInterceptor::ServerRequestInfo_ptr ri
+ );
+
+virtual void receive_request (
+ PortableInterceptor::ServerRequestInfo_ptr ri
+ );
+
+virtual void send_reply (
+ PortableInterceptor::ServerRequestInfo_ptr ri
+ );
+
+virtual void send_exception (
+ PortableInterceptor::ServerRequestInfo_ptr ri
+ );
+
+virtual void send_other (
+ PortableInterceptor::ServerRequestInfo_ptr ri
+ );
+//@}
+private:
+
+CORBA::ORB_var orb_;
+
+CORBA:: Long client_id_;
+};
+
+#endif /* TAO249_SERVER_REQUEST_INTERCEPTOR_H */
+
diff --git a/TAO/orbsvcs/tests/Bug_3216_Regression/Test.idl b/TAO/orbsvcs/tests/Bug_3216_Regression/Test.idl
new file mode 100644
index 00000000000..958e025a4cb
--- /dev/null
+++ b/TAO/orbsvcs/tests/Bug_3216_Regression/Test.idl
@@ -0,0 +1,25 @@
+//
+// $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 ();
+
+ // check the version of the context as per the spec
+ void check_normal_context () raises (MyException);
+
+ // check the extended version of the context
+ void check_extended_context () raises (MyException);
+
+ };
+};
diff --git a/TAO/orbsvcs/tests/Bug_3216_Regression/client.cpp b/TAO/orbsvcs/tests/Bug_3216_Regression/client.cpp
new file mode 100644
index 00000000000..5d20406cd4f
--- /dev/null
+++ b/TAO/orbsvcs/tests/Bug_3216_Regression/client.cpp
@@ -0,0 +1,147 @@
+// $Id$
+
+#include "TestC.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;
+ try
+ {
+ int one = 1;
+ char CLIENT[] = "client"; // Copy const into non-const storage.
+ char *argv1[] = { CLIENT, 0 };
+
+ CORBA::ORB_var orb1 =
+ CORBA::ORB_init (one, argv1, "orb1" );
+
+ int three = 3;
+ char OPTION[] = "-ORBFTSendFullGroupTC"; // Copy const into non-const storage.
+ char VALUE[] = "1"; // Copy const into non-const storage.
+ char *argv2[] = { CLIENT, OPTION, VALUE, 0 };
+ CORBA::ORB_var orb2;
+
+ try
+ {
+ orb2 =
+ CORBA::ORB_init (three, argv2, "orb2" );
+ }
+ catch (CORBA::BAD_PARAM bad_param)
+ {
+ ACE_UNUSED_ARG (bad_param);
+ ACE_DEBUG ((LM_ERROR, "Error - REGRESSION - ORB doesn't even accept the config option\n"));
+ return 1;
+ }
+
+
+ if (parse_args (argc, argv) != 0)
+ return 1;
+
+ CORBA::Object_var tmp =
+ orb1->string_to_object (ior );
+
+ Test::Hello_var hello =
+ Test::Hello::_narrow(tmp.in () );
+
+ if (CORBA::is_nil (hello.in ()))
+ {
+ ACE_ERROR_RETURN ((LM_DEBUG,
+ "Test failed - Not regression - Unexpected Nil Test::Hello reference <%s>\n",
+ ior),
+ 1);
+ }
+
+ try
+ {
+ hello->check_normal_context ();
+ }
+ catch (Test::MyException my_ex)
+ {
+ ACE_UNUSED_ARG (my_ex);
+ ACE_DEBUG ((LM_ERROR, "Error - REGRESSION - normal format service context not transmitted\n"));
+ result = 1;
+ }
+
+
+ tmp =
+ orb2->string_to_object (ior );
+
+ hello =
+ Test::Hello::_narrow(tmp.in () );
+
+ if (CORBA::is_nil (hello.in ()))
+ {
+ ACE_ERROR_RETURN ((LM_DEBUG,
+ "Test failed - Not regression - Unexpected Nil Test::Hello reference <%s>\n",
+ ior),
+ 1);
+ }
+
+ try
+ {
+ hello->check_extended_context ();
+ }
+ catch (Test::MyException my_ex)
+ {
+ ACE_UNUSED_ARG (my_ex);
+ ACE_DEBUG ((LM_ERROR, "Error - REGRESSION - extended format service context not transmitted\n"));
+ result = 1;
+ }
+
+
+ hello->shutdown ();
+
+ orb1->destroy ();
+ orb2->destroy ();
+ }
+ catch (const CORBA::Exception& ex)
+ {
+ ex._tao_print_exception (
+ "Test failed (Not regression) because unexpected exception caught:");
+ return 1;
+ }
+
+
+ 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_3216_Regression/run_test.pl b/TAO/orbsvcs/tests/Bug_3216_Regression/run_test.pl
new file mode 100755
index 00000000000..8c3d67c4f2a
--- /dev/null
+++ b/TAO/orbsvcs/tests/Bug_3216_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_3216_Regression/server.cpp b/TAO/orbsvcs/tests/Bug_3216_Regression/server.cpp
new file mode 100644
index 00000000000..ed5ea7b35a8
--- /dev/null
+++ b/TAO/orbsvcs/tests/Bug_3216_Regression/server.cpp
@@ -0,0 +1,238 @@
+// $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 )
+{
+ 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 );
+
+ // 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 ()
+ );
+
+ // 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 ()
+ );
+ }
+
+ return new_ref._retn ();
+}
+
+int
+main (int argc, char *argv[])
+{
+ try
+ {
+ 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 ()
+ );
+
+
+ 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 () );
+
+
+ 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 ();
+
+
+ CORBA::PolicyList policies (2);
+ policies.length (2);
+
+ policies[0] =
+ root_poa->create_id_assignment_policy (PortableServer::USER_ID
+ );
+
+
+ policies[1] =
+ root_poa->create_lifespan_policy (PortableServer::PERSISTENT
+ );
+
+
+ PortableServer::POA_var my_poa =
+ root_poa->create_POA ("my_poa",
+ poa_manager.in (),
+ policies
+ );
+
+
+ // 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 ();
+
+ }
+
+
+ if (parse_args (argc, argv) != 0)
+ return 1;
+
+ Hello *hello_impl;
+ ACE_NEW_RETURN (hello_impl,
+ Hello (orb.in ()),
+ 1);
+
+ PortableServer::ObjectId_var server_id =
+ PortableServer::string_to_ObjectId ("server_id");
+
+ my_poa->activate_object_with_id (server_id.in (),
+ hello_impl
+ );
+
+
+ CORBA::Object_var hello =
+ my_poa->id_to_reference (server_id.in () );
+
+
+ CORBA::String_var ior =
+ orb->object_to_string (hello.in () );
+
+
+ // Get a ref to the IORManipulation object
+ CORBA::Object_var IORM =
+ orb->resolve_initial_references (TAO_OBJID_IORMANIPULATION,
+ 0
+ );
+
+
+ // Narrow
+ iorm =
+ TAO_IOP::TAO_IOR_Manipulation::_narrow (IORM.in() );
+
+
+ CORBA::Object_var iogr = make_iogr ("Domain_1", 1, 1, orb->string_to_object (ior.in ()) );
+
+
+ CORBA::String_var iorgr_string =
+ orb->object_to_string (iogr.in () );
+
+
+ // 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 ();
+
+
+ orb->run ();
+
+
+ ACE_DEBUG ((LM_DEBUG, "(%P|%t) server - event loop finished\n"));
+
+ root_poa->destroy (1, 1 );
+
+
+ orb->destroy ();
+
+ }
+ catch (const CORBA::Exception& ex)
+ {
+ ex._tao_print_exception (
+ "Exception caught:");
+ return 1;
+ }
+
+
+ return 0;
+}
diff --git a/TAO/tao/AnyTypeCode/Any_Unknown_IDL_Type.h b/TAO/tao/AnyTypeCode/Any_Unknown_IDL_Type.h
index ed42a0ca255..27072edfb2b 100644
--- a/TAO/tao/AnyTypeCode/Any_Unknown_IDL_Type.h
+++ b/TAO/tao/AnyTypeCode/Any_Unknown_IDL_Type.h
@@ -16,16 +16,16 @@
#include /**/ "ace/pre.h"
-#if !defined (ACE_LACKS_PRAGMA_ONCE)
-# pragma once
-#endif /* ACE_LACKS_PRAGMA_ONCE */
-
#include "ace/Refcounted_Auto_Ptr.h"
#include "ace/Lock_Adapter_T.h"
#include "tao/AnyTypeCode/Any_Impl.h"
#include "tao/CDR.h"
+#if !defined (ACE_LACKS_PRAGMA_ONCE)
+# pragma once
+#endif /* ACE_LACKS_PRAGMA_ONCE */
+
TAO_BEGIN_VERSIONED_NAMESPACE_DECL
namespace TAO
diff --git a/TAO/tao/Incoming_Message_Stack.h b/TAO/tao/Incoming_Message_Stack.h
index 27a5f28f830..70b4665ac81 100644
--- a/TAO/tao/Incoming_Message_Stack.h
+++ b/TAO/tao/Incoming_Message_Stack.h
@@ -41,7 +41,7 @@ namespace TAO
* Internal class, providing stack functionality for TAO_Queued_Data
* objects. Stack operations don't require memory allocation.
*/
-#if defined (__BORLANDC__) && (__BORLANDC__ <= 0x592)
+#if defined (__BORLANDC__) && (__BORLANDC__ <= 0x593)
class TAO_Export Incoming_Message_Stack
#else
class Incoming_Message_Stack
diff --git a/TAO/tao/LocalObject.cpp b/TAO/tao/LocalObject.cpp
index 43964ffb289..63f482cdba2 100644
--- a/TAO/tao/LocalObject.cpp
+++ b/TAO/tao/LocalObject.cpp
@@ -120,14 +120,15 @@ CORBA::LocalObject::_request (const char *)
throw ::CORBA::NO_IMPLEMENT (CORBA::OMGVMCID | 4, CORBA::COMPLETED_NO);
}
-CORBA::Object_ptr
-CORBA::LocalObject::_get_component (void)
+char *
+CORBA::LocalObject::_repository_id (void)
{
throw ::CORBA::NO_IMPLEMENT (CORBA::OMGVMCID | 8, CORBA::COMPLETED_NO);
}
-char *
-CORBA::LocalObject::_repository_id (void)
+#if ! defined (CORBA_E_COMPACT) && ! defined (CORBA_E_MICRO)
+CORBA::Object_ptr
+CORBA::LocalObject::_get_component (void)
{
throw ::CORBA::NO_IMPLEMENT (CORBA::OMGVMCID | 8, CORBA::COMPLETED_NO);
}
@@ -137,12 +138,7 @@ CORBA::LocalObject::_get_interface (void)
{
throw ::CORBA::NO_IMPLEMENT (CORBA::OMGVMCID | 8, CORBA::COMPLETED_NO);
}
-
-CORBA::ImplementationDef_ptr
-CORBA::LocalObject::_get_implementation (void)
-{
- throw ::CORBA::NO_IMPLEMENT ();
-}
+#endif
#endif /* TAO_HAS_MINIMUM_CORBA */
diff --git a/TAO/tao/LocalObject.h b/TAO/tao/LocalObject.h
index 9cacb7c08eb..fa0a38e041d 100644
--- a/TAO/tao/LocalObject.h
+++ b/TAO/tao/LocalObject.h
@@ -70,14 +70,13 @@ namespace CORBA
/// Always returns false.
virtual CORBA::Boolean _non_existent (void);
- /// Throws CORBA::NO_IMPLEMENT.
- virtual CORBA::ImplementationDef_ptr _get_implementation (void);
-
+#if ! defined (CORBA_E_COMPACT) && ! defined (CORBA_E_MICRO)
/// Gets info about object from the Interface Repository.
virtual CORBA::InterfaceDef_ptr _get_interface (void);
/// Throws NO_IMPLEMENT.
virtual CORBA::Object_ptr _get_component (void);
+#endif
/// Get the repository id.
virtual char * _repository_id (void);
diff --git a/TAO/tao/ORB_Core.cpp b/TAO/tao/ORB_Core.cpp
index 26807a9fe22..b6ccdc3b80c 100644
--- a/TAO/tao/ORB_Core.cpp
+++ b/TAO/tao/ORB_Core.cpp
@@ -213,6 +213,7 @@ TAO_ORB_Core::TAO_ORB_Core (const char *orbid,
resource_factory_ (0),
client_factory_ (0),
server_factory_ (0),
+ ft_send_extended_sc_ (false),
opt_for_collocation_ (true),
use_global_collocation_ (true),
collocation_strategy_ (THRU_POA),
@@ -1033,6 +1034,13 @@ TAO_ORB_Core::init (int &argc, char *argv[] )
arg_shifter.consume_arg ();
}
+ else if (0 != (current_arg = arg_shifter.get_the_parameter
+ (ACE_TEXT("-ORBFTSendFullGroupTC"))))
+ {
+ this->ft_send_extended_sc_ = ACE_OS::atoi (current_arg);
+
+ arg_shifter.consume_arg ();
+ }
////////////////////////////////////////////////////////////////
// catch any unknown -ORB args //
@@ -1107,7 +1115,6 @@ TAO_ORB_Core::init (int &argc, char *argv[] )
(void) ACE_OS::signal (SIGPIPE, (ACE_SignalHandler) SIG_IGN);
#endif /* SIGPIPE */
-
// Calling the open method here so that the svc.conf file is
// opened and TAO_default_resource_factory::init () is called by the
// time this method is called.
@@ -1121,7 +1128,7 @@ TAO_ORB_Core::init (int &argc, char *argv[] )
if (trf == 0)
{
ACE_ERROR ((LM_ERROR,
- ACE_TEXT ("(%P|%t) %p\n"),
+ ACE_TEXT ("TAO (%P|%t) %p\n"),
ACE_TEXT ("ORB Core unable to find a ")
ACE_TEXT ("Resource Factory instance")));
throw ::CORBA::INTERNAL (
@@ -1141,7 +1148,7 @@ TAO_ORB_Core::init (int &argc, char *argv[] )
if (reactor == 0)
{
ACE_ERROR ((LM_ERROR,
- ACE_TEXT ("(%P|%t) %p\n"),
+ ACE_TEXT ("TAO (%P|%t) %p\n"),
ACE_TEXT ("ORB Core unable to initialize reactor")));
throw ::CORBA::INITIALIZE (
CORBA::SystemException::_tao_minor_code (
@@ -1155,7 +1162,7 @@ TAO_ORB_Core::init (int &argc, char *argv[] )
if (ssf == 0)
{
ACE_ERROR ((LM_ERROR,
- ACE_TEXT ("(%P|%t) %p\n"),
+ ACE_TEXT ("TAO (%P|%t) %p\n"),
ACE_TEXT ("ORB Core unable to find a ")
ACE_TEXT ("Server Strategy Factory instance")));
throw ::CORBA::INTERNAL (
@@ -3112,7 +3119,7 @@ TAO_ORB_Core::add_interceptor (
else
{
ACE_ERROR ((LM_ERROR,
- ACE_TEXT ("(%P|%t) %p\n"),
+ ACE_TEXT ("TAO (%P|%t) %p\n"),
ACE_TEXT ("ERROR: ORB Core unable to find the ")
ACE_TEXT ("IORInterceptor Adapter Factory instance")));
@@ -3169,7 +3176,7 @@ TAO_ORB_Core::add_interceptor (
else
{
ACE_ERROR ((LM_ERROR,
- ACE_TEXT ("(%P|%t) %p\n"),
+ ACE_TEXT ("TAO (%P|%t) %p\n"),
ACE_TEXT ("ERROR: ORB Core unable to find the ")
ACE_TEXT ("Client Request Interceptor Adapter Factory ")
ACE_TEXT ("instance")));
@@ -3218,7 +3225,7 @@ TAO_ORB_Core::add_interceptor (
else
{
ACE_ERROR ((LM_ERROR,
- ACE_TEXT ("(%P|%t) %p\n"),
+ ACE_TEXT ("TAO (%P|%t) %p\n"),
ACE_TEXT ("ERROR: ORB Core unable to find the ")
ACE_TEXT ("Server Request Interceptor Adapter Factory ")
ACE_TEXT ("instance")));
@@ -3242,7 +3249,7 @@ TAO_ORB_Core::add_interceptor (
else
{
ACE_ERROR ((LM_ERROR,
- ACE_TEXT ("(%P|%t) %p\n"),
+ ACE_TEXT ("TAO (%P|%t) %p\n"),
ACE_TEXT ("ERROR: ORB Core unable to find the ")
ACE_TEXT ("Client Request Interceptor Adapter Factory ")
ACE_TEXT ("instance")));
@@ -3266,7 +3273,7 @@ TAO_ORB_Core::add_interceptor (
else
{
ACE_ERROR ((LM_ERROR,
- ACE_TEXT ("(%P|%t) %p\n"),
+ ACE_TEXT ("TAO (%P|%t) %p\n"),
ACE_TEXT ("ERROR: ORB Core unable to find the ")
ACE_TEXT ("Server Request Interceptor Adapter Factory ")
ACE_TEXT ("instance")));
diff --git a/TAO/tao/ORB_Core.h b/TAO/tao/ORB_Core.h
index d0045b0157f..7cb3f1a792b 100644
--- a/TAO/tao/ORB_Core.h
+++ b/TAO/tao/ORB_Core.h
@@ -735,6 +735,11 @@ public:
/// Return a reference to the Fault Tolerant service object.
TAO_Fault_Tolerance_Service &fault_tolerance_service (void);
+ /// Transmit the entire TAG_FT_GROUP component data from a server IOGR as
+ /// a FT_GROUP_VERSION tagged service context on requests to that IOGR instead
+ /// of just the group version.
+ CORBA::Boolean ft_send_extended_sc (void);
+
/// Raise a comm failure exception if a service is not loaded, else
/// delegate to the service to see what the service has to do for
/// this case.
@@ -1080,9 +1085,14 @@ protected:
/// Fault Tolerant service hook.
TAO_Fault_Tolerance_Service ft_service_;
-
+
//@}
+ /// TRUE transmits a full TAG_FT_GROUP component in place of the FT_GROUP_VERSION
+ /// context on FT requests. This is contrary to the spec but enables more effective
+ /// fault tolerant stuff. @todo reference to OMG issue. Default false.
+ CORBA::Boolean ft_send_extended_sc_;
+
/// TRUE if we want to take advantage of collocation optimization in
/// this ORB.
CORBA::Boolean opt_for_collocation_;
diff --git a/TAO/tao/ORB_Core.inl b/TAO/tao/ORB_Core.inl
index 3a5166db77b..2f72d050c83 100644
--- a/TAO/tao/ORB_Core.inl
+++ b/TAO/tao/ORB_Core.inl
@@ -144,6 +144,12 @@ TAO_ORB_Core::fault_tolerance_service (void)
return this->ft_service_;
}
+ACE_INLINE CORBA::Boolean
+TAO_ORB_Core::ft_send_extended_sc (void)
+{
+ return this->ft_send_extended_sc_;
+}
+
ACE_INLINE ACE_Thread_Manager *
TAO_ORB_Core::thr_mgr (void)
{
diff --git a/TAO/tao/Object.cpp b/TAO/tao/Object.cpp
index 330c87079d6..90e7e73c7f9 100644
--- a/TAO/tao/Object.cpp
+++ b/TAO/tao/Object.cpp
@@ -498,12 +498,6 @@ CORBA::Object::_get_interface (void)
return this->proxy_broker ()->_get_interface (this);
}
-CORBA::ImplementationDef_ptr
-CORBA::Object::_get_implementation (void)
-{
- return 0;
-}
-
CORBA::Object_ptr
CORBA::Object::_get_component (void)
{
diff --git a/TAO/tao/Object.h b/TAO/tao/Object.h
index 1976c89d79c..4d4bc2be098 100644
--- a/TAO/tao/Object.h
+++ b/TAO/tao/Object.h
@@ -61,9 +61,6 @@ namespace CORBA
class InterfaceDef;
typedef InterfaceDef *InterfaceDef_ptr;
- class ImplementationDef;
- typedef ImplementationDef *ImplementationDef_ptr;
-
class Context;
typedef Context *Context_ptr;
@@ -156,10 +153,6 @@ namespace CORBA
virtual CORBA::Boolean _non_existent (void);
#if ! defined (CORBA_E_COMPACT) && ! defined (CORBA_E_MICRO)
- /// This method is deprecated in the CORBA 2.2 spec, we just return 0
- /// every time.
- virtual CORBA::ImplementationDef_ptr _get_implementation (void);
-
/// Get info about the object from the Interface Repository.
virtual InterfaceDef_ptr _get_interface (void);
diff --git a/TAO/tao/Parser_Registry.cpp b/TAO/tao/Parser_Registry.cpp
index 6365d4907f0..ed7ede65220 100644
--- a/TAO/tao/Parser_Registry.cpp
+++ b/TAO/tao/Parser_Registry.cpp
@@ -30,9 +30,14 @@ TAO_Parser_Registry::~TAO_Parser_Registry (void)
int
TAO_Parser_Registry::open (TAO_ORB_Core *orb_core)
{
- char **names;
+ char **names = 0;
int number_of_names = 0;
+ if (orb_core->resource_factory () == 0)
+ {
+ return -1;
+ }
+
orb_core->resource_factory ()->get_parser_names (names, number_of_names);
if (number_of_names == 0)
diff --git a/TAO/tao/PortableServer/Active_Policy_Strategies.cpp b/TAO/tao/PortableServer/Active_Policy_Strategies.cpp
index 866875aca19..c1981048df9 100644
--- a/TAO/tao/PortableServer/Active_Policy_Strategies.cpp
+++ b/TAO/tao/PortableServer/Active_Policy_Strategies.cpp
@@ -64,8 +64,7 @@ namespace TAO
void
Active_Policy_Strategies::update (Cached_Policies &policies,
- ::TAO_Root_POA *poa
- )
+ ::TAO_Root_POA *poa)
{
this->thread_strategy_factory_ =
ACE_Dynamic_Service<ThreadStrategyFactory>::instance ("ThreadStrategyFactory");
diff --git a/TAO/tao/PortableServer/POA.pidl b/TAO/tao/PortableServer/POA.pidl
index e0060e76390..48cae64313f 100644
--- a/TAO/tao/PortableServer/POA.pidl
+++ b/TAO/tao/PortableServer/POA.pidl
@@ -106,7 +106,7 @@ module PortableServer
exception AdapterAlreadyExists {};
exception AdapterNonExistent {};
exception InvalidPolicy {unsigned short index;};
-#if !defined (TAO_HAS_MINIMUM_POA)
+#if !defined (TAO_HAS_MINIMUM_POA) && !defined (CORBA_E_COMPACT)
exception NoServant {};
#endif
exception ObjectAlreadyActive {};
diff --git a/TAO/tao/PortableServer/RequestProcessingStrategy.h b/TAO/tao/PortableServer/RequestProcessingStrategy.h
index 2d515d52f87..4ce818c67b0 100644
--- a/TAO/tao/PortableServer/RequestProcessingStrategy.h
+++ b/TAO/tao/PortableServer/RequestProcessingStrategy.h
@@ -52,69 +52,52 @@ namespace TAO
public:
RequestProcessingStrategy (void);
- virtual void strategy_init(
- TAO_Root_POA *poa
- );
+ virtual void strategy_init(TAO_Root_POA *poa);
virtual void strategy_init(
TAO_Root_POA *poa,
- ::PortableServer::ServantRetentionPolicyValue
- );
+ ::PortableServer::ServantRetentionPolicyValue);
virtual void strategy_cleanup(void);
-#if (TAO_HAS_MINIMUM_POA == 0)
+#if (TAO_HAS_MINIMUM_POA == 0) && !defined (CORBA_E_COMPACT) && !defined (CORBA_E_MICRO)
- virtual PortableServer::ServantManager_ptr get_servant_manager (
- void)
- = 0;
+ virtual PortableServer::ServantManager_ptr get_servant_manager (void) = 0;
virtual void set_servant_manager (
- PortableServer::ServantManager_ptr imgr
- )
- = 0;
+ PortableServer::ServantManager_ptr imgr) = 0;
- virtual void set_servant (PortableServer::Servant servant )
- = 0;
+ virtual void set_servant (PortableServer::Servant servant) = 0;
-#endif /* TAO_HAS_MINIMUM_POA == 0 */
+ virtual PortableServer::Servant get_servant (void) = 0;
- virtual PortableServer::Servant get_servant (void)
- = 0;
+#endif /* TAO_HAS_MINIMUM_POA == 0 !defined (CORBA_E_COMPACT) && !defined (CORBA_E_MICRO) */
virtual TAO_SERVANT_LOCATION locate_servant (
const PortableServer::ObjectId &system_id,
- PortableServer::Servant &servant
- ) = 0;
+ PortableServer::Servant &servant) = 0;
virtual PortableServer::Servant locate_servant (
const char *operation,
const PortableServer::ObjectId &system_id,
TAO::Portable_Server::Servant_Upcall &servant_upcall,
TAO::Portable_Server::POA_Current_Impl &poa_current_impl,
- bool &wait_occurred_restart_call
- ) = 0;
+ bool &wait_occurred_restart_call) = 0;
virtual void cleanup_servant (
PortableServer::Servant servant,
- const PortableServer::ObjectId &user_id
- ) = 0;
+ const PortableServer::ObjectId &user_id) = 0;
virtual PortableServer::Servant system_id_to_servant (
- const PortableServer::ObjectId &system_id
- ) = 0;
+ const PortableServer::ObjectId &system_id) = 0;
virtual PortableServer::Servant id_to_servant (
- const PortableServer::ObjectId &id
- )
- = 0;
+ const PortableServer::ObjectId &id) = 0;
virtual void etherealize_objects (CORBA::Boolean etherealize_objects) = 0;
virtual PortableServer::ObjectId *servant_to_id (
- PortableServer::Servant servant
- )
- = 0;
+ PortableServer::Servant servant) = 0;
virtual void post_invoke_servant_cleanup(
const PortableServer::ObjectId &system_id,
diff --git a/TAO/tao/PortableServer/RequestProcessingStrategyAOMOnly.cpp b/TAO/tao/PortableServer/RequestProcessingStrategyAOMOnly.cpp
index 4ee454e9b61..4778aa7db48 100644
--- a/TAO/tao/PortableServer/RequestProcessingStrategyAOMOnly.cpp
+++ b/TAO/tao/PortableServer/RequestProcessingStrategyAOMOnly.cpp
@@ -21,7 +21,7 @@ namespace TAO
{
}
-#if (TAO_HAS_MINIMUM_POA == 0)
+#if (TAO_HAS_MINIMUM_POA == 0) && !defined (CORBA_E_COMPACT) && !defined (CORBA_E_MICRO)
PortableServer::ServantManager_ptr
RequestProcessingStrategyAOMOnly::get_servant_manager (void)
@@ -43,14 +43,14 @@ namespace TAO
throw PortableServer::POA::WrongPolicy ();
}
-#endif /* TAO_HAS_MINIMUM_POA == 0 */
-
PortableServer::Servant
RequestProcessingStrategyAOMOnly::get_servant (void)
{
throw PortableServer::POA::WrongPolicy ();
}
+#endif /* TAO_HAS_MINIMUM_POA == 0 !defined (CORBA_E_COMPACT) && !defined (CORBA_E_MICRO) */
+
TAO_SERVANT_LOCATION
RequestProcessingStrategyAOMOnly::locate_servant (
const PortableServer::ObjectId & system_id,
diff --git a/TAO/tao/PortableServer/RequestProcessingStrategyAOMOnly.h b/TAO/tao/PortableServer/RequestProcessingStrategyAOMOnly.h
index 96d79641ce9..84c0cfce064 100644
--- a/TAO/tao/PortableServer/RequestProcessingStrategyAOMOnly.h
+++ b/TAO/tao/PortableServer/RequestProcessingStrategyAOMOnly.h
@@ -40,29 +40,23 @@ namespace TAO
public:
RequestProcessingStrategyAOMOnly (void);
-#if (TAO_HAS_MINIMUM_POA == 0)
+#if (TAO_HAS_MINIMUM_POA == 0) && !defined (CORBA_E_COMPACT) && !defined (CORBA_E_MICRO)
PortableServer::ServantManager_ptr
get_servant_manager (void);
- void
- set_servant_manager (PortableServer::ServantManager_ptr imgr
- );
+ void set_servant_manager (PortableServer::ServantManager_ptr imgr);
- void
- set_servant (PortableServer::Servant servant
- );
+ void set_servant (PortableServer::Servant servant);
-#endif /* TAO_HAS_MINIMUM_POA == 0 */
+ PortableServer::Servant get_servant (void);
- PortableServer::Servant
- get_servant (void);
+#endif /* TAO_HAS_MINIMUM_POA == 0 !defined (CORBA_E_COMPACT) && !defined (CORBA_E_MICRO) */
virtual
TAO_SERVANT_LOCATION
locate_servant (const PortableServer::ObjectId &system_id,
- PortableServer::Servant &servant
- );
+ PortableServer::Servant &servant);
virtual
PortableServer::Servant
@@ -70,27 +64,22 @@ namespace TAO
const PortableServer::ObjectId &system_id,
TAO::Portable_Server::Servant_Upcall &servant_upcall,
TAO::Portable_Server::POA_Current_Impl &poa_current_impl,
- bool &wait_occurred_restart_call
- );
+ bool &wait_occurred_restart_call);
virtual PortableServer::Servant system_id_to_servant (
- const PortableServer::ObjectId &system_id
- );
+ const PortableServer::ObjectId &system_id);
virtual PortableServer::Servant id_to_servant (
- const PortableServer::ObjectId &id
- );
+ const PortableServer::ObjectId &id);
virtual void cleanup_servant (
PortableServer::Servant servant,
- const PortableServer::ObjectId &user_id
- );
+ const PortableServer::ObjectId &user_id);
virtual void etherealize_objects (CORBA::Boolean etherealize_objects);
virtual PortableServer::ObjectId *servant_to_id (
- PortableServer::Servant servant
- );
+ PortableServer::Servant servant);
virtual void post_invoke_servant_cleanup(
const PortableServer::ObjectId &system_id,
diff --git a/TAO/tao/PortableServer/RequestProcessingStrategyDefaultServant.cpp b/TAO/tao/PortableServer/RequestProcessingStrategyDefaultServant.cpp
index 2b18dd7ff53..f773734e11b 100644
--- a/TAO/tao/PortableServer/RequestProcessingStrategyDefaultServant.cpp
+++ b/TAO/tao/PortableServer/RequestProcessingStrategyDefaultServant.cpp
@@ -57,8 +57,7 @@ namespace TAO
void
RequestProcessingStrategyDefaultServant::set_servant (
- PortableServer::Servant servant
- )
+ PortableServer::Servant servant)
{
// This operation registers the specified servant with the POA as
// the default servant. This servant will be used for all requests
@@ -113,8 +112,7 @@ namespace TAO
const PortableServer::ObjectId & system_id,
TAO::Portable_Server::Servant_Upcall &servant_upcall,
TAO::Portable_Server::POA_Current_Impl &poa_current_impl,
- bool & /*wait_occurred_restart_call*/
- )
+ bool & /*wait_occurred_restart_call*/)
{
PortableServer::Servant servant = 0;
@@ -182,8 +180,7 @@ namespace TAO
void
RequestProcessingStrategyDefaultServant::cleanup_servant (
PortableServer::Servant servant,
- const PortableServer::ObjectId &user_id
- )
+ const PortableServer::ObjectId &user_id)
{
if (servant)
{
@@ -211,8 +208,7 @@ namespace TAO
PortableServer::ObjectId *
RequestProcessingStrategyDefaultServant::servant_to_id (
- PortableServer::Servant servant
- )
+ PortableServer::Servant servant)
{
PortableServer::Servant default_servant = this->default_servant_.in ();
diff --git a/TAO/tao/PortableServer/RequestProcessingStrategyDefaultServant.h b/TAO/tao/PortableServer/RequestProcessingStrategyDefaultServant.h
index f536a91a970..6976659e156 100644
--- a/TAO/tao/PortableServer/RequestProcessingStrategyDefaultServant.h
+++ b/TAO/tao/PortableServer/RequestProcessingStrategyDefaultServant.h
@@ -43,50 +43,39 @@ namespace TAO
virtual void strategy_cleanup(void);
- PortableServer::ServantManager_ptr
- get_servant_manager (void);
+ PortableServer::ServantManager_ptr get_servant_manager (void);
- void set_servant_manager (
- PortableServer::ServantManager_ptr imgr
- );
+ void set_servant_manager (PortableServer::ServantManager_ptr imgr);
PortableServer::Servant get_servant (void);
- void set_servant (
- PortableServer::Servant servant
- );
+ void set_servant (PortableServer::Servant servant);
virtual TAO_SERVANT_LOCATION locate_servant (
const PortableServer::ObjectId &system_id,
- PortableServer::Servant &servant
- );
+ PortableServer::Servant &servant);
virtual PortableServer::Servant locate_servant (
const char *operation,
const PortableServer::ObjectId &system_id,
TAO::Portable_Server::Servant_Upcall &servant_upcall,
TAO::Portable_Server::POA_Current_Impl &poa_current_impl,
- bool &wait_occurred_restart_call
- );
+ bool &wait_occurred_restart_call);
virtual PortableServer::Servant system_id_to_servant (
- const PortableServer::ObjectId &system_id
- );
+ const PortableServer::ObjectId &system_id);
virtual PortableServer::Servant id_to_servant (
- const PortableServer::ObjectId &id
- );
+ const PortableServer::ObjectId &id);
virtual void cleanup_servant (
PortableServer::Servant servant,
- const PortableServer::ObjectId &user_id
- );
+ const PortableServer::ObjectId &user_id);
virtual void etherealize_objects (CORBA::Boolean etherealize_objects);
virtual PortableServer::ObjectId *servant_to_id (
- PortableServer::Servant servant
- );
+ PortableServer::Servant servant);
virtual void post_invoke_servant_cleanup(
const PortableServer::ObjectId &system_id,
diff --git a/TAO/tao/PortableServer/RequestProcessingStrategyServantActivator.h b/TAO/tao/PortableServer/RequestProcessingStrategyServantActivator.h
index 7b4504180bf..0c170efd25b 100644
--- a/TAO/tao/PortableServer/RequestProcessingStrategyServantActivator.h
+++ b/TAO/tao/PortableServer/RequestProcessingStrategyServantActivator.h
@@ -42,26 +42,22 @@ namespace TAO
PortableServer::ServantManager_ptr get_servant_manager (void);
- void set_servant_manager (PortableServer::ServantManager_ptr imgr
- );
+ void set_servant_manager (PortableServer::ServantManager_ptr imgr);
virtual TAO_SERVANT_LOCATION locate_servant (
const PortableServer::ObjectId &system_id,
- PortableServer::Servant &servant
- );
+ PortableServer::Servant &servant);
virtual PortableServer::Servant locate_servant (
const char *operation,
const PortableServer::ObjectId &system_id,
TAO::Portable_Server::Servant_Upcall &servant_upcall,
TAO::Portable_Server::POA_Current_Impl &poa_current_impl,
- bool &wait_occurred_restart_call
- );
+ bool &wait_occurred_restart_call);
virtual void cleanup_servant (
PortableServer::Servant servant,
- const PortableServer::ObjectId &user_id
- );
+ const PortableServer::ObjectId &user_id);
virtual void etherealize_objects (CORBA::Boolean etherealize_objects);
@@ -71,13 +67,11 @@ namespace TAO
private:
PortableServer::Servant incarnate_servant (
- const PortableServer::ObjectId& object_id
- );
+ const PortableServer::ObjectId& object_id);
void etherealize_servant (const PortableServer::ObjectId& object_id,
PortableServer::Servant servant,
- CORBA::Boolean cleanup_in_progress
- );
+ CORBA::Boolean cleanup_in_progress);
private:
PortableServer::ServantActivator_var servant_activator_;
diff --git a/TAO/tao/PortableServer/RequestProcessingStrategyServantManager.h b/TAO/tao/PortableServer/RequestProcessingStrategyServantManager.h
index 8a6c09546a1..7b12941991f 100644
--- a/TAO/tao/PortableServer/RequestProcessingStrategyServantManager.h
+++ b/TAO/tao/PortableServer/RequestProcessingStrategyServantManager.h
@@ -42,8 +42,7 @@ namespace TAO
void set_servant (PortableServer::Servant servant);
void validate_servant_manager (
- PortableServer::ServantManager_ptr servant_manager
- );
+ PortableServer::ServantManager_ptr servant_manager);
virtual PortableServer::Servant system_id_to_servant (
const PortableServer::ObjectId &system_id);
diff --git a/TAO/tao/RTCORBA/RT_ORBInitializer.cpp b/TAO/tao/RTCORBA/RT_ORBInitializer.cpp
index 34499ba7575..96f21a8e5e9 100644
--- a/TAO/tao/RTCORBA/RT_ORBInitializer.cpp
+++ b/TAO/tao/RTCORBA/RT_ORBInitializer.cpp
@@ -74,6 +74,18 @@ TAO_RT_ORBInitializer::pre_init (PortableInterceptor::ORBInitInfo_ptr info)
// orb_core() TAO extension.
TAO_ORBInitInfo_var tao_info = TAO_ORBInitInfo::_narrow (info);
+ if (CORBA::is_nil (tao_info.in ()))
+ {
+ if (TAO_debug_level > 0)
+ ACE_ERROR ((LM_ERROR,
+ "(%P|%t) TAO_RT_ORBInitializer::pre_init:\n"
+ "(%P|%t) Unable to narrow "
+ "\"PortableInterceptor::ORBInitInfo_ptr\" to\n"
+ "(%P|%t) \"TAO_ORBInitInfo *.\"\n"));
+
+ throw ::CORBA::INTERNAL ();
+ }
+
// Set the name of the Protocol_Hooks to be RT_Protocols_Hooks.
tao_info->orb_core ()->orb_params ()->protocols_hooks_name ("RT_Protocols_Hooks");
ACE_Service_Config::process_directive (ace_svc_desc_TAO_RT_Protocols_Hooks);
@@ -161,18 +173,6 @@ TAO_RT_ORBInitializer::pre_init (PortableInterceptor::ORBInitInfo_ptr info)
info->register_initial_reference ("NetworkPriorityMappingManager",
network_manager);
- if (CORBA::is_nil (tao_info.in ()))
- {
- if (TAO_debug_level > 0)
- ACE_ERROR ((LM_ERROR,
- "(%P|%t) TAO_RT_ORBInitializer::pre_init:\n"
- "(%P|%t) Unable to narrow "
- "\"PortableInterceptor::ORBInitInfo_ptr\" to\n"
- "(%P|%t) \"TAO_ORBInitInfo *.\"\n"));
-
- throw ::CORBA::INTERNAL ();
- }
-
// Create the RT_ORB.
CORBA::Object_ptr rt_orb = CORBA::Object::_nil ();
ACE_NEW_THROW_EX (rt_orb,
diff --git a/TAO/tao/Strategies/SHMIOP_Profile.cpp b/TAO/tao/Strategies/SHMIOP_Profile.cpp
index 998bb2175bc..bfccbe79bfa 100644
--- a/TAO/tao/Strategies/SHMIOP_Profile.cpp
+++ b/TAO/tao/Strategies/SHMIOP_Profile.cpp
@@ -255,11 +255,9 @@ TAO_SHMIOP_Profile::parse_string_i (const char *string
CORBA::COMPLETED_NO);
}
- start = ++okd; // increment past the object key separator
-
TAO::ObjectKey ok;
TAO::ObjectKey::decode_string_to_sequence (ok,
- okd + 1);
+ okd + 1); // increment past the object key separator
(void) this->orb_core ()->object_key_table ().bind (ok,
this->ref_object_key_);
diff --git a/TAO/tao/Strategies/advanced_resource.cpp b/TAO/tao/Strategies/advanced_resource.cpp
index 708c4605e04..0e55594a19c 100644
--- a/TAO/tao/Strategies/advanced_resource.cpp
+++ b/TAO/tao/Strategies/advanced_resource.cpp
@@ -37,6 +37,10 @@
ACE_RCSID(Strategies, advanced_resource, "$Id$")
+#if !defined (TAO_DEFAULT_REACTOR_TYPE)
+#define TAO_DEFAULT_REACTOR_TYPE TAO_REACTOR_TP
+#endif /* !TAO_DEFAULT_REACTOR_TYPE */
+
TAO_BEGIN_VERSIONED_NAMESPACE_DECL
TAO_Resource_Factory_Changer::TAO_Resource_Factory_Changer (void)
@@ -67,7 +71,7 @@ TAO_Resource_Factory_Changer::TAO_Resource_Factory_Changer (void)
}
TAO_Advanced_Resource_Factory::TAO_Advanced_Resource_Factory (void)
- : reactor_type_ (TAO_REACTOR_TP),
+ : reactor_type_ (TAO_DEFAULT_REACTOR_TYPE),
threadqueue_type_ (TAO_THREAD_QUEUE_NOT_SET),
cdr_allocator_type_ (TAO_ALLOCATOR_THREAD_LOCK),
amh_response_handler_allocator_lock_type_ (TAO_ALLOCATOR_THREAD_LOCK),
diff --git a/TAO/tao/Stub.cpp b/TAO/tao/Stub.cpp
index bfc563eaed7..22ed3ed2fc1 100644
--- a/TAO/tao/Stub.cpp
+++ b/TAO/tao/Stub.cpp
@@ -350,7 +350,9 @@ TAO_Stub::forward_back_one (void)
{
TAO_MProfile *from = forward_profiles_->forward_from ();
- delete this->forward_profiles_;
+ // Only delete the forward location if it is not permanent
+ if (this->forward_profiles_ != this->forward_profiles_perm_)
+ delete this->forward_profiles_;
// the current profile in this profile list is no
// longer being forwarded, so set the reference to zero.
diff --git a/TAO/tao/Stub.inl b/TAO/tao/Stub.inl
index 7042627eebb..37181419431 100644
--- a/TAO/tao/Stub.inl
+++ b/TAO/tao/Stub.inl
@@ -25,7 +25,10 @@ TAO_Stub::profile_lock (void) const
ACE_INLINE void
TAO_Stub::reset_forward (void)
{
- while (this->forward_profiles_ != 0)
+ while (this->forward_profiles_ != 0
+ && this->forward_profiles_ != this->forward_profiles_perm_) // Disturbingly the permanent
+ // forwarded profile lives at the bottom
+ // of this stack if it exists. Avoid deleting it.
this->forward_back_one ();
}
@@ -34,6 +37,17 @@ TAO_Stub::reset_profiles_i (void)
{
this->reset_forward ();
this->reset_base ();
+
+ if (this->forward_profiles_perm_)
+ {
+ // The *permanent* forward is being kept in the transient
+ // forward queue (??!). We have just nuked it. Put it back the way it was.
+ // reset_base should have reset the profile success.
+ // @todo We have knives in the spoon draw - TAO_Stub needs total rewrite.
+ this->forward_profiles_ = this->forward_profiles_perm_;
+ this->forward_profiles_->rewind ();
+ this->set_profile_in_use_i (this->forward_profiles_->get_next ());
+ }
}
ACE_INLINE void
@@ -204,7 +218,10 @@ TAO_Stub::next_profile_retry (void)
// In this case we are falling back from the forwarded IOR stright to the base IOR
this->reset_profiles_i ();
- return true;
+
+ // We used to return unconditional true at this point but this results in
+ // infinite retries of any permanent location forward. This is undesirable.
+ return !this->forward_profiles_perm_;
}
else if (this->next_profile_i ())
{
diff --git a/TAO/tao/TAO_Internal.cpp b/TAO/tao/TAO_Internal.cpp
index ea573f2de00..1bcf99ca423 100644
--- a/TAO/tao/TAO_Internal.cpp
+++ b/TAO/tao/TAO_Internal.cpp
@@ -423,7 +423,7 @@ TAO::ORB::close_services (ACE_Service_Gestalt_Auto_Ptr pcfg)
guard,
*ACE_Static_Object_Lock::instance (),
-1));
- service_open_count--;
+ --service_open_count;
if (pcfg == ACE_Service_Config::global())
return 0;
diff --git a/TAO/tao/default_resource.h b/TAO/tao/default_resource.h
index b09ea01725e..6a76a1a98a7 100644
--- a/TAO/tao/default_resource.h
+++ b/TAO/tao/default_resource.h
@@ -319,8 +319,6 @@ private:
bool drop_replies_;
};
-
-
TAO_END_VERSIONED_NAMESPACE_DECL
ACE_STATIC_SVC_DECLARE_EXPORT (TAO, TAO_Default_Resource_Factory)
diff --git a/TAO/tests/Portable_Interceptors/Bug_3080/client.cpp b/TAO/tests/Portable_Interceptors/Bug_3080/client.cpp
index e7ce02e9cfb..bd63e5a522f 100644
--- a/TAO/tests/Portable_Interceptors/Bug_3080/client.cpp
+++ b/TAO/tests/Portable_Interceptors/Bug_3080/client.cpp
@@ -89,6 +89,7 @@ ACE_TMAIN(int argc, ACE_TCHAR *argv[])
// ignore
}
+#if TAO_HAS_INTERCEPTORS == 1
if (temp_initializer->client_interceptor_->request_count () != 1)
{
ACE_ERROR_RETURN ((LM_ERROR,
@@ -102,6 +103,7 @@ ACE_TMAIN(int argc, ACE_TCHAR *argv[])
"Error, receive exception interceptor not called\n"),
1);
}
+#endif /* TAO_HAS_INTERCEPTORS == 1 */
}
catch (const CORBA::Exception& ex)
{