diff options
author | irfan <irfan@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 2002-07-08 17:01:38 +0000 |
---|---|---|
committer | irfan <irfan@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 2002-07-08 17:01:38 +0000 |
commit | 304706df1ef2600a9713122b030305fee07b945a (patch) | |
tree | 2ab631d155c7ad8c42e06565c0ce8fd200531042 /TAO | |
parent | 35303ce4d93f4afceef5acf0b8952132c23889db (diff) | |
download | ATCD-304706df1ef2600a9713122b030305fee07b945a.tar.gz |
ChangeLogTag: Sun Jun 30 22:22:05 2002 Irfan Pyarali <irfan@cs.wustl.edu>
Diffstat (limited to 'TAO')
61 files changed, 3878 insertions, 1013 deletions
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 ¶ms); + TAO_Pluggable_Reply_Params ¶ms); /// Parse the locate reply message from the server int parse_locate_reply (TAO_InputCDR &input, - TAO_Pluggable_Reply_Params ¶ms); + TAO_Pluggable_Reply_Params ¶ms); 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 */ |