summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorirfan <irfan@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>2002-07-08 17:01:38 +0000
committerirfan <irfan@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>2002-07-08 17:01:38 +0000
commitd6c198c6952f9405dc5bd7c5fad95bd48a57a603 (patch)
tree2ab631d155c7ad8c42e06565c0ce8fd200531042
parent86c0e18ee287e94990520b226cb47e6efaf22115 (diff)
downloadATCD-d6c198c6952f9405dc5bd7c5fad95bd48a57a603.tar.gz
ChangeLogTag: Sun Jun 30 22:22:05 2002 Irfan Pyarali <irfan@cs.wustl.edu>
-rw-r--r--ChangeLogs/ChangeLog-02a9
-rw-r--r--TAO/ChangeLogs/ChangeLog-02a223
-rw-r--r--TAO/docs/Options.html27
-rw-r--r--TAO/tao/Default_Endpoint_Selector_Factory.cpp3
-rw-r--r--TAO/tao/Default_Protocols_Hooks.cpp2
-rw-r--r--TAO/tao/Default_Protocols_Hooks.h2
-rw-r--r--TAO/tao/GIOP_Message_Base.cpp6
-rw-r--r--TAO/tao/GIOP_Message_Base.h3
-rw-r--r--TAO/tao/GIOP_Message_Lite.cpp6
-rw-r--r--TAO/tao/GIOP_Message_Lite.h59
-rw-r--r--TAO/tao/IIOP_Endpoint.cpp13
-rw-r--r--TAO/tao/IIOP_Endpoint.h3
-rw-r--r--TAO/tao/IIOP_Endpoint.i31
-rw-r--r--TAO/tao/Invocation_Endpoint_Selectors.cpp11
-rw-r--r--TAO/tao/Invocation_Endpoint_Selectors.h19
-rw-r--r--TAO/tao/ORB_Core.cpp8
-rw-r--r--TAO/tao/Pluggable_Messaging.h19
-rw-r--r--TAO/tao/Protocols_Hooks.h2
-rw-r--r--TAO/tao/RTCORBA/RT_Endpoint_Selector_Factory.cpp156
-rw-r--r--TAO/tao/RTCORBA/RT_Endpoint_Selector_Factory.h54
-rw-r--r--TAO/tao/RTCORBA/RT_Invocation_Endpoint_Selectors.cpp690
-rw-r--r--TAO/tao/RTCORBA/RT_Invocation_Endpoint_Selectors.h147
-rw-r--r--TAO/tao/RTCORBA/RT_Invocation_Endpoint_Selectors.i33
-rw-r--r--TAO/tao/RTCORBA/RT_Protocols_Hooks.cpp9
-rw-r--r--TAO/tao/RTCORBA/RT_Protocols_Hooks.h11
-rw-r--r--TAO/tao/Strategies/DIOP_Endpoint.cpp9
-rw-r--r--TAO/tao/Strategies/DIOP_Endpoint.h3
-rw-r--r--TAO/tao/Strategies/DIOP_Endpoint.i31
-rw-r--r--TAO/tao/Strategies/SHMIOP_Endpoint.cpp6
-rw-r--r--TAO/tao/Strategies/SHMIOP_Endpoint.h3
-rw-r--r--TAO/tao/Strategies/SHMIOP_Endpoint.i31
-rw-r--r--TAO/tao/Transport.cpp13
-rw-r--r--TAO/tao/params.cpp3
-rw-r--r--TAO/tao/params.h7
-rw-r--r--TAO/tao/params.i12
-rw-r--r--TAO/tests/RTCORBA/Linear_Priority/client.cpp18
-rw-r--r--TAO/tests/RTCORBA/Linear_Priority/server.cpp16
-rw-r--r--TAO/tests/RTCORBA/Makefile3
-rw-r--r--TAO/tests/RTCORBA/Makefile.bor1
-rw-r--r--TAO/tests/RTCORBA/Profile_And_Endpoint_Selection/Makefile1249
-rw-r--r--TAO/tests/RTCORBA/Profile_And_Endpoint_Selection/Makefile.bor7
-rw-r--r--TAO/tests/RTCORBA/Profile_And_Endpoint_Selection/Profile_And_Endpoint_Selection.dsw41
-rw-r--r--TAO/tests/RTCORBA/Profile_And_Endpoint_Selection/README118
-rw-r--r--TAO/tests/RTCORBA/Profile_And_Endpoint_Selection/bands1
-rw-r--r--TAO/tests/RTCORBA/Profile_And_Endpoint_Selection/client.bor37
-rw-r--r--TAO/tests/RTCORBA/Profile_And_Endpoint_Selection/client.cpp546
-rw-r--r--TAO/tests/RTCORBA/Profile_And_Endpoint_Selection/client.dsp204
-rw-r--r--TAO/tests/RTCORBA/Profile_And_Endpoint_Selection/empty_file0
-rw-r--r--TAO/tests/RTCORBA/Profile_And_Endpoint_Selection/iiop1
-rw-r--r--TAO/tests/RTCORBA/Profile_And_Endpoint_Selection/iiop_shmiop1
-rw-r--r--TAO/tests/RTCORBA/Profile_And_Endpoint_Selection/invocation_priorities1
-rw-r--r--TAO/tests/RTCORBA/Profile_And_Endpoint_Selection/lanes1
-rwxr-xr-xTAO/tests/RTCORBA/Profile_And_Endpoint_Selection/run_test.pl149
-rw-r--r--TAO/tests/RTCORBA/Profile_And_Endpoint_Selection/server.bor42
-rw-r--r--TAO/tests/RTCORBA/Profile_And_Endpoint_Selection/server.cpp387
-rw-r--r--TAO/tests/RTCORBA/Profile_And_Endpoint_Selection/server.dsp216
-rw-r--r--TAO/tests/RTCORBA/Profile_And_Endpoint_Selection/shmiop1
-rw-r--r--TAO/tests/RTCORBA/Profile_And_Endpoint_Selection/shmiop_iiop1
-rw-r--r--TAO/tests/RTCORBA/Profile_And_Endpoint_Selection/svc.conf7
-rw-r--r--TAO/tests/RTCORBA/Profile_And_Endpoint_Selection/test.idl8
-rw-r--r--TAO/tests/RTCORBA/RTCORBA_tests.dsw24
-rw-r--r--TAO/tests/RTCORBA/common_args.cpp (renamed from TAO/tests/RTCORBA/Linear_Priority/readers.cpp)156
-rw-r--r--ace/MEM_Addr.cpp10
-rw-r--r--ace/MEM_Connector.cpp7
-rw-r--r--bin/auto_run_tests.lst1
65 files changed, 3896 insertions, 1022 deletions
diff --git a/ChangeLogs/ChangeLog-02a b/ChangeLogs/ChangeLog-02a
index 531e529d265..870ec350d6e 100644
--- a/ChangeLogs/ChangeLog-02a
+++ b/ChangeLogs/ChangeLog-02a
@@ -179,6 +179,15 @@ Mon Jul 1 06:21:00 2002 Douglas C. Schmidt <schmidt@macarena.cs.wustl.edu>
value for OSIOCGIFCONF. Thanks to John Zorko <j.zorko@att.net>
for this fix.
+Sun Jun 30 22:22:05 2002 Irfan Pyarali <irfan@cs.wustl.edu>
+
+ * ace/MEM_Addr.cpp (same_host): This method was unnecessarily
+ creating and copying both the local and remote addresses. I
+ changed it so that we only compare the IP addresses.
+
+ * ace/MEM_Connector.cpp (connect): Changed debugging statement to
+ provide additional information.
+
Sun Jun 30 15:32:47 2002 Douglas C. Schmidt <schmidt@ace.cs.wustl.edu>
* ace/Based_Pointer_Repository.h:
diff --git a/TAO/ChangeLogs/ChangeLog-02a b/TAO/ChangeLogs/ChangeLog-02a
index 2eb7ef21072..8a6911aa583 100644
--- a/TAO/ChangeLogs/ChangeLog-02a
+++ b/TAO/ChangeLogs/ChangeLog-02a
@@ -1,3 +1,226 @@
+Sun Jun 30 22:22:05 2002 Irfan Pyarali <irfan@cs.wustl.edu>
+
+ * tao/RTCORBA/RT_Invocation_Endpoint_Selectors:
+ * tao/RTCORBA/RT_Endpoint_Selector_Factory:
+
+ The RT endpoint and profile selection in TAO was broken. There
+ were serveral classes intended for this task such as
+ TAO_Priority_Endpoint_Selector, TAO_Bands_Endpoint_Selector,
+ TAO_Protocol_Endpoint_Selector, TAO_Priority_Protocol_Selector,
+ TAO_Bands_Protocol_Selector, and
+ TAO_RT_Default_Endpoint_Selector. However, these class really
+ did not simultaneously cover the spectrum of policy choices for
+ RT invocations. Therefore, replaced the above classes with the
+ new class TAO_RT_Invocation_Endpoint_Selector.
+
+ - RT_Endpoint_Selector_Factory::get_selector became super simple
+ since always the same TAO_RT_Invocation_Endpoint_Selector class
+ is being returned.
+
+ - RT_Endpoint_Selector_Factory::init_client_protocol removed
+ since it was empty and was not being called.
+
+ - The new profile and endpoint selection criteria works as
+ follows:
+
+ We first check for client protocol policies. If there aren't
+ any, we delegate to the TAO_Default_Endpoint_Selector. If
+ client protocol policies are set, we cycle through all profiles
+ to find a protocol match in the policy. Even though cycling
+ through all the protocols is the correct things to do to find a
+ match, starting from the start of the profile list is not. In
+ addition, this code is also ignoring the forwarded reference (if
+ it exists). This behavior is caused by problems with the
+ profile management in TAO which are documented in bugzilla bugs
+ 1237, 1238, and 1239. Once the above problems are fixed, this
+ behavior should be fixed to do the right thing.
+
+ We then check if all endpoints are valid or we need to match the
+ priority of the client thread or we need to match the priority
+ of the band or if the profile contains just one endpoint. All
+ endpoints are valid if the priority model policy is server
+ declared or if no priority model policy (and no bands policy) is
+ specified. One endpoint occurs when (a) we are talking to a
+ nonTAO server (which doesn't have the concept of multiple
+ endpoints per profile) or (b) we have TAO server with a non-lane
+ threadpool, in which case there is only one acceptor. In both
+ cases we should use the endpoint regardless of its priority.
+
+ Finally, we check for the private connection policy.
+
+ A new test tests/RTCORBA/Profile_And_Endpoint_Selection
+ described below is added to make sure that all the RT invocation
+ policy combinations are being correctly honored.
+
+ * tao/IIOP_Endpoint:
+ * tao/Strategies/DIOP_Endpoint:
+ * tao/Strategies/SHMIOP_Endpoint:
+
+ Fixed a very subtle race condition caused by changes from:
+
+ Wed Jun 12 13:24:11 2002 Carlos O'Ryan <coryan@atdesk.com>
+
+ The changes assumed that the <object_addr_> was set if its type
+ has been set to <AF_INET>. However, on closer inspection,
+ INET_Addr::set() is not atomic and the family type is set before
+ the rest of the fields are set. Therefore, a very subtle and
+ difficult to replicate race condition existed where one thread
+ would think that the address has been set when it was still in
+ the process of being set by another thread. This bug would
+ manifest itself in one of the client threads failing to connect
+ to server.
+
+ The solution was to separate out the indication of the address
+ being set into a new <object_addr_set_> flag. The code that
+ depended on the address type being set was replaced to check for
+ this flag.
+
+ * tao: Added a new ORB option -ORBSingleReadOptimization. This
+ option controls single read optimzations when reading requests.
+ If this option is off, the ORB will do two reads to read a
+ request. One to read the request header and the other to read
+ the request payload. If this option is on, the ORB will do a
+ read of size <TAO_MAXBUFSIZE>, hoping to read the entire
+ request. However, in this case, there is a chance of reading
+ more than one request. If any additional requests have been
+ read, they are queued up for processing later.
+
+ This option defaults to 1 because it can provide better
+ performance since one less read is performed. However, in the
+ case of RT-CORBA, this option should be set to 0. Consider the
+ following scenario: two requests are read from one socket; the
+ additional request is queued; a Reactor notify is dispatch to
+ awake a follower threads; at this time, new requests arrive on
+ others sockets of higher priority; however, since notifies are
+ given preferences over normal I/O, the lower priority queued
+ message will be processed before the newly arrived higher
+ priority request.
+
+ The following files were changed:
+
+ - tao/Transport.cpp (handle_input_i): Check if the single read
+ optimization option is on. If so continue with existing behavior
+ of read upto the size of <TAO_MAXBUFSIZE>. If not, read only
+ upto the header length specified by the messaging object.
+
+ - tao/Pluggable_Messaging.h:
+ - tao/GIOP_Message_Base.h:
+ - tao/GIOP_Message_Base.cpp:
+ - tao/GIOP_Message_Lite.h:
+ - tao/GIOP_Message_Lite.cpp:
+
+ Added new header_length() method to get the header length used
+ by the messaging layer.
+
+ - tao/ORB_Core.cpp: Added parsing of new option.
+
+ - tao/params.*: Added new option.
+
+ - docs/Options.html: Added documentation on new option.
+
+ * tao/Invocation_Endpoint_Selectors (next): Removed this method
+ since it had been deprecated and was no longer being used.
+ Also, made endpoint_from_profile() virtual so that the RT
+ selector class can override it.
+
+ * tao/Default_Endpoint_Selector_Factory.cpp: Format fix.
+
+ * tao/Protocols_Hooks.h:
+ * tao/Default_Protocols_Hooks.cpp:
+ * tao/Default_Protocols_Hooks.h:
+ * tao/RTCORBA/RT_Protocols_Hooks.cpp:
+ * tao/RTCORBA/RT_Protocols_Hooks.h:
+
+ get_selector_bands_policy_hook() was unnecessarily passing the
+ <priority> by reference. Changed it to pass by value since it
+ is an "in" parameter.
+
+ * tests/RTCORBA/Profile_And_Endpoint_Selection: This new test
+ exercises the profile and endpoint selection of the ORB.
+
+ Server: The server creates a servant in a regular POA and
+ another in an RT-POA. The RT-POA can be configured in serveral
+ ways as detailed below.
+
+ Client: The client does the following:
+
+ - vanilla invocations
+ - sets private connection
+ - vanilla invocations
+ - reset
+
+ - sets client protocols
+ - vanilla invocations
+ - sets private connection
+ - vanilla invocations
+ - reset
+
+ - set bands
+ - priority invocations
+ - sets private connection
+ - priority invocations
+ - reset
+
+ - set bands
+ - sets client protocols
+ - priority invocations
+ - sets private connection
+ - priority invocations
+ - reset
+
+ Client: The client starts off by making vanilla invocations on
+ the server. It then sets client protocols policies and repeats
+ the invocations. After this, the client protocols policies are
+ reset. Then the priority bands are set and priority based
+ invocations are made. Then the client protocols policies are
+ reset and the priority based invocations are repeated. Finally,
+ the client protocols policies are reset.
+
+ This test can be configured in several ways (72 to be precise)
+ as documented in the README file.
+
+ The following files were added:
+
+ - Makefile
+ - Makefile.bor
+ - Profile_And_Endpoint_Selection.dsw
+ - README
+ - bands
+ - client.bor
+ - client.cpp
+ - client.dsp
+ - empty_file
+ - iiop
+ - iiop_shmiop
+ - invocation_priorities
+ - lanes
+ - run_test.pl
+ - server.bor
+ - server.cpp
+ - server.dsp
+ - shmiop
+ - shmiop_iiop
+ - svc.conf
+ - test.idl
+
+ The following files were updated:
+
+ - tests/RTCORBA/Makefile
+ - tests/RTCORBA/Makefile.bor
+ - tests/RTCORBA/RTCORBA_tests.dsw
+ - $ACE_ROOT/bin/auto_run_tests.lst
+
+ * tests/RTCORBA/common_args.cpp: New files replaces
+ tests/RTCORBA/Linear_Priority/readers.cpp since it had reusable
+ code that is now also used by the Profile_And_Endpoint_Selection
+ test.
+
+ * tests/RTCORBA/Linear_Priority/client.cpp:
+ * tests/RTCORBA/Linear_Priority/server.cpp:
+
+ Updated to use the new tests/RTCORBA/common_args.cpp parsing
+ code.
+
Sat Jun 29 06:34:29 2002 Balachandran Natarajan <bala@cs.wustl.edu>
* tao/Typecode.cpp (member_visibility): Fixed compilation errors
diff --git a/TAO/docs/Options.html b/TAO/docs/Options.html
index c9730c2472b..218c5b120be 100644
--- a/TAO/docs/Options.html
+++ b/TAO/docs/Options.html
@@ -408,6 +408,33 @@ the ORB.
</TD>
</TR>
+ <TR>
+ <TD><CODE>-ORBSingleReadOptimization</CODE> <EM>boolean (0|1)</EM></TD>
+
+ <TD><A name=-ORBSingleReadOptimization></A>This option controls
+ single read optimzations when reading requests. If this option is
+ off, the ORB will do two reads to read a request. One to read the
+ request header and the other to read the request payload. If this
+ option is on, the ORB will do a read of size
+ <EM>TAO_MAXBUFSIZE</EM>, hoping to read the entire request.
+ However, in this case, there is a chance of reading more than one
+ request. If any additional requests have been read, they are
+ queued up for processing later.<p>
+
+ This option defaults to <EM>1</EM> because it can provide better
+ performance since one less read is performed. However, in the
+ case of RT-CORBA, this option should be set to <EM>0</EM>.
+ Consider the following scenario: two requests are read from one
+ socket; the additional request is queued; a Reactor notify is
+ dispatch to awake a follower threads; at this time, new requests
+ arrive on others sockets of higher priority; however, since
+ notifies are given preferences over normal I/O, the lower priority
+ queued message will be processed before the newly arrived higher
+ priority request.
+
+ </TD>
+ </TR>
+
</TABLE>
</P>
</blockquote>
diff --git a/TAO/tao/Default_Endpoint_Selector_Factory.cpp b/TAO/tao/Default_Endpoint_Selector_Factory.cpp
index 3a086060af3..efe9300f4ba 100644
--- a/TAO/tao/Default_Endpoint_Selector_Factory.cpp
+++ b/TAO/tao/Default_Endpoint_Selector_Factory.cpp
@@ -24,7 +24,7 @@ TAO_Default_Endpoint_Selector_Factory::~TAO_Default_Endpoint_Selector_Factory (v
TAO_Invocation_Endpoint_Selector *
TAO_Default_Endpoint_Selector_Factory::get_selector (TAO_GIOP_Invocation *
- ACE_ENV_ARG_DECL_NOT_USED)
+ ACE_ENV_ARG_DECL_NOT_USED)
{
// Trivial endpoint selector. Just return the default selector.
return this->default_endpoint_selector_;
@@ -39,4 +39,3 @@ ACE_STATIC_SVC_DEFINE (TAO_Default_Endpoint_Selector_Factory,
ACE_Service_Type::DELETE_THIS | ACE_Service_Type::DELETE_OBJ,
0)
ACE_FACTORY_DEFINE (TAO, TAO_Default_Endpoint_Selector_Factory)
-
diff --git a/TAO/tao/Default_Protocols_Hooks.cpp b/TAO/tao/Default_Protocols_Hooks.cpp
index 2abb615e29a..0ef3d79a2e6 100644
--- a/TAO/tao/Default_Protocols_Hooks.cpp
+++ b/TAO/tao/Default_Protocols_Hooks.cpp
@@ -58,7 +58,7 @@ TAO_Default_Protocols_Hooks::get_selector_hook (CORBA::Policy *,
void
TAO_Default_Protocols_Hooks::get_selector_bands_policy_hook (CORBA::Policy *,
- CORBA::Short &,
+ CORBA::Short,
CORBA::Short &,
CORBA::Short &,
int &)
diff --git a/TAO/tao/Default_Protocols_Hooks.h b/TAO/tao/Default_Protocols_Hooks.h
index 178777669e5..a215671c425 100644
--- a/TAO/tao/Default_Protocols_Hooks.h
+++ b/TAO/tao/Default_Protocols_Hooks.h
@@ -58,9 +58,9 @@ public:
CORBA::Short &server_priority);
virtual void get_selector_bands_policy_hook (CORBA::Policy *bands_policy,
+ CORBA::Short p,
CORBA::Short &min_priority,
CORBA::Short &max_priority,
- CORBA::Short &p,
int &in_range);
virtual int get_thread_CORBA_priority (CORBA::Short &
diff --git a/TAO/tao/GIOP_Message_Base.cpp b/TAO/tao/GIOP_Message_Base.cpp
index 1c65d8618b9..7e89fce4ba5 100644
--- a/TAO/tao/GIOP_Message_Base.cpp
+++ b/TAO/tao/GIOP_Message_Base.cpp
@@ -1532,3 +1532,9 @@ TAO_GIOP_Message_Base::make_queued_data (size_t sz)
return qd;
}
+
+size_t
+TAO_GIOP_Message_Base::header_length (void) const
+{
+ return TAO_GIOP_MESSAGE_HEADER_LEN;
+}
diff --git a/TAO/tao/GIOP_Message_Base.h b/TAO/tao/GIOP_Message_Base.h
index 44b0feeefba..1ed66ef6b70 100644
--- a/TAO/tao/GIOP_Message_Base.h
+++ b/TAO/tao/GIOP_Message_Base.h
@@ -139,6 +139,9 @@ public:
CORBA::Exception &x
);
+ /// Header length
+ virtual size_t header_length (void) const;
+
protected:
/// Processes the <GIOP_REQUEST> messages
diff --git a/TAO/tao/GIOP_Message_Lite.cpp b/TAO/tao/GIOP_Message_Lite.cpp
index 14747f1d897..6395e1afa27 100644
--- a/TAO/tao/GIOP_Message_Lite.cpp
+++ b/TAO/tao/GIOP_Message_Lite.cpp
@@ -1643,3 +1643,9 @@ TAO_GIOP_Message_Lite::is_ready_for_bidirectional (TAO_OutputCDR & )
// No we dont support..
return 0;
}
+
+size_t
+TAO_GIOP_Message_Lite::header_length (void) const
+{
+ return TAO_GIOP_LITE_HEADER_LEN;
+}
diff --git a/TAO/tao/GIOP_Message_Lite.h b/TAO/tao/GIOP_Message_Lite.h
index e13a8078b4e..afe78e63136 100644
--- a/TAO/tao/GIOP_Message_Lite.h
+++ b/TAO/tao/GIOP_Message_Lite.h
@@ -45,7 +45,7 @@ public:
/// Constructor
TAO_GIOP_Message_Lite (TAO_ORB_Core *orb_core,
- size_t input_cdr_size = ACE_CDR::DEFAULT_BUFSIZE);
+ size_t input_cdr_size = ACE_CDR::DEFAULT_BUFSIZE);
/// Dtor
virtual ~TAO_GIOP_Message_Lite (void);
@@ -59,8 +59,8 @@ public:
/// Write the RequestHeader in to the <cdr> stream. The underlying
/// implementation of the mesaging should do the right thing.
virtual int generate_request_header (TAO_Operation_Details &op,
- TAO_Target_Specification &spec,
- TAO_OutputCDR &cdr);
+ TAO_Target_Specification &spec,
+ TAO_OutputCDR &cdr);
/// Write the RequestHeader in to the <cdr> stream.
virtual int generate_locate_request_header (
@@ -76,8 +76,8 @@ public:
/// Dummy method to ..
virtual int read_message (TAO_Transport *transport,
- int block = 0,
- ACE_Time_Value *max_wait_time = 0);
+ int block = 0,
+ ACE_Time_Value *max_wait_time = 0);
/// Format the message. As we have not written the message length in
@@ -106,23 +106,23 @@ public:
* 0 if there are no more messages in <incoming>.
*/
virtual int extract_next_message (ACE_Message_Block &incoming,
- TAO_Queued_Data *&qd);
+ TAO_Queued_Data *&qd);
/// Check whether the node <qd> needs consolidation from <incoming>
virtual int consolidate_node (TAO_Queued_Data *qd,
- ACE_Message_Block &incoming);
+ ACE_Message_Block &incoming);
/// Get the details of the message parsed through the <qd>.
virtual void get_message_data (TAO_Queued_Data *qd);
/// @@Bala: Docu???
virtual int consolidate_fragments (TAO_Queued_Data *dqd,
- const TAO_Queued_Data *sqd);
+ const TAO_Queued_Data *sqd);
/// Process the request message that we have received on the
/// connection
virtual int process_request_message (TAO_Transport *transport,
- TAO_Queued_Data *qd);
+ TAO_Queued_Data *qd);
/// Parse the reply message that we received and return the reply
/// information though <reply_info>
@@ -143,47 +143,47 @@ private:
/// NOTE: If the GIOP header happens to change in the future, we can
/// push this method in to the generator_parser classes.
int write_protocol_header (TAO_GIOP_Message_Type t,
- TAO_OutputCDR &msg);
+ TAO_OutputCDR &msg);
/// Processes the <GIOP_REQUEST> messages
int process_request (TAO_Transport *transport,
- TAO_InputCDR &input,
- TAO_OutputCDR &output);
+ TAO_InputCDR &input,
+ TAO_OutputCDR &output);
/// Processes the <GIOP_LOCATE_REQUEST> messages
int process_locate_request (TAO_Transport *transport,
- TAO_InputCDR &input,
- TAO_OutputCDR &output);
+ TAO_InputCDR &input,
+ TAO_OutputCDR &output);
/// Make a <GIOP_LOCATEREPLY> and hand that over to the transport so
/// that it can be sent over the connection.
/// NOTE:As on date 1.1 & 1.2 seem to have similar headers. Till an
/// unmanageable difference comes let them be implemented here.
int make_send_locate_reply (TAO_Transport *transport,
- TAO_OutputCDR &output,
- TAO_GIOP_Locate_Request_Header &request,
- TAO_GIOP_Locate_Status_Msg &status);
+ TAO_OutputCDR &output,
+ TAO_GIOP_Locate_Request_Header &request,
+ TAO_GIOP_Locate_Status_Msg &status);
/// Send error messages
int send_error (TAO_Transport *transport);
/// Close a connection, first sending GIOP::CloseConnection.
void send_close_connection (const TAO_GIOP_Message_Version &version,
- TAO_Transport *transport,
- void *ctx);
+ TAO_Transport *transport,
+ void *ctx);
/// We must send a LocateReply through <transport>, this request
/// resulted in some kind of exception.
int send_reply_exception (TAO_Transport *transport,
- TAO_ORB_Core* orb_core,
- CORBA::ULong request_id,
- IOP::ServiceContextList *svc_info,
- CORBA::Exception *x);
+ TAO_ORB_Core* orb_core,
+ CORBA::ULong request_id,
+ IOP::ServiceContextList *svc_info,
+ CORBA::Exception *x);
/// Print out a debug messages..
void dump_msg (const char *label,
- const u_char *ptr,
- size_t len);
+ const u_char *ptr,
+ size_t len);
TAO_Queued_Data *make_queued_data (size_t sz);
@@ -196,6 +196,9 @@ private:
/// request/response?
virtual int is_ready_for_bidirectional (TAO_OutputCDR &msg);
+ /// Header length
+ virtual size_t header_length (void) const;
+
private:
/// Write the request header in to <msg>
@@ -234,11 +237,11 @@ private:
/// Parse the reply message
int parse_reply (TAO_InputCDR &input,
- TAO_Pluggable_Reply_Params &params);
+ TAO_Pluggable_Reply_Params &params);
/// Parse the locate reply message from the server
int parse_locate_reply (TAO_InputCDR &input,
- TAO_Pluggable_Reply_Params &params);
+ TAO_Pluggable_Reply_Params &params);
private:
@@ -246,7 +249,7 @@ private:
TAO_ORB_Core *orb_core_;
/// The message type that we are going to process..
- CORBA::Octet message_type_;
+ CORBA::Octet message_type_;
/// The pay load size
CORBA::ULong message_size_;
diff --git a/TAO/tao/IIOP_Endpoint.cpp b/TAO/tao/IIOP_Endpoint.cpp
index 55cc2626a5d..ccb4521349f 100644
--- a/TAO/tao/IIOP_Endpoint.cpp
+++ b/TAO/tao/IIOP_Endpoint.cpp
@@ -17,7 +17,7 @@ TAO_IIOP_Endpoint::TAO_IIOP_Endpoint (const ACE_INET_Addr &addr,
host_ (),
port_ (683), // default port (IANA assigned)
object_addr_ (addr),
- /* hint_ (0), */
+ object_addr_set_ (0),
next_ (0)
{
this->set (addr, use_dotted_decimal_addresses);
@@ -30,13 +30,11 @@ TAO_IIOP_Endpoint::TAO_IIOP_Endpoint (const char *host,
host_ (),
port_ (port),
object_addr_ (addr),
- /* hint_ (0), */
+ object_addr_set_ (0),
next_ (0)
{
if (host != 0)
this->host_ = host;
-
- this->object_addr_.set_type (-1);
}
TAO_IIOP_Endpoint::TAO_IIOP_Endpoint (void)
@@ -44,10 +42,9 @@ TAO_IIOP_Endpoint::TAO_IIOP_Endpoint (void)
host_ (),
port_ (683), // default port (IANA assigned)
object_addr_ (),
- /* hint_ (0), */
+ object_addr_set_ (0),
next_ (0)
{
- this->object_addr_.set_type (-1);
}
TAO_IIOP_Endpoint::TAO_IIOP_Endpoint (const char *host,
@@ -57,19 +54,17 @@ TAO_IIOP_Endpoint::TAO_IIOP_Endpoint (const char *host,
host_ (),
port_ (port),
object_addr_ (),
- /* hint_ (0),*/
+ object_addr_set_ (0),
next_ (0)
{
if (host != 0)
this->host_ = host;
- this->object_addr_.set_type (-1);
this->priority (priority);
}
TAO_IIOP_Endpoint::~TAO_IIOP_Endpoint (void)
{
-
}
int
diff --git a/TAO/tao/IIOP_Endpoint.h b/TAO/tao/IIOP_Endpoint.h
index cd9905d5f46..451ccd78bbf 100644
--- a/TAO/tao/IIOP_Endpoint.h
+++ b/TAO/tao/IIOP_Endpoint.h
@@ -126,6 +126,9 @@ private:
/// invocations, etc.
ACE_INET_Addr object_addr_;
+ /// Flag to indicate if the address has been resolved and set.
+ int object_addr_set_;
+
/// IIOP Endpoints can be stringed into a list. Return the next
/// endpoint in the list, if any.
TAO_IIOP_Endpoint *next_;
diff --git a/TAO/tao/IIOP_Endpoint.i b/TAO/tao/IIOP_Endpoint.i
index 9f408752b4a..ab8738e58d2 100644
--- a/TAO/tao/IIOP_Endpoint.i
+++ b/TAO/tao/IIOP_Endpoint.i
@@ -11,7 +11,7 @@ TAO_IIOP_Endpoint::object_addr (void) const
// ...etc..
// Double checked locking optimization.
- if (this->object_addr_.get_type () != AF_INET)
+ if (!this->object_addr_set_)
{
// We need to modify the object_addr_ in this method. Do so
// using a non-const copy of the <this> pointer.
@@ -23,18 +23,25 @@ TAO_IIOP_Endpoint::object_addr (void) const
endpoint->addr_lookup_lock_,
this->object_addr_ );
- if (this->object_addr_.get_type () != AF_INET
- && endpoint->object_addr_.set (this->port_,
- this->host_.in ()) == -1)
+ if (!this->object_addr_set_)
{
- // If this call fails, it most likely due a hostname lookup
- // failure caused by a DNS misconfiguration. If a request
- // is made to the object at the given host and port, then a
- // CORBA::TRANSIENT() exception should be thrown.
-
- // Invalidate the ACE_INET_Addr. This is used as a flag to
- // denote that ACE_INET_Addr initialization failed.
- endpoint->object_addr_.set_type (-1);
+ if (endpoint->object_addr_.set (this->port_,
+ this->host_.in ()) == -1)
+ {
+ // If this call fails, it most likely due a hostname
+ // lookup failure caused by a DNS misconfiguration. If
+ // a request is made to the object at the given host and
+ // port, then a CORBA::TRANSIENT() exception should be
+ // thrown.
+
+ // Invalidate the ACE_INET_Addr. This is used as a flag
+ // to denote that ACE_INET_Addr initialization failed.
+ endpoint->object_addr_.set_type (-1);
+ }
+ else
+ {
+ endpoint->object_addr_set_ = 1;
+ }
}
}
diff --git a/TAO/tao/Invocation_Endpoint_Selectors.cpp b/TAO/tao/Invocation_Endpoint_Selectors.cpp
index 352500faa06..35d0c7a518d 100644
--- a/TAO/tao/Invocation_Endpoint_Selectors.cpp
+++ b/TAO/tao/Invocation_Endpoint_Selectors.cpp
@@ -59,17 +59,6 @@ TAO_Default_Endpoint_Selector::select_endpoint (
CORBA::COMPLETED_NO));
}
-// @@ RTCORBA_Subsetting - next should be deprecated...
-void
-TAO_Default_Endpoint_Selector::next (TAO_GIOP_Invocation *
- ACE_ENV_ARG_DECL_NOT_USED)
-{
- ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("This method is DEPRECATED!\n")));
- // if (invocation->stub_->next_profile_retry () == 0)
- // ACE_THROW (CORBA::TRANSIENT (TAO_OMG_VMCID | 2,
- // CORBA::COMPLETED_NO));
-}
-
void
TAO_Default_Endpoint_Selector::forward (TAO_GIOP_Invocation *invocation,
const TAO_MProfile &mprofile
diff --git a/TAO/tao/Invocation_Endpoint_Selectors.h b/TAO/tao/Invocation_Endpoint_Selectors.h
index 3448d00e9b6..6701bce3e05 100644
--- a/TAO/tao/Invocation_Endpoint_Selectors.h
+++ b/TAO/tao/Invocation_Endpoint_Selectors.h
@@ -56,15 +56,6 @@ public:
ACE_ENV_ARG_DECL_WITH_DEFAULTS) = 0;
/**
- * This method must be called when previously selected endpoint
- * didn't work out, and we want to try another one, i.e., reselect.
- * This method performs the necessary state updates, so that next
- * <select_endpoint> call picks a new endpoint.
- */
- virtual void next (TAO_GIOP_Invocation *invocation
- ACE_ENV_ARG_DECL_WITH_DEFAULTS) = 0;
-
- /**
* This method must be called if the invocation attempt on a
* selected endpoint resulted in location forward. This method
* performs the necessary state updates, so that next <select_endpoint>
@@ -108,20 +99,18 @@ public:
virtual ~TAO_Default_Endpoint_Selector (void);
virtual void select_endpoint (TAO_GIOP_Invocation *invocation
- ACE_ENV_ARG_DECL_WITH_DEFAULTS);
- virtual void next (TAO_GIOP_Invocation *invocation
- ACE_ENV_ARG_DECL_WITH_DEFAULTS);
+ ACE_ENV_ARG_DECL);
virtual void forward (TAO_GIOP_Invocation *invocation,
const TAO_MProfile &mprofile
- ACE_ENV_ARG_DECL_WITH_DEFAULTS);
+ ACE_ENV_ARG_DECL);
virtual void success (TAO_GIOP_Invocation *invocation);
virtual void close_connection (TAO_GIOP_Invocation *invocation);
protected:
/// This method selects an endpoint from the profile in the
/// invocation object.
- int endpoint_from_profile (TAO_GIOP_Invocation *invocation
- ACE_ENV_ARG_DECL);
+ virtual int endpoint_from_profile (TAO_GIOP_Invocation *invocation
+ ACE_ENV_ARG_DECL);
};
#if defined (__ACE_INLINE__)
diff --git a/TAO/tao/ORB_Core.cpp b/TAO/tao/ORB_Core.cpp
index 284fcbb89d9..e636d96c696 100644
--- a/TAO/tao/ORB_Core.cpp
+++ b/TAO/tao/ORB_Core.cpp
@@ -780,6 +780,14 @@ TAO_ORB_Core::init (int &argc, char *argv[] ACE_ENV_ARG_DECL)
ACE_THROW_RETURN (CORBA::NO_IMPLEMENT (), -1);
}
+ else if ((current_arg = arg_shifter.get_the_parameter
+ (ACE_LIB_TEXT("-ORBSingleReadOptimization"))))
+ {
+ this->orb_params ()->single_read_optimization
+ (ACE_OS::atoi (current_arg));
+
+ arg_shifter.consume_arg ();
+ }
////////////////////////////////////////////////////////////////
// catch any unknown -ORB args //
////////////////////////////////////////////////////////////////
diff --git a/TAO/tao/Pluggable_Messaging.h b/TAO/tao/Pluggable_Messaging.h
index 8edfcc69027..875429df5c1 100644
--- a/TAO/tao/Pluggable_Messaging.h
+++ b/TAO/tao/Pluggable_Messaging.h
@@ -36,7 +36,7 @@ class TAO_Queued_Data;
// @@ The more I think I about this class, I feel that this class need
// not be a ABC as it is now. Instead we have these options
// (1) Parametrize this class with the "Messaging Object". Then the
-// implementations can just redirect the request to the class
+// implementations can just redirect the request to the class
// that it has been specialised with
// (2) Use a bridge pattern here ie. the interface exposed by this
// class will redirect the request to the implementation which
@@ -102,8 +102,8 @@ public:
* number of bytes that needs to be read from the connection.
*/
virtual int read_message (TAO_Transport *transport,
- int block = 0,
- ACE_Time_Value *max_wait_time = 0) = 0;
+ int block = 0,
+ ACE_Time_Value *max_wait_time = 0) = 0;
/// Format the message in the <cdr>. May not be needed in
/// general.
@@ -111,7 +111,7 @@ public:
/// Do any initialisations that may be needed.
virtual void init (CORBA::Octet major,
- CORBA::Octet minor) = 0;
+ CORBA::Octet minor) = 0;
/// Parse the incoming messages..
virtual int parse_incoming_messages (ACE_Message_Block &message_block) = 0;
@@ -128,20 +128,20 @@ public:
* 0 if there are no more messages in <incoming>.
*/
virtual int extract_next_message (ACE_Message_Block &incoming,
- TAO_Queued_Data *&qd) = 0;
+ TAO_Queued_Data *&qd) = 0;
/// Check whether the node <qd> needs consolidation from <incoming>
virtual int consolidate_node (TAO_Queued_Data *qd,
- ACE_Message_Block &incoming) = 0;
+ ACE_Message_Block &incoming) = 0;
/// @@Bala:Docu??
virtual int consolidate_fragments (TAO_Queued_Data *dqd,
- const TAO_Queued_Data *sqd) = 0;
+ const TAO_Queued_Data *sqd) = 0;
/// Parse the request message, make an upcall and send the reply back
/// to the "request initiator"
virtual int process_request_message (TAO_Transport *transport,
- TAO_Queued_Data *qd) = 0;
+ TAO_Queued_Data *qd) = 0;
/// Parse the reply message that we received and return the reply
@@ -163,6 +163,9 @@ public:
/// Reset the messaging the object
virtual void reset (void) = 0;
+
+ /// Header length
+ virtual size_t header_length (void) const = 0;
};
#if defined (__ACE_INLINE__)
diff --git a/TAO/tao/Protocols_Hooks.h b/TAO/tao/Protocols_Hooks.h
index 435c9bac814..0b7e2069954 100644
--- a/TAO/tao/Protocols_Hooks.h
+++ b/TAO/tao/Protocols_Hooks.h
@@ -66,9 +66,9 @@ public:
CORBA::Short &server_priority) = 0;
virtual void get_selector_bands_policy_hook (CORBA::Policy *bands_policy,
+ CORBA::Short priority,
CORBA::Short &min_priority,
CORBA::Short &max_priority,
- CORBA::Short &p,
int &in_range) = 0;
/**
diff --git a/TAO/tao/RTCORBA/RT_Endpoint_Selector_Factory.cpp b/TAO/tao/RTCORBA/RT_Endpoint_Selector_Factory.cpp
index 449ff38705b..541ac33ea80 100644
--- a/TAO/tao/RTCORBA/RT_Endpoint_Selector_Factory.cpp
+++ b/TAO/tao/RTCORBA/RT_Endpoint_Selector_Factory.cpp
@@ -14,166 +14,20 @@ ACE_RCSID (tao,
RT_Endpoint_Selector_Factory::RT_Endpoint_Selector_Factory (void)
{
- ACE_NEW (this->priority_endpoint_selector_,
- TAO_Priority_Endpoint_Selector);
-
- ACE_NEW (this->bands_endpoint_selector_,
- TAO_Bands_Endpoint_Selector);
-
- ACE_NEW (this->protocol_endpoint_selector_,
- TAO_Protocol_Endpoint_Selector);
-
- ACE_NEW (this->priority_protocol_selector_,
- TAO_Priority_Protocol_Selector);
-
- ACE_NEW (this->bands_protocol_selector_,
- TAO_Bands_Protocol_Selector);
-
- ACE_NEW (this->rt_default_endpoint_selector_,
- TAO_RT_Default_Endpoint_Selector);
+ ACE_NEW (this->rt_invocation_endpoint_selector_,
+ TAO_RT_Invocation_Endpoint_Selector);
}
RT_Endpoint_Selector_Factory::~RT_Endpoint_Selector_Factory (void)
{
- delete this->priority_endpoint_selector_;
- delete this->bands_endpoint_selector_;
- delete this->protocol_endpoint_selector_;
- delete this->priority_protocol_selector_;
- delete this->bands_protocol_selector_;
- delete this->rt_default_endpoint_selector_;
+ delete this->rt_invocation_endpoint_selector_;
}
TAO_Invocation_Endpoint_Selector *
RT_Endpoint_Selector_Factory::get_selector (TAO_GIOP_Invocation *invocation
- ACE_ENV_ARG_DECL)
-{
- // Initialize selection state with all RTCORBA policies affecting
- // endpoint selection.
-
- TAO_RT_Stub *rt_stub =
- ACE_dynamic_cast (TAO_RT_Stub *, invocation->stub ());
-
- if (rt_stub == 0)
- {
- ACE_DEBUG ((LM_DEBUG, "Unexpected error narrowing stub to TAO_RT_Stub"));
-
- ACE_THROW_RETURN (CORBA::INTERNAL (
- CORBA_SystemException::_tao_minor_code (
- TAO_DEFAULT_MINOR_CODE,
- EINVAL),
- CORBA::COMPLETED_NO),
- 0);
- }
-
- CORBA::Policy_var priority_model_policy =
- rt_stub->exposed_priority_model (ACE_ENV_SINGLE_ARG_PARAMETER);
- ACE_CHECK_RETURN (0);
-
- // state.private_connection_ =
- // rt_stub->private_connection ();
-
- CORBA::Policy_var client_protocol_policy =
- TAO_RT_Endpoint_Utils::client_protocol_policy (invocation ACE_ENV_ARG_PARAMETER);
- ACE_CHECK_RETURN (0);
-
- CORBA::Policy_var bands_policy = TAO_RT_Endpoint_Utils::priority_bands_policy (invocation ACE_ENV_ARG_PARAMETER);
- ACE_CHECK_RETURN (0);
-
- //
- // Look at RTCORBA policies to decide on appropriate selector.
- //
-
- // CASE 2: No PriorityModelPolicy set.
- if (priority_model_policy.ptr () == 0)
- {
- // Bands without priority model do not make sense.
- if (bands_policy.ptr () != 0)
- {
- if (invocation->inconsistent_policies ().ptr ())
- {
- invocation->inconsistent_policies ()->length (1);
- invocation->inconsistent_policies ()[0u] =
- CORBA::Policy::_duplicate (bands_policy.in ());
- }
- ACE_THROW_RETURN (CORBA::INV_POLICY (), 0);
- }
-
- if (client_protocol_policy.ptr () == 0)
- return this->rt_default_endpoint_selector_;
- else
- return this->protocol_endpoint_selector_;
- }
-
- // @@ This is to be used in case 3:
- CORBA::Short server_priority = 0;
- CORBA::Boolean is_client_propagated = 0;
-
- TAO_Protocols_Hooks *tph = invocation->orb_core ()->get_protocols_hooks (ACE_ENV_SINGLE_ARG_PARAMETER);
- ACE_CHECK_RETURN (0);
-
- tph->get_selector_hook (priority_model_policy.in (),
- is_client_propagated,
- server_priority);
-
- // CASE 3: PriorityBandedConnection Policy is set.
- if (bands_policy.ptr () != 0)
- {
- // Matching band found. Instantiate appropriate selector.
- if (client_protocol_policy.ptr () == 0)
- return this->bands_endpoint_selector_;
- else
- return this->bands_protocol_selector_;
- }
-
- // CASE 4: CLIENT_PROPAGATED priority model, no bands.
- if (is_client_propagated)
- {
- if (client_protocol_policy.ptr () == 0)
- return this->priority_endpoint_selector_;
- else
- return this->priority_protocol_selector_;
- }
- else
- {
- // CASE 5: SERVER_DECLARED priority model, no bands.
- if (client_protocol_policy.ptr () == 0)
- return this->rt_default_endpoint_selector_;
- else
- return this->protocol_endpoint_selector_;
- }
-}
-
-
-void
-RT_Endpoint_Selector_Factory::
-init_client_protocol (TAO_GIOP_Invocation *
- ACE_ENV_ARG_DECL_NOT_USED)
+ ACE_ENV_ARG_DECL)
{
- ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("RT_Endpoint_Selector_Factory:init_client_protocol - Is deprecated!")));
- /*
- TAO_RT_Stub *rt_stub =
- ACE_dynamic_cast (TAO_RT_Stub *, invocation->stub_);
-
- ACE_TRY
- {
- invocation->endpoint_selection_state_.client_protocol_policy_ =
- rt_stub->effective_client_protocol (ACE_ENV_SINGLE_ARG_PARAMETER);
- ACE_TRY_CHECK;
- }
- ACE_CATCH (CORBA::INV_POLICY, ex)
- {
- if (invocation->inconsistent_policies_.ptr ())
- {
- invocation->inconsistent_policies_->length (1);
- invocation->inconsistent_policies_[0u] =
- rt_stub->client_protocol ();
- }
- ACE_RE_THROW;
- }
- ACE_ENDTRY;
- ACE_CHECK;
-
- */
+ return this->rt_invocation_endpoint_selector_;
}
// ****************************************************************
diff --git a/TAO/tao/RTCORBA/RT_Endpoint_Selector_Factory.h b/TAO/tao/RTCORBA/RT_Endpoint_Selector_Factory.h
index d0d36a772c4..7aea8e82088 100644
--- a/TAO/tao/RTCORBA/RT_Endpoint_Selector_Factory.h
+++ b/TAO/tao/RTCORBA/RT_Endpoint_Selector_Factory.h
@@ -27,29 +27,22 @@
#include "tao/Endpoint_Selector_Factory.h"
#include "ace/Service_Config.h"
-class TAO_Priority_Endpoint_Selector;
-class TAO_Bands_Endpoint_Selector;
-class TAO_Protocol_Endpoint_Selector;
-class TAO_Priority_Protocol_Selector;
-class TAO_Bands_Protocol_Selector;
-class TAO_RT_Default_Endpoint_Selector;
+class TAO_RT_Invocation_Endpoint_Selector;
// ****************************************************************
/**
* @class RT_Endpoint_Selector_Factory
*
- * @brief Factory for initializing <Endpoint_Selection_State> and
- * obtaining appropriate <Invocation_Endpoint_Selector>.
+ * @brief Factory for obtaining appropriate <Invocation_Selector>.
*
* Used by Invocation classes to intialize its endpoint selection
- * strategy and state based on the effective policies.
- * Endpoint selection strategies are stateless objects - all the
- * state they need is contained by Invocation in
- * <Endpoint_Selection_State>. Thus, rather than allocating an
- * endpoint selection strategy object for each Invocation, the
- * factory simply returns the appropriate one from the
- * set preallocated in the ORB_Core. One endpoint selection
- * strategy object can be used by many invocations concurrently.
+ * strategy and state based on the effective policies. Endpoint
+ * selection strategies are stateless objects - all the state they
+ * need is contained by Invocation. Thus, rather than allocating an
+ * endpoint selection strategy object for each Invocation, the factory
+ * simply returns the appropriate one from the set preallocated in the
+ * ORB_Core. One endpoint selection strategy object can be used by
+ * many invocations concurrently.
*/
class TAO_RTCORBA_Export RT_Endpoint_Selector_Factory
: public TAO_Endpoint_Selector_Factory
@@ -63,34 +56,11 @@ public:
/// Get an Invocation's endpoint selection strategy and
/// initialize the endpoint selection state instance.
- virtual TAO_Invocation_Endpoint_Selector *get_selector (
- TAO_GIOP_Invocation *invocation
- ACE_ENV_ARG_DECL);
-
-protected:
-
- // = Helpers for <get_selector>.
-
- /// Initializes RTCORBA::ClientProtocolPolicy in the endpoint
- /// selection state.
- void init_client_protocol (TAO_GIOP_Invocation *invocation
- ACE_ENV_ARG_DECL);
-
- /// Initializes RTCORBA::PriorityBandsPolicy in the endpoint
- /// selection state.
- // void init_bands (TAO_GIOP_Invocation *invocation,
- // ACE_ENV_SINGLE_ARG_DECL);
+ virtual TAO_Invocation_Endpoint_Selector *get_selector (TAO_GIOP_Invocation *invocation
+ ACE_ENV_ARG_DECL);
private:
- /// The possible endpoint selector strategies that can be
- /// returned by this factory
-
- TAO_RT_Default_Endpoint_Selector *rt_default_endpoint_selector_;
- TAO_Priority_Endpoint_Selector *priority_endpoint_selector_;
- TAO_Bands_Endpoint_Selector *bands_endpoint_selector_;
- TAO_Protocol_Endpoint_Selector *protocol_endpoint_selector_;
- TAO_Priority_Protocol_Selector *priority_protocol_selector_;
- TAO_Bands_Protocol_Selector *bands_protocol_selector_;
+ TAO_RT_Invocation_Endpoint_Selector *rt_invocation_endpoint_selector_;
};
ACE_STATIC_SVC_DECLARE_EXPORT (TAO_RTCORBA, RT_Endpoint_Selector_Factory)
diff --git a/TAO/tao/RTCORBA/RT_Invocation_Endpoint_Selectors.cpp b/TAO/tao/RTCORBA/RT_Invocation_Endpoint_Selectors.cpp
index 34a3236e2d8..ce4264caffa 100644
--- a/TAO/tao/RTCORBA/RT_Invocation_Endpoint_Selectors.cpp
+++ b/TAO/tao/RTCORBA/RT_Invocation_Endpoint_Selectors.cpp
@@ -20,544 +20,308 @@
ACE_RCSID(tao, RT_Invocation_Endpoint_Selectors, "$Id$")
-// ****************************************************************
-
void
-TAO_RT_Default_Endpoint_Selector::select_endpoint (TAO_GIOP_Invocation *invocation
- ACE_ENV_ARG_DECL)
+TAO_RT_Invocation_Endpoint_Selector::select_endpoint (TAO_GIOP_Invocation *invocation
+ ACE_ENV_ARG_DECL)
{
- TAO_RT_Stub *rt_stub =
- ACE_dynamic_cast (TAO_RT_Stub *,
- invocation->stub ());
+ CORBA::Policy_var client_protocol_policy_base =
+ TAO_RT_Endpoint_Utils::client_protocol_policy (invocation ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK_RETURN (0);
- do
+ if (client_protocol_policy_base.ptr () == 0)
{
- invocation->profile (invocation->stub ()->profile_in_use ());
- invocation->endpoint (invocation->profile ()->endpoint ());
-
- // If known endpoint, select it.
- if (invocation->endpoint () != 0)
- {
- int status;
- if (rt_stub->private_connection ())
- {
- TAO_Private_Transport_Descriptor private_desc (invocation->endpoint (),
- ACE_reinterpret_cast (long, invocation->stub ()));
-
- status = invocation->perform_call (private_desc ACE_ENV_ARG_PARAMETER);
- ACE_CHECK;
- }
- else
- {
- TAO_Base_Transport_Property default_desc (invocation->endpoint ());
-
- status = invocation->perform_call (default_desc ACE_ENV_ARG_PARAMETER);
- ACE_CHECK;
- }
-
- // Check if the invocation has completed.
- if (status == 1)
- return;
- }
+ this->TAO_Default_Endpoint_Selector::select_endpoint (invocation
+ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK;
}
- while (invocation->stub ()->next_profile_retry () != 0);
+ else
+ {
+ RTCORBA::ClientProtocolPolicy_var client_protocol_policy =
+ RTCORBA::ClientProtocolPolicy::_narrow (client_protocol_policy_base.in ()
+ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK;
- // If we get here, we completely failed to find an endpoint selector
- // that we know how to use, so throw an exception.
- ACE_THROW (CORBA::TRANSIENT (TAO_OMG_VMCID | 2,
- CORBA::COMPLETED_NO));
-}
+ /// Cast to TAO_ClientProtocolPolicy
+ TAO_ClientProtocolPolicy *tao_client_protocol_policy =
+ ACE_static_cast (TAO_ClientProtocolPolicy *,
+ client_protocol_policy.in ());
-// ****************************************************************
+ /// Get the ProtocolList
+ RTCORBA::ProtocolList &client_protocols =
+ tao_client_protocol_policy->protocols_rep ();
-TAO_Priority_Endpoint_Selector::~TAO_Priority_Endpoint_Selector (void)
-{
+ this->select_endpoint_based_on_client_protocol_policy (invocation,
+ client_protocol_policy,
+ client_protocols
+ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK;
+ }
}
void
-TAO_Priority_Endpoint_Selector::select_endpoint (TAO_GIOP_Invocation *invocation
- ACE_ENV_ARG_DECL)
+TAO_RT_Invocation_Endpoint_Selector::select_endpoint_based_on_client_protocol_policy (TAO_GIOP_Invocation *invocation,
+ RTCORBA::ClientProtocolPolicy_ptr client_protocol_policy,
+ RTCORBA::ProtocolList &client_protocols
+ ACE_ENV_ARG_DECL)
{
- TAO_RT_Stub *rt_stub = ACE_dynamic_cast (TAO_RT_Stub *,
- invocation->stub ());
- CORBA::Short client_priority;
-
- // Get client priority.
- TAO_Protocols_Hooks *tph = invocation->orb_core ()->get_protocols_hooks (ACE_ENV_SINGLE_ARG_PARAMETER);
- ACE_CHECK;
-
- if (tph->get_thread_CORBA_priority (client_priority
- ACE_ENV_ARG_PARAMETER)
- == -1)
- ACE_THROW (CORBA::DATA_CONVERSION (1,
- CORBA::COMPLETED_NO));
-
- do
+ CORBA::Boolean valid_profile_found = 0;
+
+ // Even though cycling through all the protocols is the correct
+ // things to do to find a match, starting from the start of the
+ // profile list is not. In addition, this code is also ignoring the
+ // forwarded reference (if it exists). This behavior is caused by
+ // problems with the profile management in TAO which are documented
+ // in bugzilla bugs 1237, 1238, and 1239. Once the above problems
+ // are fixed, this behavior should be fixed to do the right thing.
+ for (CORBA::ULong protocol_index = 0;
+ protocol_index < client_protocols.length ();
+ ++protocol_index)
{
- // Obtain profile.
- invocation->profile (invocation->stub ()->profile_in_use ());
-
- // Select an endpoint from the profile.
-
- if (invocation->profile ()->endpoint_count () == 0)
- {
- // Unknown protocol - move onto the next profile.
- continue;
- }
+ // Find the profiles that match the current protocol.
+ TAO_Profile *profile = 0;
+ TAO_MProfile &mprofile = invocation->stub ()->base_profiles ();
- else if (invocation->profile ()->endpoint_count () == 1)
- {
- // Profile contains just one endpoint. This happens when:
- // a) we are talking to a nonTAO server (which doesn't have
- // the concept of multiple endpoints per profile)
- // or
- // b) we have TAO server with a non-lane threadpool, in which
- // case there is only one acceptor
- // In both cases we should use the endpoint regardless of its priority.
- invocation->endpoint (invocation->profile ()->endpoint ());
- }
- else
+ for (TAO_PHandle i = 0;
+ i < mprofile.profile_count ();
+ ++i)
{
- // Profiles contains more than one endpoint. Find one with the
- // right priority.
+ profile = mprofile.get_profile (i);
- TAO_Endpoint *endpoint = 0;
- for (TAO_Endpoint *endp = invocation->profile ()->endpoint ();
- endp != 0;
- endp = endp->next ())
+ if (profile->tag () == client_protocols[protocol_index].protocol_type)
{
- if (endp->priority () == client_priority)
- {
- endpoint = endp;
- break;
- }
- }
+ valid_profile_found = 1;
- if (endpoint != 0)
- {
- // Found an Endpoint with correct priority.
- invocation->endpoint (endpoint);
- }
- else
- {
- // The profile didn't contain an endpoint with matching priority.
- // There are two possibilities:
- // a) the server is a multi-homed host and this is the
- // only reason for profile containing more than 1
- // endpoint, i.e., case a) above.
- // b) we have misconfiguration - threadpool with lanes on
- // the server, and client priority not matching any of
- // the lanes.
- if (this->is_multihomed (invocation->profile ()->endpoint ()))
- {
- // case a
- invocation->endpoint (invocation->profile ()->endpoint ());
- }
- else
- // case b
- {
- if (invocation->inconsistent_policies ().ptr ())
- {
- CORBA::Policy_var priority_model_policy = rt_stub->exposed_priority_model (ACE_ENV_SINGLE_ARG_PARAMETER);
- ACE_CHECK;
+ invocation->profile (profile);
+ invocation->endpoint (invocation->profile ()->endpoint ());
- invocation->inconsistent_policies ()->length (1);
- invocation->inconsistent_policies ()[0u] =
- CORBA::Policy::_duplicate (priority_model_policy.in ());
- }
- ACE_THROW (CORBA::INV_POLICY ());
- }
+ int status =
+ this->endpoint_from_profile (invocation ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK;
+
+ if (status == 1)
+ return;
+ // @@ Else we should check for potential forwarding here.
}
}
+ }
- // Try to perform the invocation using this endpoint.
- int status;
- if (rt_stub->private_connection ())
- {
- TAO_Private_Transport_Descriptor private_desc (invocation->endpoint (),
- ACE_reinterpret_cast (long, invocation->stub ()));
-
- status = invocation->perform_call (private_desc ACE_ENV_ARG_PARAMETER);
- ACE_CHECK;
- }
- else
+ // We have tried all the profiles specified in the client protocol
+ // policy with no success. Throw exception.
+ if (!valid_profile_found)
+ {
+ if (invocation->inconsistent_policies ().ptr ())
{
- TAO_Base_Transport_Property default_desc (invocation->endpoint ());
-
- status = invocation->perform_call (default_desc ACE_ENV_ARG_PARAMETER);
- ACE_CHECK;
+ invocation->inconsistent_policies ()->length (1);
+ invocation->inconsistent_policies ()[0u] =
+ CORBA::Policy::_duplicate (client_protocol_policy);
}
-
- // Check if the invocation has completed.
- if (status == 1)
- return;
+ ACE_THROW (CORBA::INV_POLICY ());
}
- while (invocation->stub ()->next_profile_retry () != 0);
- // If we get here, we completely failed to find an endpoint selector
- // that we know how to use, so throw an exception.
+ // If we get here, we found at least one pertinent profile, but no
+ // usable endpoints.
ACE_THROW (CORBA::TRANSIENT (TAO_OMG_VMCID | 2,
CORBA::COMPLETED_NO));
}
int
-TAO_Priority_Endpoint_Selector::is_multihomed (TAO_Endpoint *endpoint)
+TAO_RT_Invocation_Endpoint_Selector::endpoint_from_profile (TAO_GIOP_Invocation *invocation
+ ACE_ENV_ARG_DECL)
{
- for (TAO_Endpoint *endp = endpoint;
- endp != 0;
- endp = endp->next ())
+ // Narrow to the RT Stub.
+ TAO_RT_Stub *rt_stub =
+ ACE_dynamic_cast (TAO_RT_Stub *, invocation->stub ());
+
+ if (rt_stub == 0)
{
- if (endp->next () != 0
- && endp->priority () != endp->next ()->priority ())
- return 0;
+ ACE_DEBUG ((LM_DEBUG, "Unexpected error narrowing stub to TAO_RT_Stub"));
+
+ ACE_THROW_RETURN (CORBA::INTERNAL (
+ CORBA_SystemException::_tao_minor_code (
+ TAO_DEFAULT_MINOR_CODE,
+ EINVAL),
+ CORBA::COMPLETED_NO),
+ 0);
}
- return 1;
-}
-
-// ****************************************************************
-
-TAO_Bands_Endpoint_Selector::~TAO_Bands_Endpoint_Selector (void)
-{
-}
-void
-TAO_Bands_Endpoint_Selector::select_endpoint (TAO_GIOP_Invocation *invocation
- ACE_ENV_ARG_DECL)
-{
- TAO_RT_Stub *rt_stub = ACE_dynamic_cast (TAO_RT_Stub *,
- invocation->stub ());
- TAO_Protocols_Hooks *protocol_hooks =
- invocation->orb_core ()->get_protocols_hooks (ACE_ENV_SINGLE_ARG_PARAMETER);
- ACE_CHECK;
-
- CORBA::Policy_var bands_policy = TAO_RT_Endpoint_Utils::priority_bands_policy (invocation
- ACE_ENV_ARG_PARAMETER);
- ACE_CHECK;
-
- // Figure out target priority.
+ // Get the priority model policy.
CORBA::Policy_var priority_model_policy =
rt_stub->exposed_priority_model (ACE_ENV_SINGLE_ARG_PARAMETER);
- ACE_CHECK;
+ ACE_CHECK_RETURN (0);
- CORBA::Short server_priority = 0;
- CORBA::Boolean is_client_propagated = 0;
- protocol_hooks->get_selector_hook (
- priority_model_policy.in (), // input
- is_client_propagated, // side effect
- server_priority); // side effect
+ // Get the bands policy.
+ CORBA::Policy_var bands_policy =
+ TAO_RT_Endpoint_Utils::priority_bands_policy (invocation
+ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK;
+ int all_endpoints_are_valid = 0;
+ int match_priority = 0;
+ int match_bands = 0;
+ CORBA::Short client_thread_priority = 0;
+ CORBA::Short min_priority = 0;
+ CORBA::Short max_priority = 0;
- CORBA::Short p;
- if (is_client_propagated)
+ // If the priority model policy is not set.
+ if (priority_model_policy.ptr () == 0)
{
- // Get Client priority.
-
- int status =
- protocol_hooks->get_thread_CORBA_priority (p // side effect
- ACE_ENV_ARG_PARAMETER);
- ACE_CHECK;
- if (status == -1)
+ // Bands without priority model do not make sense.
+ if (bands_policy.ptr () != 0)
{
- ACE_THROW (CORBA::DATA_CONVERSION (1,
- CORBA::COMPLETED_NO));
+ if (invocation->inconsistent_policies ().ptr ())
+ {
+ invocation->inconsistent_policies ()->length (1);
+ invocation->inconsistent_policies ()[0u] =
+ CORBA::Policy::_duplicate (bands_policy.in ());
+ }
+ // Indicate error.
+ ACE_THROW_RETURN (CORBA::INV_POLICY (), 0);
}
+
+ // No priority model policy (and no bands policy): all endpoints
+ // are fair game.
+ all_endpoints_are_valid = 1;
}
+ // If the priority model policy is set.
else
- p = server_priority;
-
- int in_range = 0;
-
- CORBA::Short min_priority;
- CORBA::Short max_priority;
-
- protocol_hooks->get_selector_bands_policy_hook (bands_policy.in (),
- min_priority,
- max_priority,
- p,
- in_range);
-
- // If priority doesn't fall into any of the bands
- if (!in_range)
{
- if (invocation->inconsistent_policies ().ptr ())
- {
- invocation->inconsistent_policies ()->length (2);
- invocation->inconsistent_policies ()[0u] =
- CORBA::Policy::_duplicate (bands_policy.in ());
- invocation->inconsistent_policies ()[1u] =
- CORBA::Policy::_duplicate (priority_model_policy.in ());
- }
- ACE_THROW (CORBA::INV_POLICY ());
- }
+ // Get the protocol hooks.
+ TAO_Protocols_Hooks *protocol_hooks =
+ invocation->orb_core ()->get_protocols_hooks (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK_RETURN (0);
- do
- {
- // Obtain profile.
- invocation->profile (invocation->stub ()->profile_in_use ());
+ CORBA::Short server_priority = 0;
+ CORBA::Boolean is_client_propagated = 0;
- // Select an endpoint from the profile.
+ // Check the priority model policy to see if it is client
+ // propagated.
+ protocol_hooks->get_selector_hook (priority_model_policy.in (),
+ is_client_propagated,
+ server_priority);
- if (invocation->profile ()->endpoint_count () == 0)
+ if (!is_client_propagated)
{
- // Unknown protocol - move onto the next profile.
- continue;
- }
-
- else if (invocation->profile ()->endpoint_count () == 1)
- {
- // Profile contains just one endpoint. This happens when:
- // a) we are talking to a nonTAO server (which doesn't have
- // the concept of multiple endpoints per profile)
- // or
- // b) we have TAO server with a non-lane threadpool, in which
- // case there is only one acceptor
- // In both cases we should use the endpoint regardless of its priority.
- invocation->endpoint (invocation->profile ()->endpoint ());
+ // Server declared: all endpoints are fair game.
+ all_endpoints_are_valid = 1;
}
+ // Client propagated.
else
{
- // Profiles contains more than one endpoint. Find one with the
- // right priority.
-
- TAO_Endpoint *endpoint = 0;
- for (TAO_Endpoint *endp = invocation->profile ()->endpoint ();
- endp != 0;
- endp = endp->next ())
+ // Get client thread priority.
+ int status =
+ protocol_hooks->get_thread_CORBA_priority (client_thread_priority // side effect
+ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK;
+ if (status == -1)
{
- if (endp->priority () <= max_priority
- && endp->priority () >= min_priority)
- {
- if (TAO_debug_level > 1)
- {
- ACE_DEBUG ((LM_DEBUG,
- "(%P|%t) TAO Endpoint Selection: priority = %d, band = [%d %d], endpoint = %d\n",
- p,
- min_priority,
- max_priority,
- endp->priority ()));
- }
- endpoint = endp;
- break;
- }
- }
+ ACE_THROW (CORBA::DATA_CONVERSION (1,
+ CORBA::COMPLETED_NO));
+ }
- if (endpoint != 0)
+ // If there are no bands.
+ if (bands_policy.ptr () == 0)
{
- // Found an Endpoint with correct priority.
- invocation->endpoint (endpoint);
+ // Match the priority of the client thread with the
+ // endpoint.
+ match_priority = 1;
}
+ // There are bands.
else
{
- if (invocation->inconsistent_policies ().ptr ())
+ // Get the bands.
+ RTCORBA::PriorityBandedConnectionPolicy_var bands_policy_ptr =
+ RTCORBA::PriorityBandedConnectionPolicy::_narrow (bands_policy);
+
+ TAO_PriorityBandedConnectionPolicy *priority_bands_policy =
+ ACE_static_cast (TAO_PriorityBandedConnectionPolicy *,
+ bands_policy_ptr.in ());
+
+ RTCORBA::PriorityBands &bands =
+ priority_bands_policy->priority_bands_rep ();
+
+ // Check which band range we fall in.
+ int in_range = 0;
+ protocol_hooks->get_selector_bands_policy_hook (bands_policy.in (),
+ client_thread_priority,
+ min_priority,
+ max_priority,
+ in_range);
+
+ // If priority doesn't fall into any of the bands.
+ if (!in_range)
{
- invocation->inconsistent_policies ()->length (1);
- invocation->inconsistent_policies ()[0u] =
- CORBA::Policy::_duplicate (bands_policy.in ());
- }
- ACE_THROW (CORBA::INV_POLICY ());
- }
- }
-
- // Try to perform the invocation using this endpoint.
- int status;
- if (rt_stub->private_connection ())
- {
- TAO_Private_Transport_Descriptor private_desc (invocation->endpoint (),
- ACE_reinterpret_cast (long, invocation->stub ()));
+ if (invocation->inconsistent_policies ().ptr ())
+ {
+ invocation->inconsistent_policies ()->length (2);
+ invocation->inconsistent_policies ()[0u] =
+ CORBA::Policy::_duplicate (bands_policy.in ());
+ invocation->inconsistent_policies ()[1u] =
+ CORBA::Policy::_duplicate (priority_model_policy.in ());
+ }
- status = invocation->perform_call (private_desc ACE_ENV_ARG_PARAMETER);
- ACE_CHECK;
- }
- else
- {
- TAO_Base_Transport_Property default_desc (invocation->endpoint ());
+ // Indicate error.
+ ACE_THROW (CORBA::INV_POLICY ());
+ }
- status = invocation->perform_call (default_desc ACE_ENV_ARG_PARAMETER);
- ACE_CHECK;
+ // Match the priority of the band with the endpoint.
+ match_bands = 1;
+ }
}
-
- // Check if the invocation has completed.
- if (status == 1)
- return;
}
- while (invocation->stub ()->next_profile_retry () != 0);
-
- // If we get here, we completely failed to find an endpoint selector
- // that we know how to use, so throw an exception.
- ACE_THROW (CORBA::TRANSIENT (TAO_OMG_VMCID | 2,
- CORBA::COMPLETED_NO));
-
-
-}
-
-// ****************************************************************
-
-TAO_Protocol_Endpoint_Selector::~TAO_Protocol_Endpoint_Selector (void)
-{
-}
-
-void
-TAO_Protocol_Endpoint_Selector::select_endpoint (TAO_GIOP_Invocation
- *invocation
- ACE_ENV_ARG_DECL)
-{
- /// Narrow down to the right policy.
- CORBA::Policy_var cp =
- TAO_RT_Endpoint_Utils::client_protocol_policy (invocation ACE_ENV_ARG_PARAMETER);
- ACE_CHECK;
-
- RTCORBA::ClientProtocolPolicy_var cp_policy =
- RTCORBA::ClientProtocolPolicy::_narrow (cp.in () ACE_ENV_ARG_PARAMETER);
- ACE_CHECK;
- /// Cast to TAO_ClientProtocolPolicy
- TAO_ClientProtocolPolicy *client_protocol_policy =
- ACE_static_cast (TAO_ClientProtocolPolicy *,
- cp_policy.in ());
-
- /// Get the ProtocolList
- RTCORBA::ProtocolList & protocols =
- client_protocol_policy->protocols_rep ();
-
- TAO_RT_Stub *rt_stub = ACE_dynamic_cast (TAO_RT_Stub *,
- invocation->stub ());
-
- CORBA::Boolean valid_endpoint_found = 0;
-
- for (CORBA::ULong protocol_index = 0;
- protocol_index < protocols.length ();
- protocol_index++)
+ while (invocation->endpoint () != 0)
{
- // Find the profiles that match the current protocol.
- TAO_Profile *profile = 0;
- TAO_MProfile& mprofile = invocation->stub ()->base_profiles ();
-
- for (TAO_PHandle i = 0;
- i < mprofile.profile_count ();
- ++i)
+ // Get the priority of the endpoint.
+ CORBA::Short endpoint_priority =
+ invocation->endpoint ()->priority ();
+
+ // If <all_endpoints_are_valid> or match the priority of the
+ // client thread or match the priority of the band or
+ // profile contains just one endpoint. This happens when:
+ // a) we are talking to a nonTAO server (which doesn't have
+ // the concept of multiple endpoints per profile)
+ // or
+ // b) we have TAO server with a non-lane threadpool, in which
+ // case there is only one acceptor
+ // In both cases we should use the endpoint regardless of its priority.
+
+ if (all_endpoints_are_valid ||
+ (match_priority &&
+ client_thread_priority == endpoint_priority) ||
+ (match_bands &&
+ endpoint_priority <= max_priority &&
+ endpoint_priority >= min_priority) ||
+ invocation->profile ()->endpoint_count () == 1 &&
+ endpoint_priority == TAO_INVALID_PRIORITY)
{
- profile = mprofile.get_profile (i);
- if (profile->tag ()
- == protocols[protocol_index].protocol_type)
+ int status;
+ if (rt_stub->private_connection ())
{
- // Save away the profile and endpoint that we found in the
- // invocation.
- invocation->profile (profile);
- invocation->endpoint (profile->endpoint());
- valid_endpoint_found = 1;
-
- // Try to perform the invocation using this endpoint.
- int status;
- if (rt_stub->private_connection ())
- {
- TAO_Private_Transport_Descriptor private_desc (invocation->endpoint (),
- ACE_reinterpret_cast (long, invocation->stub ()));
-
- status = invocation->perform_call (private_desc ACE_ENV_ARG_PARAMETER);
- ACE_CHECK;
- }
- else
- {
- TAO_Base_Transport_Property default_desc (invocation->endpoint ());
-
- status = invocation->perform_call (default_desc ACE_ENV_ARG_PARAMETER);
- ACE_CHECK;
- }
+ TAO_Private_Transport_Descriptor private_desc (invocation->endpoint (),
+ ACE_reinterpret_cast (long, invocation->stub ()));
- // Check if the invocation has completed.
- if (status == 1)
- return;
+ status =
+ invocation->perform_call (private_desc ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
}
- }
- }
+ else
+ {
+ TAO_Base_Transport_Property default_desc (invocation->endpoint ());
- // We have tried all the protocols specified in the client
- // protocol policy with no success. Throw exception.
+ status =
+ invocation->perform_call (default_desc ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+ }
- // Figure out proper exception.
- if (!valid_endpoint_found)
- {
- if (invocation->inconsistent_policies ().ptr ())
- {
- invocation->inconsistent_policies ()->length (1);
- invocation->inconsistent_policies ()[0u] =
- CORBA::Policy::_duplicate (client_protocol_policy);
+ // Check if the invocation has completed.
+ if (status == 1)
+ return 1;
}
- ACE_THROW (CORBA::INV_POLICY ());
- }
-
- // If we get here, we completely failed to find an endpoint selector
- // that we know how to use, so throw an exception.
- ACE_THROW (CORBA::TRANSIENT (TAO_OMG_VMCID | 2,
- CORBA::COMPLETED_NO));
-
-}
-
-void
-TAO_Protocol_Endpoint_Selector::next (TAO_GIOP_Invocation
- *
- ACE_ENV_ARG_DECL_NOT_USED)
-{
- ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("You Are not Suppesed to call: TAO_Protocol_Endpoint_Selector::next!!!\n")));
- // invocation->profile_index ()++;
- // If we ran out of profiles to try - this will be detected and
- // exception thrown once <endpoint> is called.
-}
-
-void
-TAO_Protocol_Endpoint_Selector::forward (TAO_GIOP_Invocation
- *invocation,
- const TAO_MProfile& /* mprofile */
- ACE_ENV_ARG_DECL)
-{
- // Location forwarding is currently not supported when using
- // RTCORBA::ClientProtocolPolicy. With the current profile
- // management scheme being broken, it would be a pain to support here.
- // @@ Add support for location forwarding once profile management is
- // redesigned.
-
- // Currently location forward replies are ignored. When we receive
- // a location forward reply, we act as if the profile we used
- // didn't work, and we try the next one. Should we throw not
- // supported exception instead?
- this->next (invocation ACE_ENV_ARG_PARAMETER);
-}
-
-void
-TAO_Protocol_Endpoint_Selector::success (TAO_GIOP_Invocation *invocation)
-{
- invocation->stub ()->set_valid_profile ();
-}
-
-void
-TAO_Protocol_Endpoint_Selector::close_connection (TAO_GIOP_Invocation *)
-{
-}
-
-// ****************************************************************
-
-TAO_Priority_Protocol_Selector::~TAO_Priority_Protocol_Selector (void)
-{
-}
-
-int
-TAO_Priority_Protocol_Selector::is_multihomed (TAO_Endpoint *endpoint)
-{
- for (TAO_Endpoint *endp = endpoint;
- endp != 0;
- endp = endp->next ())
- {
- if (endp->next () != 0
- && endp->priority () != endp->next ()->priority ())
- return 0;
+ // Go to the next endpoint in this profile.
+ invocation->endpoint (invocation->endpoint()->next());
}
- return 1;
-}
-
-// ****************************************************************
-TAO_Bands_Protocol_Selector::~TAO_Bands_Protocol_Selector (void)
-{
+ return 0;
}
diff --git a/TAO/tao/RTCORBA/RT_Invocation_Endpoint_Selectors.h b/TAO/tao/RTCORBA/RT_Invocation_Endpoint_Selectors.h
index 188d08fe210..0980582c5ae 100644
--- a/TAO/tao/RTCORBA/RT_Invocation_Endpoint_Selectors.h
+++ b/TAO/tao/RTCORBA/RT_Invocation_Endpoint_Selectors.h
@@ -20,7 +20,7 @@
#include "ace/pre.h"
#include "tao/corbafwd.h"
-#include "rtcorba_export.h"
+#include "RTCORBA.h"
#if !defined (ACE_LACKS_PRAGMA_ONCE)
# pragma once
@@ -32,154 +32,29 @@ class TAO_MProfile;
class TAO_Endpoint;
/**
- * @class TAO_RT_Default_Endpoint_Selector
+ * @class TAO_RT_Invocation_Endpoint_Selector
*
- * @brief TAO_RT_Default_Endpoint_Selector
+ * @brief TAO_RT_Invocation_Endpoint_Selector
*
* This strategy is used when the only policy that might be set is the
* private connection policy.
*
**/
-class TAO_RTCORBA_Export TAO_RT_Default_Endpoint_Selector :
+class TAO_RTCORBA_Export TAO_RT_Invocation_Endpoint_Selector :
public TAO_Default_Endpoint_Selector
{
public:
- virtual void select_endpoint (TAO_GIOP_Invocation *invocation
- ACE_ENV_ARG_DECL);
-};
-
-// ****************************************************************
-
-/**
- * @class TAO_Priority_Endpoint_Selector
- *
- * @brief TAO_Priority_Endpoint_Selector
- *
- * This strategy is used when RTCORBA::PriorityModelPolicy is
- * set and its value is RTCORBA::CLIENT_PROPAGATED.
- *
- */
-class TAO_RTCORBA_Export TAO_Priority_Endpoint_Selector :
- public TAO_Default_Endpoint_Selector
-{
-public:
- /// Constructor.
- TAO_Priority_Endpoint_Selector (void);
-
- /// Destructor.
- virtual ~TAO_Priority_Endpoint_Selector (void);
-
- virtual void select_endpoint (TAO_GIOP_Invocation *invocation
- ACE_ENV_ARG_DECL);
-private:
- /// Helper for <select_endpoint>.
- int is_multihomed (TAO_Endpoint *endpoint);
-};
-
-// ****************************************************************
-
-/**
- * @class TAO_Bands_Endpoint_Selector
- *
- * @brief TAO_Bands_Endpoint_Selector
- *
- * This strategy is used when
- * RTCORBA::PriorityBandedConnectionPolicy is set.
- *
- */
-class TAO_RTCORBA_Export TAO_Bands_Endpoint_Selector :
- public TAO_Default_Endpoint_Selector
-{
-public:
- /// Constructor.
- TAO_Bands_Endpoint_Selector (void);
-
- /// Destructor.
- virtual ~TAO_Bands_Endpoint_Selector (void);
-
- virtual void select_endpoint (TAO_GIOP_Invocation *invocation
- ACE_ENV_ARG_DECL);
-};
-
-// ****************************************************************
-
-/**
- * @class TAO_Protocol_Endpoint_Selector
- *
- * @brief TAO_Protocol_Endpoint_Selector
- *
- * This strategy is used when only RTCORBA::ClientProtocolPolicy is
- * set or RTCORBA::ClientProtocolPolicy plus
- * RTCORBA::SERVER_DECLARED priority model.
- *
- */
-class TAO_RTCORBA_Export TAO_Protocol_Endpoint_Selector :
- public TAO_Invocation_Endpoint_Selector
-{
-public:
- /// Constructor.
- TAO_Protocol_Endpoint_Selector (void);
-
- /// Destructor.
- virtual ~TAO_Protocol_Endpoint_Selector (void);
- virtual void select_endpoint (TAO_GIOP_Invocation *invocation
- ACE_ENV_ARG_DECL);
- virtual void next (TAO_GIOP_Invocation *invocation
- ACE_ENV_ARG_DECL);
- virtual void forward (TAO_GIOP_Invocation *invocation,
- const TAO_MProfile &mprofile
+ void select_endpoint (TAO_GIOP_Invocation *invocation
ACE_ENV_ARG_DECL);
- virtual void success (TAO_GIOP_Invocation *invocation);
- virtual void close_connection (TAO_GIOP_Invocation *invocation);
-};
-
-// ****************************************************************
-/**
- * @class TAO_Priority_Protocol_Selector
- *
- * @brief TAO_Priority_Protocol_Selector
- *
- * This strategy is used when RTCORBA::ClientProtocolPolicy is
- * set and the priority model is RTCORBA::CLIENT_PROPAGATED.
- *
- */
-class TAO_RTCORBA_Export TAO_Priority_Protocol_Selector :
- public TAO_Protocol_Endpoint_Selector
-{
-public:
- /// Constructor.
- TAO_Priority_Protocol_Selector (void);
-
- /// Destructor.
- virtual ~TAO_Priority_Protocol_Selector (void);
-
-protected:
- /// Helper for <select_endpoint>.
- int is_multihomed (TAO_Endpoint *endpoint);
-};
-
-// ****************************************************************
-
-/**
- * @class TAO_Bands_Protocol_Selector
- *
- * @brief TAO_Bands_Protocol_Selector
- *
- * This strategy is used when both RTCORBA::ClientProtocolPolicy
- * and RTCORBA::PriorityBandedConnectionPolicy are set.
- *
- */
-class TAO_RTCORBA_Export TAO_Bands_Protocol_Selector :
- public TAO_Protocol_Endpoint_Selector
-{
-public:
- /// Constructor.
- TAO_Bands_Protocol_Selector (void);
+ void select_endpoint_based_on_client_protocol_policy (TAO_GIOP_Invocation *invocation,
+ RTCORBA::ClientProtocolPolicy_ptr client_protocol_policy,
+ RTCORBA::ProtocolList &protocols
+ ACE_ENV_ARG_DECL);
- /// Destructor.
- virtual ~TAO_Bands_Protocol_Selector (void);
+ int endpoint_from_profile (TAO_GIOP_Invocation *invocation
+ ACE_ENV_ARG_DECL);
};
#if defined (__ACE_INLINE__)
diff --git a/TAO/tao/RTCORBA/RT_Invocation_Endpoint_Selectors.i b/TAO/tao/RTCORBA/RT_Invocation_Endpoint_Selectors.i
index 916934eb0f3..c130d6682b1 100644
--- a/TAO/tao/RTCORBA/RT_Invocation_Endpoint_Selectors.i
+++ b/TAO/tao/RTCORBA/RT_Invocation_Endpoint_Selectors.i
@@ -1,35 +1,2 @@
// -*- C++ -*-
// $Id$
-
-ACE_INLINE
-TAO_Priority_Endpoint_Selector::TAO_Priority_Endpoint_Selector (void)
-{
-}
-
-// ****************************************************************
-
-ACE_INLINE
-TAO_Bands_Endpoint_Selector::TAO_Bands_Endpoint_Selector (void)
-{
-}
-
-// ****************************************************************
-
-ACE_INLINE
-TAO_Protocol_Endpoint_Selector::TAO_Protocol_Endpoint_Selector (void)
-{
-}
-
-// ****************************************************************
-
-ACE_INLINE
-TAO_Priority_Protocol_Selector::TAO_Priority_Protocol_Selector (void)
-{
-}
-
-// ****************************************************************
-
-ACE_INLINE
-TAO_Bands_Protocol_Selector::TAO_Bands_Protocol_Selector (void)
-{
-}
diff --git a/TAO/tao/RTCORBA/RT_Protocols_Hooks.cpp b/TAO/tao/RTCORBA/RT_Protocols_Hooks.cpp
index a9130638089..244c3c5ab8a 100644
--- a/TAO/tao/RTCORBA/RT_Protocols_Hooks.cpp
+++ b/TAO/tao/RTCORBA/RT_Protocols_Hooks.cpp
@@ -178,8 +178,7 @@ TAO_RT_Protocols_Hooks::add_rt_service_context_hook (TAO_Service_Context &servic
}
void
-TAO_RT_Protocols_Hooks::get_selector_hook (
- CORBA::Policy *model_policy,
+TAO_RT_Protocols_Hooks::get_selector_hook (CORBA::Policy *model_policy,
CORBA::Boolean &is_client_propagated,
CORBA::Short &server_priority)
{
@@ -203,9 +202,9 @@ TAO_RT_Protocols_Hooks::get_selector_hook (
void
TAO_RT_Protocols_Hooks::get_selector_bands_policy_hook (CORBA::Policy *bands_policy,
+ CORBA::Short priority,
CORBA::Short &min_priority,
CORBA::Short &max_priority,
- CORBA::Short &p,
int &in_range)
{
RTCORBA::PriorityBandedConnectionPolicy_var bands_policy_ptr =
@@ -220,7 +219,7 @@ TAO_RT_Protocols_Hooks::get_selector_bands_policy_hook (CORBA::Policy *bands_pol
priority_bands_policy->priority_bands_rep ();
for (CORBA::ULong i = 0; i < bands.length (); ++i)
- if (bands[i].low <= p && bands[i].high >= p)
+ if (bands[i].low <= priority && bands[i].high >= priority)
{
min_priority = bands[i].low;
max_priority = bands[i].high;
@@ -384,7 +383,7 @@ TAO_RT_Protocols_Hooks::set_default_policies (ACE_ENV_SINGLE_ARG_DECL)
client_protocol_policy;
this->orb_core_->get_default_policies ()->set_policy (client_protocol_policy
- ACE_ENV_ARG_PARAMETER);
+ ACE_ENV_ARG_PARAMETER);
ACE_CHECK_RETURN (-1);
return 0;
diff --git a/TAO/tao/RTCORBA/RT_Protocols_Hooks.h b/TAO/tao/RTCORBA/RT_Protocols_Hooks.h
index ffcdd065c30..eb235702591 100644
--- a/TAO/tao/RTCORBA/RT_Protocols_Hooks.h
+++ b/TAO/tao/RTCORBA/RT_Protocols_Hooks.h
@@ -104,12 +104,11 @@ public:
&is_client_propagated,
CORBA::Short &server_priority);
- virtual void get_selector_bands_policy_hook (
- CORBA::Policy *bands_policy,
- CORBA::Short &min_priority,
- CORBA::Short &max_priority,
- CORBA::Short &p,
- int &in_range);
+ virtual void get_selector_bands_policy_hook (CORBA::Policy *bands_policy,
+ CORBA::Short priority,
+ CORBA::Short &min_priority,
+ CORBA::Short &max_priority,
+ int &in_range);
/**
* Accessor and modifier to the current thread priority, used to
diff --git a/TAO/tao/Strategies/DIOP_Endpoint.cpp b/TAO/tao/Strategies/DIOP_Endpoint.cpp
index fac6270dbb3..45e92f69912 100644
--- a/TAO/tao/Strategies/DIOP_Endpoint.cpp
+++ b/TAO/tao/Strategies/DIOP_Endpoint.cpp
@@ -22,7 +22,7 @@ TAO_DIOP_Endpoint::TAO_DIOP_Endpoint (const ACE_INET_Addr &addr,
host_ (),
port_ (0),
object_addr_ (addr),
- /* hint_ (0), */
+ object_addr_set_ (0),
next_ (0)
{
this->set (addr, use_dotted_decimal_addresses);
@@ -35,7 +35,7 @@ TAO_DIOP_Endpoint::TAO_DIOP_Endpoint (const char *host,
host_ (),
port_ (port),
object_addr_ (addr),
- /* hint_ (0), */
+ object_addr_set_ (0),
next_ (0)
{
if (host != 0)
@@ -47,7 +47,7 @@ TAO_DIOP_Endpoint::TAO_DIOP_Endpoint (void)
host_ (),
port_ (0),
object_addr_ (),
- /* hint_ (0), */
+ object_addr_set_ (0),
next_ (0)
{
}
@@ -59,13 +59,12 @@ TAO_DIOP_Endpoint::TAO_DIOP_Endpoint (const char *host,
host_ (),
port_ (port),
object_addr_ (),
- /* hint_ (0),*/
+ object_addr_set_ (0),
next_ (0)
{
if (host != 0)
this->host_ = host;
- this->object_addr_.set_type (-1);
this->priority (priority);
}
diff --git a/TAO/tao/Strategies/DIOP_Endpoint.h b/TAO/tao/Strategies/DIOP_Endpoint.h
index 5f9adb0ca31..c9f95f0eedb 100644
--- a/TAO/tao/Strategies/DIOP_Endpoint.h
+++ b/TAO/tao/Strategies/DIOP_Endpoint.h
@@ -133,6 +133,9 @@ private:
/// invocations, etc.
ACE_INET_Addr object_addr_;
+ /// Flag to indicate if the address has been resolved and set.
+ int object_addr_set_;
+
/// DIOP Endpoints can be stringed into a list. Return the next
/// endpoint in the list, if any.
TAO_DIOP_Endpoint *next_;
diff --git a/TAO/tao/Strategies/DIOP_Endpoint.i b/TAO/tao/Strategies/DIOP_Endpoint.i
index 4bfdf5bc838..acdaaad50b5 100644
--- a/TAO/tao/Strategies/DIOP_Endpoint.i
+++ b/TAO/tao/Strategies/DIOP_Endpoint.i
@@ -11,7 +11,7 @@ TAO_DIOP_Endpoint::object_addr (void) const
// ...etc..
// Double checked locking optimization.
- if (this->object_addr_.get_type () != AF_INET)
+ if (!this->object_addr_set_)
{
// We need to modify the object_addr_ in this method. Do so
// using a non-const copy of the <this> pointer.
@@ -24,18 +24,25 @@ TAO_DIOP_Endpoint::object_addr (void) const
endpoint->addr_lookup_lock_,
this->object_addr_ );
- if (this->object_addr_.get_type () != AF_INET
- && endpoint->object_addr_.set (this->port_,
- this->host_.in ()) == -1)
+ if (!this->object_addr_set_)
{
- // If this call fails, it most likely due a hostname lookup
- // failure caused by a DNS misconfiguration. If a request is
- // made to the object at the given host and port, then a
- // CORBA::TRANSIENT() exception should be thrown.
-
- // Invalidate the ACE_INET_Addr. This is used as a flag to
- // denote that ACE_INET_Addr initialization failed.
- endpoint->object_addr_.set_type (-1);
+ if (endpoint->object_addr_.set (this->port_,
+ this->host_.in ()) == -1)
+ {
+ // If this call fails, it most likely due a hostname
+ // lookup failure caused by a DNS misconfiguration. If
+ // a request is made to the object at the given host and
+ // port, then a CORBA::TRANSIENT() exception should be
+ // thrown.
+
+ // Invalidate the ACE_INET_Addr. This is used as a flag
+ // to denote that ACE_INET_Addr initialization failed.
+ endpoint->object_addr_.set_type (-1);
+ }
+ else
+ {
+ endpoint->object_addr_set_ = 1;
+ }
}
}
return this->object_addr_;
diff --git a/TAO/tao/Strategies/SHMIOP_Endpoint.cpp b/TAO/tao/Strategies/SHMIOP_Endpoint.cpp
index ad826bc9b4c..28e74cf69a9 100644
--- a/TAO/tao/Strategies/SHMIOP_Endpoint.cpp
+++ b/TAO/tao/Strategies/SHMIOP_Endpoint.cpp
@@ -21,6 +21,7 @@ TAO_SHMIOP_Endpoint::TAO_SHMIOP_Endpoint (const ACE_MEM_Addr &addr,
host_ (),
port_ (0),
object_addr_ (addr.get_remote_addr ()),
+ object_addr_set_ (0),
next_ (0)
{
this->set (addr.get_remote_addr (), use_dotted_decimal_addresses);
@@ -32,6 +33,7 @@ TAO_SHMIOP_Endpoint::TAO_SHMIOP_Endpoint (const ACE_INET_Addr &addr,
host_ (),
port_ (0),
object_addr_ (addr),
+ object_addr_set_ (0),
next_ (0)
{
this->set (addr, use_dotted_decimal_addresses);
@@ -44,6 +46,7 @@ TAO_SHMIOP_Endpoint::TAO_SHMIOP_Endpoint (const char *host,
host_ (),
port_ (port),
object_addr_ (addr),
+ object_addr_set_ (0),
next_ (0)
{
if (host != 0)
@@ -55,6 +58,7 @@ TAO_SHMIOP_Endpoint::TAO_SHMIOP_Endpoint (void)
host_ (),
port_ (0),
object_addr_ (),
+ object_addr_set_ (0),
next_ (0)
{
}
@@ -66,12 +70,12 @@ TAO_SHMIOP_Endpoint::TAO_SHMIOP_Endpoint (const char *host,
host_ (),
port_ (port),
object_addr_ (),
+ object_addr_set_ (0),
next_ (0)
{
if (host != 0)
this->host_ = host;
- this->object_addr_.set_type (-1);
this->priority (priority);
}
diff --git a/TAO/tao/Strategies/SHMIOP_Endpoint.h b/TAO/tao/Strategies/SHMIOP_Endpoint.h
index f19cabbfd8a..efdf29708d6 100644
--- a/TAO/tao/Strategies/SHMIOP_Endpoint.h
+++ b/TAO/tao/Strategies/SHMIOP_Endpoint.h
@@ -129,6 +129,9 @@ private:
/// invocations, etc.
ACE_INET_Addr object_addr_;
+ /// Flag to indicate if the address has been resolved and set.
+ int object_addr_set_;
+
/// SHMIOP Endpoints can be stringed into a list. Return the next
/// endpoint in the list, if any.
TAO_SHMIOP_Endpoint *next_;
diff --git a/TAO/tao/Strategies/SHMIOP_Endpoint.i b/TAO/tao/Strategies/SHMIOP_Endpoint.i
index fc0fdd772b0..c37e12aaebd 100644
--- a/TAO/tao/Strategies/SHMIOP_Endpoint.i
+++ b/TAO/tao/Strategies/SHMIOP_Endpoint.i
@@ -11,7 +11,7 @@ TAO_SHMIOP_Endpoint::object_addr (void) const
// ...etc..
// Double checked locking optimization.
- if (this->object_addr_.get_type () != AF_INET)
+ if (!this->object_addr_set_)
{
// We need to modify the object_addr_ in this method. Do so
// using a non-const copy of the <this> pointer.
@@ -24,18 +24,25 @@ TAO_SHMIOP_Endpoint::object_addr (void) const
endpoint->addr_lookup_lock_,
this->object_addr_ );
- if (this->object_addr_.get_type () != AF_INET
- && endpoint->object_addr_.set (this->port_,
- this->host_.in ()) == -1)
+ if (!this->object_addr_set_)
{
- // If this call fails, it most likely due a hostname lookup
- // failure caused by a DNS misconfiguration. If a request is
- // made to the object at the given host and port, then a
- // CORBA::TRANSIENT() exception should be thrown.
-
- // Invalidate the ACE_INET_Addr. This is used as a flag to
- // denote that ACE_INET_Addr initialization failed.
- endpoint->object_addr_.set_type (-1);
+ if (endpoint->object_addr_.set (this->port_,
+ this->host_.in ()) == -1)
+ {
+ // If this call fails, it most likely due a hostname
+ // lookup failure caused by a DNS misconfiguration. If
+ // a request is made to the object at the given host and
+ // port, then a CORBA::TRANSIENT() exception should be
+ // thrown.
+
+ // Invalidate the ACE_INET_Addr. This is used as a flag
+ // to denote that ACE_INET_Addr initialization failed.
+ endpoint->object_addr_.set_type (-1);
+ }
+ else
+ {
+ endpoint->object_addr_set_ = 1;
+ }
}
}
diff --git a/TAO/tao/Transport.cpp b/TAO/tao/Transport.cpp
index 68ab8203f9a..335a0e75c9c 100644
--- a/TAO/tao/Transport.cpp
+++ b/TAO/tao/Transport.cpp
@@ -1244,11 +1244,22 @@ TAO_Transport::handle_input_i (TAO_Resume_Handle &rh,
// Align the message block
ACE_CDR::mb_align (&message_block);
+ size_t recv_size = 0;
+ if (this->orb_core_->orb_params ()->single_read_optimization ())
+ {
+ recv_size =
+ message_block.space ();
+ }
+ else
+ {
+ recv_size =
+ this->messaging_object ()->header_length ();
+ }
// Read the message into the message block that we have created on
// the stack.
ssize_t n = this->recv (message_block.rd_ptr (),
- message_block.space (),
+ recv_size,
max_wait_time);
// If there is an error return to the reactor..
diff --git a/TAO/tao/params.cpp b/TAO/tao/params.cpp
index 9869b50f2a5..d0e56191dc9 100644
--- a/TAO/tao/params.cpp
+++ b/TAO/tao/params.cpp
@@ -23,7 +23,8 @@ TAO_ORB_Parameters::TAO_ORB_Parameters (void)
use_dotted_decimal_addresses_ (0),
std_profile_components_ (1),
sched_policy_ (THR_SCHED_DEFAULT),
- scope_policy_ (THR_SCOPE_PROCESS)
+ scope_policy_ (THR_SCOPE_PROCESS),
+ single_read_optimization_ (1)
{
for (int i = 0; i <= TAO_NO_OF_MCAST_SERVICES; ++i)
this->service_port_[i] = 0;
diff --git a/TAO/tao/params.h b/TAO/tao/params.h
index 2e7639cbde4..f0f8d226a8f 100644
--- a/TAO/tao/params.h
+++ b/TAO/tao/params.h
@@ -145,6 +145,10 @@ public:
long scope_policy (void) const;
void scope_policy (long x);
+ /// Single read optimization.
+ int single_read_optimization (void) const;
+ void single_read_optimization (int x);
+
private:
// Each "endpoint" is of the form:
//
@@ -210,6 +214,9 @@ private:
/// Thread scope policy.
long scope_policy_;
+
+ /// Single read optimization.
+ int single_read_optimization_;
};
#if defined (__ACE_INLINE__)
diff --git a/TAO/tao/params.i b/TAO/tao/params.i
index c2adb51d536..fa5d9d315e7 100644
--- a/TAO/tao/params.i
+++ b/TAO/tao/params.i
@@ -171,6 +171,18 @@ TAO_ORB_Parameters::scope_policy (long x)
this->scope_policy_ = x;
}
+ACE_INLINE int
+TAO_ORB_Parameters::single_read_optimization (void) const
+{
+ return this->single_read_optimization_;
+}
+
+ACE_INLINE void
+TAO_ORB_Parameters::single_read_optimization (int x)
+{
+ this->single_read_optimization_ = x;
+}
+
#if 0
diff --git a/TAO/tests/RTCORBA/Linear_Priority/client.cpp b/TAO/tests/RTCORBA/Linear_Priority/client.cpp
index d20b9df9842..f5e49dde321 100644
--- a/TAO/tests/RTCORBA/Linear_Priority/client.cpp
+++ b/TAO/tests/RTCORBA/Linear_Priority/client.cpp
@@ -6,10 +6,11 @@
#include "tao/RTCORBA/RTCORBA.h"
#include "tao/ORB_Core.h"
#include "../check_supported_priorities.cpp"
-#include "./readers.cpp"
+#include "../common_args.cpp"
static int iterations = 5;
static int shutdown_server = 0;
+static int debug = 1;
static const char *ior = "file://ior";
@@ -19,7 +20,7 @@ static const char *bands_file = "empty_file";
static int
parse_args (int argc, char **argv)
{
- ACE_Get_Opt get_opts (argc, argv, "b:p:k:i:x");
+ ACE_Get_Opt get_opts (argc, argv, "b:d:p:k:i:x");
int c;
while ((c = get_opts ()) != -1)
@@ -33,6 +34,10 @@ parse_args (int argc, char **argv)
iterations = ::atoi (get_opts.opt_arg ());
break;
+ case 'd':
+ debug = ::atoi (get_opts.opt_arg ());
+ break;
+
case 'x':
shutdown_server = 1;
break;
@@ -50,6 +55,7 @@ parse_args (int argc, char **argv)
ACE_ERROR_RETURN ((LM_ERROR,
"usage: %s "
"-b <bands_file> "
+ "-d <debug> "
"-p <invocation_priorities_file> "
"-k ior "
"-i iterations "
@@ -218,12 +224,13 @@ main (int argc, char **argv)
ACE_ENV_ARG_PARAMETER);
ACE_TRY_CHECK;
- Short_Array priorities;
+ ULong_Array priorities;
result =
get_values ("client",
invocation_priorities_file,
"invocation priorities",
- priorities);
+ priorities,
+ debug);
if (result != 0)
return result;
@@ -233,7 +240,8 @@ main (int argc, char **argv)
get_priority_bands ("client",
bands_file,
rt_orb.in (),
- policies
+ policies,
+ debug
ACE_ENV_ARG_PARAMETER);
ACE_TRY_CHECK;
if (result != 0)
diff --git a/TAO/tests/RTCORBA/Linear_Priority/server.cpp b/TAO/tests/RTCORBA/Linear_Priority/server.cpp
index bdbad4ee4a9..4e443f13252 100644
--- a/TAO/tests/RTCORBA/Linear_Priority/server.cpp
+++ b/TAO/tests/RTCORBA/Linear_Priority/server.cpp
@@ -4,7 +4,7 @@
#include "testS.h"
#include "tao/RTPortableServer/RTPortableServer.h"
#include "../check_supported_priorities.cpp"
-#include "./readers.cpp"
+#include "../common_args.cpp"
class test_i :
public POA_test,
@@ -70,6 +70,7 @@ static CORBA::ULong max_request_buffer_size = 0;
static CORBA::Boolean allow_borrowing = 0;
static const char *ior = "ior";
+static int debug = 1;
static const char *bands_file = "bands";
static const char *lanes_file = "lanes";
@@ -77,7 +78,7 @@ static const char *lanes_file = "lanes";
static int
parse_args (int argc, char **argv)
{
- ACE_Get_Opt get_opts (argc, argv, "b:l:");
+ ACE_Get_Opt get_opts (argc, argv, "b:d:l:");
int c;
while ((c = get_opts ()) != -1)
@@ -87,6 +88,10 @@ parse_args (int argc, char **argv)
bands_file = get_opts.opt_arg ();
break;
+ case 'd':
+ debug = ::atoi (get_opts.opt_arg ());
+ break;
+
case 'l':
lanes_file = get_opts.opt_arg ();
break;
@@ -96,6 +101,7 @@ parse_args (int argc, char **argv)
ACE_ERROR_RETURN ((LM_ERROR,
"usage: %s "
"-b <bands_file> "
+ "-d <debug> "
"-l <lanes_file> "
"\n",
argv [0]),
@@ -183,7 +189,8 @@ main (int argc, char **argv)
get_priority_bands ("server",
bands_file,
rt_orb.in (),
- policies
+ policies,
+ debug
ACE_ENV_ARG_PARAMETER);
ACE_TRY_CHECK;
if (result != 0)
@@ -200,7 +207,8 @@ main (int argc, char **argv)
max_buffered_requests,
max_request_buffer_size,
allow_borrowing,
- policies
+ policies,
+ debug
ACE_ENV_ARG_PARAMETER);
ACE_TRY_CHECK;
if (result != 0)
diff --git a/TAO/tests/RTCORBA/Makefile b/TAO/tests/RTCORBA/Makefile
index 9be2c8623c6..30640da58e3 100644
--- a/TAO/tests/RTCORBA/Makefile
+++ b/TAO/tests/RTCORBA/Makefile
@@ -23,7 +23,8 @@ DIRS = \
Persistent_IOR \
Policy_Combinations \
Private_Connection \
- RTMutex \
+ Profile_And_Endpoint_Selection \
+ RTMutex \
Server_Declared \
Server_Protocol \
Thread_Pool
diff --git a/TAO/tests/RTCORBA/Makefile.bor b/TAO/tests/RTCORBA/Makefile.bor
index 2dbcf62e323..ef194fb6071 100644
--- a/TAO/tests/RTCORBA/Makefile.bor
+++ b/TAO/tests/RTCORBA/Makefile.bor
@@ -15,6 +15,7 @@ DIRS = \
Persistent_IOR \
Policy_Combinations \
Private_Connection \
+ Profile_And_Endpoint_Selection \
RTMutex \
Server_Declared \
Server_Protocol \
diff --git a/TAO/tests/RTCORBA/Profile_And_Endpoint_Selection/Makefile b/TAO/tests/RTCORBA/Profile_And_Endpoint_Selection/Makefile
new file mode 100644
index 00000000000..08b95cc4a5e
--- /dev/null
+++ b/TAO/tests/RTCORBA/Profile_And_Endpoint_Selection/Makefile
@@ -0,0 +1,1249 @@
+#----------------------------------------------------------------------------
+#
+# $Id$
+#
+#----------------------------------------------------------------------------
+
+#----------------------------------------------------------------------------
+# Local macros
+#----------------------------------------------------------------------------
+
+ifndef TAO_ROOT
+ TAO_ROOT = $(ACE_ROOT)/TAO
+endif # ! TAO_ROOT
+
+IDL_FILES = test
+IDL_SRC = testC.cpp testS.cpp
+BIN_UNCHECKED = client server
+
+SRC = $(addsuffix .cpp, $(BIN)) $(IDL_SRC)
+
+CLIENT_OBJS = client.o testC.o
+SERVER_OBJS = server.o $(IDL_SRC:.cpp=.o)
+
+TAO_IDLFLAGS += -Ge 1
+#----------------------------------------------------------------------------
+# Include macros and targets
+#----------------------------------------------------------------------------
+
+include $(ACE_ROOT)/include/makeinclude/wrapper_macros.GNU
+include $(ACE_ROOT)/include/makeinclude/macros.GNU
+include $(TAO_ROOT)/rules.tao.GNU
+
+ifeq ($(rt_corba),1)
+BIN=$(BIN_UNCHECKED)
+endif # rt_corba
+
+include $(ACE_ROOT)/include/makeinclude/rules.common.GNU
+include $(ACE_ROOT)/include/makeinclude/rules.nonested.GNU
+include $(ACE_ROOT)/include/makeinclude/rules.local.GNU
+include $(TAO_ROOT)/taoconfig.mk
+
+#----------------------------------------------------------------------------
+# Local targets
+#----------------------------------------------------------------------------
+
+.PRECIOUS: $(foreach ext, $(IDL_EXT), test$(ext))
+
+server: $(addprefix $(VDIR),$(SERVER_OBJS))
+ $(LINK.cc) $(LDFLAGS) -o $@ $^ $(RT_TAO_SRVR_LIBS) $(POSTLINK)
+
+client: $(addprefix $(VDIR),$(CLIENT_OBJS))
+ $(LINK.cc) $(LDFLAGS) -o $@ $^ $(RT_TAO_CLNT_LIBS) $(POSTLINK)
+
+realclean: clean
+ -$(RM) $(foreach ext, $(IDL_EXT), test$(ext))
+
+# DO NOT DELETE THIS LINE -- g++dep uses it.
+# DO NOT PUT ANYTHING AFTER THIS LINE, IT WILL GO AWAY.
+
+
+.obj/client.o .obj/client.so .shobj/client.o .shobj/client.so: client.cpp \
+ $(ACE_ROOT)/ace/Get_Opt.h \
+ $(ACE_ROOT)/ace/pre.h \
+ $(ACE_ROOT)/ace/SString.h \
+ $(ACE_ROOT)/ace/String_Base.h \
+ $(ACE_ROOT)/ace/ACE.h \
+ $(ACE_ROOT)/ace/OS.h \
+ $(ACE_ROOT)/ace/config-sunos5.6.h \
+ $(ACE_ROOT)/ace/config-sunos5.5.h \
+ $(ACE_ROOT)/ace/post.h \
+ $(ACE_ROOT)/ace/ace_wchar.h \
+ $(ACE_ROOT)/ace/ace_wchar.inl \
+ $(ACE_ROOT)/ace/OS_Dirent.h \
+ $(ACE_ROOT)/ace/OS_Export.h \
+ $(ACE_ROOT)/ace/OS_Errno.h \
+ $(ACE_ROOT)/ace/OS_Errno.inl \
+ $(ACE_ROOT)/ace/OS_Dirent.inl \
+ $(ACE_ROOT)/ace/OS_String.h \
+ $(ACE_ROOT)/ace/Basic_Types.h \
+ $(ACE_ROOT)/ace/ACE_export.h \
+ $(ACE_ROOT)/ace/Basic_Types.i \
+ $(ACE_ROOT)/ace/OS_String.inl \
+ $(ACE_ROOT)/ace/OS_Memory.h \
+ $(ACE_ROOT)/ace/OS_Memory.inl \
+ $(ACE_ROOT)/ace/OS_TLI.h \
+ $(ACE_ROOT)/ace/OS_TLI.inl \
+ $(ACE_ROOT)/ace/Time_Value.h \
+ $(ACE_ROOT)/ace/Time_Value.inl \
+ $(ACE_ROOT)/ace/Default_Constants.h \
+ $(ACE_ROOT)/ace/Global_Macros.h \
+ $(ACE_ROOT)/ace/Min_Max.h \
+ $(ACE_ROOT)/ace/streams.h \
+ $(ACE_ROOT)/ace/Trace.h \
+ $(ACE_ROOT)/ace/OS.i \
+ $(ACE_ROOT)/ace/Flag_Manip.h \
+ $(ACE_ROOT)/ace/Flag_Manip.i \
+ $(ACE_ROOT)/ace/Handle_Ops.h \
+ $(ACE_ROOT)/ace/Handle_Ops.i \
+ $(ACE_ROOT)/ace/Lib_Find.h \
+ $(ACE_ROOT)/ace/Lib_Find.i \
+ $(ACE_ROOT)/ace/Init_ACE.h \
+ $(ACE_ROOT)/ace/Init_ACE.i \
+ $(ACE_ROOT)/ace/Sock_Connect.h \
+ $(ACE_ROOT)/ace/Sock_Connect.i \
+ $(ACE_ROOT)/ace/ACE.i \
+ $(ACE_ROOT)/ace/String_Base_Const.h \
+ $(ACE_ROOT)/ace/String_Base.i \
+ $(ACE_ROOT)/ace/Malloc_Base.h \
+ $(ACE_ROOT)/ace/String_Base.cpp \
+ $(ACE_ROOT)/ace/Malloc.h \
+ $(ACE_ROOT)/ace/Log_Msg.h \
+ $(ACE_ROOT)/ace/Log_Priority.h \
+ $(ACE_ROOT)/ace/OS_Log_Msg_Attributes.h \
+ $(ACE_ROOT)/ace/OS_Log_Msg_Attributes.inl \
+ $(ACE_ROOT)/ace/Malloc.i \
+ $(ACE_ROOT)/ace/Malloc_T.h \
+ $(ACE_ROOT)/ace/Synch.h \
+ $(ACE_ROOT)/ace/Synch.i \
+ $(ACE_ROOT)/ace/Synch_T.h \
+ $(ACE_ROOT)/ace/Synch_T.i \
+ $(ACE_ROOT)/ace/Thread.h \
+ $(ACE_ROOT)/ace/Thread_Adapter.h \
+ $(ACE_ROOT)/ace/Base_Thread_Adapter.h \
+ $(ACE_ROOT)/ace/Base_Thread_Adapter.inl \
+ $(ACE_ROOT)/ace/Thread_Adapter.inl \
+ $(ACE_ROOT)/ace/Thread.i \
+ $(ACE_ROOT)/ace/Synch_T.cpp \
+ $(ACE_ROOT)/ace/Malloc_Allocator.h \
+ $(ACE_ROOT)/ace/Malloc_Allocator.i \
+ $(ACE_ROOT)/ace/Free_List.h \
+ $(ACE_ROOT)/ace/Free_List.i \
+ $(ACE_ROOT)/ace/Free_List.cpp \
+ $(ACE_ROOT)/ace/Malloc_T.i \
+ $(ACE_ROOT)/ace/Malloc_T.cpp \
+ $(ACE_ROOT)/ace/Memory_Pool.h \
+ $(ACE_ROOT)/ace/Event_Handler.h \
+ $(ACE_ROOT)/ace/Event_Handler.i \
+ $(ACE_ROOT)/ace/Signal.h \
+ $(ACE_ROOT)/ace/Signal.i \
+ $(ACE_ROOT)/ace/Mem_Map.h \
+ $(ACE_ROOT)/ace/Mem_Map.i \
+ $(ACE_ROOT)/ace/SV_Semaphore_Complex.h \
+ $(ACE_ROOT)/ace/SV_Semaphore_Simple.h \
+ $(ACE_ROOT)/ace/SV_Semaphore_Simple.i \
+ $(ACE_ROOT)/ace/SV_Semaphore_Complex.i \
+ $(ACE_ROOT)/ace/Unbounded_Set.h \
+ $(ACE_ROOT)/ace/Node.h \
+ $(ACE_ROOT)/ace/Node.cpp \
+ $(ACE_ROOT)/ace/Unbounded_Set.inl \
+ $(ACE_ROOT)/ace/Unbounded_Set.cpp \
+ $(ACE_ROOT)/ace/Memory_Pool.i \
+ $(ACE_ROOT)/ace/Auto_Ptr.h \
+ $(ACE_ROOT)/ace/Auto_Ptr.i \
+ $(ACE_ROOT)/ace/Auto_Ptr.cpp \
+ $(ACE_ROOT)/ace/SString.i \
+ $(ACE_ROOT)/ace/Containers.h \
+ $(ACE_ROOT)/ace/Containers.i \
+ $(ACE_ROOT)/ace/Containers_T.h \
+ $(ACE_ROOT)/ace/Array_Base.h \
+ $(ACE_ROOT)/ace/Array_Base.inl \
+ $(ACE_ROOT)/ace/Array_Base.cpp \
+ $(ACE_ROOT)/ace/Unbounded_Queue.h \
+ $(ACE_ROOT)/ace/Unbounded_Queue.inl \
+ $(ACE_ROOT)/ace/Unbounded_Queue.cpp \
+ $(ACE_ROOT)/ace/Containers_T.i \
+ $(ACE_ROOT)/ace/Containers_T.cpp \
+ $(ACE_ROOT)/ace/Get_Opt.i \
+ $(ACE_ROOT)/ace/Task.h \
+ $(ACE_ROOT)/ace/Service_Object.h \
+ $(ACE_ROOT)/ace/Shared_Object.h \
+ $(ACE_ROOT)/ace/Shared_Object.i \
+ $(ACE_ROOT)/ace/Svc_Conf_Tokens.h \
+ $(ACE_ROOT)/ace/DLL.h \
+ $(ACE_ROOT)/ace/Service_Object.i \
+ $(ACE_ROOT)/ace/Thread_Manager.h \
+ $(ACE_ROOT)/ace/Singleton.h \
+ $(ACE_ROOT)/ace/Singleton.i \
+ $(ACE_ROOT)/ace/Singleton.cpp \
+ $(ACE_ROOT)/ace/Object_Manager.h \
+ $(ACE_ROOT)/ace/Object_Manager.i \
+ $(ACE_ROOT)/ace/Managed_Object.h \
+ $(ACE_ROOT)/ace/Managed_Object.i \
+ $(ACE_ROOT)/ace/Managed_Object.cpp \
+ $(ACE_ROOT)/ace/Framework_Component.h \
+ $(ACE_ROOT)/ace/Framework_Component.inl \
+ $(ACE_ROOT)/ace/Framework_Component_T.h \
+ $(ACE_ROOT)/ace/Framework_Component_T.inl \
+ $(ACE_ROOT)/ace/Framework_Component_T.cpp \
+ $(ACE_ROOT)/ace/Thread_Manager.i \
+ $(ACE_ROOT)/ace/Task.i \
+ $(ACE_ROOT)/ace/Task_T.h \
+ $(ACE_ROOT)/ace/Message_Queue.h \
+ $(ACE_ROOT)/ace/Message_Block.h \
+ $(ACE_ROOT)/ace/Message_Block.i \
+ $(ACE_ROOT)/ace/Message_Block_T.h \
+ $(ACE_ROOT)/ace/Message_Block_T.i \
+ $(ACE_ROOT)/ace/Message_Block_T.cpp \
+ $(ACE_ROOT)/ace/IO_Cntl_Msg.h \
+ $(ACE_ROOT)/ace/Message_Queue_T.h \
+ $(ACE_ROOT)/ace/Message_Queue_T.i \
+ $(ACE_ROOT)/ace/Message_Queue_T.cpp \
+ $(ACE_ROOT)/ace/Notification_Strategy.h \
+ $(ACE_ROOT)/ace/Notification_Strategy.inl \
+ $(ACE_ROOT)/ace/Message_Queue.i \
+ $(ACE_ROOT)/ace/Task_T.i \
+ $(ACE_ROOT)/ace/Task_T.cpp \
+ $(ACE_ROOT)/ace/Module.h \
+ $(ACE_ROOT)/ace/Module.i \
+ $(ACE_ROOT)/ace/Module.cpp \
+ $(ACE_ROOT)/ace/Stream_Modules.h \
+ $(ACE_ROOT)/ace/Stream_Modules.cpp \
+ testC.h $(TAO_ROOT)/tao/corba.h \
+ $(TAO_ROOT)/tao/corbafwd.h \
+ $(ACE_ROOT)/ace/CDR_Base.h \
+ $(ACE_ROOT)/ace/CDR_Base.inl \
+ $(ACE_ROOT)/ace/CORBA_macros.h \
+ $(TAO_ROOT)/tao/orbconf.h \
+ $(TAO_ROOT)/tao/varbase.h \
+ $(TAO_ROOT)/tao/TAO_Export.h \
+ $(TAO_ROOT)/tao/corbafwd.i \
+ $(TAO_ROOT)/tao/Typecode.h \
+ $(TAO_ROOT)/tao/Exception.h \
+ $(TAO_ROOT)/tao/Exception.i \
+ $(TAO_ROOT)/tao/Typecode.i \
+ $(TAO_ROOT)/tao/Any.h \
+ $(TAO_ROOT)/tao/CDR.h \
+ $(ACE_ROOT)/ace/CDR_Stream.h \
+ $(ACE_ROOT)/ace/CDR_Stream.i \
+ $(TAO_ROOT)/tao/CDR.i \
+ $(TAO_ROOT)/tao/Environment.h \
+ $(TAO_ROOT)/tao/Environment.i \
+ $(TAO_ROOT)/tao/Object.h \
+ $(TAO_ROOT)/tao/Policy_ForwardC.h \
+ $(TAO_ROOT)/tao/Sequence.h \
+ $(TAO_ROOT)/tao/Managed_Types.h \
+ $(TAO_ROOT)/tao/Managed_Types.i \
+ $(TAO_ROOT)/tao/Sequence.i \
+ $(TAO_ROOT)/tao/Sequence_T.h \
+ $(TAO_ROOT)/tao/Sequence_T.i \
+ $(TAO_ROOT)/tao/Sequence_T.cpp \
+ $(TAO_ROOT)/tao/Policy_ForwardC.i \
+ $(TAO_ROOT)/tao/Object.i \
+ $(TAO_ROOT)/tao/Any.i \
+ $(TAO_ROOT)/tao/NVList.h \
+ $(TAO_ROOT)/tao/NVList.i \
+ $(TAO_ROOT)/tao/LocalObject.h \
+ $(TAO_ROOT)/tao/LocalObject.i \
+ $(TAO_ROOT)/tao/Principal.h \
+ $(TAO_ROOT)/tao/OctetSeqC.h \
+ $(TAO_ROOT)/tao/OctetSeqC.i \
+ $(TAO_ROOT)/tao/Principal.i \
+ $(TAO_ROOT)/tao/ORB.h \
+ $(TAO_ROOT)/tao/Services.h \
+ $(TAO_ROOT)/tao/Services.i \
+ $(TAO_ROOT)/tao/CORBA_String.h \
+ $(TAO_ROOT)/tao/CORBA_String.inl \
+ $(TAO_ROOT)/tao/objectid.h \
+ $(TAO_ROOT)/tao/PolicyC.h \
+ $(TAO_ROOT)/tao/CurrentC.h \
+ $(TAO_ROOT)/tao/CurrentC.i \
+ $(TAO_ROOT)/tao/Remote_Object_Proxy_Impl.h \
+ $(TAO_ROOT)/tao/Object_Proxy_Impl.h \
+ $(TAO_ROOT)/tao/Encodable.h \
+ $(TAO_ROOT)/tao/PolicyC.i \
+ $(TAO_ROOT)/tao/ORB.i \
+ $(TAO_ROOT)/tao/BoundsC.h \
+ $(TAO_ROOT)/tao/BoundsC.i \
+ $(TAO_ROOT)/tao/ValueBase.h \
+ $(TAO_ROOT)/tao/ValueBase.i \
+ $(TAO_ROOT)/tao/ValueFactory.h \
+ $(TAO_ROOT)/tao/ValueFactory.i \
+ $(TAO_ROOT)/tao/AbstractBase.h \
+ $(TAO_ROOT)/tao/AbstractBase.inl \
+ $(TAO_ROOT)/tao/DomainC.h \
+ $(TAO_ROOT)/tao/DomainC.i \
+ $(TAO_ROOT)/tao/WrongTransactionC.h \
+ $(TAO_ROOT)/tao/WrongTransactionC.i \
+ $(TAO_ROOT)/tao/Object_KeyC.h \
+ $(TAO_ROOT)/tao/Object_KeyC.i \
+ $(TAO_ROOT)/tao/ObjectIDList.h \
+ $(TAO_ROOT)/tao/ObjectIDList.i \
+ $(TAO_ROOT)/tao/StringSeqC.h \
+ $(TAO_ROOT)/tao/StringSeqC.i \
+ $(TAO_ROOT)/tao/PortableInterceptorC.h \
+ $(TAO_ROOT)/tao/DynamicC.h \
+ $(TAO_ROOT)/tao/DynamicC.i \
+ $(TAO_ROOT)/tao/ObjectReferenceTemplateC.h \
+ $(TAO_ROOT)/tao/ObjectReferenceTemplateC.i \
+ $(TAO_ROOT)/tao/Messaging_SyncScopeC.h \
+ $(TAO_ROOT)/tao/Messaging_SyncScopeC.i \
+ $(TAO_ROOT)/tao/IOPC.h \
+ $(TAO_ROOT)/tao/IOPC.i \
+ $(TAO_ROOT)/tao/PortableInterceptorC.i \
+ testC.i \
+ $(TAO_ROOT)/tao/RTCORBA/RTCORBA.h \
+ $(TAO_ROOT)/tao/RTCORBA/rtcorba_export.h \
+ $(TAO_ROOT)/tao/RTCORBA/RTCORBAC.h \
+ $(TAO_ROOT)/tao/TimeBaseC.h \
+ $(TAO_ROOT)/tao/SmartProxies/Smart_Proxies.h \
+ $(TAO_ROOT)/tao/SmartProxies/smartproxies_export.h \
+ $(TAO_ROOT)/tao/TAO_Singleton.h \
+ $(TAO_ROOT)/tao/TAO_Singleton.inl \
+ $(TAO_ROOT)/tao/TAO_Singleton.cpp \
+ $(TAO_ROOT)/tao/TAO_Singleton_Manager.h \
+ $(TAO_ROOT)/tao/TAO_Singleton_Manager.inl \
+ $(TAO_ROOT)/tao/SmartProxies/Smart_Proxies.inl \
+ $(TAO_ROOT)/tao/TimeBaseC.i \
+ $(TAO_ROOT)/tao/RTCORBA/RTCORBAC.i \
+ $(TAO_ROOT)/tao/ORB_Core.h \
+ $(TAO_ROOT)/tao/Policy_Manager.h \
+ $(TAO_ROOT)/tao/Policy_Set.h \
+ $(TAO_ROOT)/tao/Policy_Set.i \
+ $(TAO_ROOT)/tao/debug.h \
+ $(TAO_ROOT)/tao/Policy_Manager.i \
+ $(TAO_ROOT)/tao/Resource_Factory.h \
+ $(TAO_ROOT)/tao/params.h \
+ $(TAO_ROOT)/tao/params.i \
+ $(TAO_ROOT)/tao/Adapter.h \
+ $(TAO_ROOT)/tao/Adapter.i \
+ $(TAO_ROOT)/tao/PolicyFactory_Registry.h \
+ $(ACE_ROOT)/ace/Map_Manager.h \
+ $(ACE_ROOT)/ace/Map_Manager.i \
+ $(ACE_ROOT)/ace/Map_Manager.cpp \
+ $(ACE_ROOT)/ace/Service_Config.h \
+ $(ACE_ROOT)/ace/Service_Types.h \
+ $(ACE_ROOT)/ace/Service_Types.i \
+ $(ACE_ROOT)/ace/XML_Svc_Conf.h \
+ $(ACE_ROOT)/ace/Service_Config.i \
+ $(ACE_ROOT)/ace/Reactor.h \
+ $(ACE_ROOT)/ace/Handle_Set.h \
+ $(ACE_ROOT)/ace/Handle_Set.i \
+ $(ACE_ROOT)/ace/Timer_Queue.h \
+ $(ACE_ROOT)/ace/Timer_Queue_T.h \
+ $(ACE_ROOT)/ace/Test_and_Set.h \
+ $(ACE_ROOT)/ace/Test_and_Set.i \
+ $(ACE_ROOT)/ace/Test_and_Set.cpp \
+ $(ACE_ROOT)/ace/Timer_Queue_T.i \
+ $(ACE_ROOT)/ace/Timer_Queue_T.cpp \
+ $(ACE_ROOT)/ace/Reactor.i \
+ $(ACE_ROOT)/ace/Reactor_Impl.h \
+ $(TAO_ROOT)/tao/Parser_Registry.h \
+ $(TAO_ROOT)/tao/Parser_Registry.i \
+ $(TAO_ROOT)/tao/Service_Callbacks.h \
+ $(TAO_ROOT)/tao/Service_Callbacks.i \
+ $(TAO_ROOT)/tao/Fault_Tolerance_Service.h \
+ $(TAO_ROOT)/tao/Fault_Tolerance_Service.i \
+ $(TAO_ROOT)/tao/Cleanup_Func_Registry.h \
+ $(TAO_ROOT)/tao/Cleanup_Func_Registry.inl \
+ $(TAO_ROOT)/tao/Object_Ref_Table.h \
+ $(ACE_ROOT)/ace/Hash_Map_Manager_T.h \
+ $(ACE_ROOT)/ace/Functor.h \
+ $(ACE_ROOT)/ace/Functor.i \
+ $(ACE_ROOT)/ace/Functor_T.h \
+ $(ACE_ROOT)/ace/Functor_T.i \
+ $(ACE_ROOT)/ace/Functor_T.cpp \
+ $(ACE_ROOT)/ace/Hash_Map_Manager_T.i \
+ $(ACE_ROOT)/ace/Hash_Map_Manager_T.cpp \
+ $(TAO_ROOT)/tao/Interceptor_List.h \
+ $(TAO_ROOT)/tao/Interceptor_List.inl \
+ $(TAO_ROOT)/tao/PICurrent.h \
+ $(TAO_ROOT)/tao/PICurrent.inl \
+ $(TAO_ROOT)/tao/ORB_Core.i \
+ ../check_supported_priorities.cpp \
+ $(ACE_ROOT)/ace/Sched_Params.h \
+ $(ACE_ROOT)/ace/Sched_Params.i \
+ readers.cpp \
+ $(ACE_ROOT)/ace/Read_Buffer.h \
+ $(ACE_ROOT)/ace/Read_Buffer.i
+
+.obj/server.o .obj/server.so .shobj/server.o .shobj/server.so: server.cpp \
+ $(ACE_ROOT)/ace/Get_Opt.h \
+ $(ACE_ROOT)/ace/pre.h \
+ $(ACE_ROOT)/ace/SString.h \
+ $(ACE_ROOT)/ace/String_Base.h \
+ $(ACE_ROOT)/ace/ACE.h \
+ $(ACE_ROOT)/ace/OS.h \
+ $(ACE_ROOT)/ace/config-sunos5.6.h \
+ $(ACE_ROOT)/ace/config-sunos5.5.h \
+ $(ACE_ROOT)/ace/post.h \
+ $(ACE_ROOT)/ace/ace_wchar.h \
+ $(ACE_ROOT)/ace/ace_wchar.inl \
+ $(ACE_ROOT)/ace/OS_Dirent.h \
+ $(ACE_ROOT)/ace/OS_Export.h \
+ $(ACE_ROOT)/ace/OS_Errno.h \
+ $(ACE_ROOT)/ace/OS_Errno.inl \
+ $(ACE_ROOT)/ace/OS_Dirent.inl \
+ $(ACE_ROOT)/ace/OS_String.h \
+ $(ACE_ROOT)/ace/Basic_Types.h \
+ $(ACE_ROOT)/ace/ACE_export.h \
+ $(ACE_ROOT)/ace/Basic_Types.i \
+ $(ACE_ROOT)/ace/OS_String.inl \
+ $(ACE_ROOT)/ace/OS_Memory.h \
+ $(ACE_ROOT)/ace/OS_Memory.inl \
+ $(ACE_ROOT)/ace/OS_TLI.h \
+ $(ACE_ROOT)/ace/OS_TLI.inl \
+ $(ACE_ROOT)/ace/Time_Value.h \
+ $(ACE_ROOT)/ace/Time_Value.inl \
+ $(ACE_ROOT)/ace/Default_Constants.h \
+ $(ACE_ROOT)/ace/Global_Macros.h \
+ $(ACE_ROOT)/ace/Min_Max.h \
+ $(ACE_ROOT)/ace/streams.h \
+ $(ACE_ROOT)/ace/Trace.h \
+ $(ACE_ROOT)/ace/OS.i \
+ $(ACE_ROOT)/ace/Flag_Manip.h \
+ $(ACE_ROOT)/ace/Flag_Manip.i \
+ $(ACE_ROOT)/ace/Handle_Ops.h \
+ $(ACE_ROOT)/ace/Handle_Ops.i \
+ $(ACE_ROOT)/ace/Lib_Find.h \
+ $(ACE_ROOT)/ace/Lib_Find.i \
+ $(ACE_ROOT)/ace/Init_ACE.h \
+ $(ACE_ROOT)/ace/Init_ACE.i \
+ $(ACE_ROOT)/ace/Sock_Connect.h \
+ $(ACE_ROOT)/ace/Sock_Connect.i \
+ $(ACE_ROOT)/ace/ACE.i \
+ $(ACE_ROOT)/ace/String_Base_Const.h \
+ $(ACE_ROOT)/ace/String_Base.i \
+ $(ACE_ROOT)/ace/Malloc_Base.h \
+ $(ACE_ROOT)/ace/String_Base.cpp \
+ $(ACE_ROOT)/ace/Malloc.h \
+ $(ACE_ROOT)/ace/Log_Msg.h \
+ $(ACE_ROOT)/ace/Log_Priority.h \
+ $(ACE_ROOT)/ace/OS_Log_Msg_Attributes.h \
+ $(ACE_ROOT)/ace/OS_Log_Msg_Attributes.inl \
+ $(ACE_ROOT)/ace/Malloc.i \
+ $(ACE_ROOT)/ace/Malloc_T.h \
+ $(ACE_ROOT)/ace/Synch.h \
+ $(ACE_ROOT)/ace/Synch.i \
+ $(ACE_ROOT)/ace/Synch_T.h \
+ $(ACE_ROOT)/ace/Synch_T.i \
+ $(ACE_ROOT)/ace/Thread.h \
+ $(ACE_ROOT)/ace/Thread_Adapter.h \
+ $(ACE_ROOT)/ace/Base_Thread_Adapter.h \
+ $(ACE_ROOT)/ace/Base_Thread_Adapter.inl \
+ $(ACE_ROOT)/ace/Thread_Adapter.inl \
+ $(ACE_ROOT)/ace/Thread.i \
+ $(ACE_ROOT)/ace/Synch_T.cpp \
+ $(ACE_ROOT)/ace/Malloc_Allocator.h \
+ $(ACE_ROOT)/ace/Malloc_Allocator.i \
+ $(ACE_ROOT)/ace/Free_List.h \
+ $(ACE_ROOT)/ace/Free_List.i \
+ $(ACE_ROOT)/ace/Free_List.cpp \
+ $(ACE_ROOT)/ace/Malloc_T.i \
+ $(ACE_ROOT)/ace/Malloc_T.cpp \
+ $(ACE_ROOT)/ace/Memory_Pool.h \
+ $(ACE_ROOT)/ace/Event_Handler.h \
+ $(ACE_ROOT)/ace/Event_Handler.i \
+ $(ACE_ROOT)/ace/Signal.h \
+ $(ACE_ROOT)/ace/Signal.i \
+ $(ACE_ROOT)/ace/Mem_Map.h \
+ $(ACE_ROOT)/ace/Mem_Map.i \
+ $(ACE_ROOT)/ace/SV_Semaphore_Complex.h \
+ $(ACE_ROOT)/ace/SV_Semaphore_Simple.h \
+ $(ACE_ROOT)/ace/SV_Semaphore_Simple.i \
+ $(ACE_ROOT)/ace/SV_Semaphore_Complex.i \
+ $(ACE_ROOT)/ace/Unbounded_Set.h \
+ $(ACE_ROOT)/ace/Node.h \
+ $(ACE_ROOT)/ace/Node.cpp \
+ $(ACE_ROOT)/ace/Unbounded_Set.inl \
+ $(ACE_ROOT)/ace/Unbounded_Set.cpp \
+ $(ACE_ROOT)/ace/Memory_Pool.i \
+ $(ACE_ROOT)/ace/Auto_Ptr.h \
+ $(ACE_ROOT)/ace/Auto_Ptr.i \
+ $(ACE_ROOT)/ace/Auto_Ptr.cpp \
+ $(ACE_ROOT)/ace/SString.i \
+ $(ACE_ROOT)/ace/Containers.h \
+ $(ACE_ROOT)/ace/Containers.i \
+ $(ACE_ROOT)/ace/Containers_T.h \
+ $(ACE_ROOT)/ace/Array_Base.h \
+ $(ACE_ROOT)/ace/Array_Base.inl \
+ $(ACE_ROOT)/ace/Array_Base.cpp \
+ $(ACE_ROOT)/ace/Unbounded_Queue.h \
+ $(ACE_ROOT)/ace/Unbounded_Queue.inl \
+ $(ACE_ROOT)/ace/Unbounded_Queue.cpp \
+ $(ACE_ROOT)/ace/Containers_T.i \
+ $(ACE_ROOT)/ace/Containers_T.cpp \
+ $(ACE_ROOT)/ace/Get_Opt.i testS.h \
+ testC.h $(TAO_ROOT)/tao/corba.h \
+ $(TAO_ROOT)/tao/corbafwd.h \
+ $(ACE_ROOT)/ace/CDR_Base.h \
+ $(ACE_ROOT)/ace/Message_Block.h \
+ $(ACE_ROOT)/ace/Message_Block.i \
+ $(ACE_ROOT)/ace/Message_Block_T.h \
+ $(ACE_ROOT)/ace/Message_Block_T.i \
+ $(ACE_ROOT)/ace/Message_Block_T.cpp \
+ $(ACE_ROOT)/ace/CDR_Base.inl \
+ $(ACE_ROOT)/ace/CORBA_macros.h \
+ $(TAO_ROOT)/tao/orbconf.h \
+ $(TAO_ROOT)/tao/varbase.h \
+ $(TAO_ROOT)/tao/TAO_Export.h \
+ $(TAO_ROOT)/tao/corbafwd.i \
+ $(TAO_ROOT)/tao/Typecode.h \
+ $(TAO_ROOT)/tao/Exception.h \
+ $(TAO_ROOT)/tao/Exception.i \
+ $(TAO_ROOT)/tao/Typecode.i \
+ $(TAO_ROOT)/tao/Any.h \
+ $(TAO_ROOT)/tao/CDR.h \
+ $(ACE_ROOT)/ace/CDR_Stream.h \
+ $(ACE_ROOT)/ace/CDR_Stream.i \
+ $(TAO_ROOT)/tao/CDR.i \
+ $(TAO_ROOT)/tao/Environment.h \
+ $(TAO_ROOT)/tao/Environment.i \
+ $(TAO_ROOT)/tao/Object.h \
+ $(TAO_ROOT)/tao/Policy_ForwardC.h \
+ $(TAO_ROOT)/tao/Sequence.h \
+ $(TAO_ROOT)/tao/Managed_Types.h \
+ $(TAO_ROOT)/tao/Managed_Types.i \
+ $(TAO_ROOT)/tao/Sequence.i \
+ $(TAO_ROOT)/tao/Sequence_T.h \
+ $(TAO_ROOT)/tao/Sequence_T.i \
+ $(TAO_ROOT)/tao/Sequence_T.cpp \
+ $(TAO_ROOT)/tao/Policy_ForwardC.i \
+ $(TAO_ROOT)/tao/Object.i \
+ $(TAO_ROOT)/tao/Any.i \
+ $(TAO_ROOT)/tao/NVList.h \
+ $(TAO_ROOT)/tao/NVList.i \
+ $(TAO_ROOT)/tao/LocalObject.h \
+ $(TAO_ROOT)/tao/LocalObject.i \
+ $(TAO_ROOT)/tao/Principal.h \
+ $(TAO_ROOT)/tao/OctetSeqC.h \
+ $(TAO_ROOT)/tao/OctetSeqC.i \
+ $(TAO_ROOT)/tao/Principal.i \
+ $(TAO_ROOT)/tao/ORB.h \
+ $(TAO_ROOT)/tao/Services.h \
+ $(TAO_ROOT)/tao/Services.i \
+ $(TAO_ROOT)/tao/CORBA_String.h \
+ $(TAO_ROOT)/tao/CORBA_String.inl \
+ $(TAO_ROOT)/tao/objectid.h \
+ $(TAO_ROOT)/tao/PolicyC.h \
+ $(TAO_ROOT)/tao/CurrentC.h \
+ $(TAO_ROOT)/tao/CurrentC.i \
+ $(TAO_ROOT)/tao/Remote_Object_Proxy_Impl.h \
+ $(TAO_ROOT)/tao/Object_Proxy_Impl.h \
+ $(TAO_ROOT)/tao/Encodable.h \
+ $(TAO_ROOT)/tao/PolicyC.i \
+ $(TAO_ROOT)/tao/ORB.i \
+ $(TAO_ROOT)/tao/BoundsC.h \
+ $(TAO_ROOT)/tao/BoundsC.i \
+ $(TAO_ROOT)/tao/ValueBase.h \
+ $(TAO_ROOT)/tao/ValueBase.i \
+ $(TAO_ROOT)/tao/ValueFactory.h \
+ $(TAO_ROOT)/tao/ValueFactory.i \
+ $(TAO_ROOT)/tao/AbstractBase.h \
+ $(TAO_ROOT)/tao/AbstractBase.inl \
+ $(TAO_ROOT)/tao/DomainC.h \
+ $(TAO_ROOT)/tao/DomainC.i \
+ $(TAO_ROOT)/tao/WrongTransactionC.h \
+ $(TAO_ROOT)/tao/WrongTransactionC.i \
+ $(TAO_ROOT)/tao/Object_KeyC.h \
+ $(TAO_ROOT)/tao/Object_KeyC.i \
+ $(TAO_ROOT)/tao/ObjectIDList.h \
+ $(TAO_ROOT)/tao/ObjectIDList.i \
+ $(TAO_ROOT)/tao/StringSeqC.h \
+ $(TAO_ROOT)/tao/StringSeqC.i \
+ $(TAO_ROOT)/tao/PortableInterceptorC.h \
+ $(TAO_ROOT)/tao/DynamicC.h \
+ $(TAO_ROOT)/tao/DynamicC.i \
+ $(TAO_ROOT)/tao/ObjectReferenceTemplateC.h \
+ $(TAO_ROOT)/tao/ObjectReferenceTemplateC.i \
+ $(TAO_ROOT)/tao/Messaging_SyncScopeC.h \
+ $(TAO_ROOT)/tao/Messaging_SyncScopeC.i \
+ $(TAO_ROOT)/tao/IOPC.h \
+ $(TAO_ROOT)/tao/IOPC.i \
+ $(TAO_ROOT)/tao/PortableInterceptorC.i \
+ testC.i \
+ $(TAO_ROOT)/tao/PortableServer/PortableServer.h \
+ $(TAO_ROOT)/tao/PortableServer/portableserver_export.h \
+ $(TAO_ROOT)/tao/PortableServer/PortableServerC.h \
+ $(TAO_ROOT)/tao/PortableServer/PortableServerC.i \
+ $(TAO_ROOT)/tao/PortableServer/Servant_Base.h \
+ $(TAO_ROOT)/tao/Abstract_Servant_Base.h \
+ $(ACE_ROOT)/ace/Atomic_Op.h \
+ $(ACE_ROOT)/ace/Atomic_Op.i \
+ $(ACE_ROOT)/ace/Atomic_Op.cpp \
+ $(TAO_ROOT)/tao/PortableServer/Servant_Base.i \
+ $(TAO_ROOT)/tao/PortableServer/Collocated_Object.h \
+ $(TAO_ROOT)/tao/PortableServer/Collocated_Object.i \
+ $(TAO_ROOT)/tao/PortableServer/ThruPOA_Object_Proxy_Impl.h \
+ $(TAO_ROOT)/tao/PortableServer/Direct_Object_Proxy_Impl.h \
+ testS_T.h testS_T.i testS_T.cpp testS.i \
+ $(TAO_ROOT)/tao/RTPortableServer/RTPortableServer.h \
+ $(TAO_ROOT)/tao/RTPortableServer/rtportableserver_export.h \
+ $(TAO_ROOT)/tao/RTCORBA/RTCORBA.h \
+ $(TAO_ROOT)/tao/RTCORBA/rtcorba_export.h \
+ $(TAO_ROOT)/tao/RTCORBA/RTCORBAC.h \
+ $(TAO_ROOT)/tao/TimeBaseC.h \
+ $(TAO_ROOT)/tao/SmartProxies/Smart_Proxies.h \
+ $(TAO_ROOT)/tao/SmartProxies/smartproxies_export.h \
+ $(TAO_ROOT)/tao/TAO_Singleton.h \
+ $(TAO_ROOT)/tao/TAO_Singleton.inl \
+ $(TAO_ROOT)/tao/TAO_Singleton.cpp \
+ $(ACE_ROOT)/ace/Object_Manager.h \
+ $(ACE_ROOT)/ace/Object_Manager.i \
+ $(ACE_ROOT)/ace/Managed_Object.h \
+ $(ACE_ROOT)/ace/Managed_Object.i \
+ $(ACE_ROOT)/ace/Managed_Object.cpp \
+ $(TAO_ROOT)/tao/TAO_Singleton_Manager.h \
+ $(TAO_ROOT)/tao/TAO_Singleton_Manager.inl \
+ $(TAO_ROOT)/tao/SmartProxies/Smart_Proxies.inl \
+ $(TAO_ROOT)/tao/TimeBaseC.i \
+ $(TAO_ROOT)/tao/RTCORBA/RTCORBAC.i \
+ $(TAO_ROOT)/tao/RTPortableServer/RTPortableServerC.h \
+ $(TAO_ROOT)/tao/RTPortableServer/RTPortableServerC.i \
+ ../check_supported_priorities.cpp \
+ $(ACE_ROOT)/ace/Sched_Params.h \
+ $(ACE_ROOT)/ace/Sched_Params.i \
+ readers.cpp \
+ $(ACE_ROOT)/ace/Read_Buffer.h \
+ $(ACE_ROOT)/ace/Read_Buffer.i
+
+.obj/testC.o .obj/testC.so .shobj/testC.o .shobj/testC.so: testC.cpp testC.h \
+ $(TAO_ROOT)/tao/corba.h \
+ $(ACE_ROOT)/ace/pre.h \
+ $(ACE_ROOT)/ace/config-sunos5.6.h \
+ $(ACE_ROOT)/ace/config-sunos5.5.h \
+ $(ACE_ROOT)/ace/post.h \
+ $(ACE_ROOT)/ace/ace_wchar.h \
+ $(ACE_ROOT)/ace/ace_wchar.inl \
+ $(TAO_ROOT)/tao/corbafwd.h \
+ $(ACE_ROOT)/ace/CDR_Base.h \
+ $(ACE_ROOT)/ace/Basic_Types.h \
+ $(ACE_ROOT)/ace/ACE_export.h \
+ $(ACE_ROOT)/ace/Basic_Types.i \
+ $(ACE_ROOT)/ace/Message_Block.h \
+ $(ACE_ROOT)/ace/OS.h \
+ $(ACE_ROOT)/ace/OS_Dirent.h \
+ $(ACE_ROOT)/ace/OS_Export.h \
+ $(ACE_ROOT)/ace/OS_Errno.h \
+ $(ACE_ROOT)/ace/OS_Errno.inl \
+ $(ACE_ROOT)/ace/OS_Dirent.inl \
+ $(ACE_ROOT)/ace/OS_String.h \
+ $(ACE_ROOT)/ace/OS_String.inl \
+ $(ACE_ROOT)/ace/OS_Memory.h \
+ $(ACE_ROOT)/ace/OS_Memory.inl \
+ $(ACE_ROOT)/ace/OS_TLI.h \
+ $(ACE_ROOT)/ace/OS_TLI.inl \
+ $(ACE_ROOT)/ace/Time_Value.h \
+ $(ACE_ROOT)/ace/Time_Value.inl \
+ $(ACE_ROOT)/ace/Default_Constants.h \
+ $(ACE_ROOT)/ace/Global_Macros.h \
+ $(ACE_ROOT)/ace/Min_Max.h \
+ $(ACE_ROOT)/ace/streams.h \
+ $(ACE_ROOT)/ace/Trace.h \
+ $(ACE_ROOT)/ace/OS.i \
+ $(ACE_ROOT)/ace/Message_Block.i \
+ $(ACE_ROOT)/ace/Message_Block_T.h \
+ $(ACE_ROOT)/ace/Message_Block_T.i \
+ $(ACE_ROOT)/ace/Message_Block_T.cpp \
+ $(ACE_ROOT)/ace/CDR_Base.inl \
+ $(ACE_ROOT)/ace/CORBA_macros.h \
+ $(TAO_ROOT)/tao/orbconf.h \
+ $(TAO_ROOT)/tao/varbase.h \
+ $(TAO_ROOT)/tao/TAO_Export.h \
+ $(TAO_ROOT)/tao/corbafwd.i \
+ $(TAO_ROOT)/tao/Typecode.h \
+ $(ACE_ROOT)/ace/Synch.h \
+ $(ACE_ROOT)/ace/Synch.i \
+ $(ACE_ROOT)/ace/Synch_T.h \
+ $(ACE_ROOT)/ace/Synch_T.i \
+ $(ACE_ROOT)/ace/Thread.h \
+ $(ACE_ROOT)/ace/Thread_Adapter.h \
+ $(ACE_ROOT)/ace/Base_Thread_Adapter.h \
+ $(ACE_ROOT)/ace/OS_Log_Msg_Attributes.h \
+ $(ACE_ROOT)/ace/OS_Log_Msg_Attributes.inl \
+ $(ACE_ROOT)/ace/Base_Thread_Adapter.inl \
+ $(ACE_ROOT)/ace/Thread_Adapter.inl \
+ $(ACE_ROOT)/ace/Thread.i \
+ $(ACE_ROOT)/ace/Synch_T.cpp \
+ $(ACE_ROOT)/ace/Log_Msg.h \
+ $(ACE_ROOT)/ace/Log_Priority.h \
+ $(TAO_ROOT)/tao/Exception.h \
+ $(ACE_ROOT)/ace/SString.h \
+ $(ACE_ROOT)/ace/String_Base.h \
+ $(ACE_ROOT)/ace/ACE.h \
+ $(ACE_ROOT)/ace/Flag_Manip.h \
+ $(ACE_ROOT)/ace/Flag_Manip.i \
+ $(ACE_ROOT)/ace/Handle_Ops.h \
+ $(ACE_ROOT)/ace/Handle_Ops.i \
+ $(ACE_ROOT)/ace/Lib_Find.h \
+ $(ACE_ROOT)/ace/Lib_Find.i \
+ $(ACE_ROOT)/ace/Init_ACE.h \
+ $(ACE_ROOT)/ace/Init_ACE.i \
+ $(ACE_ROOT)/ace/Sock_Connect.h \
+ $(ACE_ROOT)/ace/Sock_Connect.i \
+ $(ACE_ROOT)/ace/ACE.i \
+ $(ACE_ROOT)/ace/String_Base_Const.h \
+ $(ACE_ROOT)/ace/String_Base.i \
+ $(ACE_ROOT)/ace/Malloc_Base.h \
+ $(ACE_ROOT)/ace/String_Base.cpp \
+ $(ACE_ROOT)/ace/Malloc.h \
+ $(ACE_ROOT)/ace/Malloc.i \
+ $(ACE_ROOT)/ace/Malloc_T.h \
+ $(ACE_ROOT)/ace/Malloc_Allocator.h \
+ $(ACE_ROOT)/ace/Malloc_Allocator.i \
+ $(ACE_ROOT)/ace/Free_List.h \
+ $(ACE_ROOT)/ace/Free_List.i \
+ $(ACE_ROOT)/ace/Free_List.cpp \
+ $(ACE_ROOT)/ace/Malloc_T.i \
+ $(ACE_ROOT)/ace/Malloc_T.cpp \
+ $(ACE_ROOT)/ace/Memory_Pool.h \
+ $(ACE_ROOT)/ace/Event_Handler.h \
+ $(ACE_ROOT)/ace/Event_Handler.i \
+ $(ACE_ROOT)/ace/Signal.h \
+ $(ACE_ROOT)/ace/Signal.i \
+ $(ACE_ROOT)/ace/Mem_Map.h \
+ $(ACE_ROOT)/ace/Mem_Map.i \
+ $(ACE_ROOT)/ace/SV_Semaphore_Complex.h \
+ $(ACE_ROOT)/ace/SV_Semaphore_Simple.h \
+ $(ACE_ROOT)/ace/SV_Semaphore_Simple.i \
+ $(ACE_ROOT)/ace/SV_Semaphore_Complex.i \
+ $(ACE_ROOT)/ace/Unbounded_Set.h \
+ $(ACE_ROOT)/ace/Node.h \
+ $(ACE_ROOT)/ace/Node.cpp \
+ $(ACE_ROOT)/ace/Unbounded_Set.inl \
+ $(ACE_ROOT)/ace/Unbounded_Set.cpp \
+ $(ACE_ROOT)/ace/Memory_Pool.i \
+ $(ACE_ROOT)/ace/Auto_Ptr.h \
+ $(ACE_ROOT)/ace/Auto_Ptr.i \
+ $(ACE_ROOT)/ace/Auto_Ptr.cpp \
+ $(ACE_ROOT)/ace/SString.i \
+ $(TAO_ROOT)/tao/Exception.i \
+ $(TAO_ROOT)/tao/Typecode.i \
+ $(TAO_ROOT)/tao/Any.h \
+ $(TAO_ROOT)/tao/CDR.h \
+ $(ACE_ROOT)/ace/CDR_Stream.h \
+ $(ACE_ROOT)/ace/CDR_Stream.i \
+ $(TAO_ROOT)/tao/CDR.i \
+ $(TAO_ROOT)/tao/Environment.h \
+ $(TAO_ROOT)/tao/Environment.i \
+ $(TAO_ROOT)/tao/Object.h \
+ $(TAO_ROOT)/tao/Policy_ForwardC.h \
+ $(TAO_ROOT)/tao/Sequence.h \
+ $(TAO_ROOT)/tao/Managed_Types.h \
+ $(TAO_ROOT)/tao/Managed_Types.i \
+ $(TAO_ROOT)/tao/Sequence.i \
+ $(TAO_ROOT)/tao/Sequence_T.h \
+ $(TAO_ROOT)/tao/Sequence_T.i \
+ $(TAO_ROOT)/tao/Sequence_T.cpp \
+ $(TAO_ROOT)/tao/Policy_ForwardC.i \
+ $(TAO_ROOT)/tao/Object.i \
+ $(TAO_ROOT)/tao/Any.i \
+ $(TAO_ROOT)/tao/NVList.h \
+ $(ACE_ROOT)/ace/Unbounded_Queue.h \
+ $(ACE_ROOT)/ace/Unbounded_Queue.inl \
+ $(ACE_ROOT)/ace/Unbounded_Queue.cpp \
+ $(TAO_ROOT)/tao/NVList.i \
+ $(TAO_ROOT)/tao/LocalObject.h \
+ $(TAO_ROOT)/tao/LocalObject.i \
+ $(TAO_ROOT)/tao/Principal.h \
+ $(TAO_ROOT)/tao/OctetSeqC.h \
+ $(TAO_ROOT)/tao/OctetSeqC.i \
+ $(TAO_ROOT)/tao/Principal.i \
+ $(TAO_ROOT)/tao/ORB.h \
+ $(TAO_ROOT)/tao/Services.h \
+ $(TAO_ROOT)/tao/Services.i \
+ $(TAO_ROOT)/tao/CORBA_String.h \
+ $(TAO_ROOT)/tao/CORBA_String.inl \
+ $(TAO_ROOT)/tao/objectid.h \
+ $(TAO_ROOT)/tao/PolicyC.h \
+ $(TAO_ROOT)/tao/CurrentC.h \
+ $(TAO_ROOT)/tao/CurrentC.i \
+ $(TAO_ROOT)/tao/Remote_Object_Proxy_Impl.h \
+ $(TAO_ROOT)/tao/Object_Proxy_Impl.h \
+ $(TAO_ROOT)/tao/Encodable.h \
+ $(TAO_ROOT)/tao/PolicyC.i \
+ $(TAO_ROOT)/tao/ORB.i \
+ $(TAO_ROOT)/tao/BoundsC.h \
+ $(TAO_ROOT)/tao/BoundsC.i \
+ $(TAO_ROOT)/tao/ValueBase.h \
+ $(TAO_ROOT)/tao/ValueBase.i \
+ $(TAO_ROOT)/tao/ValueFactory.h \
+ $(TAO_ROOT)/tao/ValueFactory.i \
+ $(TAO_ROOT)/tao/AbstractBase.h \
+ $(TAO_ROOT)/tao/AbstractBase.inl \
+ $(TAO_ROOT)/tao/DomainC.h \
+ $(TAO_ROOT)/tao/DomainC.i \
+ $(TAO_ROOT)/tao/WrongTransactionC.h \
+ $(TAO_ROOT)/tao/WrongTransactionC.i \
+ $(TAO_ROOT)/tao/Object_KeyC.h \
+ $(TAO_ROOT)/tao/Object_KeyC.i \
+ $(TAO_ROOT)/tao/ObjectIDList.h \
+ $(TAO_ROOT)/tao/ObjectIDList.i \
+ $(TAO_ROOT)/tao/StringSeqC.h \
+ $(TAO_ROOT)/tao/StringSeqC.i \
+ $(TAO_ROOT)/tao/PortableInterceptorC.h \
+ $(TAO_ROOT)/tao/DynamicC.h \
+ $(TAO_ROOT)/tao/DynamicC.i \
+ $(TAO_ROOT)/tao/ObjectReferenceTemplateC.h \
+ $(TAO_ROOT)/tao/ObjectReferenceTemplateC.i \
+ $(TAO_ROOT)/tao/Messaging_SyncScopeC.h \
+ $(TAO_ROOT)/tao/Messaging_SyncScopeC.i \
+ $(TAO_ROOT)/tao/IOPC.h \
+ $(TAO_ROOT)/tao/IOPC.i \
+ $(TAO_ROOT)/tao/PortableInterceptorC.i \
+ testC.i $(TAO_ROOT)/tao/Stub.h \
+ $(TAO_ROOT)/tao/MProfile.h \
+ $(TAO_ROOT)/tao/MProfile.i \
+ $(TAO_ROOT)/tao/ORB_Core.h \
+ $(TAO_ROOT)/tao/Policy_Manager.h \
+ $(TAO_ROOT)/tao/Policy_Set.h \
+ $(TAO_ROOT)/tao/Policy_Set.i \
+ $(TAO_ROOT)/tao/debug.h \
+ $(TAO_ROOT)/tao/Policy_Manager.i \
+ $(TAO_ROOT)/tao/Resource_Factory.h \
+ $(ACE_ROOT)/ace/Service_Object.h \
+ $(ACE_ROOT)/ace/Shared_Object.h \
+ $(ACE_ROOT)/ace/Shared_Object.i \
+ $(ACE_ROOT)/ace/Svc_Conf_Tokens.h \
+ $(ACE_ROOT)/ace/DLL.h \
+ $(ACE_ROOT)/ace/Service_Object.i \
+ $(TAO_ROOT)/tao/params.h \
+ $(TAO_ROOT)/tao/params.i \
+ $(TAO_ROOT)/tao/TAO_Singleton_Manager.h \
+ $(TAO_ROOT)/tao/TAO_Singleton_Manager.inl \
+ $(TAO_ROOT)/tao/TAO_Singleton.h \
+ $(TAO_ROOT)/tao/TAO_Singleton.inl \
+ $(TAO_ROOT)/tao/TAO_Singleton.cpp \
+ $(ACE_ROOT)/ace/Object_Manager.h \
+ $(ACE_ROOT)/ace/Object_Manager.i \
+ $(ACE_ROOT)/ace/Managed_Object.h \
+ $(ACE_ROOT)/ace/Managed_Object.i \
+ $(ACE_ROOT)/ace/Managed_Object.cpp \
+ $(TAO_ROOT)/tao/Adapter.h \
+ $(TAO_ROOT)/tao/Adapter.i \
+ $(TAO_ROOT)/tao/PolicyFactory_Registry.h \
+ $(ACE_ROOT)/ace/Map_Manager.h \
+ $(ACE_ROOT)/ace/Map_Manager.i \
+ $(ACE_ROOT)/ace/Map_Manager.cpp \
+ $(ACE_ROOT)/ace/Service_Config.h \
+ $(ACE_ROOT)/ace/Service_Types.h \
+ $(ACE_ROOT)/ace/Service_Types.i \
+ $(ACE_ROOT)/ace/XML_Svc_Conf.h \
+ $(ACE_ROOT)/ace/Service_Config.i \
+ $(ACE_ROOT)/ace/Reactor.h \
+ $(ACE_ROOT)/ace/Handle_Set.h \
+ $(ACE_ROOT)/ace/Handle_Set.i \
+ $(ACE_ROOT)/ace/Timer_Queue.h \
+ $(ACE_ROOT)/ace/Timer_Queue_T.h \
+ $(ACE_ROOT)/ace/Test_and_Set.h \
+ $(ACE_ROOT)/ace/Test_and_Set.i \
+ $(ACE_ROOT)/ace/Test_and_Set.cpp \
+ $(ACE_ROOT)/ace/Timer_Queue_T.i \
+ $(ACE_ROOT)/ace/Timer_Queue_T.cpp \
+ $(ACE_ROOT)/ace/Reactor.i \
+ $(ACE_ROOT)/ace/Reactor_Impl.h \
+ $(TAO_ROOT)/tao/Parser_Registry.h \
+ $(TAO_ROOT)/tao/Parser_Registry.i \
+ $(TAO_ROOT)/tao/Service_Callbacks.h \
+ $(TAO_ROOT)/tao/Service_Callbacks.i \
+ $(TAO_ROOT)/tao/Fault_Tolerance_Service.h \
+ $(TAO_ROOT)/tao/Fault_Tolerance_Service.i \
+ $(TAO_ROOT)/tao/Cleanup_Func_Registry.h \
+ $(ACE_ROOT)/ace/Array_Base.h \
+ $(ACE_ROOT)/ace/Array_Base.inl \
+ $(ACE_ROOT)/ace/Array_Base.cpp \
+ $(TAO_ROOT)/tao/Cleanup_Func_Registry.inl \
+ $(TAO_ROOT)/tao/Object_Ref_Table.h \
+ $(ACE_ROOT)/ace/Hash_Map_Manager_T.h \
+ $(ACE_ROOT)/ace/Functor.h \
+ $(ACE_ROOT)/ace/Functor.i \
+ $(ACE_ROOT)/ace/Functor_T.h \
+ $(ACE_ROOT)/ace/Functor_T.i \
+ $(ACE_ROOT)/ace/Functor_T.cpp \
+ $(ACE_ROOT)/ace/Hash_Map_Manager_T.i \
+ $(ACE_ROOT)/ace/Hash_Map_Manager_T.cpp \
+ $(TAO_ROOT)/tao/Interceptor_List.h \
+ $(TAO_ROOT)/tao/Interceptor_List.inl \
+ $(TAO_ROOT)/tao/PICurrent.h \
+ $(TAO_ROOT)/tao/PICurrent.inl \
+ $(ACE_ROOT)/ace/Thread_Manager.h \
+ $(ACE_ROOT)/ace/Containers.h \
+ $(ACE_ROOT)/ace/Containers.i \
+ $(ACE_ROOT)/ace/Containers_T.h \
+ $(ACE_ROOT)/ace/Containers_T.i \
+ $(ACE_ROOT)/ace/Containers_T.cpp \
+ $(ACE_ROOT)/ace/Singleton.h \
+ $(ACE_ROOT)/ace/Singleton.i \
+ $(ACE_ROOT)/ace/Singleton.cpp \
+ $(ACE_ROOT)/ace/Framework_Component.h \
+ $(ACE_ROOT)/ace/Framework_Component.inl \
+ $(ACE_ROOT)/ace/Framework_Component_T.h \
+ $(ACE_ROOT)/ace/Framework_Component_T.inl \
+ $(ACE_ROOT)/ace/Framework_Component_T.cpp \
+ $(ACE_ROOT)/ace/Thread_Manager.i \
+ $(TAO_ROOT)/tao/ORB_Core.i \
+ $(TAO_ROOT)/tao/Stub.i \
+ $(TAO_ROOT)/tao/Invocation.h \
+ $(TAO_ROOT)/tao/Synch_Reply_Dispatcher.h \
+ $(TAO_ROOT)/tao/Reply_Dispatcher.h \
+ $(TAO_ROOT)/tao/Reply_Dispatcher.i \
+ $(TAO_ROOT)/tao/LF_Event.h \
+ $(TAO_ROOT)/tao/LF_Event.inl \
+ $(TAO_ROOT)/tao/GIOP_Message_Version.h \
+ $(TAO_ROOT)/tao/GIOP_Message_Version.inl \
+ $(TAO_ROOT)/tao/operation_details.h \
+ $(TAO_ROOT)/tao/Service_Context.h \
+ $(TAO_ROOT)/tao/Service_Context.inl \
+ $(TAO_ROOT)/tao/target_specification.h \
+ $(TAO_ROOT)/tao/target_specification.i \
+ $(TAO_ROOT)/tao/operation_details.i \
+ $(TAO_ROOT)/tao/Invocation.i \
+ $(TAO_ROOT)/tao/PortableInterceptor.h \
+ $(TAO_ROOT)/tao/RequestInfo_Util.h \
+ $(TAO_ROOT)/tao/ClientRequestInfo_i.h \
+ $(TAO_ROOT)/tao/ClientRequestInfo_i.inl \
+ $(TAO_ROOT)/tao/ClientInterceptorAdapter.h \
+ $(TAO_ROOT)/tao/ClientInterceptorAdapter.inl
+
+.obj/testS.o .obj/testS.so .shobj/testS.o .shobj/testS.so: testS.cpp testS.h testC.h \
+ $(TAO_ROOT)/tao/corba.h \
+ $(ACE_ROOT)/ace/pre.h \
+ $(ACE_ROOT)/ace/config-sunos5.6.h \
+ $(ACE_ROOT)/ace/config-sunos5.5.h \
+ $(ACE_ROOT)/ace/post.h \
+ $(ACE_ROOT)/ace/ace_wchar.h \
+ $(ACE_ROOT)/ace/ace_wchar.inl \
+ $(TAO_ROOT)/tao/corbafwd.h \
+ $(ACE_ROOT)/ace/CDR_Base.h \
+ $(ACE_ROOT)/ace/Basic_Types.h \
+ $(ACE_ROOT)/ace/ACE_export.h \
+ $(ACE_ROOT)/ace/Basic_Types.i \
+ $(ACE_ROOT)/ace/Message_Block.h \
+ $(ACE_ROOT)/ace/OS.h \
+ $(ACE_ROOT)/ace/OS_Dirent.h \
+ $(ACE_ROOT)/ace/OS_Export.h \
+ $(ACE_ROOT)/ace/OS_Errno.h \
+ $(ACE_ROOT)/ace/OS_Errno.inl \
+ $(ACE_ROOT)/ace/OS_Dirent.inl \
+ $(ACE_ROOT)/ace/OS_String.h \
+ $(ACE_ROOT)/ace/OS_String.inl \
+ $(ACE_ROOT)/ace/OS_Memory.h \
+ $(ACE_ROOT)/ace/OS_Memory.inl \
+ $(ACE_ROOT)/ace/OS_TLI.h \
+ $(ACE_ROOT)/ace/OS_TLI.inl \
+ $(ACE_ROOT)/ace/Time_Value.h \
+ $(ACE_ROOT)/ace/Time_Value.inl \
+ $(ACE_ROOT)/ace/Default_Constants.h \
+ $(ACE_ROOT)/ace/Global_Macros.h \
+ $(ACE_ROOT)/ace/Min_Max.h \
+ $(ACE_ROOT)/ace/streams.h \
+ $(ACE_ROOT)/ace/Trace.h \
+ $(ACE_ROOT)/ace/OS.i \
+ $(ACE_ROOT)/ace/Message_Block.i \
+ $(ACE_ROOT)/ace/Message_Block_T.h \
+ $(ACE_ROOT)/ace/Message_Block_T.i \
+ $(ACE_ROOT)/ace/Message_Block_T.cpp \
+ $(ACE_ROOT)/ace/CDR_Base.inl \
+ $(ACE_ROOT)/ace/CORBA_macros.h \
+ $(TAO_ROOT)/tao/orbconf.h \
+ $(TAO_ROOT)/tao/varbase.h \
+ $(TAO_ROOT)/tao/TAO_Export.h \
+ $(TAO_ROOT)/tao/corbafwd.i \
+ $(TAO_ROOT)/tao/Typecode.h \
+ $(ACE_ROOT)/ace/Synch.h \
+ $(ACE_ROOT)/ace/Synch.i \
+ $(ACE_ROOT)/ace/Synch_T.h \
+ $(ACE_ROOT)/ace/Synch_T.i \
+ $(ACE_ROOT)/ace/Thread.h \
+ $(ACE_ROOT)/ace/Thread_Adapter.h \
+ $(ACE_ROOT)/ace/Base_Thread_Adapter.h \
+ $(ACE_ROOT)/ace/OS_Log_Msg_Attributes.h \
+ $(ACE_ROOT)/ace/OS_Log_Msg_Attributes.inl \
+ $(ACE_ROOT)/ace/Base_Thread_Adapter.inl \
+ $(ACE_ROOT)/ace/Thread_Adapter.inl \
+ $(ACE_ROOT)/ace/Thread.i \
+ $(ACE_ROOT)/ace/Synch_T.cpp \
+ $(ACE_ROOT)/ace/Log_Msg.h \
+ $(ACE_ROOT)/ace/Log_Priority.h \
+ $(TAO_ROOT)/tao/Exception.h \
+ $(ACE_ROOT)/ace/SString.h \
+ $(ACE_ROOT)/ace/String_Base.h \
+ $(ACE_ROOT)/ace/ACE.h \
+ $(ACE_ROOT)/ace/Flag_Manip.h \
+ $(ACE_ROOT)/ace/Flag_Manip.i \
+ $(ACE_ROOT)/ace/Handle_Ops.h \
+ $(ACE_ROOT)/ace/Handle_Ops.i \
+ $(ACE_ROOT)/ace/Lib_Find.h \
+ $(ACE_ROOT)/ace/Lib_Find.i \
+ $(ACE_ROOT)/ace/Init_ACE.h \
+ $(ACE_ROOT)/ace/Init_ACE.i \
+ $(ACE_ROOT)/ace/Sock_Connect.h \
+ $(ACE_ROOT)/ace/Sock_Connect.i \
+ $(ACE_ROOT)/ace/ACE.i \
+ $(ACE_ROOT)/ace/String_Base_Const.h \
+ $(ACE_ROOT)/ace/String_Base.i \
+ $(ACE_ROOT)/ace/Malloc_Base.h \
+ $(ACE_ROOT)/ace/String_Base.cpp \
+ $(ACE_ROOT)/ace/Malloc.h \
+ $(ACE_ROOT)/ace/Malloc.i \
+ $(ACE_ROOT)/ace/Malloc_T.h \
+ $(ACE_ROOT)/ace/Malloc_Allocator.h \
+ $(ACE_ROOT)/ace/Malloc_Allocator.i \
+ $(ACE_ROOT)/ace/Free_List.h \
+ $(ACE_ROOT)/ace/Free_List.i \
+ $(ACE_ROOT)/ace/Free_List.cpp \
+ $(ACE_ROOT)/ace/Malloc_T.i \
+ $(ACE_ROOT)/ace/Malloc_T.cpp \
+ $(ACE_ROOT)/ace/Memory_Pool.h \
+ $(ACE_ROOT)/ace/Event_Handler.h \
+ $(ACE_ROOT)/ace/Event_Handler.i \
+ $(ACE_ROOT)/ace/Signal.h \
+ $(ACE_ROOT)/ace/Signal.i \
+ $(ACE_ROOT)/ace/Mem_Map.h \
+ $(ACE_ROOT)/ace/Mem_Map.i \
+ $(ACE_ROOT)/ace/SV_Semaphore_Complex.h \
+ $(ACE_ROOT)/ace/SV_Semaphore_Simple.h \
+ $(ACE_ROOT)/ace/SV_Semaphore_Simple.i \
+ $(ACE_ROOT)/ace/SV_Semaphore_Complex.i \
+ $(ACE_ROOT)/ace/Unbounded_Set.h \
+ $(ACE_ROOT)/ace/Node.h \
+ $(ACE_ROOT)/ace/Node.cpp \
+ $(ACE_ROOT)/ace/Unbounded_Set.inl \
+ $(ACE_ROOT)/ace/Unbounded_Set.cpp \
+ $(ACE_ROOT)/ace/Memory_Pool.i \
+ $(ACE_ROOT)/ace/Auto_Ptr.h \
+ $(ACE_ROOT)/ace/Auto_Ptr.i \
+ $(ACE_ROOT)/ace/Auto_Ptr.cpp \
+ $(ACE_ROOT)/ace/SString.i \
+ $(TAO_ROOT)/tao/Exception.i \
+ $(TAO_ROOT)/tao/Typecode.i \
+ $(TAO_ROOT)/tao/Any.h \
+ $(TAO_ROOT)/tao/CDR.h \
+ $(ACE_ROOT)/ace/CDR_Stream.h \
+ $(ACE_ROOT)/ace/CDR_Stream.i \
+ $(TAO_ROOT)/tao/CDR.i \
+ $(TAO_ROOT)/tao/Environment.h \
+ $(TAO_ROOT)/tao/Environment.i \
+ $(TAO_ROOT)/tao/Object.h \
+ $(TAO_ROOT)/tao/Policy_ForwardC.h \
+ $(TAO_ROOT)/tao/Sequence.h \
+ $(TAO_ROOT)/tao/Managed_Types.h \
+ $(TAO_ROOT)/tao/Managed_Types.i \
+ $(TAO_ROOT)/tao/Sequence.i \
+ $(TAO_ROOT)/tao/Sequence_T.h \
+ $(TAO_ROOT)/tao/Sequence_T.i \
+ $(TAO_ROOT)/tao/Sequence_T.cpp \
+ $(TAO_ROOT)/tao/Policy_ForwardC.i \
+ $(TAO_ROOT)/tao/Object.i \
+ $(TAO_ROOT)/tao/Any.i \
+ $(TAO_ROOT)/tao/NVList.h \
+ $(ACE_ROOT)/ace/Unbounded_Queue.h \
+ $(ACE_ROOT)/ace/Unbounded_Queue.inl \
+ $(ACE_ROOT)/ace/Unbounded_Queue.cpp \
+ $(TAO_ROOT)/tao/NVList.i \
+ $(TAO_ROOT)/tao/LocalObject.h \
+ $(TAO_ROOT)/tao/LocalObject.i \
+ $(TAO_ROOT)/tao/Principal.h \
+ $(TAO_ROOT)/tao/OctetSeqC.h \
+ $(TAO_ROOT)/tao/OctetSeqC.i \
+ $(TAO_ROOT)/tao/Principal.i \
+ $(TAO_ROOT)/tao/ORB.h \
+ $(TAO_ROOT)/tao/Services.h \
+ $(TAO_ROOT)/tao/Services.i \
+ $(TAO_ROOT)/tao/CORBA_String.h \
+ $(TAO_ROOT)/tao/CORBA_String.inl \
+ $(TAO_ROOT)/tao/objectid.h \
+ $(TAO_ROOT)/tao/PolicyC.h \
+ $(TAO_ROOT)/tao/CurrentC.h \
+ $(TAO_ROOT)/tao/CurrentC.i \
+ $(TAO_ROOT)/tao/Remote_Object_Proxy_Impl.h \
+ $(TAO_ROOT)/tao/Object_Proxy_Impl.h \
+ $(TAO_ROOT)/tao/Encodable.h \
+ $(TAO_ROOT)/tao/PolicyC.i \
+ $(TAO_ROOT)/tao/ORB.i \
+ $(TAO_ROOT)/tao/BoundsC.h \
+ $(TAO_ROOT)/tao/BoundsC.i \
+ $(TAO_ROOT)/tao/ValueBase.h \
+ $(TAO_ROOT)/tao/ValueBase.i \
+ $(TAO_ROOT)/tao/ValueFactory.h \
+ $(TAO_ROOT)/tao/ValueFactory.i \
+ $(TAO_ROOT)/tao/AbstractBase.h \
+ $(TAO_ROOT)/tao/AbstractBase.inl \
+ $(TAO_ROOT)/tao/DomainC.h \
+ $(TAO_ROOT)/tao/DomainC.i \
+ $(TAO_ROOT)/tao/WrongTransactionC.h \
+ $(TAO_ROOT)/tao/WrongTransactionC.i \
+ $(TAO_ROOT)/tao/Object_KeyC.h \
+ $(TAO_ROOT)/tao/Object_KeyC.i \
+ $(TAO_ROOT)/tao/ObjectIDList.h \
+ $(TAO_ROOT)/tao/ObjectIDList.i \
+ $(TAO_ROOT)/tao/StringSeqC.h \
+ $(TAO_ROOT)/tao/StringSeqC.i \
+ $(TAO_ROOT)/tao/PortableInterceptorC.h \
+ $(TAO_ROOT)/tao/DynamicC.h \
+ $(TAO_ROOT)/tao/DynamicC.i \
+ $(TAO_ROOT)/tao/ObjectReferenceTemplateC.h \
+ $(TAO_ROOT)/tao/ObjectReferenceTemplateC.i \
+ $(TAO_ROOT)/tao/Messaging_SyncScopeC.h \
+ $(TAO_ROOT)/tao/Messaging_SyncScopeC.i \
+ $(TAO_ROOT)/tao/IOPC.h \
+ $(TAO_ROOT)/tao/IOPC.i \
+ $(TAO_ROOT)/tao/PortableInterceptorC.i \
+ testC.i \
+ $(TAO_ROOT)/tao/PortableServer/PortableServer.h \
+ $(TAO_ROOT)/tao/PortableServer/portableserver_export.h \
+ $(TAO_ROOT)/tao/PortableServer/PortableServerC.h \
+ $(TAO_ROOT)/tao/PortableServer/PortableServerC.i \
+ $(TAO_ROOT)/tao/PortableServer/Servant_Base.h \
+ $(TAO_ROOT)/tao/Abstract_Servant_Base.h \
+ $(ACE_ROOT)/ace/Atomic_Op.h \
+ $(ACE_ROOT)/ace/Atomic_Op.i \
+ $(ACE_ROOT)/ace/Atomic_Op.cpp \
+ $(TAO_ROOT)/tao/PortableServer/Servant_Base.i \
+ $(TAO_ROOT)/tao/PortableServer/Collocated_Object.h \
+ $(TAO_ROOT)/tao/PortableServer/Collocated_Object.i \
+ $(TAO_ROOT)/tao/PortableServer/ThruPOA_Object_Proxy_Impl.h \
+ $(TAO_ROOT)/tao/PortableServer/Direct_Object_Proxy_Impl.h \
+ testS_T.h testS_T.i testS_T.cpp testS.i \
+ $(TAO_ROOT)/tao/PortableServer/Object_Adapter.h \
+ $(TAO_ROOT)/tao/PortableServer/Key_Adapters.h \
+ $(ACE_ROOT)/ace/Map.h \
+ $(ACE_ROOT)/ace/Map_T.h \
+ $(ACE_ROOT)/ace/Pair.h \
+ $(ACE_ROOT)/ace/Pair_T.h \
+ $(ACE_ROOT)/ace/Pair_T.i \
+ $(ACE_ROOT)/ace/Pair_T.cpp \
+ $(ACE_ROOT)/ace/Map_Manager.h \
+ $(ACE_ROOT)/ace/Map_Manager.i \
+ $(ACE_ROOT)/ace/Map_Manager.cpp \
+ $(ACE_ROOT)/ace/Service_Config.h \
+ $(ACE_ROOT)/ace/Service_Types.h \
+ $(ACE_ROOT)/ace/Service_Object.h \
+ $(ACE_ROOT)/ace/Shared_Object.h \
+ $(ACE_ROOT)/ace/Shared_Object.i \
+ $(ACE_ROOT)/ace/Svc_Conf_Tokens.h \
+ $(ACE_ROOT)/ace/DLL.h \
+ $(ACE_ROOT)/ace/Service_Object.i \
+ $(ACE_ROOT)/ace/Service_Types.i \
+ $(ACE_ROOT)/ace/XML_Svc_Conf.h \
+ $(ACE_ROOT)/ace/Service_Config.i \
+ $(ACE_ROOT)/ace/Reactor.h \
+ $(ACE_ROOT)/ace/Handle_Set.h \
+ $(ACE_ROOT)/ace/Handle_Set.i \
+ $(ACE_ROOT)/ace/Timer_Queue.h \
+ $(ACE_ROOT)/ace/Timer_Queue_T.h \
+ $(ACE_ROOT)/ace/Test_and_Set.h \
+ $(ACE_ROOT)/ace/Test_and_Set.i \
+ $(ACE_ROOT)/ace/Test_and_Set.cpp \
+ $(ACE_ROOT)/ace/Timer_Queue_T.i \
+ $(ACE_ROOT)/ace/Timer_Queue_T.cpp \
+ $(ACE_ROOT)/ace/Reactor.i \
+ $(ACE_ROOT)/ace/Reactor_Impl.h \
+ $(ACE_ROOT)/ace/Hash_Map_Manager.h \
+ $(ACE_ROOT)/ace/Hash_Map_Manager_T.h \
+ $(ACE_ROOT)/ace/Functor.h \
+ $(ACE_ROOT)/ace/Functor.i \
+ $(ACE_ROOT)/ace/Functor_T.h \
+ $(ACE_ROOT)/ace/Functor_T.i \
+ $(ACE_ROOT)/ace/Functor_T.cpp \
+ $(ACE_ROOT)/ace/Hash_Map_Manager_T.i \
+ $(ACE_ROOT)/ace/Hash_Map_Manager_T.cpp \
+ $(ACE_ROOT)/ace/Active_Map_Manager.h \
+ $(ACE_ROOT)/ace/Active_Map_Manager.i \
+ $(ACE_ROOT)/ace/Active_Map_Manager_T.h \
+ $(ACE_ROOT)/ace/Active_Map_Manager_T.i \
+ $(ACE_ROOT)/ace/Active_Map_Manager_T.cpp \
+ $(ACE_ROOT)/ace/Map_T.i \
+ $(ACE_ROOT)/ace/Map_T.cpp \
+ $(TAO_ROOT)/tao/PortableServer/Key_Adapters.i \
+ $(TAO_ROOT)/tao/PortableServer/poa_macros.h \
+ $(TAO_ROOT)/tao/PortableServer/Active_Object_Map.h \
+ $(TAO_ROOT)/tao/Server_Strategy_Factory.h \
+ $(TAO_ROOT)/tao/PortableServer/Active_Object_Map.i \
+ $(TAO_ROOT)/tao/Adapter.h \
+ $(TAO_ROOT)/tao/Adapter.i \
+ $(TAO_ROOT)/tao/PortableServer/Default_Policy_Validator.h \
+ $(TAO_ROOT)/tao/Policy_Validator.h \
+ $(TAO_ROOT)/tao/PortableServer/POA_Policy_Set.h \
+ $(TAO_ROOT)/tao/PortableServer/POA_Policies.h \
+ $(TAO_ROOT)/tao/PortableServer/POA_Policies.i \
+ $(TAO_ROOT)/tao/Policy_Set.h \
+ $(TAO_ROOT)/tao/Policy_Set.i \
+ $(TAO_ROOT)/tao/PortableServer/POA_Policy_Set.i \
+ $(TAO_ROOT)/tao/PortableServer/Object_Adapter.i \
+ $(TAO_ROOT)/tao/PortableServer/Operation_Table.h \
+ $(TAO_ROOT)/tao/TAO_Singleton.h \
+ $(TAO_ROOT)/tao/TAO_Singleton.inl \
+ $(TAO_ROOT)/tao/TAO_Singleton.cpp \
+ $(ACE_ROOT)/ace/Object_Manager.h \
+ $(ACE_ROOT)/ace/Object_Manager.i \
+ $(ACE_ROOT)/ace/Managed_Object.h \
+ $(ACE_ROOT)/ace/Managed_Object.i \
+ $(ACE_ROOT)/ace/Managed_Object.cpp \
+ $(TAO_ROOT)/tao/TAO_Singleton_Manager.h \
+ $(TAO_ROOT)/tao/TAO_Singleton_Manager.inl \
+ $(TAO_ROOT)/tao/TAO_Server_Request.h \
+ $(TAO_ROOT)/tao/Tagged_Profile.h \
+ $(TAO_ROOT)/tao/GIOPC.h \
+ $(TAO_ROOT)/tao/GIOPC.i \
+ $(TAO_ROOT)/tao/Tagged_Profile.i \
+ $(TAO_ROOT)/tao/Service_Context.h \
+ $(TAO_ROOT)/tao/Service_Context.inl \
+ $(TAO_ROOT)/tao/PICurrent.h \
+ $(ACE_ROOT)/ace/Array_Base.h \
+ $(ACE_ROOT)/ace/Array_Base.inl \
+ $(ACE_ROOT)/ace/Array_Base.cpp \
+ $(TAO_ROOT)/tao/PICurrent.inl \
+ $(TAO_ROOT)/tao/TAO_Server_Request.i \
+ $(TAO_ROOT)/tao/ORB_Core.h \
+ $(TAO_ROOT)/tao/Policy_Manager.h \
+ $(TAO_ROOT)/tao/debug.h \
+ $(TAO_ROOT)/tao/Policy_Manager.i \
+ $(TAO_ROOT)/tao/Resource_Factory.h \
+ $(TAO_ROOT)/tao/params.h \
+ $(TAO_ROOT)/tao/params.i \
+ $(TAO_ROOT)/tao/PolicyFactory_Registry.h \
+ $(TAO_ROOT)/tao/Parser_Registry.h \
+ $(TAO_ROOT)/tao/Parser_Registry.i \
+ $(TAO_ROOT)/tao/Service_Callbacks.h \
+ $(TAO_ROOT)/tao/Service_Callbacks.i \
+ $(TAO_ROOT)/tao/Fault_Tolerance_Service.h \
+ $(TAO_ROOT)/tao/Fault_Tolerance_Service.i \
+ $(TAO_ROOT)/tao/Cleanup_Func_Registry.h \
+ $(TAO_ROOT)/tao/Cleanup_Func_Registry.inl \
+ $(TAO_ROOT)/tao/Object_Ref_Table.h \
+ $(TAO_ROOT)/tao/Interceptor_List.h \
+ $(TAO_ROOT)/tao/Interceptor_List.inl \
+ $(ACE_ROOT)/ace/Thread_Manager.h \
+ $(ACE_ROOT)/ace/Containers.h \
+ $(ACE_ROOT)/ace/Containers.i \
+ $(ACE_ROOT)/ace/Containers_T.h \
+ $(ACE_ROOT)/ace/Containers_T.i \
+ $(ACE_ROOT)/ace/Containers_T.cpp \
+ $(ACE_ROOT)/ace/Singleton.h \
+ $(ACE_ROOT)/ace/Singleton.i \
+ $(ACE_ROOT)/ace/Singleton.cpp \
+ $(ACE_ROOT)/ace/Framework_Component.h \
+ $(ACE_ROOT)/ace/Framework_Component.inl \
+ $(ACE_ROOT)/ace/Framework_Component_T.h \
+ $(ACE_ROOT)/ace/Framework_Component_T.inl \
+ $(ACE_ROOT)/ace/Framework_Component_T.cpp \
+ $(ACE_ROOT)/ace/Thread_Manager.i \
+ $(TAO_ROOT)/tao/ORB_Core.i \
+ $(TAO_ROOT)/tao/Stub.h \
+ $(TAO_ROOT)/tao/MProfile.h \
+ $(TAO_ROOT)/tao/MProfile.i \
+ $(TAO_ROOT)/tao/Stub.i \
+ $(TAO_ROOT)/tao/IFR_Client_Adapter.h \
+ $(TAO_ROOT)/tao/PortableInterceptor.h \
+ $(TAO_ROOT)/tao/RequestInfo_Util.h \
+ $(TAO_ROOT)/tao/PortableServer/ServerRequestInfo.h \
+ $(TAO_ROOT)/tao/PortableServer/ServerRequestInfo.inl \
+ $(TAO_ROOT)/tao/PortableServer/ServerInterceptorAdapter.h \
+ $(TAO_ROOT)/tao/PortableServer/ServerInterceptorAdapter.inl \
+ $(ACE_ROOT)/ace/Dynamic_Service.h \
+ $(ACE_ROOT)/ace/Dynamic_Service_Base.h \
+ $(ACE_ROOT)/ace/Dynamic_Service.i \
+ $(ACE_ROOT)/ace/Dynamic_Service.cpp
+
+# IF YOU PUT ANYTHING HERE IT WILL GO AWAY
diff --git a/TAO/tests/RTCORBA/Profile_And_Endpoint_Selection/Makefile.bor b/TAO/tests/RTCORBA/Profile_And_Endpoint_Selection/Makefile.bor
new file mode 100644
index 00000000000..e2ee4acd23a
--- /dev/null
+++ b/TAO/tests/RTCORBA/Profile_And_Endpoint_Selection/Makefile.bor
@@ -0,0 +1,7 @@
+#
+# Makefile for building the Faults test executables
+#
+
+MAKEFILES = server.bor client.bor
+
+!include <$(ACE_ROOT)\include\makeinclude\recurse.bor>
diff --git a/TAO/tests/RTCORBA/Profile_And_Endpoint_Selection/Profile_And_Endpoint_Selection.dsw b/TAO/tests/RTCORBA/Profile_And_Endpoint_Selection/Profile_And_Endpoint_Selection.dsw
new file mode 100644
index 00000000000..d17cf7c9604
--- /dev/null
+++ b/TAO/tests/RTCORBA/Profile_And_Endpoint_Selection/Profile_And_Endpoint_Selection.dsw
@@ -0,0 +1,41 @@
+Microsoft Developer Studio Workspace File, Format Version 6.00
+# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!
+
+###############################################################################
+
+Project: "client"=.\client.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Project: "server"=.\server.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Global:
+
+Package=<5>
+{{{
+}}}
+
+Package=<3>
+{{{
+}}}
+
+###############################################################################
+
diff --git a/TAO/tests/RTCORBA/Profile_And_Endpoint_Selection/README b/TAO/tests/RTCORBA/Profile_And_Endpoint_Selection/README
new file mode 100644
index 00000000000..ba49c18a341
--- /dev/null
+++ b/TAO/tests/RTCORBA/Profile_And_Endpoint_Selection/README
@@ -0,0 +1,118 @@
+$Id$
+
+This test exercises the profile and endpoint selection of the ORB.
+
+Server: The server creates a servant in a regular POA and another in
+an RT-POA. The RT-POA can be configured in serveral ways as detailed
+below.
+
+Client: The client does the following:
+
+- vanilla invocations
+- sets private connection
+- vanilla invocations
+- reset
+
+- sets client protocols
+- vanilla invocations
+- sets private connection
+- vanilla invocations
+- reset
+
+- set bands
+- priority invocations
+- sets private connection
+- priority invocations
+- reset
+
+- set bands
+- sets client protocols
+- priority invocations
+- sets private connection
+- priority invocations
+- reset
+
+This test can be configured in several ways (72 to be precise) as
+documented below:
+ _________________________________________________________________________________
+
+ Server-side Thread Client-side Multi-priority Client Server
+ Bands Lanes Bands Clients Protocols Protocols
+ _________________________________________________________________________________
+
+ NO NO NO NO iiop->shmiop NONE
+ NO NO NO NO shmiop->iiop NONE
+ NO NO NO YES iiop->shmiop NONE
+ NO NO NO YES shmiop->iiop NONE
+ NO NO YES YES iiop->shmiop NONE
+ NO NO YES YES shmiop->iiop NONE
+ YES NO NO YES iiop->shmiop NONE
+ YES NO NO YES shmiop->iiop NONE
+ NO YES YES YES iiop->shmiop NONE
+ NO YES YES YES shmiop->iiop NONE
+ YES YES NO YES iiop->shmiop NONE
+ YES YES NO YES shmiop->iiop NONE
+
+ NO NO NO NO iiop->shmiop iiop
+ NO NO NO NO shmiop->iiop iiop
+ NO NO NO NO iiop iiop
+ NO NO NO YES iiop->shmiop iiop
+ NO NO NO YES shmiop->iiop iiop
+ NO NO NO YES iiop iiop
+ NO NO YES YES iiop->shmiop iiop
+ NO NO YES YES shmiop->iiop iiop
+ NO NO YES YES iiop iiop
+ YES NO NO YES iiop->shmiop iiop
+ YES NO NO YES shmiop->iiop iiop
+ YES NO NO YES iiop iiop
+ NO YES YES YES iiop->shmiop iiop
+ NO YES YES YES shmiop->iiop iiop
+ NO YES YES YES iiop iiop
+ YES YES NO YES iiop->shmiop iiop
+ YES YES NO YES shmiop->iiop iiop
+ YES YES NO YES iiop iiop
+
+ NO NO NO NO iiop->shmiop shmiop
+ NO NO NO NO shmiop->iiop shmiop
+ NO NO NO NO shmiop shmiop
+ NO NO NO YES iiop->shmiop shmiop
+ NO NO NO YES shmiop->iiop shmiop
+ NO NO NO YES shmiop shmiop
+ NO NO YES YES iiop->shmiop shmiop
+ NO NO YES YES shmiop->iiop shmiop
+ NO NO YES YES shmiop shmiop
+ YES NO NO YES iiop->shmiop shmiop
+ YES NO NO YES shmiop->iiop shmiop
+ YES NO NO YES shmiop shmiop
+ NO YES YES YES iiop->shmiop shmiop
+ NO YES YES YES shmiop->iiop shmiop
+ NO YES YES YES shmiop shmiop
+ YES YES NO YES iiop->shmiop shmiop
+ YES YES NO YES shmiop->iiop shmiop
+ YES YES NO YES shmiop shmiop
+
+ NO NO NO NO iiop->shmiop iiop+shmiop
+ NO NO NO NO shmiop->iiop iiop+shmiop
+ NO NO NO NO iiop iiop+shmiop
+ NO NO NO NO shmiop iiop+shmiop
+ NO NO NO YES iiop->shmiop iiop+shmiop
+ NO NO NO YES shmiop->iiop iiop+shmiop
+ NO NO NO YES iiop iiop+shmiop
+ NO NO NO YES shmiop iiop+shmiop
+ NO NO YES YES iiop->shmiop iiop+shmiop
+ NO NO YES YES shmiop->iiop iiop+shmiop
+ NO NO YES YES iiop iiop+shmiop
+ NO NO YES YES shmiop iiop+shmiop
+ YES NO NO YES iiop->shmiop iiop+shmiop
+ YES NO NO YES shmiop->iiop iiop+shmiop
+ YES NO NO YES iiop iiop+shmiop
+ YES NO NO YES shmiop iiop+shmiop
+ NO YES YES YES iiop->shmiop iiop+shmiop
+ NO YES YES YES shmiop->iiop iiop+shmiop
+ NO YES YES YES iiop iiop+shmiop
+ NO YES YES YES shmiop iiop+shmiop
+ YES YES NO YES iiop->shmiop iiop+shmiop
+ YES YES NO YES shmiop->iiop iiop+shmiop
+ YES YES NO YES iiop iiop+shmiop
+ YES YES NO YES shmiop iiop+shmiop
+
diff --git a/TAO/tests/RTCORBA/Profile_And_Endpoint_Selection/bands b/TAO/tests/RTCORBA/Profile_And_Endpoint_Selection/bands
new file mode 100644
index 00000000000..a3f7158df97
--- /dev/null
+++ b/TAO/tests/RTCORBA/Profile_And_Endpoint_Selection/bands
@@ -0,0 +1 @@
+0 5000 5000 10000 10000 15000 15000 20000 20000 25000 25000 30000
diff --git a/TAO/tests/RTCORBA/Profile_And_Endpoint_Selection/client.bor b/TAO/tests/RTCORBA/Profile_And_Endpoint_Selection/client.bor
new file mode 100644
index 00000000000..b626ed867c2
--- /dev/null
+++ b/TAO/tests/RTCORBA/Profile_And_Endpoint_Selection/client.bor
@@ -0,0 +1,37 @@
+#
+# Makefile for building the Faults ping executable
+#
+
+NAME = client
+
+TAO_IDL = $(CORE_BINDIR)\tao_idl -g $(CORE_BINDIR)\gperf.exe -Ge 1
+
+OBJFILES = \
+ $(OBJDIR)\testC.obj \
+ $(OBJDIR)\client.obj
+
+CFLAGS = \
+ $(ACE_CFLAGS) \
+ $(TAO_CFLAGS) \
+ $(TAO_RTCORBA_CFLAGS)
+
+LIBFILES = \
+ $(ACE_LIB) \
+ $(TAO_LIB) \
+ $(TAO_RTCORBA_LIB)
+
+IDLFILES = \
+ $(IDLDIR)\test.idl
+
+CPPDIR = .
+
+IDLDIR = .
+
+!include <$(ACE_ROOT)\include\makeinclude\build_exe.bor>
+
+#
+# IDL Build rules
+#
+
+$(IDLDIR)\testS.cpp $(IDLDIR)\testC.cpp: $(IDLDIR)\test.idl
+ $(TAO_IDL) $**
diff --git a/TAO/tests/RTCORBA/Profile_And_Endpoint_Selection/client.cpp b/TAO/tests/RTCORBA/Profile_And_Endpoint_Selection/client.cpp
new file mode 100644
index 00000000000..e0d045517cc
--- /dev/null
+++ b/TAO/tests/RTCORBA/Profile_And_Endpoint_Selection/client.cpp
@@ -0,0 +1,546 @@
+// $Id$
+
+// ================================================================
+//
+//
+// = FILENAME
+// client.cpp
+//
+// = DESCRIPTION
+// This is a client implementation.
+//
+// = AUTHOR
+// Irfan Pyarali
+//
+// ================================================================
+
+#include "ace/Get_Opt.h"
+#include "ace/Task.h"
+#include "tao/RTCORBA/RTCORBA.h"
+#include "tao/Strategies/advanced_resource.h"
+#include "../common_args.cpp"
+#include "testC.h"
+
+ACE_RCSID(Profile_And_Endpoint_Selection, client, "$Id$")
+
+static int iterations = 1;
+static int debug = 1;
+static int shutdown_server = 0;
+static const char *ior = "file://ior";
+static const char *invocation_priorities_file = "empty_file";
+static const char *protocols_file = "empty_file";
+static const char *bands_file = "empty_file";
+
+static int
+parse_args (int argc, char **argv)
+{
+ ACE_Get_Opt get_opts (argc, argv, "b:d:i:k:p:t:x");
+ int c;
+
+ while ((c = get_opts ()) != -1)
+ switch (c)
+ {
+ case 'b':
+ bands_file = get_opts.opt_arg ();
+ break;
+
+ case 'd':
+ debug = ::atoi (get_opts.opt_arg ());
+ break;
+
+ case 'i':
+ iterations = ::atoi (get_opts.opt_arg ());
+ break;
+
+ case 'k':
+ ior = get_opts.opt_arg ();
+ break;
+
+ case 'p':
+ protocols_file = get_opts.opt_arg ();
+ break;
+
+ case 't':
+ invocation_priorities_file = get_opts.opt_arg ();
+ break;
+
+ case 'x':
+ shutdown_server = 1;
+ break;
+
+ case '?':
+ default:
+ ACE_ERROR_RETURN ((LM_ERROR,
+ "%s usage: \n"
+ "\t-b <bands file> (defaults to %s)\n"
+ "\t-i <iterations> (defaults to %d)\n"
+ "\t-k <ior> (defaults to %s)\n"
+ "\t-p <protocol file> (defaults to %s)\n"
+ "\t-t <invocation priorities file> (defaults to %s)\n"
+ "\t-x <shutdown server> (defaults to %d)\n"
+ "\n",
+ argv[0],
+ bands_file,
+ iterations,
+ ior,
+ protocols_file,
+ invocation_priorities_file,
+ shutdown_server),
+ -1);
+ }
+
+ return 0;
+}
+
+void
+vanilla_invocations (test_ptr test
+ ACE_ENV_ARG_DECL);
+
+class Worker_Thread : public ACE_Task_Base
+{
+public:
+ Worker_Thread (test_ptr test,
+ RTCORBA::Current_ptr current,
+ CORBA::Short priority);
+
+ int svc (void);
+
+ void validate_connection (ACE_ENV_SINGLE_ARG_DECL);
+
+private:
+ test_var test_;
+ RTCORBA::Current_var current_;
+ CORBA::Short priority_;
+};
+
+Worker_Thread::Worker_Thread (test_ptr test,
+ RTCORBA::Current_ptr current,
+ CORBA::Short priority)
+ : test_ (test::_duplicate (test)),
+ current_ (RTCORBA::Current::_duplicate (current)),
+ priority_ (priority)
+{
+}
+
+void
+Worker_Thread::validate_connection (ACE_ENV_SINGLE_ARG_DECL)
+{
+ // Try to validate the connection several times, ignoring transient
+ // exceptions. If the connection can still not be setup, return
+ // failure.
+ CORBA::PolicyList_var inconsistent_policies;
+ int max_attempts = 10;
+ int current_attempt = 0;
+ for (;;)
+ {
+ ACE_TRY
+ {
+ ++current_attempt;
+ this->test_->_validate_connection (inconsistent_policies.out ()
+ ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ // If successful, we are done.
+ return;
+ }
+ ACE_CATCH (CORBA::TRANSIENT, exception)
+ {
+ // If we have reach our maximum number of tries, throw exception.
+ if (current_attempt == max_attempts)
+ ACE_RE_THROW;
+ // Otherwise, ignore...
+ }
+ ACE_CATCHANY
+ {
+ // Rethrow any other exceptions.
+ ACE_RE_THROW;
+ }
+ ACE_ENDTRY;
+ ACE_CHECK;
+ }
+}
+
+int
+Worker_Thread::svc (void)
+{
+ ACE_TRY_NEW_ENV
+ {
+ this->current_->the_priority (this->priority_
+ ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ this->validate_connection (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ vanilla_invocations (this->test_.in ()
+ ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+ }
+ ACE_CATCHANY
+ {
+ ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION,
+ "Worker Thread exception:");
+ }
+ ACE_ENDTRY;
+ return 0;
+}
+
+void
+vanilla_invocations (test_ptr test
+ ACE_ENV_ARG_DECL)
+{
+ for (int i = 0; i < iterations; i++)
+ {
+ test->method (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK;
+ }
+}
+
+void
+priority_invocations (RTCORBA::RTORB_ptr rt_orb,
+ CORBA::ORB_ptr orb,
+ CORBA::PolicyManager_ptr policy_manager,
+ RTCORBA::Current_ptr current,
+ test_ptr test,
+ int debug
+ ACE_ENV_ARG_DECL)
+{
+ ULong_Array priorities;
+ int result =
+ get_values ("client",
+ invocation_priorities_file,
+ "invocation priorities",
+ priorities,
+ debug);
+ if (result != 0)
+ {
+ ACE_ERROR ((LM_ERROR,
+ "Error in parsing invocation priorities data file: %s\n",
+ invocation_priorities_file));
+ return;
+ }
+
+ u_long i = 0;
+
+ Worker_Thread **workers = 0;
+
+ ACE_NEW (workers,
+ Worker_Thread *[priorities.size ()]);
+
+ for (i = 0;
+ i < priorities.size ();
+ ++i)
+ {
+ ACE_NEW (workers[i],
+ Worker_Thread (test,
+ current,
+ priorities[i]));
+
+ long flags =
+ THR_NEW_LWP |
+ THR_JOINABLE |
+ orb->orb_core ()->orb_params ()->scope_policy () |
+ orb->orb_core ()->orb_params ()->sched_policy ();
+
+ result =
+ workers[i]->activate (flags);
+ if (result != 0)
+ {
+ ACE_ERROR ((LM_ERROR,
+ "Cannot activate thread\n"));
+ return;
+ }
+ }
+
+ ACE_Thread_Manager::instance ()->wait ();
+
+ for (i = 0;
+ i < priorities.size ();
+ ++i)
+ {
+ delete workers[i];
+ }
+ delete[] workers;
+}
+
+void
+set_client_protocols_policies (RTCORBA::RTORB_ptr rt_orb,
+ CORBA::PolicyManager_ptr policy_manager,
+ int debug
+ ACE_ENV_ARG_DECL)
+{
+ CORBA::PolicyList policies;
+
+ int result =
+ get_protocols ("client",
+ protocols_file,
+ rt_orb,
+ policies,
+ debug
+ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK;
+ if (result != 0)
+ {
+ ACE_ERROR ((LM_ERROR,
+ "Error in parsing protocols data file: %s\n",
+ protocols_file));
+ return;
+ }
+
+ policy_manager->set_policy_overrides (policies,
+ CORBA::ADD_OVERRIDE
+ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK;
+}
+
+void
+set_priority_bands (RTCORBA::RTORB_ptr rt_orb,
+ CORBA::PolicyManager_ptr policy_manager,
+ int debug
+ ACE_ENV_ARG_DECL)
+{
+ CORBA::PolicyList policies;
+
+ int result =
+ get_priority_bands ("client",
+ bands_file,
+ rt_orb,
+ policies,
+ debug
+ ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+ if (result != 0)
+ {
+ ACE_ERROR ((LM_ERROR,
+ "Error in parsing bands data file: %s\n",
+ bands_file));
+ return;
+ }
+
+ policy_manager->set_policy_overrides (policies,
+ CORBA::ADD_OVERRIDE
+ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK;
+}
+
+void
+set_private_connection_policies (RTCORBA::RTORB_ptr rt_orb,
+ CORBA::PolicyManager_ptr policy_manager
+ ACE_ENV_ARG_DECL)
+{
+ CORBA::PolicyList policies;
+ policies.length (1);
+
+ policies[0] =
+ rt_orb->create_private_connection_policy (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK;
+
+ policy_manager->set_policy_overrides (policies,
+ CORBA::ADD_OVERRIDE
+ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK;
+}
+
+void
+reset_policies (CORBA::PolicyManager_ptr policy_manager
+ ACE_ENV_ARG_DECL)
+{
+ CORBA::PolicyList empty_policies;
+
+ policy_manager->set_policy_overrides (empty_policies,
+ CORBA::SET_OVERRIDE
+ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK;
+}
+
+int
+main (int argc, char **argv)
+{
+ ACE_DECLARE_NEW_CORBA_ENV;
+
+ ACE_TRY
+ {
+ CORBA::ORB_var orb =
+ CORBA::ORB_init (argc,
+ argv,
+ 0
+ ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ CORBA::Object_var object =
+ orb->resolve_initial_references ("RTORB"
+ ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ RTCORBA::RTORB_var rt_orb =
+ RTCORBA::RTORB::_narrow (object.in ()
+ ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ object =
+ orb->resolve_initial_references ("ORBPolicyManager"
+ ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ CORBA::PolicyManager_var policy_manager =
+ CORBA::PolicyManager::_narrow (object.in ()
+ ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ object =
+ orb->resolve_initial_references ("RTCurrent"
+ ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ RTCORBA::Current_var current =
+ RTCORBA::Current::_narrow (object.in ()
+ ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ current->the_priority (0
+ ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ int parse_args_result =
+ parse_args (argc, argv);
+ if (parse_args_result != 0)
+ return parse_args_result;
+
+ object =
+ orb->string_to_object (ior
+ ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ test_var test =
+ test::_narrow (object.in ()
+ ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ vanilla_invocations (test.in ()
+ ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ set_private_connection_policies (rt_orb.in (),
+ policy_manager.in ()
+ ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ vanilla_invocations (test.in ()
+ ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ reset_policies (policy_manager.in ()
+ ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ set_client_protocols_policies (rt_orb.in (),
+ policy_manager.in (),
+ debug
+ ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ vanilla_invocations (test.in ()
+ ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ set_private_connection_policies (rt_orb.in (),
+ policy_manager.in ()
+ ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ vanilla_invocations (test.in ()
+ ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ reset_policies (policy_manager.in ()
+ ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ set_priority_bands (rt_orb.in (),
+ policy_manager.in (),
+ debug
+ ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ priority_invocations (rt_orb.in (),
+ orb.in (),
+ policy_manager.in (),
+ current.in (),
+ test.in (),
+ debug
+ ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ set_private_connection_policies (rt_orb.in (),
+ policy_manager.in ()
+ ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ priority_invocations (rt_orb.in (),
+ orb.in (),
+ policy_manager.in (),
+ current.in (),
+ test.in (),
+ debug
+ ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ reset_policies (policy_manager.in ()
+ ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ set_priority_bands (rt_orb.in (),
+ policy_manager.in (),
+ debug
+ ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ set_client_protocols_policies (rt_orb.in (),
+ policy_manager.in (),
+ 0
+ ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ priority_invocations (rt_orb.in (),
+ orb.in (),
+ policy_manager.in (),
+ current.in (),
+ test.in (),
+ 0
+ ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ set_private_connection_policies (rt_orb.in (),
+ policy_manager.in ()
+ ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ priority_invocations (rt_orb.in (),
+ orb.in (),
+ policy_manager.in (),
+ current.in (),
+ test.in (),
+ debug
+ ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ reset_policies (policy_manager.in ()
+ ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ if (shutdown_server)
+ {
+ test->shutdown (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+ }
+ }
+ ACE_CATCHANY
+ {
+ ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION, "Error!");
+ return -1;
+ }
+ ACE_ENDTRY;
+ ACE_CHECK_RETURN (-1);
+
+ return 0;
+}
diff --git a/TAO/tests/RTCORBA/Profile_And_Endpoint_Selection/client.dsp b/TAO/tests/RTCORBA/Profile_And_Endpoint_Selection/client.dsp
new file mode 100644
index 00000000000..36d2d3ea3e6
--- /dev/null
+++ b/TAO/tests/RTCORBA/Profile_And_Endpoint_Selection/client.dsp
@@ -0,0 +1,204 @@
+# Microsoft Developer Studio Project File - Name="Profile_And_Endpoint_Selection Client" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Console Application" 0x0103
+
+CFG=Profile_And_Endpoint_Selection Client - Win32 Release
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "client.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "client.mak" CFG="Profile_And_Endpoint_Selection Client - Win32 Release"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "Profile_And_Endpoint_Selection Client - Win32 Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "Profile_And_Endpoint_Selection Client - Win32 Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "Profile_And_Endpoint_Selection Client - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /MD /W3 /GX /O2 /I "..\..\\" /I "..\..\..\\" /I "..\..\..\..\\" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /FD /c
+# SUBTRACT CPP /YX
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 ace.lib TAO.lib TAO_RTCORBA.lib TAO_Strategies.lib /nologo /subsystem:console /machine:I386 /libpath:"..\..\..\..\ace" /libpath:"..\..\..\tao" /libpath:"..\..\..\tao\RTCORBA"
+
+!ELSEIF "$(CFG)" == "Profile_And_Endpoint_Selection Client - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir ""
+# PROP Intermediate_Dir "Debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /I "..\..\..\..\\" /I "..\..\..\\" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /FD /c
+# SUBTRACT CPP /YX
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 aced.lib TAOd.lib TAO_RTCORBAd.lib TAO_Strategiesd.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept /libpath:"..\..\..\..\ace" /libpath:"..\..\..\tao" /libpath:"..\..\..\tao\RTCORBA"
+
+!ENDIF
+
+# Begin Target
+
+# Name "Profile_And_Endpoint_Selection Client - Win32 Release"
+# Name "Profile_And_Endpoint_Selection Client - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=.\client.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=.\testC.cpp
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# Begin Source File
+
+SOURCE=.\testC.h
+# End Source File
+# End Group
+# Begin Group "Inline Files"
+
+# PROP Default_Filter "i"
+# Begin Source File
+
+SOURCE=.\testC.i
+# End Source File
+# End Group
+# Begin Group "IDL Files"
+
+# PROP Default_Filter "idl"
+# Begin Source File
+
+SOURCE=.\test.idl
+
+!IF "$(CFG)" == "Profile_And_Endpoint_Selection Client - Win32 Release"
+
+USERDEP__TEST_="..\..\..\..\bin\Release\tao_idl.exe"
+# Begin Custom Build
+InputPath=.\test.idl
+InputName=test
+
+BuildCmds= \
+ ..\..\..\..\bin\Release\tao_idl.exe -Ge 1 $(InputName).idl
+
+"$(InputName)C.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ $(BuildCmds)
+
+"$(InputName)C.i" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ $(BuildCmds)
+
+"$(InputName)C.cpp" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ $(BuildCmds)
+
+"$(InputName)S.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ $(BuildCmds)
+
+"$(InputName)S.i" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ $(BuildCmds)
+
+"$(InputName)S.cpp" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ $(BuildCmds)
+
+"$(InputName)S_T.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ $(BuildCmds)
+
+"$(InputName)S_T.i" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ $(BuildCmds)
+
+"$(InputName)S_T.cpp" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ $(BuildCmds)
+# End Custom Build
+
+!ELSEIF "$(CFG)" == "Profile_And_Endpoint_Selection Client - Win32 Debug"
+
+# PROP Ignore_Default_Tool 1
+USERDEP__TEST_="..\..\..\..\bin\tao_idl.exe"
+# Begin Custom Build - Invoking TAO_IDL on $(InputName)
+InputPath=.\test.idl
+InputName=test
+
+BuildCmds= \
+ ..\..\..\..\bin\tao_idl -Ge 1 $(InputName).idl
+
+"$(InputName)C.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ $(BuildCmds)
+
+"$(InputName)C.i" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ $(BuildCmds)
+
+"$(InputName)C.cpp" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ $(BuildCmds)
+
+"$(InputName)S.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ $(BuildCmds)
+
+"$(InputName)S.i" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ $(BuildCmds)
+
+"$(InputName)S.cpp" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ $(BuildCmds)
+
+"$(InputName)S_T.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ $(BuildCmds)
+
+"$(InputName)S_T.i" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ $(BuildCmds)
+
+"$(InputName)S_T.cpp" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ $(BuildCmds)
+# End Custom Build
+
+!ENDIF
+
+# End Source File
+# End Group
+# End Target
+# End Project
diff --git a/TAO/tests/RTCORBA/Profile_And_Endpoint_Selection/empty_file b/TAO/tests/RTCORBA/Profile_And_Endpoint_Selection/empty_file
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/TAO/tests/RTCORBA/Profile_And_Endpoint_Selection/empty_file
diff --git a/TAO/tests/RTCORBA/Profile_And_Endpoint_Selection/iiop b/TAO/tests/RTCORBA/Profile_And_Endpoint_Selection/iiop
new file mode 100644
index 00000000000..c227083464f
--- /dev/null
+++ b/TAO/tests/RTCORBA/Profile_And_Endpoint_Selection/iiop
@@ -0,0 +1 @@
+0 \ No newline at end of file
diff --git a/TAO/tests/RTCORBA/Profile_And_Endpoint_Selection/iiop_shmiop b/TAO/tests/RTCORBA/Profile_And_Endpoint_Selection/iiop_shmiop
new file mode 100644
index 00000000000..3508c351d1b
--- /dev/null
+++ b/TAO/tests/RTCORBA/Profile_And_Endpoint_Selection/iiop_shmiop
@@ -0,0 +1 @@
+0 1413566210 \ No newline at end of file
diff --git a/TAO/tests/RTCORBA/Profile_And_Endpoint_Selection/invocation_priorities b/TAO/tests/RTCORBA/Profile_And_Endpoint_Selection/invocation_priorities
new file mode 100644
index 00000000000..2d32fee52d0
--- /dev/null
+++ b/TAO/tests/RTCORBA/Profile_And_Endpoint_Selection/invocation_priorities
@@ -0,0 +1 @@
+2500 7500 12500 17500 22500 27500 \ No newline at end of file
diff --git a/TAO/tests/RTCORBA/Profile_And_Endpoint_Selection/lanes b/TAO/tests/RTCORBA/Profile_And_Endpoint_Selection/lanes
new file mode 100644
index 00000000000..02162bc453f
--- /dev/null
+++ b/TAO/tests/RTCORBA/Profile_And_Endpoint_Selection/lanes
@@ -0,0 +1 @@
+0 5000 10000 15000 20000 25000 \ No newline at end of file
diff --git a/TAO/tests/RTCORBA/Profile_And_Endpoint_Selection/run_test.pl b/TAO/tests/RTCORBA/Profile_And_Endpoint_Selection/run_test.pl
new file mode 100755
index 00000000000..8da92bf08b8
--- /dev/null
+++ b/TAO/tests/RTCORBA/Profile_And_Endpoint_Selection/run_test.pl
@@ -0,0 +1,149 @@
+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 = "ior_2";
+$client_debuglevel = 0;
+$server_debuglevel = 0;
+$client_debug = 0;
+$server_debug = 0;
+
+$extra_client_args = "-k file://$iorfile -ORBdebuglevel $client_debuglevel -d $client_debug -x";
+$extra_server_args = "-ORBdebuglevel $server_debuglevel -d $server_debug";
+
+sub setup_configurations_2
+{
+ my $server_args = shift;
+ my $client_args = shift;
+ my $iiop = shift;
+ my $shmiop = shift;
+ my $server_config = shift;
+
+ if ($iiop) { $server_args .= "-ORBendpoint iiop:// "; };
+ if ($shmiop) { $server_args .= "-ORBendpoint shmiop:// "; };
+
+ $configurations[$server_config]->{server} = "$server_args";
+ $j = 0; $configurations[$server_config]->{clients}[$j] = "$client_args " ."-p iiop_shmiop";
+ $j++; $configurations[$server_config]->{clients}[$j] = "$client_args " ."-p shmiop_iiop";
+ if ($iiop) { $j++; $configurations[$server_config]->{clients}[$j] = "$client_args " ."-p iiop"; }
+ if ($shmiop) { $j++; $configurations[$server_config]->{clients}[$j] = "$client_args " ."-p shmiop"; }
+}
+
+sub setup_configurations_1
+{
+ my $iiop = shift;
+ my $shmiop = shift;
+
+ $server_config++; setup_configurations_2 ("", "", $iiop, $shmiop, $server_config);
+ $server_config++; setup_configurations_2 ("", "-t invocation_priorities ", $iiop, $shmiop, $server_config);
+ $server_config++; setup_configurations_2 ("", "-b bands -t invocation_priorities ", $iiop, $shmiop, $server_config);
+ $server_config++; setup_configurations_2 ("-b bands ", "-t invocation_priorities ", $iiop, $shmiop, $server_config);
+ $server_config++; setup_configurations_2 ("-l lanes ", "-b bands -t invocation_priorities ", $iiop, $shmiop, $server_config);
+ $server_config++; setup_configurations_2 ("-b bands -l lanes ", "-t invocation_priorities ", $iiop, $shmiop, $server_config);
+}
+
+$server_config = -1;
+setup_configurations_1 (0, 0);
+setup_configurations_1 (1, 0);
+setup_configurations_1 (0, 1);
+setup_configurations_1 (1, 1);
+
+sub run_client
+{
+ my $client_args = "@_" . " $extra_client_args";
+
+ print "client $client_args\n";
+
+ $CL = new PerlACE::Process ("client", "$client_args");
+
+ $CL->Spawn ();
+
+ $client = $CL->WaitKill (120);
+
+ if ($client != 0)
+ {
+ print STDERR "ERROR: client returned $client\n";
+ $status = 1;
+ zap_server (1);
+ }
+}
+
+sub run_server
+{
+ my $server_args = "@_" . " $extra_server_args";
+
+ print "server $server_args\n";
+
+ $SV = new PerlACE::Process ("server", "$server_args");
+ $SV->Spawn ();
+
+ if (PerlACE::waitforfile_timed ($iorfile, 10) == -1)
+ {
+ check_supported_priorities ($SV);
+ print STDERR "ERROR: cannot find ior file: $iorfile\n";
+ $status = 1;
+ zap_server (1);
+ }
+}
+
+sub zap_server
+{
+ $server = $SV->WaitKill (5);
+
+ if ($server != 0)
+ {
+ print STDERR "ERROR: server returned $server\n";
+ $status = 1;
+ }
+
+ unlink $iorfile;
+
+ if ($_[0])
+ {
+ exit $status;
+ }
+}
+
+sub check_supported_priorities
+{
+ $process = shift;
+ $returnVal = $process->TimedWait (1);
+ if ($returnVal == 2) {
+ print STDOUT "Could not change priority levels. Check user permissions. Exiting...\n";
+ # Mark as no longer running to avoid errors on exit.
+ $process->{RUNNING} = 0;
+ exit 0;
+ }
+}
+
+for $test (@configurations)
+{
+ my $clients = $test->{clients};
+
+ for $args (@$clients)
+ {
+ print STDERR "\n******************************************************\n\n";
+
+ unlink $iorfile;
+
+ run_server ($test->{server});
+
+ run_client ($args);
+
+ zap_server (0);
+ }
+}
+
+unlink "ior_1";
+
+# Clean up SHMIOP files
+PerlACE::check_n_cleanup_files ("server_shmiop_*");
+
+exit $status;
diff --git a/TAO/tests/RTCORBA/Profile_And_Endpoint_Selection/server.bor b/TAO/tests/RTCORBA/Profile_And_Endpoint_Selection/server.bor
new file mode 100644
index 00000000000..0a158b04444
--- /dev/null
+++ b/TAO/tests/RTCORBA/Profile_And_Endpoint_Selection/server.bor
@@ -0,0 +1,42 @@
+#
+# Makefile for building the Faults test executable
+#
+
+NAME = server
+
+TAO_IDL = $(CORE_BINDIR)\tao_idl -g $(CORE_BINDIR)\gperf.exe -Ge 1
+
+OBJFILES = \
+ $(OBJDIR)\testC.obj \
+ $(OBJDIR)\testS.obj \
+ $(OBJDIR)\server.obj
+
+CFLAGS = \
+ $(ACE_CFLAGS) \
+ $(TAO_CFLAGS) \
+ $(TAO_PORTABLESERVER_CFLAGS) \
+ $(TAO_RTCORBA_CFLAGS) \
+ $(TAO_RTPORTABLESERVER_CFLAGS)
+
+LIBFILES = \
+ $(ACE_LIB) \
+ $(TAO_LIB) \
+ $(TAO_PORTABLESERVER_LIB) \
+ $(TAO_RTCORBA_LIB) \
+ $(TAO_RTPORTABLESERVER_LIB)
+
+IDLFILES = \
+ $(IDLDIR)\test.idl
+
+CPPDIR = .
+
+IDLDIR = .
+
+!include <$(ACE_ROOT)\include\makeinclude\build_exe.bor>
+
+#
+# IDL Build rules
+#
+
+$(IDLDIR)\testS.cpp $(IDLDIR)\testC.cpp: $(IDLDIR)\test.idl
+ $(TAO_IDL) $**
diff --git a/TAO/tests/RTCORBA/Profile_And_Endpoint_Selection/server.cpp b/TAO/tests/RTCORBA/Profile_And_Endpoint_Selection/server.cpp
new file mode 100644
index 00000000000..dd7e414e63e
--- /dev/null
+++ b/TAO/tests/RTCORBA/Profile_And_Endpoint_Selection/server.cpp
@@ -0,0 +1,387 @@
+// $Id$
+
+#include "ace/Get_Opt.h"
+#include "tao/ORB_Core.h"
+#include "tao/RTCORBA/Thread_Pool.h"
+#include "tao/RTPortableServer/RTPortableServer.h"
+#include "tao/Strategies/advanced_resource.h"
+#include "../check_supported_priorities.cpp"
+#include "../common_args.cpp"
+#include "testS.h"
+
+static CORBA::ULong stacksize = 0;
+static CORBA::ULong static_threads = 2;
+static CORBA::ULong dynamic_threads = 0;
+static CORBA::Boolean allow_request_buffering = 0;
+static CORBA::ULong max_buffered_requests = 0;
+static CORBA::ULong max_request_buffer_size = 0;
+static CORBA::Boolean allow_borrowing = 0;
+
+static int debug = 1;
+static int ior_file_count = 1;
+static const char *ior_file_base = "ior";
+static const char *bands_file = "empty_file";
+static const char *lanes_file = "empty_file";
+
+class test_i :
+ public POA_test,
+ public PortableServer::RefCountServantBase
+{
+public:
+ test_i (CORBA::ORB_ptr orb,
+ PortableServer::POA_ptr poa);
+
+ void method (ACE_ENV_SINGLE_ARG_DECL)
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+ void shutdown (ACE_ENV_SINGLE_ARG_DECL)
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+ PortableServer::POA_ptr _default_POA (ACE_ENV_SINGLE_ARG_DECL);
+
+private:
+
+ CORBA::ORB_var orb_;
+ PortableServer::POA_var poa_;
+};
+
+test_i::test_i (CORBA::ORB_ptr orb,
+ PortableServer::POA_ptr poa)
+ : orb_ (CORBA::ORB::_duplicate (orb)),
+ poa_ (PortableServer::POA::_duplicate (poa))
+{
+}
+
+void
+test_i::method (ACE_ENV_SINGLE_ARG_DECL_NOT_USED)
+ ACE_THROW_SPEC ((CORBA::SystemException))
+{
+ // Get the ORB_Core's TSS resources.
+ TAO_ORB_Core_TSS_Resources *tss =
+ this->orb_->orb_core ()->get_tss_resources ();
+
+ /// Get the lane attribute in TSS.
+ TAO_Thread_Lane *lane =
+ (TAO_Thread_Lane *) tss->lane_;
+
+ if (debug)
+ {
+ if (lane)
+ ACE_DEBUG ((LM_DEBUG,
+ "test_i::method request in thread %t (pool id = %d; lane id = %d)\n",
+ lane->pool ().id (),
+ lane->id ()));
+ else
+ ACE_DEBUG ((LM_DEBUG,
+ "test_i::method request in thread %t (default thread pool)\n"));
+ }
+}
+
+void
+test_i::shutdown (ACE_ENV_SINGLE_ARG_DECL)
+ ACE_THROW_SPEC ((CORBA::SystemException))
+{
+ if (debug)
+ ACE_DEBUG ((LM_DEBUG,
+ "test_i::shutdown\n"));
+
+ this->orb_->shutdown (0
+ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK;
+}
+
+PortableServer::POA_ptr
+test_i::_default_POA (ACE_ENV_SINGLE_ARG_DECL_NOT_USED)
+{
+ return PortableServer::POA::_duplicate (this->poa_.in ());
+}
+
+static int
+parse_args (int argc, char **argv)
+{
+ ACE_Get_Opt get_opts (argc, argv, "b:d:l:o:");
+ int c;
+
+ while ((c = get_opts ()) != -1)
+ switch (c)
+ {
+ case 'b':
+ bands_file = get_opts.opt_arg ();
+ break;
+
+ case 'd':
+ debug = ::atoi (get_opts.opt_arg ());
+ break;
+
+ case 'l':
+ lanes_file = get_opts.opt_arg ();
+ break;
+
+ case 'o':
+ ior_file_base = get_opts.opt_arg ();
+ break;
+
+ case '?':
+ default:
+ ACE_ERROR_RETURN ((LM_ERROR,
+ "%s usage: \n"
+ "\t-b <bands file> (defaults to %s)\n"
+ "\t-b <lanes file> (defaults to %s)\n"
+ "\t-o <ior file base> (defaults to %s)\n"
+ "\n",
+ argv[0],
+ bands_file,
+ lanes_file,
+ ior_file_base),
+ -1);
+ }
+
+ return 0;
+}
+
+static void
+write_iors_to_file (CORBA::Object_ptr object,
+ CORBA::ORB_ptr orb
+ ACE_ENV_ARG_DECL)
+{
+ char filename[BUFSIZ];
+ sprintf (filename,
+ "%s_%d",
+ ior_file_base,
+ ior_file_count);
+ ior_file_count++;
+
+ FILE *file =
+ ACE_OS::fopen (filename, "w");
+ ACE_ASSERT (file != 0);
+
+ CORBA::String_var ior =
+ orb->object_to_string (object
+ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK;
+
+ u_int result = 0;
+ result =
+ ACE_OS::fprintf (file,
+ "%s",
+ ior.in ());
+
+ ACE_ASSERT (result == ACE_OS::strlen (ior.in ()));
+ ACE_UNUSED_ARG (result);
+
+ ACE_OS::fclose (file);
+}
+
+void
+vanilla_poa (CORBA::ORB_ptr orb,
+ PortableServer::POA_ptr root_poa,
+ PortableServer::POAManager_ptr poa_manager
+ ACE_ENV_ARG_DECL)
+{
+ CORBA::PolicyList policies;
+
+ CORBA::Policy_var implicit_activation_policy =
+ root_poa->create_implicit_activation_policy (PortableServer::IMPLICIT_ACTIVATION
+ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK;
+
+ policies.length (policies.length () + 1);
+ policies[policies.length () - 1] =
+ implicit_activation_policy;
+
+ PortableServer::POA_var poa =
+ root_poa->create_POA ("child",
+ poa_manager,
+ policies
+ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK;
+
+ test_i *servant = 0;
+ ACE_NEW_THROW_EX (servant,
+ test_i (orb,
+ poa),
+ CORBA::NO_MEMORY ());
+ ACE_CHECK;
+
+ PortableServer::ServantBase_var safe_servant (servant);
+
+ test_var test =
+ servant->_this (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK;
+
+ write_iors_to_file (test.in (),
+ orb
+ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK;
+}
+
+void
+rt_poa (CORBA::ORB_ptr orb,
+ RTCORBA::RTORB_ptr rt_orb,
+ PortableServer::POA_ptr root_poa,
+ PortableServer::POAManager_ptr poa_manager
+ ACE_ENV_ARG_DECL)
+{
+ CORBA::PolicyList policies;
+
+ int result =
+ get_priority_bands ("server",
+ bands_file,
+ rt_orb,
+ policies,
+ debug
+ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK;
+ if (result != 0)
+ {
+ ACE_ERROR ((LM_ERROR,
+ "Error in parsing bands data file: %s\n",
+ bands_file));
+ return;
+ }
+
+ result =
+ get_priority_lanes ("server",
+ lanes_file,
+ rt_orb,
+ stacksize,
+ static_threads,
+ dynamic_threads,
+ allow_request_buffering,
+ max_buffered_requests,
+ max_request_buffer_size,
+ allow_borrowing,
+ policies,
+ debug
+ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK;
+ if (result != 0)
+ {
+ ACE_ERROR ((LM_ERROR,
+ "Error in parsing lanes data file: %s\n",
+ lanes_file));
+ return;
+ }
+
+ CORBA::Policy_var priority_model_policy =
+ rt_orb->create_priority_model_policy (RTCORBA::CLIENT_PROPAGATED,
+ 0
+ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK;
+
+ // Implicit_activation policy.
+ CORBA::Policy_var implicit_activation_policy =
+ root_poa->create_implicit_activation_policy (PortableServer::IMPLICIT_ACTIVATION
+ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK;
+
+ policies.length (policies.length () + 1);
+ policies[policies.length () - 1] =
+ priority_model_policy;
+
+ policies.length (policies.length () + 1);
+ policies[policies.length () - 1] =
+ implicit_activation_policy;
+
+ PortableServer::POA_var poa =
+ root_poa->create_POA ("rt_poa",
+ poa_manager,
+ policies
+ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK;
+
+ test_i *servant = 0;
+ ACE_NEW_THROW_EX (servant,
+ test_i (orb,
+ poa),
+ CORBA::NO_MEMORY ());
+ ACE_CHECK;
+
+ PortableServer::ServantBase_var safe_servant (servant);
+
+ test_var test =
+ servant->_this (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK;
+
+ write_iors_to_file (test.in (),
+ orb
+ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK;
+}
+
+int
+main (int argc, char **argv)
+{
+ // Make sure we can support multiple priorities that are required
+ // for this test.
+ check_supported_priorities ();
+
+ ACE_TRY_NEW_ENV
+ {
+ CORBA::ORB_var orb =
+ CORBA::ORB_init (argc,
+ argv,
+ 0
+ ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ CORBA::Object_var object =
+ orb->resolve_initial_references ("RTORB"
+ ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ RTCORBA::RTORB_var rt_orb =
+ RTCORBA::RTORB::_narrow (object.in ()
+ ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ int result =
+ parse_args (argc, argv);
+ if (result != 0)
+ return result;
+
+ object =
+ orb->resolve_initial_references ("RootPOA"
+ ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ PortableServer::POA_var root_poa =
+ PortableServer::POA::_narrow (object.in ()
+ ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ PortableServer::POAManager_var poa_manager =
+ root_poa->the_POAManager (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ vanilla_poa (orb.in (),
+ root_poa.in (),
+ poa_manager.in ()
+ ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ rt_poa (orb.in (),
+ rt_orb.in (),
+ root_poa.in (),
+ poa_manager.in ()
+ ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ poa_manager->activate (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ orb->run (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ orb->destroy (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+ }
+ ACE_CATCHANY
+ {
+ ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION, "Exception caught");
+ return -1;
+ }
+ ACE_ENDTRY;
+
+ return 0;
+}
diff --git a/TAO/tests/RTCORBA/Profile_And_Endpoint_Selection/server.dsp b/TAO/tests/RTCORBA/Profile_And_Endpoint_Selection/server.dsp
new file mode 100644
index 00000000000..d33944b7a00
--- /dev/null
+++ b/TAO/tests/RTCORBA/Profile_And_Endpoint_Selection/server.dsp
@@ -0,0 +1,216 @@
+# Microsoft Developer Studio Project File - Name="Profile_And_Endpoint_Selection Server" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Console Application" 0x0103
+
+CFG=Profile_And_Endpoint_Selection Server - Win32 Release
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "server.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "server.mak" CFG="Profile_And_Endpoint_Selection Server - Win32 Release"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "Profile_And_Endpoint_Selection Server - Win32 Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "Profile_And_Endpoint_Selection Server - Win32 Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "Profile_And_Endpoint_Selection Server - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /MD /W3 /GX /O2 /I "..\..\\" /I "..\..\..\\" /I "..\..\..\..\\" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /FD /c
+# SUBTRACT CPP /YX
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 TAO_PortableServer.lib TAO_RTPortableServer.lib ace.lib TAO.lib TAO_RTCORBA.lib TAO_Strategies.lib /nologo /subsystem:console /machine:I386 /libpath:"..\..\..\..\ace" /libpath:"..\..\..\tao" /libpath:"..\..\..\tao\PortableServer" /libpath:"..\..\..\tao\RTCORBA" /libpath:"..\..\..\tao\RTPortableServer"
+
+!ELSEIF "$(CFG)" == "Profile_And_Endpoint_Selection Server - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir ""
+# PROP Intermediate_Dir "Debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /I "..\..\..\..\\" /I "..\..\..\\" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /FD /c
+# SUBTRACT CPP /YX
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 TAO_PortableServerd.lib TAO_RTPortableServerd.lib aced.lib TAOd.lib TAO_RTCORBAd.lib TAO_Strategiesd.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept /libpath:"..\..\..\..\ace" /libpath:"..\..\..\tao" /libpath:"..\..\..\tao\PortableServer" /libpath:"..\..\..\tao\RTCORBA" /libpath:"..\..\..\tao\RTPortableServer"
+
+!ENDIF
+
+# Begin Target
+
+# Name "Profile_And_Endpoint_Selection Server - Win32 Release"
+# Name "Profile_And_Endpoint_Selection Server - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=.\server.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=.\testC.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=.\testS.cpp
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# Begin Source File
+
+SOURCE=.\testC.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\testS.h
+# End Source File
+# End Group
+# Begin Group "Inline Files"
+
+# PROP Default_Filter "i"
+# Begin Source File
+
+SOURCE=.\testC.i
+# End Source File
+# Begin Source File
+
+SOURCE=.\testS.i
+# End Source File
+# End Group
+# Begin Group "IDL Files"
+
+# PROP Default_Filter "idl"
+# Begin Source File
+
+SOURCE=.\test.idl
+
+!IF "$(CFG)" == "Profile_And_Endpoint_Selection Server - Win32 Release"
+
+USERDEP__TEST_="..\..\..\..\bin\Release\tao_idl.exe"
+# Begin Custom Build
+InputPath=.\test.idl
+InputName=test
+
+BuildCmds= \
+ ..\..\..\..\bin\Release\tao_idl.exe -Ge 1 $(InputName).idl
+
+"$(InputName)C.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ $(BuildCmds)
+
+"$(InputName)C.i" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ $(BuildCmds)
+
+"$(InputName)C.cpp" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ $(BuildCmds)
+
+"$(InputName)S.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ $(BuildCmds)
+
+"$(InputName)S.i" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ $(BuildCmds)
+
+"$(InputName)S.cpp" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ $(BuildCmds)
+
+"$(InputName)S_T.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ $(BuildCmds)
+
+"$(InputName)S_T.i" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ $(BuildCmds)
+
+"$(InputName)S_T.cpp" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ $(BuildCmds)
+# End Custom Build
+
+!ELSEIF "$(CFG)" == "Profile_And_Endpoint_Selection Server - Win32 Debug"
+
+# PROP Ignore_Default_Tool 1
+USERDEP__TEST_="..\..\..\..\bin\tao_idl.exe"
+# Begin Custom Build - Invoking TAO_IDL on $(InputName)
+InputPath=.\test.idl
+InputName=test
+
+BuildCmds= \
+ ..\..\..\..\bin\tao_idl -Ge 1 $(InputName).idl
+
+"$(InputName)C.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ $(BuildCmds)
+
+"$(InputName)C.i" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ $(BuildCmds)
+
+"$(InputName)C.cpp" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ $(BuildCmds)
+
+"$(InputName)S.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ $(BuildCmds)
+
+"$(InputName)S.i" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ $(BuildCmds)
+
+"$(InputName)S.cpp" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ $(BuildCmds)
+
+"$(InputName)S_T.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ $(BuildCmds)
+
+"$(InputName)S_T.i" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ $(BuildCmds)
+
+"$(InputName)S_T.cpp" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ $(BuildCmds)
+# End Custom Build
+
+!ENDIF
+
+# End Source File
+# End Group
+# End Target
+# End Project
diff --git a/TAO/tests/RTCORBA/Profile_And_Endpoint_Selection/shmiop b/TAO/tests/RTCORBA/Profile_And_Endpoint_Selection/shmiop
new file mode 100644
index 00000000000..f937c4e1a65
--- /dev/null
+++ b/TAO/tests/RTCORBA/Profile_And_Endpoint_Selection/shmiop
@@ -0,0 +1 @@
+1413566210 \ No newline at end of file
diff --git a/TAO/tests/RTCORBA/Profile_And_Endpoint_Selection/shmiop_iiop b/TAO/tests/RTCORBA/Profile_And_Endpoint_Selection/shmiop_iiop
new file mode 100644
index 00000000000..cdc21de595b
--- /dev/null
+++ b/TAO/tests/RTCORBA/Profile_And_Endpoint_Selection/shmiop_iiop
@@ -0,0 +1 @@
+1413566210 0 \ No newline at end of file
diff --git a/TAO/tests/RTCORBA/Profile_And_Endpoint_Selection/svc.conf b/TAO/tests/RTCORBA/Profile_And_Endpoint_Selection/svc.conf
new file mode 100644
index 00000000000..361688ac045
--- /dev/null
+++ b/TAO/tests/RTCORBA/Profile_And_Endpoint_Selection/svc.conf
@@ -0,0 +1,7 @@
+#
+# $Id$
+#
+static SHMIOP_Factory "-MMAPFilePrefix server_shmiop"
+
+static RT_ORB_Loader "-ORBPriorityMapping linear"
+
diff --git a/TAO/tests/RTCORBA/Profile_And_Endpoint_Selection/test.idl b/TAO/tests/RTCORBA/Profile_And_Endpoint_Selection/test.idl
new file mode 100644
index 00000000000..93c7ac56f50
--- /dev/null
+++ b/TAO/tests/RTCORBA/Profile_And_Endpoint_Selection/test.idl
@@ -0,0 +1,8 @@
+// $Id$
+
+interface test
+{
+ void method ();
+
+ void shutdown ();
+};
diff --git a/TAO/tests/RTCORBA/RTCORBA_tests.dsw b/TAO/tests/RTCORBA/RTCORBA_tests.dsw
index fd0adcfd92a..22fcb11d907 100644
--- a/TAO/tests/RTCORBA/RTCORBA_tests.dsw
+++ b/TAO/tests/RTCORBA/RTCORBA_tests.dsw
@@ -147,6 +147,30 @@ Package=<4>
###############################################################################
+Project: "Profile_And_Endpoint_Selection Client"=.\Profile_And_Endpoint_Selection\client.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Project: "Profile_And_Endpoint_Selection Server"=.\Profile_And_Endpoint_Selection\server.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
Project: "MT_Client_Protocol_Priority Client"=.\MT_Client_Protocol_Priority\client.dsp - Package Owner=<4>
Package=<5>
diff --git a/TAO/tests/RTCORBA/Linear_Priority/readers.cpp b/TAO/tests/RTCORBA/common_args.cpp
index 8733eb3a276..6bbe60e15aa 100644
--- a/TAO/tests/RTCORBA/Linear_Priority/readers.cpp
+++ b/TAO/tests/RTCORBA/common_args.cpp
@@ -3,13 +3,14 @@
#include "ace/Read_Buffer.h"
#include "ace/Array_Base.h"
-typedef ACE_Array_Base<CORBA::Short> Short_Array;
+typedef ACE_Array_Base<CORBA::ULong> ULong_Array;
int
get_priority_bands (const char *test_type,
const char *bands_file,
RTCORBA::RTORB_ptr rt_orb,
- CORBA::PolicyList &policies
+ CORBA::PolicyList &policies,
+ int debug
ACE_ENV_ARG_DECL)
{
//
@@ -32,9 +33,10 @@ get_priority_bands (const char *test_type,
// Check for empty bands file.
if (string == 0)
{
- ACE_DEBUG ((LM_DEBUG,
- "\n%s: No bands set!\n\n",
- test_type));
+ if (debug)
+ ACE_DEBUG ((LM_DEBUG,
+ "\n%s: No bands set!\n\n",
+ test_type));
return 0;
}
@@ -44,10 +46,11 @@ get_priority_bands (const char *test_type,
RTCORBA::PriorityBands bands;
bands.length (bands_length);
- ACE_DEBUG ((LM_DEBUG,
- "\n%s: There are %d bands: ",
- test_type,
- bands_length));
+ if (debug)
+ ACE_DEBUG ((LM_DEBUG,
+ "\n%s: There are %d bands: ",
+ test_type,
+ bands_length));
int result = 1;
char* working_string = string;
@@ -71,10 +74,11 @@ get_priority_bands (const char *test_type,
working_string += ACE_OS::strlen (working_string);
working_string += 1;
- ACE_DEBUG ((LM_DEBUG,
- "[%d %d] ",
- bands[i].low,
- bands[i].high));
+ if (debug)
+ ACE_DEBUG ((LM_DEBUG,
+ "[%d %d] ",
+ bands[i].low,
+ bands[i].high));
}
reader.alloc ()->free (string);
@@ -85,8 +89,9 @@ get_priority_bands (const char *test_type,
bands_file),
-1);
- ACE_DEBUG ((LM_DEBUG,
- "\n\n"));
+ if (debug)
+ ACE_DEBUG ((LM_DEBUG,
+ "\n\n"));
CORBA::Policy_var banded_connection_policy =
rt_orb->create_priority_banded_connection_policy (bands
@@ -104,7 +109,8 @@ int
get_values (const char *test_type,
const char *file_name,
const char *name,
- Short_Array &values)
+ ULong_Array &values,
+ int debug)
{
//
// Read lanes from a file.
@@ -126,10 +132,11 @@ get_values (const char *test_type,
// Check for empty lanes file.
if (string == 0)
{
- ACE_DEBUG ((LM_DEBUG,
- "\n%s: No %s set!\n\n",
- test_type,
- name));
+ if (debug)
+ ACE_DEBUG ((LM_DEBUG,
+ "\n%s: No %s set!\n\n",
+ test_type,
+ name));
return 0;
}
@@ -138,18 +145,19 @@ get_values (const char *test_type,
values.size (length);
- ACE_DEBUG ((LM_DEBUG,
- "\n%s: There are %d %s: ",
- test_type,
- length,
- name));
+ if (debug)
+ ACE_DEBUG ((LM_DEBUG,
+ "\n%s: There are %d %s: ",
+ test_type,
+ length,
+ name));
int result = 1;
char* working_string = string;
for (CORBA::ULong i = 0; i < length; ++i)
{
result = ::sscanf (working_string,
- "%hd",
+ "%lu",
&values[i]);
if (result == 0 || result == EOF)
break;
@@ -157,9 +165,10 @@ get_values (const char *test_type,
working_string += ACE_OS::strlen (working_string);
working_string += 1;
- ACE_DEBUG ((LM_DEBUG,
- "[%d] ",
- values[i]));
+ if (debug)
+ ACE_DEBUG ((LM_DEBUG,
+ "[%u] ",
+ values[i]));
}
reader.alloc ()->free (string);
@@ -170,8 +179,9 @@ get_values (const char *test_type,
file_name),
-1);
- ACE_DEBUG ((LM_DEBUG,
- "\n\n"));
+ if (debug)
+ ACE_DEBUG ((LM_DEBUG,
+ "\n\n"));
return 0;
}
@@ -187,15 +197,17 @@ get_priority_lanes (const char *test_type,
CORBA::ULong max_buffered_requests,
CORBA::ULong max_request_buffer_size,
CORBA::Boolean allow_borrowing,
- CORBA::PolicyList &policies
+ CORBA::PolicyList &policies,
+ int debug
ACE_ENV_ARG_DECL)
{
- Short_Array priorities;
+ ULong_Array priorities;
int result =
get_values (test_type,
lanes_file,
"lanes",
- priorities);
+ priorities,
+ debug);
if (result != 0 ||
priorities.size () == 0)
return result;
@@ -234,6 +246,52 @@ get_priority_lanes (const char *test_type,
return 0;
}
+int
+get_protocols (const char *test_type,
+ const char *lanes_file,
+ RTCORBA::RTORB_ptr rt_orb,
+ CORBA::PolicyList &policies,
+ int debug
+ ACE_ENV_ARG_DECL)
+{
+ ULong_Array protocol_values;
+ int result =
+ get_values (test_type,
+ lanes_file,
+ "protocols",
+ protocol_values,
+ debug);
+ if (result != 0 ||
+ protocol_values.size () == 0)
+ return result;
+
+ RTCORBA::ProtocolList protocols;
+ protocols.length (protocol_values.size ());
+
+ for (CORBA::ULong i = 0;
+ i < protocol_values.size ();
+ ++i)
+ {
+ protocols[i].protocol_type =
+ protocol_values[i];
+ protocols[i].transport_protocol_properties =
+ RTCORBA::ProtocolProperties::_nil ();
+ protocols[i].orb_protocol_properties =
+ RTCORBA::ProtocolProperties::_nil ();
+ }
+
+ CORBA::Policy_var protocol_policy =
+ rt_orb->create_client_protocol_policy (protocols
+ ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ policies.length (policies.length () + 1);
+ policies[policies.length () - 1] =
+ protocol_policy;
+
+ return 0;
+}
+
void
get_auto_priority_lanes_and_bands (CORBA::ULong number_of_lanes,
RTCORBA::RTORB_ptr rt_orb,
@@ -244,7 +302,8 @@ get_auto_priority_lanes_and_bands (CORBA::ULong number_of_lanes,
CORBA::ULong max_buffered_requests,
CORBA::ULong max_request_buffer_size,
CORBA::Boolean allow_borrowing,
- CORBA::PolicyList &policies
+ CORBA::PolicyList &policies,
+ int debug
ACE_ENV_ARG_DECL)
{
RTCORBA::ThreadpoolLanes lanes;
@@ -256,9 +315,10 @@ get_auto_priority_lanes_and_bands (CORBA::ULong number_of_lanes,
CORBA::Short priority_range =
RTCORBA::maxPriority - RTCORBA::minPriority;
- ACE_DEBUG ((LM_DEBUG,
- "\nUsing %d lanes\n",
- number_of_lanes));
+ if (debug)
+ ACE_DEBUG ((LM_DEBUG,
+ "\nUsing %d lanes\n",
+ number_of_lanes));
for (CORBA::ULong i = 0;
i < number_of_lanes;
@@ -283,15 +343,17 @@ get_auto_priority_lanes_and_bands (CORBA::ULong number_of_lanes,
bands[i].high = high_priority;
bands[i].low = low_priority;
- ACE_DEBUG ((LM_DEBUG,
- "%d: [%d %d] ",
- i + 1,
- low_priority,
- high_priority));
+ if (debug)
+ ACE_DEBUG ((LM_DEBUG,
+ "%d: [%d %d] ",
+ i + 1,
+ low_priority,
+ high_priority));
}
- ACE_DEBUG ((LM_DEBUG,
- "\n\n"));
+ if (debug)
+ ACE_DEBUG ((LM_DEBUG,
+ "\n\n"));
RTCORBA::ThreadpoolId threadpool_id =
rt_orb->create_threadpool_with_lanes (stacksize,
@@ -317,7 +379,7 @@ get_auto_priority_lanes_and_bands (CORBA::ULong number_of_lanes,
}
#if defined (ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION)
-template class ACE_Array_Base<CORBA::Short>;
+template class ACE_Array_Base<CORBA::ULong>;
#elif defined (ACE_HAS_TEMPLATE_INSTANTIATION_PRAGMA)
-#pragma instantiate ACE_Array_Base<CORBA::Short>
+#pragma instantiate ACE_Array_Base<CORBA::ULong>
#endif /* ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION */
diff --git a/ace/MEM_Addr.cpp b/ace/MEM_Addr.cpp
index 5a0fdb4ccad..a794b734409 100644
--- a/ace/MEM_Addr.cpp
+++ b/ace/MEM_Addr.cpp
@@ -68,13 +68,9 @@ ACE_MEM_Addr::same_host (const ACE_INET_Addr &sap)
{
ACE_TRACE ("ACE_MEM_Addr::same_host");
- // Rather than try to obtain and compare low-level binary
- // data, get copies of both addresses, set the ports to 0
- // (don't care about them) then compare for equality.
- ACE_INET_Addr me (this->external_);
- ACE_INET_Addr you (sap);
- me.set_port_number (0, 0); // No need to encode a 0
- you.set_port_number (0, 0);
+ ACE_UINT32 me = this->external_.get_ip_address ();
+ ACE_UINT32 you = sap.get_ip_address ();
+
return me == you;
}
diff --git a/ace/MEM_Connector.cpp b/ace/MEM_Connector.cpp
index 7a61c75055d..4dd5c0c35a1 100644
--- a/ace/MEM_Connector.cpp
+++ b/ace/MEM_Connector.cpp
@@ -67,9 +67,12 @@ ACE_MEM_Connector::connect (ACE_MEM_Stream &new_stream,
if (!this->address_.same_host (remote_sap))
ACE_ERROR_RETURN ((LM_ERROR,
ACE_LIB_TEXT ("(%P|%t) MEM_Connector can't connect ")
- ACE_LIB_TEXT ("to %s:%d which is not a local endpoint"),
+ ACE_LIB_TEXT ("to %s:%d which is not a local endpoint ")
+ ACE_LIB_TEXT ("(local address is %s:%d)\n"),
remote_sap.get_host_name (),
- remote_sap.get_port_number ()),
+ remote_sap.get_port_number (),
+ this->address_.get_host_name (),
+ this->address_.get_port_number ()),
-1);
else
this->address_.set_port_number (remote_sap.get_port_number ());
diff --git a/bin/auto_run_tests.lst b/bin/auto_run_tests.lst
index a81edf70bf4..fbc3a5710de 100644
--- a/bin/auto_run_tests.lst
+++ b/bin/auto_run_tests.lst
@@ -52,6 +52,7 @@ TAO/tests/RTCORBA/ORB_init/run_test.pl: !MINIMUM
TAO/tests/RTCORBA/Persistent_IOR/run_test.pl: !MINIMUM !ST
TAO/tests/RTCORBA/Policy_Combinations/run_test.pl: !MINIMUM !ST !Linux
TAO/tests/RTCORBA/Private_Connection/run_test.pl: !MINIMUM !ST
+TAO/tests/RTCORBA/Profile_And_Endpoint_Selection/run_test.pl: !MINIMUM !ST !Linux
TAO/tests/RTCORBA/RTMutex/run_test.pl: !MINIMUM !ST
TAO/tests/RTCORBA/Server_Declared/run_test.pl: !MINIMUM !ST !Linux
TAO/tests/RTCORBA/Server_Protocol/run_test.pl: !MINIMUM