diff options
author | bala <balanatarajan@users.noreply.github.com> | 2000-08-05 00:48:51 +0000 |
---|---|---|
committer | bala <balanatarajan@users.noreply.github.com> | 2000-08-05 00:48:51 +0000 |
commit | 3bba19a6ca8abb2bebc77a41800e8e4dfcebe82b (patch) | |
tree | 25985fcd0c151e7c91e769892c232e0d2ed6b263 | |
parent | 9ad2079245bb1c4f7efa837bc7623df9e46f89ba (diff) | |
download | ATCD-3bba19a6ca8abb2bebc77a41800e8e4dfcebe82b.tar.gz |
*** empty log message ***
45 files changed, 573 insertions, 341 deletions
diff --git a/TAO/tao/Acceptor_Impl.cpp b/TAO/tao/Acceptor_Impl.cpp index be3f177f38f..b29f2481308 100644 --- a/TAO/tao/Acceptor_Impl.cpp +++ b/TAO/tao/Acceptor_Impl.cpp @@ -77,10 +77,24 @@ TAO_Concurrency_Strategy<SVC_HANDLER>::activate_svc_handler (SVC_HANDLER *sh, TAO_Server_Strategy_Factory *f = this->orb_core_->server_factory (); + // thread-per-connection concurrency model + if (f->activate_server_connections ()) return sh->activate (f->server_connection_thread_flags (), f->server_connection_thread_count ()); + // reactive concurrency model + + // Keep track of open connections so that they can be explicitly + // removed from the reactor prior to shutting down the ORB. This is + // particularly important for dynamically loaded ORBs where an + // application level reactor, such as the Singleton reactor, is used + // instead of an ORB created one. Register the handle (not handler) + // associated with the connection that was just accepted with the + // ORB Core. + if (this->orb_core_->register_handle (sh->get_handle ()) != 0) + return -1; + return this->orb_core_->reactor ()->register_handler (sh, ACE_Event_Handler::READ_MASK); } diff --git a/TAO/tao/Acceptor_Registry.cpp b/TAO/tao/Acceptor_Registry.cpp index 08ec327b1f1..2b5cdb38005 100644 --- a/TAO/tao/Acceptor_Registry.cpp +++ b/TAO/tao/Acceptor_Registry.cpp @@ -228,6 +228,11 @@ TAO_Acceptor_Registry::open (TAO_ORB_Core *orb_core, } } + // No longer need the endpoint set since all associated acceptors + // have been opened by now. Reclaim the memory used by the endpoint + // set. + endpoint_set.reset (); + return 0; } diff --git a/TAO/tao/Buffering_Constraint_Policy.cpp b/TAO/tao/Buffering_Constraint_Policy.cpp index 7439c0fd435..7858f6f5b87 100644 --- a/TAO/tao/Buffering_Constraint_Policy.cpp +++ b/TAO/tao/Buffering_Constraint_Policy.cpp @@ -25,6 +25,7 @@ TAO_Buffering_Constraint_Policy::TAO_Buffering_Constraint_Policy (const TAO_Buff CORBA::PolicyType TAO_Buffering_Constraint_Policy::policy_type (CORBA_Environment &) + ACE_THROW_SPEC ((CORBA::SystemException)) { return TAO::BUFFERING_CONSTRAINT_POLICY_TYPE; } @@ -66,6 +67,7 @@ TAO_Buffering_Constraint_Policy::buffering_constraint (CORBA::Environment &) CORBA::Policy_ptr TAO_Buffering_Constraint_Policy::copy (CORBA_Environment &ACE_TRY_ENV) + ACE_THROW_SPEC ((CORBA::SystemException)) { TAO_Buffering_Constraint_Policy* servant = 0; ACE_NEW_THROW_EX (servant, @@ -78,6 +80,7 @@ TAO_Buffering_Constraint_Policy::copy (CORBA_Environment &ACE_TRY_ENV) void TAO_Buffering_Constraint_Policy::destroy (CORBA_Environment &) + ACE_THROW_SPEC ((CORBA::SystemException)) { } diff --git a/TAO/tao/Buffering_Constraint_Policy.h b/TAO/tao/Buffering_Constraint_Policy.h index 10bc3d63486..c3a904ec5f9 100644 --- a/TAO/tao/Buffering_Constraint_Policy.h +++ b/TAO/tao/Buffering_Constraint_Policy.h @@ -71,11 +71,14 @@ public: ACE_THROW_SPEC (()); void get_buffering_constraint (TAO::BufferingConstraint &) const; - virtual CORBA::PolicyType policy_type (CORBA_Environment &ACE_TRY_ENV = TAO_default_environment ()); + virtual CORBA::PolicyType policy_type (CORBA_Environment &ACE_TRY_ENV = TAO_default_environment ()) + ACE_THROW_SPEC ((CORBA::SystemException)); - virtual CORBA::Policy_ptr copy (CORBA_Environment &ACE_TRY_ENV = TAO_default_environment ()); + virtual CORBA::Policy_ptr copy (CORBA_Environment &ACE_TRY_ENV = TAO_default_environment ()) + ACE_THROW_SPEC ((CORBA::SystemException)); - virtual void destroy (CORBA_Environment &ACE_TRY_ENV = TAO_default_environment ()); + virtual void destroy (CORBA_Environment &ACE_TRY_ENV = TAO_default_environment ()) + ACE_THROW_SPEC ((CORBA::SystemException)); private: TAO::BufferingConstraint buffering_constraint_; diff --git a/TAO/tao/CONV_FRAMEC.i b/TAO/tao/CONV_FRAMEC.i index 5d07522a858..811efdeeb48 100644 --- a/TAO/tao/CONV_FRAMEC.i +++ b/TAO/tao/CONV_FRAMEC.i @@ -43,8 +43,8 @@ CONV_FRAME::CodeSetComponent_var::operator= (const CONV_FRAME::CodeSetComponent_ if (this != &p) { delete this->ptr_; - ACE_NEW_RETURN (this->ptr_, - CONV_FRAME::CodeSetComponent (*p.ptr_), + ACE_NEW_RETURN (this->ptr_, + CONV_FRAME::CodeSetComponent (*p.ptr_), *this); } return *this; @@ -290,6 +290,7 @@ CONV_FRAME::CodeSetComponent_out::operator-> (void) { result = CONV_FRAME::CodeSetComponent::_TAO_Unbounded_Sequence_CONV_FRAME_CodeSetComponent__tao_seq_CodeSetId::allocbuf (this->length_); this->buffer_ = result; + this->release_ = 1; } else { @@ -386,8 +387,8 @@ CONV_FRAME::CodeSetComponent::_tao_seq_CodeSetId_var::operator= (const CONV_FRAM if (this != &p) { delete this->ptr_; - ACE_NEW_RETURN (this->ptr_, - CONV_FRAME::CodeSetComponent::_tao_seq_CodeSetId (*p.ptr_), + ACE_NEW_RETURN (this->ptr_, + CONV_FRAME::CodeSetComponent::_tao_seq_CodeSetId (*p.ptr_), *this); } return *this; @@ -572,8 +573,8 @@ CONV_FRAME::CodeSetComponentInfo_var::operator= (const CONV_FRAME::CodeSetCompon if (this != &p) { delete this->ptr_; - ACE_NEW_RETURN (this->ptr_, - CONV_FRAME::CodeSetComponentInfo (*p.ptr_), + ACE_NEW_RETURN (this->ptr_, + CONV_FRAME::CodeSetComponentInfo (*p.ptr_), *this); } return *this; @@ -743,8 +744,8 @@ CONV_FRAME::CodeSetContext_var::operator= (const CONV_FRAME::CodeSetContext_var if (this != &p) { delete this->ptr_; - ACE_NEW_RETURN (this->ptr_, - CONV_FRAME::CodeSetContext (*p.ptr_), + ACE_NEW_RETURN (this->ptr_, + CONV_FRAME::CodeSetContext (*p.ptr_), *this); } return *this; diff --git a/TAO/tao/Client_Priority_Policy.cpp b/TAO/tao/Client_Priority_Policy.cpp index 5966730dd1d..d93c9fc35e8 100644 --- a/TAO/tao/Client_Priority_Policy.cpp +++ b/TAO/tao/Client_Priority_Policy.cpp @@ -33,6 +33,7 @@ TAO_Client_Priority_Policy::priority_specification (CORBA::Environment &) CORBA::PolicyType TAO_Client_Priority_Policy::policy_type (CORBA_Environment &) + ACE_THROW_SPEC ((CORBA::SystemException)) { return TAO::CLIENT_PRIORITY_POLICY_TYPE; } @@ -70,6 +71,7 @@ TAO_Client_Priority_Policy::clone (void) const CORBA::Policy_ptr TAO_Client_Priority_Policy::copy (CORBA_Environment &ACE_TRY_ENV) + ACE_THROW_SPEC ((CORBA::SystemException)) { // Future policy implementors: notice how the following code is // exception safe! @@ -85,6 +87,7 @@ TAO_Client_Priority_Policy::copy (CORBA_Environment &ACE_TRY_ENV) void TAO_Client_Priority_Policy::destroy (CORBA_Environment &) + ACE_THROW_SPEC ((CORBA::SystemException)) { } diff --git a/TAO/tao/Client_Priority_Policy.h b/TAO/tao/Client_Priority_Policy.h index 99792591e34..da5796b4ae8 100644 --- a/TAO/tao/Client_Priority_Policy.h +++ b/TAO/tao/Client_Priority_Policy.h @@ -76,13 +76,16 @@ public: ACE_THROW_SPEC (()); virtual CORBA::PolicyType policy_type ( CORBA_Environment &ACE_TRY_ENV = TAO_default_environment () - ); + ) + ACE_THROW_SPEC ((CORBA::SystemException)); virtual CORBA::Policy_ptr copy ( CORBA_Environment &ACE_TRY_ENV = TAO_default_environment () - ); + ) + ACE_THROW_SPEC ((CORBA::SystemException)); virtual void destroy ( CORBA_Environment &ACE_TRY_ENV = TAO_default_environment () - ); + ) + ACE_THROW_SPEC ((CORBA::SystemException)); private: TAO::PrioritySpecification priority_spec_; diff --git a/TAO/tao/Connector_Registry.cpp b/TAO/tao/Connector_Registry.cpp index 1a89726d964..c3ae5f7c7de 100644 --- a/TAO/tao/Connector_Registry.cpp +++ b/TAO/tao/Connector_Registry.cpp @@ -146,6 +146,11 @@ TAO_Connector_Registry::preconnect (TAO_ORB_Core *orb_core, (*connector)->preconnect (i->c_str ()); } + // No longer need the preconnect set since all associated + // preconnections have been opened by now. Reclaim the memory used + // by the preconnect set. + preconnections.reset (); + return 0; // Success } diff --git a/TAO/tao/DynAny_i.cpp b/TAO/tao/DynAny_i.cpp index 45dd8c1e749..4fb549e3879 100644 --- a/TAO/tao/DynAny_i.cpp +++ b/TAO/tao/DynAny_i.cpp @@ -76,8 +76,8 @@ TAO_DynAny_i::TAO_DynAny_i (const CORBA_Any& any) ACE_DECLARE_NEW_CORBA_ENV; ACE_TRY { - // @@ Is the typecode duplicate in Any.type()??? - int tk = unalias (any.type (), ACE_TRY_ENV); + CORBA::TypeCode_var tc = any.type (); + int tk = unalias (tc.in (), ACE_TRY_ENV); ACE_TRY_CHECK; switch (tk) { @@ -122,18 +122,19 @@ TAO_DynAny_i::~TAO_DynAny_i (void) CORBA::TypeCode_ptr TAO_DynAny_i::type (CORBA::Environment &) { - return CORBA_TypeCode::_duplicate (this->value_.type ()); + return this->value_.type (); } void TAO_DynAny_i::assign (CORBA_DynAny_ptr dyn_any, CORBA::Environment &ACE_TRY_ENV) { - CORBA::TypeCode_ptr tp = dyn_any->type (ACE_TRY_ENV); + CORBA::TypeCode_var tp = dyn_any->type (ACE_TRY_ENV); ACE_CHECK; - CORBA::Boolean equal = this->value_.type ()->equal (tp, - ACE_TRY_ENV); + CORBA::TypeCode_var tc = this->value_.type (); + CORBA::Boolean equal = tc->equal (tp.in (), + ACE_TRY_ENV); ACE_CHECK; if (equal) @@ -150,12 +151,15 @@ TAO_DynAny_i::assign (CORBA_DynAny_ptr dyn_any, CORBA_DynAny_ptr TAO_DynAny_i::copy (CORBA::Environment &ACE_TRY_ENV) { - TAO_DynAny_i* tmp = new TAO_DynAny_i (this->value_); - - CORBA_DynAny_ptr retval = tmp->_this (ACE_TRY_ENV); - ACE_CHECK_RETURN (0); + TAO_DynAny_i* tmp = 0; + ACE_NEW_RETURN (tmp, + TAO_DynAny_i (this->value_), + CORBA::DynAny::_nil ()); + + CORBA_DynAny_var retval = tmp->_this (ACE_TRY_ENV); + ACE_CHECK_RETURN (CORBA::DynAny::_nil ()); - return retval; + return retval._retn (); } void @@ -168,9 +172,11 @@ void TAO_DynAny_i::from_any (const CORBA_Any& any, CORBA::Environment &ACE_TRY_ENV) { - CORBA::Boolean equal = - this->value_.type ()->equal (any.type (), - ACE_TRY_ENV); + CORBA::TypeCode_var tc = this->value_.type (); + CORBA::TypeCode_var any_tc = any.type (); + + CORBA::Boolean equal = tc->equal (any_tc.in (), + ACE_TRY_ENV); ACE_CHECK; if (!equal || any._tao_get_cdr () == 0) @@ -235,7 +241,8 @@ void TAO_DynAny_i::insert_boolean (CORBA::Boolean value, CORBA::Environment &ACE_TRY_ENV) { - CORBA::TCKind kind = TAO_DynAny_i::unalias (this->value_.type (), + CORBA::TypeCode_var tc = this->value_.type (); + CORBA::TCKind kind = TAO_DynAny_i::unalias (tc.in (), ACE_TRY_ENV); ACE_CHECK; @@ -254,7 +261,8 @@ void TAO_DynAny_i::insert_octet (CORBA::Octet value, CORBA::Environment &ACE_TRY_ENV) { - CORBA::TCKind kind = TAO_DynAny_i::unalias (this->value_.type (), + CORBA::TypeCode_var tc = this->value_.type (); + CORBA::TCKind kind = TAO_DynAny_i::unalias (tc.in (), ACE_TRY_ENV); ACE_CHECK; @@ -273,7 +281,8 @@ void TAO_DynAny_i::insert_char (CORBA::Char value, CORBA::Environment &ACE_TRY_ENV) { - CORBA::TCKind kind = TAO_DynAny_i::unalias (this->value_.type (), + CORBA::TypeCode_var tc = this->value_.type (); + CORBA::TCKind kind = TAO_DynAny_i::unalias (tc.in (), ACE_TRY_ENV); ACE_CHECK; @@ -292,7 +301,8 @@ void TAO_DynAny_i::insert_short (CORBA::Short value, CORBA::Environment &ACE_TRY_ENV) { - CORBA::TCKind kind = TAO_DynAny_i::unalias (this->value_.type (), + CORBA::TypeCode_var tc = this->value_.type (); + CORBA::TCKind kind = TAO_DynAny_i::unalias (tc.in (), ACE_TRY_ENV); ACE_CHECK; @@ -310,7 +320,8 @@ void TAO_DynAny_i::insert_ushort (CORBA::UShort value, CORBA::Environment &ACE_TRY_ENV) { - CORBA::TCKind kind = TAO_DynAny_i::unalias (this->value_.type (), + CORBA::TypeCode_var tc = this->value_.type (); + CORBA::TCKind kind = TAO_DynAny_i::unalias (tc.in (), ACE_TRY_ENV); ACE_CHECK; @@ -328,7 +339,8 @@ void TAO_DynAny_i::insert_long (CORBA::Long value, CORBA::Environment &ACE_TRY_ENV) { - CORBA::TCKind kind = TAO_DynAny_i::unalias (this->value_.type (), + CORBA::TypeCode_var tc = this->value_.type (); + CORBA::TCKind kind = TAO_DynAny_i::unalias (tc.in (), ACE_TRY_ENV); ACE_CHECK; @@ -346,7 +358,8 @@ void TAO_DynAny_i::insert_ulong (CORBA::ULong value, CORBA::Environment &ACE_TRY_ENV) { - CORBA::TCKind kind = TAO_DynAny_i::unalias (this->value_.type (), + CORBA::TypeCode_var tc = this->value_.type (); + CORBA::TCKind kind = TAO_DynAny_i::unalias (tc.in (), ACE_TRY_ENV); ACE_CHECK; @@ -364,7 +377,8 @@ void TAO_DynAny_i::insert_float (CORBA::Float value, CORBA::Environment &ACE_TRY_ENV) { - CORBA::TCKind kind = TAO_DynAny_i::unalias (this->value_.type (), + CORBA::TypeCode_var tc = this->value_.type (); + CORBA::TCKind kind = TAO_DynAny_i::unalias (tc.in (), ACE_TRY_ENV); ACE_CHECK; @@ -382,7 +396,8 @@ void TAO_DynAny_i::insert_double (CORBA::Double value, CORBA::Environment &ACE_TRY_ENV) { - CORBA::TCKind kind = TAO_DynAny_i::unalias (this->value_.type (), + CORBA::TypeCode_var tc = this->value_.type (); + CORBA::TCKind kind = TAO_DynAny_i::unalias (tc.in (), ACE_TRY_ENV); ACE_CHECK; @@ -400,7 +415,8 @@ void TAO_DynAny_i::insert_string (const char * value, CORBA::Environment &ACE_TRY_ENV) { - CORBA::TCKind kind = TAO_DynAny_i::unalias (this->value_.type (), + CORBA::TypeCode_var tc = this->value_.type (); + CORBA::TCKind kind = TAO_DynAny_i::unalias (tc.in (), ACE_TRY_ENV); ACE_CHECK; @@ -418,7 +434,8 @@ void TAO_DynAny_i::insert_reference (CORBA::Object_ptr value, CORBA::Environment &ACE_TRY_ENV) { - CORBA::TCKind kind = TAO_DynAny_i::unalias (this->value_.type (), + CORBA::TypeCode_var tc = this->value_.type (); + CORBA::TCKind kind = TAO_DynAny_i::unalias (tc.in (), ACE_TRY_ENV); ACE_CHECK; @@ -429,7 +446,10 @@ TAO_DynAny_i::insert_reference (CORBA::Object_ptr value, TAO_OutputCDR stream; if (!(stream << obj.in ())) ACE_THROW (CORBA::MARSHAL ()); - this->value_._tao_replace (this->value_.type (), + + CORBA::TypeCode_var tc = this->value_.type (); + + this->value_._tao_replace (tc.in (), TAO_ENCAP_BYTE_ORDER, stream.begin (), 1, @@ -446,7 +466,8 @@ void TAO_DynAny_i::insert_typecode (CORBA::TypeCode_ptr value, CORBA::Environment &ACE_TRY_ENV) { - CORBA::TCKind kind = TAO_DynAny_i::unalias (this->value_.type (), + CORBA::TypeCode_var tc = this->value_.type (); + CORBA::TCKind kind = TAO_DynAny_i::unalias (tc.in (), ACE_TRY_ENV); ACE_CHECK; @@ -464,7 +485,8 @@ void TAO_DynAny_i::insert_longlong (CORBA::LongLong value, CORBA::Environment &ACE_TRY_ENV) { - CORBA::TCKind kind = TAO_DynAny_i::unalias (this->value_.type (), + CORBA::TypeCode_var tc = this->value_.type (); + CORBA::TCKind kind = TAO_DynAny_i::unalias (tc.in (), ACE_TRY_ENV); ACE_CHECK; @@ -482,8 +504,9 @@ void TAO_DynAny_i::insert_ulonglong (CORBA::ULongLong value, CORBA::Environment &ACE_TRY_ENV) { - CORBA::TCKind kind = unalias (this->value_.type (), - ACE_TRY_ENV); + CORBA::TypeCode_var tc = this->value_.type (); + CORBA::TCKind kind = TAO_DynAny_i::unalias (tc.in (), + ACE_TRY_ENV); ACE_CHECK; if (kind == CORBA::tk_ulonglong) @@ -500,7 +523,8 @@ void TAO_DynAny_i::insert_wchar (CORBA::WChar value, CORBA::Environment &ACE_TRY_ENV) { - CORBA::TCKind kind = TAO_DynAny_i::unalias (this->value_.type (), + CORBA::TypeCode_var tc = this->value_.type (); + CORBA::TCKind kind = TAO_DynAny_i::unalias (tc.in (), ACE_TRY_ENV); ACE_CHECK; @@ -519,7 +543,8 @@ void TAO_DynAny_i::insert_any (const CORBA::Any& value, CORBA::Environment &ACE_TRY_ENV) { - CORBA::TCKind kind = TAO_DynAny_i::unalias (this->value_.type (), + CORBA::TypeCode_var tc = this->value_.type (); + CORBA::TCKind kind = TAO_DynAny_i::unalias (tc.in (), ACE_TRY_ENV); ACE_CHECK; @@ -777,7 +802,8 @@ CORBA_DynAny_ptr TAO_DynAny_i::create_dyn_any (const CORBA_Any &any, CORBA::Environment &ACE_TRY_ENV) { - CORBA::TCKind kind = TAO_DynAny_i::unalias (any.type (), + CORBA::TypeCode_var tc = any.type (); + CORBA::TCKind kind = TAO_DynAny_i::unalias (tc.in (), ACE_TRY_ENV); ACE_CHECK_RETURN (CORBA_DynAny::_nil ()); diff --git a/TAO/tao/DynArray_i.cpp b/TAO/tao/DynArray_i.cpp index c49061ad68b..11ff159b57e 100644 --- a/TAO/tao/DynArray_i.cpp +++ b/TAO/tao/DynArray_i.cpp @@ -43,7 +43,8 @@ TAO_DynArray_i::TAO_DynArray_i (const CORBA_Any& any) if (kind == CORBA::tk_array) { - CORBA::ULong numfields = this->get_arg_length (any.type (), + CORBA::TypeCode_var tc = any.type (); + CORBA::ULong numfields = this->get_arg_length (tc.in (), ACE_TRY_ENV); ACE_TRY_CHECK; // Resize the array. @@ -183,11 +184,14 @@ TAO_DynArray_i::set_elements (const CORBA_AnySeq& value, this->get_element_type (ACE_TRY_ENV); ACE_CHECK; + CORBA::TypeCode_var value_tc; + for (CORBA::ULong i = 0; i < length; i++) { // Check each arg element for type match. - CORBA::Boolean equal = value[i].type ()->equal (element_type.in (), - ACE_TRY_ENV); + value_tc = value[i].type (); + CORBA::Boolean equal = value_tc->equal (element_type.in (), + ACE_TRY_ENV); ACE_CHECK; if (equal) @@ -273,7 +277,8 @@ void TAO_DynArray_i::from_any (const CORBA_Any& any, CORBA::Environment &ACE_TRY_ENV) { - CORBA::Boolean equal = this->type_.in ()->equal (any.type (), + CORBA::TypeCode_var tc = any.type (); + CORBA::Boolean equal = this->type_.in ()->equal (tc.in (), ACE_TRY_ENV); ACE_CHECK; @@ -285,7 +290,7 @@ TAO_DynArray_i::from_any (const CORBA_Any& any, any._tao_byte_order ()); CORBA::ULong length = this->da_members_.size (); - CORBA::ULong arg_length = this->get_arg_length (any.type (), + CORBA::ULong arg_length = this->get_arg_length (tc.in (), ACE_TRY_ENV); ACE_CHECK; diff --git a/TAO/tao/DynEnum_i.cpp b/TAO/tao/DynEnum_i.cpp index 60fbad19c2b..c8cacd8ab99 100644 --- a/TAO/tao/DynEnum_i.cpp +++ b/TAO/tao/DynEnum_i.cpp @@ -209,7 +209,8 @@ void TAO_DynEnum_i::from_any (const CORBA_Any& any, CORBA::Environment &ACE_TRY_ENV) { - CORBA::TCKind kind = TAO_DynAny_i::unalias (any.type (), + CORBA::TypeCode_var tc = any.type (); + CORBA::TCKind kind = TAO_DynAny_i::unalias (tc.in (), ACE_TRY_ENV); ACE_CHECK; diff --git a/TAO/tao/DynSequence_i.cpp b/TAO/tao/DynSequence_i.cpp index 1fe5afe5dfc..fa392d2dd96 100644 --- a/TAO/tao/DynSequence_i.cpp +++ b/TAO/tao/DynSequence_i.cpp @@ -193,11 +193,14 @@ TAO_DynSequence_i::set_elements (const CORBA_AnySeq& value, this->get_element_type (ACE_TRY_ENV); ACE_CHECK; + CORBA::TypeCode_var value_tc; + for (CORBA::ULong i = 0; i < length; i++) { // Check each arg element for type match. - CORBA::Boolean equal = value[i].type ()->equal (element_type.in (), - ACE_TRY_ENV); + value_tc = value[i].type (); + CORBA::Boolean equal = value_tc->equal (element_type.in (), + ACE_TRY_ENV); ACE_CHECK; if (equal) @@ -283,7 +286,8 @@ void TAO_DynSequence_i::from_any (const CORBA_Any& any, CORBA::Environment &ACE_TRY_ENV) { - CORBA::Boolean equal = this->type_.in ()->equal (any.type (), + CORBA::TypeCode_var tc = any.type (); + CORBA::Boolean equal = this->type_.in ()->equal (tc.in (), ACE_TRY_ENV); ACE_CHECK; diff --git a/TAO/tao/DynStruct_i.cpp b/TAO/tao/DynStruct_i.cpp index f9856f2d245..07af02fadf4 100644 --- a/TAO/tao/DynStruct_i.cpp +++ b/TAO/tao/DynStruct_i.cpp @@ -200,6 +200,8 @@ TAO_DynStruct_i::set_members (const CORBA::NameValuePairSeq& value, // Check for length match. if (length == this->da_members_.size ()) { + CORBA::TypeCode_var value_tc; + for (CORBA::ULong i = 0; i < length; i++) { // Check for type and name match. @@ -207,7 +209,9 @@ TAO_DynStruct_i::set_members (const CORBA::NameValuePairSeq& value, ACE_TRY_ENV); ACE_CHECK; - if (value[i].value.type ()->equal (tc.in ()) + value_tc = value[i].value.type (); + + if (value_tc->equal (tc.in ()) && !ACE_OS::strcmp (value[i].id, this->type_.in ()->member_name (i))) { @@ -298,7 +302,8 @@ void TAO_DynStruct_i::from_any (const CORBA_Any& any, CORBA::Environment &ACE_TRY_ENV) { - CORBA::Boolean equal = this->type_.in ()->equal (any.type (), + CORBA::TypeCode_var tc = any.type (); + CORBA::Boolean equal = this->type_.in ()->equal (tc.in (), ACE_TRY_ENV); ACE_CHECK; @@ -940,10 +945,10 @@ TAO_DynStruct_i::get_boolean (CORBA::Environment &ACE_TRY_ENV) if (dp) { - CORBA_TypeCode_ptr tc = dp->type (ACE_TRY_ENV); + CORBA_TypeCode_var tc = dp->type (ACE_TRY_ENV); ACE_CHECK_RETURN (0); - CORBA::TCKind kind = TAO_DynAny_i::unalias (tc, + CORBA::TCKind kind = TAO_DynAny_i::unalias (tc.in (), ACE_TRY_ENV); ACE_CHECK_RETURN (0); @@ -979,10 +984,10 @@ TAO_DynStruct_i::get_octet (CORBA::Environment &ACE_TRY_ENV) if (dp) { - CORBA_TypeCode_ptr tc = dp->type (ACE_TRY_ENV); + CORBA_TypeCode_var tc = dp->type (ACE_TRY_ENV); ACE_CHECK_RETURN (0); - CORBA::TCKind kind = TAO_DynAny_i::unalias (tc, + CORBA::TCKind kind = TAO_DynAny_i::unalias (tc.in (), ACE_TRY_ENV); ACE_CHECK_RETURN (0); @@ -1018,10 +1023,10 @@ TAO_DynStruct_i::get_char (CORBA::Environment &ACE_TRY_ENV) if (dp) { - CORBA_TypeCode_ptr tc = dp->type (ACE_TRY_ENV); + CORBA_TypeCode_var tc = dp->type (ACE_TRY_ENV); ACE_CHECK_RETURN (0); - CORBA::TCKind kind = TAO_DynAny_i::unalias (tc, + CORBA::TCKind kind = TAO_DynAny_i::unalias (tc.in (), ACE_TRY_ENV); ACE_CHECK_RETURN (0); @@ -1057,10 +1062,10 @@ TAO_DynStruct_i::get_short (CORBA::Environment &ACE_TRY_ENV) if (dp) { - CORBA_TypeCode_ptr tc = dp->type (ACE_TRY_ENV); + CORBA_TypeCode_var tc = dp->type (ACE_TRY_ENV); ACE_CHECK_RETURN (0); - CORBA::TCKind kind = TAO_DynAny_i::unalias (tc, + CORBA::TCKind kind = TAO_DynAny_i::unalias (tc.in (), ACE_TRY_ENV); ACE_CHECK_RETURN (0); @@ -1096,10 +1101,10 @@ TAO_DynStruct_i::get_ushort (CORBA::Environment &ACE_TRY_ENV) if (dp) { - CORBA_TypeCode_ptr tc = dp->type (ACE_TRY_ENV); + CORBA_TypeCode_var tc = dp->type (ACE_TRY_ENV); ACE_CHECK_RETURN (0); - CORBA::TCKind kind = TAO_DynAny_i::unalias (tc, + CORBA::TCKind kind = TAO_DynAny_i::unalias (tc.in (), ACE_TRY_ENV); ACE_CHECK_RETURN (0); @@ -1135,10 +1140,10 @@ TAO_DynStruct_i::get_long (CORBA::Environment &ACE_TRY_ENV) if (dp) { - CORBA_TypeCode_ptr tc = dp->type (ACE_TRY_ENV); + CORBA_TypeCode_var tc = dp->type (ACE_TRY_ENV); ACE_CHECK_RETURN (0); - CORBA::TCKind kind = TAO_DynAny_i::unalias (tc, + CORBA::TCKind kind = TAO_DynAny_i::unalias (tc.in (), ACE_TRY_ENV); ACE_CHECK_RETURN (0); @@ -1174,10 +1179,10 @@ TAO_DynStruct_i::get_ulong (CORBA::Environment &ACE_TRY_ENV) if (dp) { - CORBA_TypeCode_ptr tc = dp->type (ACE_TRY_ENV); + CORBA_TypeCode_var tc = dp->type (ACE_TRY_ENV); ACE_CHECK_RETURN (0); - CORBA::TCKind kind = TAO_DynAny_i::unalias (tc, + CORBA::TCKind kind = TAO_DynAny_i::unalias (tc.in (), ACE_TRY_ENV); ACE_CHECK_RETURN (0); @@ -1213,10 +1218,10 @@ TAO_DynStruct_i::get_float (CORBA::Environment &ACE_TRY_ENV) if (dp) { - CORBA_TypeCode_ptr tc = dp->type (ACE_TRY_ENV); + CORBA_TypeCode_var tc = dp->type (ACE_TRY_ENV); ACE_CHECK_RETURN (0); - CORBA::TCKind kind = TAO_DynAny_i::unalias (tc, + CORBA::TCKind kind = TAO_DynAny_i::unalias (tc.in (), ACE_TRY_ENV); ACE_CHECK_RETURN (0); @@ -1252,10 +1257,10 @@ TAO_DynStruct_i::get_double (CORBA::Environment &ACE_TRY_ENV) if (dp) { - CORBA_TypeCode_ptr tc = dp->type (ACE_TRY_ENV); + CORBA_TypeCode_var tc = dp->type (ACE_TRY_ENV); ACE_CHECK_RETURN (0); - CORBA::TCKind kind = TAO_DynAny_i::unalias (tc, + CORBA::TCKind kind = TAO_DynAny_i::unalias (tc.in (), ACE_TRY_ENV); ACE_CHECK_RETURN (0); @@ -1291,10 +1296,10 @@ TAO_DynStruct_i::get_string (CORBA::Environment &ACE_TRY_ENV) if (dp) { - CORBA_TypeCode_ptr tc = dp->type (ACE_TRY_ENV); + CORBA_TypeCode_var tc = dp->type (ACE_TRY_ENV); ACE_CHECK_RETURN (0); - CORBA::TCKind kind = TAO_DynAny_i::unalias (tc, + CORBA::TCKind kind = TAO_DynAny_i::unalias (tc.in (), ACE_TRY_ENV); ACE_CHECK_RETURN (0); @@ -1330,10 +1335,10 @@ TAO_DynStruct_i::get_reference (CORBA::Environment &ACE_TRY_ENV) if (dp) { - CORBA_TypeCode_ptr tc = dp->type (ACE_TRY_ENV); + CORBA_TypeCode_var tc = dp->type (ACE_TRY_ENV); ACE_CHECK_RETURN (0); - CORBA::TCKind kind = TAO_DynAny_i::unalias (tc, + CORBA::TCKind kind = TAO_DynAny_i::unalias (tc.in (), ACE_TRY_ENV); ACE_CHECK_RETURN (0); @@ -1369,10 +1374,10 @@ TAO_DynStruct_i::get_typecode (CORBA::Environment &ACE_TRY_ENV) if (dp) { - CORBA_TypeCode_ptr tc = dp->type (ACE_TRY_ENV); + CORBA_TypeCode_var tc = dp->type (ACE_TRY_ENV); ACE_CHECK_RETURN (0); - CORBA::TCKind kind = TAO_DynAny_i::unalias (tc, + CORBA::TCKind kind = TAO_DynAny_i::unalias (tc.in (), ACE_TRY_ENV); ACE_CHECK_RETURN (0); @@ -1412,10 +1417,10 @@ TAO_DynStruct_i::get_longlong (CORBA::Environment &ACE_TRY_ENV) if (dp) { - CORBA_TypeCode_ptr tc = dp->type (ACE_TRY_ENV); + CORBA_TypeCode_var tc = dp->type (ACE_TRY_ENV); ACE_CHECK_RETURN (val); - CORBA::TCKind kind = TAO_DynAny_i::unalias (tc, + CORBA::TCKind kind = TAO_DynAny_i::unalias (tc.in (), ACE_TRY_ENV); ACE_CHECK_RETURN (val); @@ -1451,10 +1456,10 @@ TAO_DynStruct_i::get_ulonglong (CORBA::Environment &ACE_TRY_ENV) if (dp) { - CORBA_TypeCode_ptr tc = dp->type (ACE_TRY_ENV); + CORBA_TypeCode_var tc = dp->type (ACE_TRY_ENV); ACE_CHECK_RETURN (0); - CORBA::TCKind kind = TAO_DynAny_i::unalias (tc, + CORBA::TCKind kind = TAO_DynAny_i::unalias (tc.in (), ACE_TRY_ENV); ACE_CHECK_RETURN (0); @@ -1490,10 +1495,10 @@ TAO_DynStruct_i::get_wchar (CORBA::Environment &ACE_TRY_ENV) if (dp) { - CORBA_TypeCode_ptr tc = dp->type (ACE_TRY_ENV); + CORBA_TypeCode_var tc = dp->type (ACE_TRY_ENV); ACE_CHECK_RETURN (0); - CORBA::TCKind kind = TAO_DynAny_i::unalias (tc, + CORBA::TCKind kind = TAO_DynAny_i::unalias (tc.in (), ACE_TRY_ENV); ACE_CHECK_RETURN (0); @@ -1529,10 +1534,10 @@ TAO_DynStruct_i::get_any (CORBA::Environment &ACE_TRY_ENV) if (dp) { - CORBA_TypeCode_ptr tc = dp->type (ACE_TRY_ENV); + CORBA_TypeCode_var tc = dp->type (ACE_TRY_ENV); ACE_CHECK_RETURN (0); - CORBA::TCKind kind = TAO_DynAny_i::unalias (tc, + CORBA::TCKind kind = TAO_DynAny_i::unalias (tc.in (), ACE_TRY_ENV); ACE_CHECK_RETURN (0); diff --git a/TAO/tao/DynUnion_i.cpp b/TAO/tao/DynUnion_i.cpp index 6011b52c57d..d640ca83e97 100644 --- a/TAO/tao/DynUnion_i.cpp +++ b/TAO/tao/DynUnion_i.cpp @@ -43,7 +43,8 @@ TAO_DynUnion_i::TAO_DynUnion_i (const CORBA_Any& any) ACE_DECLARE_NEW_CORBA_ENV; ACE_TRY { - int tk = TAO_DynAny_i::unalias (any.type (), + CORBA::TypeCode_var tc = any.type (); + int tk = TAO_DynAny_i::unalias (tc.in (), ACE_TRY_ENV); ACE_TRY_CHECK; @@ -139,7 +140,7 @@ TAO_DynUnion_i::set_as_default (CORBA::Boolean /* set_as_default */, CORBA_DynAny_ptr TAO_DynUnion_i::discriminator (CORBA::Environment &) { - return this->discriminator_.in (); + return CORBA::DynAny::_duplicate (this->discriminator_.in ()); } CORBA::TCKind @@ -158,7 +159,7 @@ TAO_DynUnion_i::discriminator_kind (CORBA::Environment& ACE_TRY_ENV) CORBA_DynAny_ptr TAO_DynUnion_i::member (CORBA::Environment &) { - return this->member_.in (); + return CORBA::DynAny::_duplicate (this->member_.in ()); } char* @@ -300,7 +301,8 @@ void TAO_DynUnion_i::from_any (const CORBA_Any& any, CORBA::Environment &ACE_TRY_ENV) { - CORBA::Boolean equal = this->type_.in ()->equal (any.type (), + CORBA::TypeCode_var tc = any.type (); + CORBA::Boolean equal = this->type_.in ()->equal (tc.in (), ACE_TRY_ENV); ACE_CHECK; @@ -502,10 +504,10 @@ void TAO_DynUnion_i::insert_boolean (CORBA::Boolean value, CORBA::Environment &ACE_TRY_ENV) { - CORBA_TypeCode_ptr type = this->member_->type (ACE_TRY_ENV); + CORBA_TypeCode_var type = this->member_->type (ACE_TRY_ENV); ACE_CHECK; - CORBA::TCKind kind = TAO_DynAny_i::unalias (type, + CORBA::TCKind kind = TAO_DynAny_i::unalias (type.in (), ACE_TRY_ENV); ACE_CHECK; @@ -632,10 +634,10 @@ void TAO_DynUnion_i::insert_char (CORBA::Char value, CORBA::Environment &ACE_TRY_ENV) { - CORBA_TypeCode_ptr type = this->member_->type (ACE_TRY_ENV); + CORBA_TypeCode_var type = this->member_->type (ACE_TRY_ENV); ACE_CHECK; - CORBA::TCKind kind = TAO_DynAny_i::unalias (type, + CORBA::TCKind kind = TAO_DynAny_i::unalias (type.in (), ACE_TRY_ENV); ACE_CHECK; @@ -697,10 +699,10 @@ void TAO_DynUnion_i::insert_short (CORBA::Short value, CORBA::Environment &ACE_TRY_ENV) { - CORBA_TypeCode_ptr type = this->member_->type (ACE_TRY_ENV); + CORBA_TypeCode_var type = this->member_->type (ACE_TRY_ENV); ACE_CHECK; - CORBA::TCKind kind = TAO_DynAny_i::unalias (type, + CORBA::TCKind kind = TAO_DynAny_i::unalias (type.in (), ACE_TRY_ENV); ACE_CHECK; @@ -762,10 +764,10 @@ void TAO_DynUnion_i::insert_long (CORBA::Long value, CORBA::Environment &ACE_TRY_ENV) { - CORBA_TypeCode_ptr type = this->member_->type (ACE_TRY_ENV); + CORBA_TypeCode_var type = this->member_->type (ACE_TRY_ENV); ACE_CHECK; - CORBA::TCKind kind = TAO_DynAny_i::unalias (type, + CORBA::TCKind kind = TAO_DynAny_i::unalias (type.in (), ACE_TRY_ENV); ACE_CHECK; @@ -827,10 +829,10 @@ void TAO_DynUnion_i::insert_ushort (CORBA::UShort value, CORBA::Environment &ACE_TRY_ENV) { - CORBA_TypeCode_ptr type = this->member_->type (ACE_TRY_ENV); + CORBA_TypeCode_var type = this->member_->type (ACE_TRY_ENV); ACE_CHECK; - CORBA::TCKind kind = TAO_DynAny_i::unalias (type, + CORBA::TCKind kind = TAO_DynAny_i::unalias (type.in (), ACE_TRY_ENV); ACE_CHECK; @@ -892,10 +894,10 @@ void TAO_DynUnion_i::insert_ulong (CORBA::ULong value, CORBA::Environment &ACE_TRY_ENV) { - CORBA_TypeCode_ptr type = this->member_->type (ACE_TRY_ENV); + CORBA_TypeCode_var type = this->member_->type (ACE_TRY_ENV); ACE_CHECK; - CORBA::TCKind kind = TAO_DynAny_i::unalias (type, + CORBA::TCKind kind = TAO_DynAny_i::unalias (type.in (), ACE_TRY_ENV); ACE_CHECK; @@ -957,10 +959,10 @@ void TAO_DynUnion_i::insert_float (CORBA::Float value, CORBA::Environment &ACE_TRY_ENV) { - CORBA_TypeCode_ptr type = this->member_->type (ACE_TRY_ENV); + CORBA_TypeCode_var type = this->member_->type (ACE_TRY_ENV); ACE_CHECK; - CORBA::TCKind kind = TAO_DynAny_i::unalias (type, + CORBA::TCKind kind = TAO_DynAny_i::unalias (type.in (), ACE_TRY_ENV); ACE_CHECK; @@ -1022,10 +1024,10 @@ void TAO_DynUnion_i::insert_double (CORBA::Double value, CORBA::Environment &ACE_TRY_ENV) { - CORBA_TypeCode_ptr type = this->member_->type (ACE_TRY_ENV); + CORBA_TypeCode_var type = this->member_->type (ACE_TRY_ENV); ACE_CHECK; - CORBA::TCKind kind = TAO_DynAny_i::unalias (type, + CORBA::TCKind kind = TAO_DynAny_i::unalias (type.in (), ACE_TRY_ENV); ACE_CHECK; @@ -1087,10 +1089,10 @@ void TAO_DynUnion_i::insert_string (const char* value, CORBA::Environment &ACE_TRY_ENV) { - CORBA_TypeCode_ptr type = this->member_->type (ACE_TRY_ENV); + CORBA_TypeCode_var type = this->member_->type (ACE_TRY_ENV); ACE_CHECK; - CORBA::TCKind kind = TAO_DynAny_i::unalias (type, + CORBA::TCKind kind = TAO_DynAny_i::unalias (type.in (), ACE_TRY_ENV); ACE_CHECK; @@ -1152,10 +1154,10 @@ void TAO_DynUnion_i::insert_reference (CORBA::Object_ptr value, CORBA::Environment &ACE_TRY_ENV) { - CORBA_TypeCode_ptr type = this->member_->type (ACE_TRY_ENV); + CORBA_TypeCode_var type = this->member_->type (ACE_TRY_ENV); ACE_CHECK; - CORBA::TCKind kind = TAO_DynAny_i::unalias (type, + CORBA::TCKind kind = TAO_DynAny_i::unalias (type.in (), ACE_TRY_ENV); ACE_CHECK; @@ -1217,10 +1219,10 @@ void TAO_DynUnion_i::insert_typecode (CORBA::TypeCode_ptr value, CORBA::Environment &ACE_TRY_ENV) { - CORBA_TypeCode_ptr type = this->member_->type (ACE_TRY_ENV); + CORBA_TypeCode_var type = this->member_->type (ACE_TRY_ENV); ACE_CHECK; - CORBA::TCKind kind = TAO_DynAny_i::unalias (type, + CORBA::TCKind kind = TAO_DynAny_i::unalias (type.in (), ACE_TRY_ENV); ACE_CHECK; @@ -1282,10 +1284,10 @@ void TAO_DynUnion_i::insert_longlong (CORBA::LongLong value, CORBA::Environment &ACE_TRY_ENV) { - CORBA_TypeCode_ptr type = this->member_->type (ACE_TRY_ENV); + CORBA_TypeCode_var type = this->member_->type (ACE_TRY_ENV); ACE_CHECK; - CORBA::TCKind kind = TAO_DynAny_i::unalias (type, + CORBA::TCKind kind = TAO_DynAny_i::unalias (type.in (), ACE_TRY_ENV); ACE_CHECK; @@ -1347,10 +1349,10 @@ void TAO_DynUnion_i::insert_ulonglong (CORBA::ULongLong value, CORBA::Environment &ACE_TRY_ENV) { - CORBA_TypeCode_ptr type = this->member_->type (ACE_TRY_ENV); + CORBA_TypeCode_var type = this->member_->type (ACE_TRY_ENV); ACE_CHECK; - CORBA::TCKind kind = TAO_DynAny_i::unalias (type, + CORBA::TCKind kind = TAO_DynAny_i::unalias (type.in (), ACE_TRY_ENV); ACE_CHECK; @@ -1412,10 +1414,10 @@ void TAO_DynUnion_i::insert_wchar (CORBA::WChar value, CORBA::Environment &ACE_TRY_ENV) { - CORBA_TypeCode_ptr type = this->member_->type (ACE_TRY_ENV); + CORBA_TypeCode_var type = this->member_->type (ACE_TRY_ENV); ACE_CHECK; - CORBA::TCKind kind = TAO_DynAny_i::unalias (type, + CORBA::TCKind kind = TAO_DynAny_i::unalias (type.in (), ACE_TRY_ENV); ACE_CHECK; @@ -1477,10 +1479,10 @@ void TAO_DynUnion_i::insert_any (const CORBA::Any& value, CORBA::Environment &ACE_TRY_ENV) { - CORBA_TypeCode_ptr type = this->member_->type (ACE_TRY_ENV); + CORBA_TypeCode_var type = this->member_->type (ACE_TRY_ENV); ACE_CHECK; - CORBA::TCKind kind = TAO_DynAny_i::unalias (type, + CORBA::TCKind kind = TAO_DynAny_i::unalias (type.in (), ACE_TRY_ENV); ACE_CHECK; @@ -1545,10 +1547,10 @@ TAO_DynUnion_i::get_boolean (CORBA::Environment &ACE_TRY_ENV) { CORBA::Boolean retval = 0; - CORBA_TypeCode_ptr tc = this->member_->type (ACE_TRY_ENV); + CORBA_TypeCode_var tc = this->member_->type (ACE_TRY_ENV); ACE_CHECK_RETURN (retval); - CORBA::TCKind kind = TAO_DynAny_i::unalias (tc, + CORBA::TCKind kind = TAO_DynAny_i::unalias (tc.in (), ACE_TRY_ENV); ACE_CHECK_RETURN (retval); @@ -1571,10 +1573,10 @@ TAO_DynUnion_i::get_octet (CORBA::Environment &ACE_TRY_ENV) { CORBA::Octet retval = 0; - CORBA_TypeCode_ptr tc = this->member_->type (ACE_TRY_ENV); + CORBA_TypeCode_var tc = this->member_->type (ACE_TRY_ENV); ACE_CHECK_RETURN (retval); - CORBA::TCKind kind = TAO_DynAny_i::unalias (tc, + CORBA::TCKind kind = TAO_DynAny_i::unalias (tc.in (), ACE_TRY_ENV); ACE_CHECK_RETURN (retval); @@ -1597,10 +1599,10 @@ TAO_DynUnion_i::get_char (CORBA::Environment &ACE_TRY_ENV) { CORBA::Char retval = 0; - CORBA_TypeCode_ptr tc = this->member_->type (ACE_TRY_ENV); + CORBA_TypeCode_var tc = this->member_->type (ACE_TRY_ENV); ACE_CHECK_RETURN (retval); - CORBA::TCKind kind = TAO_DynAny_i::unalias (tc, + CORBA::TCKind kind = TAO_DynAny_i::unalias (tc.in (), ACE_TRY_ENV); ACE_CHECK_RETURN (retval); @@ -1623,10 +1625,10 @@ TAO_DynUnion_i::get_short (CORBA::Environment &ACE_TRY_ENV) { CORBA::Short retval = 0; - CORBA_TypeCode_ptr tc = this->member_->type (ACE_TRY_ENV); + CORBA_TypeCode_var tc = this->member_->type (ACE_TRY_ENV); ACE_CHECK_RETURN (retval); - CORBA::TCKind kind = TAO_DynAny_i::unalias (tc, + CORBA::TCKind kind = TAO_DynAny_i::unalias (tc.in (), ACE_TRY_ENV); ACE_CHECK_RETURN (retval); @@ -1649,10 +1651,10 @@ TAO_DynUnion_i::get_long (CORBA::Environment &ACE_TRY_ENV) { CORBA::Long retval = 0; - CORBA_TypeCode_ptr tc = this->member_->type (ACE_TRY_ENV); + CORBA_TypeCode_var tc = this->member_->type (ACE_TRY_ENV); ACE_CHECK_RETURN (retval); - CORBA::TCKind kind = TAO_DynAny_i::unalias (tc, + CORBA::TCKind kind = TAO_DynAny_i::unalias (tc.in (), ACE_TRY_ENV); ACE_CHECK_RETURN (retval); @@ -1675,10 +1677,10 @@ TAO_DynUnion_i::get_ushort(CORBA::Environment &ACE_TRY_ENV) { CORBA::UShort retval = 0; - CORBA_TypeCode_ptr tc = this->member_->type (ACE_TRY_ENV); + CORBA_TypeCode_var tc = this->member_->type (ACE_TRY_ENV); ACE_CHECK_RETURN (retval); - CORBA::TCKind kind = TAO_DynAny_i::unalias (tc, + CORBA::TCKind kind = TAO_DynAny_i::unalias (tc.in (), ACE_TRY_ENV); ACE_CHECK_RETURN (retval); @@ -1701,10 +1703,10 @@ TAO_DynUnion_i::get_ulong (CORBA::Environment &ACE_TRY_ENV) { CORBA::ULong retval = 0; - CORBA_TypeCode_ptr tc = this->member_->type (ACE_TRY_ENV); + CORBA_TypeCode_var tc = this->member_->type (ACE_TRY_ENV); ACE_CHECK_RETURN (retval); - CORBA::TCKind kind = TAO_DynAny_i::unalias (tc, + CORBA::TCKind kind = TAO_DynAny_i::unalias (tc.in (), ACE_TRY_ENV); ACE_CHECK_RETURN (retval); @@ -1727,10 +1729,10 @@ TAO_DynUnion_i::get_float (CORBA::Environment &ACE_TRY_ENV) { CORBA::Float retval = 0; - CORBA_TypeCode_ptr tc = this->member_->type (ACE_TRY_ENV); + CORBA_TypeCode_var tc = this->member_->type (ACE_TRY_ENV); ACE_CHECK_RETURN (retval); - CORBA::TCKind kind = TAO_DynAny_i::unalias (tc, + CORBA::TCKind kind = TAO_DynAny_i::unalias (tc.in (), ACE_TRY_ENV); ACE_CHECK_RETURN (retval); @@ -1753,10 +1755,10 @@ TAO_DynUnion_i::get_double (CORBA::Environment &ACE_TRY_ENV) { CORBA::Double retval = 0; - CORBA_TypeCode_ptr tc = this->member_->type (ACE_TRY_ENV); + CORBA_TypeCode_var tc = this->member_->type (ACE_TRY_ENV); ACE_CHECK_RETURN (retval); - CORBA::TCKind kind = TAO_DynAny_i::unalias (tc, + CORBA::TCKind kind = TAO_DynAny_i::unalias (tc.in (), ACE_TRY_ENV); ACE_CHECK_RETURN (retval); @@ -1779,10 +1781,10 @@ TAO_DynUnion_i::get_string (CORBA::Environment &ACE_TRY_ENV) { char * retval = 0; - CORBA_TypeCode_ptr tc = this->member_->type (ACE_TRY_ENV); + CORBA_TypeCode_var tc = this->member_->type (ACE_TRY_ENV); ACE_CHECK_RETURN (retval); - CORBA::TCKind kind = TAO_DynAny_i::unalias (tc, + CORBA::TCKind kind = TAO_DynAny_i::unalias (tc.in (), ACE_TRY_ENV); ACE_CHECK_RETURN (retval); @@ -1805,10 +1807,10 @@ TAO_DynUnion_i::get_typecode (CORBA::Environment &ACE_TRY_ENV) { CORBA::TypeCode_ptr retval = 0; - CORBA_TypeCode_ptr tc = this->member_->type (ACE_TRY_ENV); + CORBA_TypeCode_var tc = this->member_->type (ACE_TRY_ENV); ACE_CHECK_RETURN (retval); - CORBA::TCKind kind = TAO_DynAny_i::unalias (tc, + CORBA::TCKind kind = TAO_DynAny_i::unalias (tc.in (), ACE_TRY_ENV); ACE_CHECK_RETURN (retval); @@ -1831,10 +1833,10 @@ TAO_DynUnion_i::get_reference (CORBA::Environment &ACE_TRY_ENV) { CORBA::Object_ptr retval = 0; - CORBA_TypeCode_ptr tc = this->member_->type (ACE_TRY_ENV); + CORBA_TypeCode_var tc = this->member_->type (ACE_TRY_ENV); ACE_CHECK_RETURN (retval); - CORBA::TCKind kind = TAO_DynAny_i::unalias (tc, + CORBA::TCKind kind = TAO_DynAny_i::unalias (tc.in (), ACE_TRY_ENV); ACE_CHECK_RETURN (retval); @@ -1861,10 +1863,10 @@ TAO_DynUnion_i::get_longlong (CORBA::Environment &ACE_TRY_ENV) CORBA::LongLong retval = 0; #endif /* ! ACE_LACKS_LONGLONG_T */ - CORBA_TypeCode_ptr tc = this->member_->type (ACE_TRY_ENV); + CORBA_TypeCode_var tc = this->member_->type (ACE_TRY_ENV); ACE_CHECK_RETURN (retval); - CORBA::TCKind kind = TAO_DynAny_i::unalias (tc, + CORBA::TCKind kind = TAO_DynAny_i::unalias (tc.in (), ACE_TRY_ENV); ACE_CHECK_RETURN (retval); @@ -1887,10 +1889,10 @@ TAO_DynUnion_i::get_ulonglong (CORBA::Environment &ACE_TRY_ENV) { CORBA::ULongLong retval = 0; - CORBA_TypeCode_ptr tc = this->member_->type (ACE_TRY_ENV); + CORBA_TypeCode_var tc = this->member_->type (ACE_TRY_ENV); ACE_CHECK_RETURN (retval); - CORBA::TCKind kind = TAO_DynAny_i::unalias (tc, + CORBA::TCKind kind = TAO_DynAny_i::unalias (tc.in (), ACE_TRY_ENV); ACE_CHECK_RETURN (retval); @@ -1913,10 +1915,10 @@ TAO_DynUnion_i::get_wchar (CORBA::Environment &ACE_TRY_ENV) { CORBA::WChar retval = 0; - CORBA_TypeCode_ptr tc = this->member_->type (ACE_TRY_ENV); + CORBA_TypeCode_var tc = this->member_->type (ACE_TRY_ENV); ACE_CHECK_RETURN (retval); - CORBA::TCKind kind = TAO_DynAny_i::unalias (tc, + CORBA::TCKind kind = TAO_DynAny_i::unalias (tc.in (), ACE_TRY_ENV); ACE_CHECK_RETURN (retval); @@ -1939,10 +1941,10 @@ TAO_DynUnion_i::get_any (CORBA::Environment &ACE_TRY_ENV) { CORBA::Any_ptr retval = 0; - CORBA_TypeCode_ptr tc = this->member_->type (ACE_TRY_ENV); + CORBA_TypeCode_var tc = this->member_->type (ACE_TRY_ENV); ACE_CHECK_RETURN (retval); - CORBA::TCKind kind = TAO_DynAny_i::unalias (tc, + CORBA::TCKind kind = TAO_DynAny_i::unalias (tc.in (), ACE_TRY_ENV); ACE_CHECK_RETURN (retval); @@ -2119,11 +2121,12 @@ TAO_DynUnion_i::set_from_any (const CORBA_Any& any, TAO_InputCDR cdr (mb, any._tao_byte_order ()); - CORBA_TypeCode_ptr disc_tc = - any.type ()->discriminator_type (ACE_TRY_ENV); + CORBA::TypeCode_var tc = any.type (); + + CORBA_TypeCode_var disc_tc = tc->discriminator_type (ACE_TRY_ENV); ACE_CHECK; - CORBA_Any disc_any (disc_tc, + CORBA_Any disc_any (disc_tc.in (), 0, cdr.byte_order (), cdr.start ()); @@ -2140,12 +2143,12 @@ TAO_DynUnion_i::set_from_any (const CORBA_Any& any, ACE_CHECK; // Move to the next field in the CDR stream. - (void) TAO_Marshal_Object::perform_skip (disc_tc, + (void) TAO_Marshal_Object::perform_skip (disc_tc.in (), &cdr, ACE_TRY_ENV); ACE_CHECK; - CORBA::ULong count = any.type ()->member_count (ACE_TRY_ENV); + CORBA::ULong count = tc->member_count (ACE_TRY_ENV); ACE_CHECK; CORBA::ULong i; @@ -2159,14 +2162,18 @@ TAO_DynUnion_i::set_from_any (const CORBA_Any& any, ACE_TRY_ENV); ACE_CHECK; + CORBA::TypeCode_var label_tc; + // Get the index. for (i = 0; i < count; i++) { - CORBA_Any label_any = *any.type ()->member_label (i, - ACE_TRY_ENV); + CORBA_Any label_any = *tc->member_label (i, + ACE_TRY_ENV); ACE_CHECK; - CORBA::TCKind label_kind = label_any.type ()->kind (ACE_TRY_ENV); + label_tc = label_any.type (); + + CORBA::TCKind label_kind = label_tc->kind (ACE_TRY_ENV); ACE_CHECK; // If there is a default index, note the value but don't call @@ -2199,8 +2206,8 @@ TAO_DynUnion_i::set_from_any (const CORBA_Any& any, } CORBA::TypeCode_var member_tc = - any.type ()->member_type (this->current_index_, - ACE_TRY_ENV); + tc->member_type (this->current_index_, + ACE_TRY_ENV); ACE_CHECK; CORBA_Any member_any (member_tc.in (), diff --git a/TAO/tao/IIOP_Connect.cpp b/TAO/tao/IIOP_Connect.cpp index 93356ae0be4..6477b4fffd3 100644 --- a/TAO/tao/IIOP_Connect.cpp +++ b/TAO/tao/IIOP_Connect.cpp @@ -9,7 +9,7 @@ #include "tao/Messaging_Policy_i.h" #include "tao/GIOP_Message_Lite.h" #include "tao/GIOP_Message_Acceptors.h" - +#include "tao/Server_Strategy_Factory.h" #if !defined (__ACE_INLINE__) # include "tao/IIOP_Connect.i" @@ -153,14 +153,18 @@ TAO_IIOP_Server_Connection_Handler::open (void*) // completely connected. ACE_INET_Addr addr; + char client[MAXHOSTNAMELEN + 16]; + + // Get the peername. if (this->peer ().get_remote_addr (addr) == -1) return -1; + // Verify that we can resolve the peer hostname. + else if (addr.addr_to_string (client, sizeof (client)) == -1) + return -1; + if (TAO_debug_level > 0) { - char client[MAXHOSTNAMELEN + 16]; - (void) addr.addr_to_string (client, sizeof (client)); - ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("TAO (%P|%t) IIOP connection from client") ACE_TEXT ("<%s> on %d\n"), @@ -208,14 +212,26 @@ TAO_IIOP_Server_Connection_Handler::handle_close (ACE_HANDLE handle, { if (TAO_orbdebug) ACE_DEBUG ((LM_DEBUG, - ACE_TEXT ("TAO (%P|%t) IIOP_Server_Connection_Handler::handle_close ") + ACE_TEXT ("TAO (%P|%t) ") + ACE_TEXT ("IIOP_Server_Connection_Handler::handle_close ") ACE_TEXT ("(%d, %d)\n"), handle, rm)); --this->refcount_; if (this->refcount_ == 0) - return TAO_SVC_HANDLER::handle_close (handle, rm); + { + // Remove the handle from the ORB Core's handle set so that it + // isn't included in the set that is passed to the reactor upon + // ORB destruction. + TAO_Server_Strategy_Factory *f = + this->orb_core_->server_factory (); + + if (f->activate_server_connections () == 0) + (void) this->orb_core_->remove_handle (handle); + + return TAO_SVC_HANDLER::handle_close (handle, rm); + } return 0; } diff --git a/TAO/tao/IIOP_Connector.cpp b/TAO/tao/IIOP_Connector.cpp index 48789e41165..46bdf20f4df 100644 --- a/TAO/tao/IIOP_Connector.cpp +++ b/TAO/tao/IIOP_Connector.cpp @@ -184,7 +184,7 @@ template class ACE_Hash_Cache_Map_Manager<TAO_ADDR, TAO_HANDLER *, TAO_HASH_KEY, template class ACE_LRU_Caching_Strategy<TAO_ATTRIBUTES, TAO_CACHING_UTILITY>; -#if !defined (ACE_HAS_BROKEN_EXTENDED_TEMPLATES) +#if !defined (ACE_HAS_BROKEN_EXTENDED_TEMPLATES) #if (TAO_HAS_MINIMUM_CONNECTION_CACHING_STRATEGY == 0) template class ACE_Caching_Strategy<TAO_ATTRIBUTES, TAO_CACHING_UTILITY>; template class ACE_LFU_Caching_Strategy<TAO_ATTRIBUTES, TAO_CACHING_UTILITY>; diff --git a/TAO/tao/IIOP_Transport.cpp b/TAO/tao/IIOP_Transport.cpp index 0fb3a7f926f..e83df874ba5 100644 --- a/TAO/tao/IIOP_Transport.cpp +++ b/TAO/tao/IIOP_Transport.cpp @@ -20,6 +20,10 @@ #if !defined (__ACE_INLINE__) # include "tao/IIOP_Transport.i" #endif /* ! __ACE_INLINE__ */ + +ACE_RCSID (tao, IIOP_Transport, "$Id$") + + #if defined (ACE_ENABLE_TIMEPROBES) static const char *TAO_Transport_Timeprobe_Description[] = diff --git a/TAO/tao/Invocation.cpp b/TAO/tao/Invocation.cpp index 152518b20dd..2f04a64981b 100644 --- a/TAO/tao/Invocation.cpp +++ b/TAO/tao/Invocation.cpp @@ -683,6 +683,13 @@ TAO_GIOP_Twoway_Invocation::start (CORBA::Environment &ACE_TRY_ENV) ACE_TRY_ENV); } +void +TAO_GIOP_Twoway_Invocation::reset_reply_received (void) +{ + this->rd_.reply_received() = 0; +} + + int TAO_GIOP_Twoway_Invocation::invoke (CORBA::ExceptionList_ptr exceptions, CORBA::Environment &ACE_TRY_ENV) diff --git a/TAO/tao/Invocation.h b/TAO/tao/Invocation.h index 92d7cd21b6d..f02ea0ec2ff 100644 --- a/TAO/tao/Invocation.h +++ b/TAO/tao/Invocation.h @@ -237,6 +237,9 @@ public: TAO_InputCDR &inp_stream (void); // return the underlying input stream + + void reset_reply_received (void); + // Reset the reply status private: int invoke_i (CORBA::Environment &ACE_TRY_ENV) ACE_THROW_SPEC ((CORBA::SystemException)); diff --git a/TAO/tao/LocalObject.cpp b/TAO/tao/LocalObject.cpp index 0e836e00e3e..420fdf5f789 100644 --- a/TAO/tao/LocalObject.cpp +++ b/TAO/tao/LocalObject.cpp @@ -160,6 +160,17 @@ CORBA::LocalObject::_get_implementation (CORBA::Environment &ACE_TRY_ENV) #endif /* TAO_HAS_MINIMUM_CORBA */ // **************************************************************** +void +TAO_Local_RefCounted_Object::_add_ref (void) +{ + this->_incr_refcnt (); +} + +void +TAO_Local_RefCounted_Object::_remove_ref (void) +{ + this->_decr_refcnt (); +} #if (TAO_HAS_CORBA_MESSAGING == 1) @@ -199,16 +210,6 @@ CORBA::LocalObject::_validate_connection (CORBA::PolicyList_out, ACE_THROW_RETURN (CORBA::NO_IMPLEMENT (), 0); } -void -TAO_Local_RefCounted_Object::_add_ref (void) -{ - this->_incr_refcnt (); -} -void -TAO_Local_RefCounted_Object::_remove_ref (void) -{ - this->_decr_refcnt (); -} #endif /* TAO_HAS_CORBA_MESSAGING == 1 */ diff --git a/TAO/tao/Messaging_Policy_i.cpp b/TAO/tao/Messaging_Policy_i.cpp index a7abd7ed3ee..532eebe1b0b 100644 --- a/TAO/tao/Messaging_Policy_i.cpp +++ b/TAO/tao/Messaging_Policy_i.cpp @@ -32,6 +32,7 @@ TAO_RelativeRoundtripTimeoutPolicy::relative_expiry (CORBA::Environment &) CORBA::PolicyType TAO_RelativeRoundtripTimeoutPolicy::policy_type (CORBA_Environment &) + ACE_THROW_SPEC ((CORBA::SystemException)) { // Future policy implementors: notice how this minimizes the // footprint of the class. @@ -72,6 +73,7 @@ TAO_RelativeRoundtripTimeoutPolicy::clone (void) const CORBA::Policy_ptr TAO_RelativeRoundtripTimeoutPolicy::copy (CORBA_Environment &ACE_TRY_ENV) + ACE_THROW_SPEC ((CORBA::SystemException)) { // Future policy implementors: notice how the following code is // exception safe! @@ -87,6 +89,7 @@ TAO_RelativeRoundtripTimeoutPolicy::copy (CORBA_Environment &ACE_TRY_ENV) void TAO_RelativeRoundtripTimeoutPolicy::destroy (CORBA_Environment &) + ACE_THROW_SPEC ((CORBA::SystemException)) { } @@ -129,6 +132,7 @@ TAO_Sync_Scope_Policy::TAO_Sync_Scope_Policy (const TAO_Sync_Scope_Policy &rhs) CORBA::PolicyType TAO_Sync_Scope_Policy::policy_type (CORBA_Environment &) + ACE_THROW_SPEC ((CORBA::SystemException)) { return Messaging::SYNC_SCOPE_POLICY_TYPE; } @@ -163,13 +167,14 @@ TAO_Sync_Scope_Policy::clone (void) const Messaging::SyncScope TAO_Sync_Scope_Policy::synchronization (CORBA::Environment &) - ACE_THROW_SPEC (()) + ACE_THROW_SPEC ((CORBA::SystemException)) { return this->synchronization_; } CORBA::Policy_ptr TAO_Sync_Scope_Policy::copy (CORBA_Environment &ACE_TRY_ENV) + ACE_THROW_SPEC ((CORBA::SystemException)) { TAO_Sync_Scope_Policy *servant = 0; ACE_NEW_THROW_EX (servant, @@ -182,6 +187,7 @@ TAO_Sync_Scope_Policy::copy (CORBA_Environment &ACE_TRY_ENV) void TAO_Sync_Scope_Policy::destroy (CORBA_Environment &) + ACE_THROW_SPEC ((CORBA::SystemException)) { } diff --git a/TAO/tao/Messaging_Policy_i.h b/TAO/tao/Messaging_Policy_i.h index d50c9bf834a..bf01ae04b58 100644 --- a/TAO/tao/Messaging_Policy_i.h +++ b/TAO/tao/Messaging_Policy_i.h @@ -64,11 +64,14 @@ public: virtual TimeBase::TimeT relative_expiry (CORBA::Environment &ACE_TRY_ENV) ACE_THROW_SPEC (()); - virtual CORBA::PolicyType policy_type (CORBA_Environment &ACE_TRY_ENV = TAO_default_environment ()); + virtual CORBA::PolicyType policy_type (CORBA_Environment &ACE_TRY_ENV = TAO_default_environment ()) + ACE_THROW_SPEC ((CORBA::SystemException)); - virtual CORBA::Policy_ptr copy (CORBA_Environment &ACE_TRY_ENV = TAO_default_environment ()); + virtual CORBA::Policy_ptr copy (CORBA_Environment &ACE_TRY_ENV = TAO_default_environment ()) + ACE_THROW_SPEC ((CORBA::SystemException)); - virtual void destroy (CORBA_Environment &ACE_TRY_ENV = TAO_default_environment ()); + virtual void destroy (CORBA_Environment &ACE_TRY_ENV = TAO_default_environment ()) + ACE_THROW_SPEC ((CORBA::SystemException)); void set_time_value (ACE_Time_Value &time_value); // Change the CORBA representation to the ACE representation. @@ -113,14 +116,18 @@ public: // = The Messaging::SyncScopePolicy methods. virtual Messaging::SyncScope synchronization (CORBA::Environment &ACE_TRY_ENV) - ACE_THROW_SPEC (()); + ACE_THROW_SPEC ((CORBA::SystemException)); + void get_synchronization (Messaging::SyncScope &synchronization) const; - virtual CORBA::PolicyType policy_type (CORBA_Environment &ACE_TRY_ENV = TAO_default_environment ()); + virtual CORBA::PolicyType policy_type (CORBA_Environment &ACE_TRY_ENV = TAO_default_environment ()) + ACE_THROW_SPEC ((CORBA::SystemException)); - virtual CORBA::Policy_ptr copy (CORBA_Environment &ACE_TRY_ENV = TAO_default_environment ()); + virtual CORBA::Policy_ptr copy (CORBA_Environment &ACE_TRY_ENV = TAO_default_environment ()) + ACE_THROW_SPEC ((CORBA::SystemException)); - virtual void destroy (CORBA_Environment &ACE_TRY_ENV = TAO_default_environment ()); + virtual void destroy (CORBA_Environment &ACE_TRY_ENV = TAO_default_environment ()) + ACE_THROW_SPEC ((CORBA::SystemException)); private: diff --git a/TAO/tao/ORB_Core.cpp b/TAO/tao/ORB_Core.cpp index ee0b11e5e0f..4e1982ce759 100644 --- a/TAO/tao/ORB_Core.cpp +++ b/TAO/tao/ORB_Core.cpp @@ -121,7 +121,8 @@ TAO_ORB_Core::TAO_ORB_Core (const char *orbid) transport_sync_strategy_ (0), svc_config_argc_ (0), svc_config_argv_ (0), - refcount_ (1) + refcount_ (1), + handle_set_ () { ACE_NEW (this->poa_current_, TAO_POA_Current); @@ -1280,6 +1281,19 @@ TAO_ORB_Core::fini (void) delete this->acceptor_registry_; } + // Shutdown all open connections that are registered with the ORB + // Core. Note that the ACE_Event_Handler::DONT_CALL mask is NOT + // used here since the reactor should invoke each handle's + // corresponding ACE_Event_Handler::handle_close() method to ensure + // that the connection is shutdown gracefully. + + // @@ Will the Server_Strategy_Factory still be around by the time + // this method is invoked? Specifically, is it possible that + // the Server_Strategy_Factory will already have been unloaded? + if (this->server_factory ()->activate_server_connections () == 0) + (void) this->reactor ()->remove_handler (this->handle_set_, + ACE_Event_Handler::ALL_EVENTS_MASK); + TAO_Internal::close_services (); // @@ This is not needed since the default resource factory @@ -1709,6 +1723,9 @@ TAO_ORB_Core::run (ACE_Time_Value *tv, if (ret == -1) return -1; + // Fetch the Reactor + ACE_Reactor *r = this->reactor (); + int result = 1; // 1 to detect that nothing went wrong @@ -1738,12 +1755,15 @@ TAO_ORB_Core::run (ACE_Time_Value *tv, return result; } - ACE_Reactor *r = this->reactor (); - // Set the owning thread of the Reactor to the one which we're // currently in. This is necessary b/c it's possible that the // application is calling us from a thread other than that in which // the Reactor's CTOR (which sets the owner) was called. + // + // We need to do this on every iteration because the reactor may be + // acquired by one of the client threads in the LF waiting + // strategy + r->owner (ACE_Thread::self ()); if (TAO_debug_level >= 3) diff --git a/TAO/tao/ORB_Core.h b/TAO/tao/ORB_Core.h index 920bb93c685..caf1b416a20 100644 --- a/TAO/tao/ORB_Core.h +++ b/TAO/tao/ORB_Core.h @@ -482,6 +482,16 @@ public: CORBA::ULong _decr_refcnt (void); // Reference counting... + int register_handle (ACE_HANDLE handle); + // Register the handle of an open connection with the ORB Core + // handle set. This handle set will be used to explicitly remove + // corresponding event handlers from the reactor. + + int remove_handle (ACE_HANDLE handle); + // Remove <handle> from the ORB Core's handle set so that it + // isn't included in the set that is passed to the reactor upon ORB + // destruction. + protected: int init (int &argc, char **argv, CORBA::Environment &ACE_TRY_ENV); @@ -526,7 +536,7 @@ protected: // = Data members. TAO_Connector_Registry *connector_registry_; - // The connector registry which all active connecters must register + // The connector registry which all active connectors must register // themselves with. TAO_Acceptor_Registry *acceptor_registry_; @@ -700,6 +710,13 @@ protected: CORBA::ULong refcount_; // Number of outstanding references to this object. + + ACE_Handle_Set handle_set_; + // Set of file descriptors corresponding to open connections. This + // handle set is used to explicitly deregister the connection event + // handlers from the Reactor. This is particularly important for + // dynamically loaded ORBs where an application level reactor, such + // as the Singleton reactor, is used instead of an ORB created one. }; // **************************************************************** diff --git a/TAO/tao/ORB_Core.i b/TAO/tao/ORB_Core.i index f80f8a9694f..317c02a6049 100644 --- a/TAO/tao/ORB_Core.i +++ b/TAO/tao/ORB_Core.i @@ -25,6 +25,40 @@ TAO_ORB_Core::_decr_refcnt (void) return 0; } +ACE_INLINE int +TAO_ORB_Core::register_handle (ACE_HANDLE handle) +{ + if (handle == ACE_INVALID_HANDLE) + { + errno = EINVAL; + return -1; + } + + // Acquire a lock to ensure that modifications to the state within + // the handle set are atomic. + ACE_MT (ACE_GUARD_RETURN (ACE_SYNCH_MUTEX, mon, this->lock_, -1)); + this->handle_set_.set_bit (handle); + + return 0; +} + +ACE_INLINE int +TAO_ORB_Core::remove_handle (ACE_HANDLE handle) +{ + if (handle == ACE_INVALID_HANDLE) + { + errno = EINVAL; + return -1; + } + + // Acquire a lock to ensure that modifications to the state within + // the handle set are atomic. + ACE_MT (ACE_GUARD_RETURN (ACE_SYNCH_MUTEX, mon, this->lock_, -1)); + this->handle_set_.clr_bit (handle); + + return 0; +} + ACE_INLINE ACE_Thread_Manager * TAO_ORB_Core::thr_mgr (void) { diff --git a/TAO/tao/Object_Adapter.cpp b/TAO/tao/Object_Adapter.cpp index 56740805c3f..bad62d109da 100644 --- a/TAO/tao/Object_Adapter.cpp +++ b/TAO/tao/Object_Adapter.cpp @@ -217,31 +217,6 @@ TAO_Object_Adapter::create_lock (int enable_locking, return the_lock; } - -void -TAO_Object_Adapter::deactivate_i (CORBA::Boolean wait_for_completion, - CORBA::Environment &ACE_TRY_ENV) -{ - // If the ORB::shutdown operation is called, it makes a call on - // deactivate with a TRUE etherealize_objects parameter for each POA - // manager known in the process; the wait_for_completion parameter - // to deactivate will be the same as the similarly named parameter - // of ORB::shutdown. - - poa_manager_set::iterator end = this->poa_manager_set_.end (); - - for (poa_manager_set::iterator iterator = this->poa_manager_set_.begin (); - iterator != end; - ++iterator) - { - TAO_POA_Manager *poa_manager = *iterator; - poa_manager->deactivate_i (1, - wait_for_completion, - ACE_TRY_ENV); - ACE_CHECK; - } -} - void TAO_Object_Adapter::dispatch_servant (const TAO_ObjectKey &key, CORBA::ServerRequest &req, diff --git a/TAO/tao/Object_Adapter.h b/TAO/tao/Object_Adapter.h index dbe33564ea4..2f9e0f1737d 100644 --- a/TAO/tao/Object_Adapter.h +++ b/TAO/tao/Object_Adapter.h @@ -264,18 +264,8 @@ public: static CORBA::ULong transient_poa_name_size (void); - void deactivate (CORBA::Boolean wait_for_completion, - CORBA::Environment &ACE_TRY_ENV); - - typedef ACE_Unbounded_Set<TAO_POA_Manager *> poa_manager_set; - - poa_manager_set poa_manager_set_; - protected: - void deactivate_i (CORBA::Boolean wait_for_completion, - CORBA::Environment &ACE_TRY_ENV); - int locate_servant_i (const TAO_ObjectKey &key, CORBA_Environment &ACE_TRY_ENV); diff --git a/TAO/tao/Object_Adapter.i b/TAO/tao/Object_Adapter.i index 952c25ad506..2862b7d2d11 100644 --- a/TAO/tao/Object_Adapter.i +++ b/TAO/tao/Object_Adapter.i @@ -31,17 +31,6 @@ TAO_Object_Adapter::transient_poa_name_size () return TAO_Object_Adapter::transient_poa_name_size_; } -ACE_INLINE void -TAO_Object_Adapter::deactivate (CORBA::Boolean wait_for_completion, - CORBA::Environment &ACE_TRY_ENV) -{ - // Lock access for the duration of this transaction. - TAO_OBJECT_ADAPTER_GUARD; - - this->deactivate_i (wait_for_completion, - ACE_TRY_ENV); -} - ACE_INLINE int TAO_Object_Adapter::locate_servant (const TAO_ObjectKey &key, CORBA::Environment &ACE_TRY_ENV) diff --git a/TAO/tao/POA.cpp b/TAO/tao/POA.cpp index 83e035ecded..f869be901a5 100644 --- a/TAO/tao/POA.cpp +++ b/TAO/tao/POA.cpp @@ -530,11 +530,13 @@ TAO_POA::destroy_i (CORBA::Boolean etherealize_objects, if (this->server_object_) { + TAO_POA *root_poa = this->orb_core ().root_poa (); + PortableServer::ObjectId_var id = - this->servant_to_id_i (this->server_object_, ACE_TRY_ENV); + root_poa->servant_to_id_i (this->server_object_, ACE_TRY_ENV); ACE_CHECK; - this->deactivate_object_i (id.in (), ACE_TRY_ENV); + root_poa->deactivate_object_i (id.in (), ACE_TRY_ENV); ACE_CHECK; this->server_object_->_remove_ref (); @@ -4025,23 +4027,19 @@ TAO_POA::imr_notify_startup (CORBA_Environment &ACE_TRY_ENV) CORBA::NO_MEMORY ()); ACE_CHECK; - // @@ (brunsch) The server should really be in the root poa, but - // there are locking issues... - - PortableServer::ObjectId_var id = - PortableServer::string_to_ObjectId ("_tao_imr_server_object"); - - this->activate_object_with_id_i (id.in (), - this->server_object_, - TAO_INVALID_PRIORITY, - ACE_TRY_ENV); + // Activate the servant in the root poa. + TAO_POA *root_poa = this->orb_core ().root_poa (); + PortableServer::ObjectId_var id = + root_poa->activate_object_i (this->server_object_, + TAO_INVALID_PRIORITY, + ACE_TRY_ENV); ACE_CHECK; - CORBA::Object_var obj = this->id_to_reference_i (id.in (), - ACE_TRY_ENV); + CORBA::Object_var obj = root_poa->id_to_reference_i (id.in (), + ACE_TRY_ENV); ACE_CHECK; - ImplementationRepository::ServerObject_ptr svr + ImplementationRepository::ServerObject_var svr = ImplementationRepository::ServerObject::_narrow (obj.in (), ACE_TRY_ENV); ACE_CHECK; @@ -4083,7 +4081,7 @@ TAO_POA::imr_notify_startup (CORBA_Environment &ACE_TRY_ENV) imr_admin->server_is_running (this->name ().c_str (), curr_addr.in (), - svr, + svr.in (), ACE_TRY_ENV); ACE_CHECK; diff --git a/TAO/tao/POA.h b/TAO/tao/POA.h index 4b3ab5867ba..50069777f26 100644 --- a/TAO/tao/POA.h +++ b/TAO/tao/POA.h @@ -778,7 +778,7 @@ protected: CORBA_Environment &ACE_TRY_ENV) ACE_THROW_SPEC ((CORBA::SystemException, PortableServer::POA::ServantAlreadyActive, - PortableServer::POA::ObjectAlreadyActive, + PortableServer::POA::ObjectAlreadyActive, PortableServer::POA::WrongPolicy)); void deactivate_all_objects_i (CORBA::Boolean etherealize_objects, diff --git a/TAO/tao/POA.i b/TAO/tao/POA.i index 8cfd90fb199..d8a177898ec 100644 --- a/TAO/tao/POA.i +++ b/TAO/tao/POA.i @@ -24,7 +24,7 @@ TAO_POA_Guard::TAO_POA_Guard (TAO_POA &poa, { if (!this->guard_.locked ()) ACE_THROW ( - CORBA::TRANSIENT ( + CORBA::INTERNAL ( CORBA_SystemException::_tao_minor_code ( TAO_GUARD_FAILURE, 0), diff --git a/TAO/tao/POAManager.cpp b/TAO/tao/POAManager.cpp index bc57280f7fe..f0930d1bbed 100644 --- a/TAO/tao/POAManager.cpp +++ b/TAO/tao/POAManager.cpp @@ -15,12 +15,10 @@ TAO_POA_Manager::TAO_POA_Manager (TAO_Object_Adapter &object_adapter) poa_collection_ (), object_adapter_ (object_adapter) { - this->object_adapter_.poa_manager_set_.insert (this); } TAO_POA_Manager::~TAO_POA_Manager (void) { - this->object_adapter_.poa_manager_set_.remove (this); } void diff --git a/TAO/tao/POA_CORBA.h b/TAO/tao/POA_CORBA.h index 0eb5e560a69..ac34701f9b4 100644 --- a/TAO/tao/POA_CORBA.h +++ b/TAO/tao/POA_CORBA.h @@ -31,6 +31,8 @@ #define TAO_IDL_POA_CORBA_H #include "ace/pre.h" +#include "tao/corbafwd.h" + #if !defined (ACE_LACKS_PRAGMA_ONCE) # pragma once #endif /* ACE_LACKS_PRAGMA_ONCE */ diff --git a/TAO/tao/Policy_Manager.h b/TAO/tao/Policy_Manager.h index 003e27c67db..be2dca34435 100644 --- a/TAO/tao/Policy_Manager.h +++ b/TAO/tao/Policy_Manager.h @@ -212,12 +212,16 @@ public: const CORBA::PolicyTypeSeq & ts, CORBA::Environment &ACE_TRY_ENV = CORBA::Environment::default_environment () - ); + ) + ACE_THROW_SPEC ((CORBA::SystemException)); + virtual void set_policy_overrides (const CORBA::PolicyList & policies, CORBA::SetOverrideType set_add, CORBA::Environment &ACE_TRY_ENV = CORBA::Environment::default_environment () - ); + ) + ACE_THROW_SPEC ((CORBA::SystemException, + CORBA_InvalidPolicies)); #if (TAO_HAS_RELATIVE_ROUNDTRIP_TIMEOUT_POLICY == 1) @@ -345,13 +349,17 @@ public: const CORBA::PolicyTypeSeq & ts, CORBA::Environment &ACE_TRY_ENV = CORBA::Environment::default_environment () - ); + ) + ACE_THROW_SPEC ((CORBA::SystemException)); + virtual void set_policy_overrides ( const CORBA::PolicyList & policies, CORBA::SetOverrideType set_add, CORBA::Environment &ACE_TRY_ENV = CORBA::Environment::default_environment () - ); + ) + ACE_THROW_SPEC ((CORBA::SystemException, + CORBA_InvalidPolicies)); #if (TAO_HAS_RELATIVE_ROUNDTRIP_TIMEOUT_POLICY == 1) diff --git a/TAO/tao/Policy_Manager.i b/TAO/tao/Policy_Manager.i index 3aca120bd2c..137b575c388 100644 --- a/TAO/tao/Policy_Manager.i +++ b/TAO/tao/Policy_Manager.i @@ -60,6 +60,9 @@ ACE_INLINE CORBA::PolicyList * TAO_Policy_Manager::get_policy_overrides ( const CORBA::PolicyTypeSeq & ts, CORBA::Environment &ACE_TRY_ENV) + ACE_THROW_SPEC (( + CORBA::SystemException + )) { ACE_GUARD_RETURN (ACE_SYNCH_MUTEX, ace_mon, this->mutex_, 0); return this->impl_.get_policy_overrides (ts, ACE_TRY_ENV); @@ -70,6 +73,10 @@ TAO_Policy_Manager::set_policy_overrides ( const CORBA::PolicyList & policies, CORBA::SetOverrideType set_add, CORBA::Environment &ACE_TRY_ENV) + ACE_THROW_SPEC (( + CORBA::SystemException, + CORBA_InvalidPolicies + )) { ACE_GUARD (ACE_SYNCH_MUTEX, ace_mon, this->mutex_); this->impl_.set_policy_overrides (policies, set_add, ACE_TRY_ENV); @@ -259,6 +266,8 @@ ACE_INLINE CORBA::PolicyList * TAO_Policy_Current::get_policy_overrides ( const CORBA::PolicyTypeSeq & ts, CORBA::Environment &ACE_TRY_ENV) + ACE_THROW_SPEC ((CORBA::SystemException)) + { TAO_Policy_Current_Impl &impl = this->implementation (); @@ -269,6 +278,8 @@ ACE_INLINE void TAO_Policy_Current::set_policy_overrides (const CORBA::PolicyList & policies, CORBA::SetOverrideType set_add, CORBA::Environment &ACE_TRY_ENV) + ACE_THROW_SPEC ((CORBA::SystemException, + CORBA_InvalidPolicies)) { TAO_Policy_Current_Impl &impl = this->implementation (); diff --git a/TAO/tao/PortableServerC.cpp b/TAO/tao/PortableServerC.cpp index a01a944bbc1..bdb2870e230 100644 --- a/TAO/tao/PortableServerC.cpp +++ b/TAO/tao/PortableServerC.cpp @@ -1064,7 +1064,27 @@ PortableServer::POAManager::_duplicate (POAManager_ptr obj) return obj; } -#if (TAO_HAS_MINIMUM_POA == 0) +void *PortableServer::POAManager::_tao_QueryInterface (ptr_arith_t type) +{ + void *retv = 0; + if (type == ACE_reinterpret_cast + (ptr_arith_t, + &ACE_NESTED_CLASS (::PortableServer, POAManager)::_narrow)) + retv = ACE_reinterpret_cast (void*, this); + else if (type == ACE_reinterpret_cast (ptr_arith_t, &CORBA::Object::_narrow)) + retv = ACE_reinterpret_cast (void *, + ACE_static_cast (CORBA::Object_ptr, this)); + + if (retv) + this->_add_ref (); + return retv; +} + + +const char* PortableServer::POAManager::_interface_repository_id (void) const +{ + return "IDL:PortableServer/POAManager:1.0"; +} // default constructor PortableServer::POAManager::AdapterInactive::AdapterInactive (void) @@ -1076,6 +1096,29 @@ PortableServer::POAManager::AdapterInactive::~AdapterInactive (void) { } +void PortableServer::POAManager::AdapterInactive::_raise () +{ + TAO_RAISE(*this); +} + + +void PortableServer::POAManager::AdapterInactive::_tao_encode ( + TAO_OutputCDR &, + CORBA::Environment &ACE_TRY_ENV) const +{ + ACE_THROW (CORBA::MARSHAL ()); +} + +void PortableServer::POAManager::AdapterInactive::_tao_decode ( + TAO_InputCDR &, + CORBA::Environment &ACE_TRY_ENV) +{ + ACE_THROW (CORBA::MARSHAL ()); +} + + +#if (TAO_HAS_MINIMUM_POA == 0) + // copy constructor PortableServer::POAManager::AdapterInactive::AdapterInactive (const ::PortableServer::POAManager::AdapterInactive &_tao_excp) : CORBA_UserException (_tao_excp._type ()) @@ -1102,27 +1145,6 @@ PortableServer::POAManager::AdapterInactive::_downcast (CORBA::Exception *exc) } -void PortableServer::POAManager::AdapterInactive::_raise () -{ - TAO_RAISE(*this); -} - - -void PortableServer::POAManager::AdapterInactive::_tao_encode ( - TAO_OutputCDR &, - CORBA::Environment &ACE_TRY_ENV) const -{ - ACE_THROW (CORBA::MARSHAL ()); -} - - -void PortableServer::POAManager::AdapterInactive::_tao_decode ( - TAO_InputCDR &, - CORBA::Environment &ACE_TRY_ENV) -{ - ACE_THROW (CORBA::MARSHAL ()); -} - // TAO extension - the _alloc method CORBA::Exception *PortableServer::POAManager::AdapterInactive::_alloc (void) { @@ -1131,28 +1153,6 @@ CORBA::Exception *PortableServer::POAManager::AdapterInactive::_alloc (void) return retval; } -void *PortableServer::POAManager::_tao_QueryInterface (ptr_arith_t type) -{ - void *retv = 0; - if (type == ACE_reinterpret_cast - (ptr_arith_t, - &ACE_NESTED_CLASS (::PortableServer, POAManager)::_narrow)) - retv = ACE_reinterpret_cast (void*, this); - else if (type == ACE_reinterpret_cast (ptr_arith_t, &CORBA::Object::_narrow)) - retv = ACE_reinterpret_cast (void *, - ACE_static_cast (CORBA::Object_ptr, this)); - - if (retv) - this->_add_ref (); - return retv; -} - -const char* PortableServer::POAManager::_interface_repository_id (void) const -{ - return "IDL:PortableServer/POAManager:1.0"; -} - - // default constructor PortableServer::AdapterActivator::AdapterActivator (void) {} diff --git a/TAO/tao/RT_Policy_i.cpp b/TAO/tao/RT_Policy_i.cpp index c74021e59f1..eca70415e49 100644 --- a/TAO/tao/RT_Policy_i.cpp +++ b/TAO/tao/RT_Policy_i.cpp @@ -34,26 +34,28 @@ TAO_PriorityModelPolicy::~TAO_PriorityModelPolicy (void) RTCORBA::PriorityModel TAO_PriorityModelPolicy::priority_model (CORBA::Environment &) - ACE_THROW_SPEC (()) + ACE_THROW_SPEC ((CORBA::SystemException)) { return this->priority_model_; } RTCORBA::Priority TAO_PriorityModelPolicy::server_priority (CORBA::Environment &) - ACE_THROW_SPEC (()) + ACE_THROW_SPEC ((CORBA::SystemException)) { return this->server_priority_; } CORBA::PolicyType TAO_PriorityModelPolicy::policy_type (CORBA::Environment &) + ACE_THROW_SPEC ((CORBA::SystemException)) { return RTCORBA::PRIORITY_MODEL_POLICY_TYPE; } CORBA::Policy_ptr TAO_PriorityModelPolicy::copy (CORBA::Environment &ACE_TRY_ENV) + ACE_THROW_SPEC ((CORBA::SystemException)) { TAO_PriorityModelPolicy* tmp; ACE_NEW_THROW_EX (tmp, @@ -66,6 +68,7 @@ TAO_PriorityModelPolicy::copy (CORBA::Environment &ACE_TRY_ENV) } void TAO_PriorityModelPolicy::destroy (CORBA::Environment &) + ACE_THROW_SPEC ((CORBA::SystemException)) { } @@ -130,12 +133,14 @@ TAO_ThreadpoolPolicy::threadpool (CORBA::Environment &) CORBA::PolicyType TAO_ThreadpoolPolicy::policy_type (CORBA::Environment &) + ACE_THROW_SPEC ((CORBA::SystemException)) { return RTCORBA::THREADPOOL_POLICY_TYPE; } CORBA::Policy_ptr TAO_ThreadpoolPolicy::copy (CORBA::Environment &ACE_TRY_ENV) + ACE_THROW_SPEC ((CORBA::SystemException)) { TAO_ThreadpoolPolicy* tmp; ACE_NEW_THROW_EX (tmp, @@ -148,6 +153,7 @@ TAO_ThreadpoolPolicy::copy (CORBA::Environment &ACE_TRY_ENV) } void TAO_ThreadpoolPolicy::destroy (CORBA::Environment &) + ACE_THROW_SPEC ((CORBA::SystemException)) { } @@ -170,12 +176,14 @@ TAO_PrivateConnectionPolicy::~TAO_PrivateConnectionPolicy (void) CORBA::PolicyType TAO_PrivateConnectionPolicy::policy_type (CORBA::Environment &) + ACE_THROW_SPEC ((CORBA::SystemException)) { return RTCORBA::PRIVATE_CONNECTION_POLICY_TYPE; } CORBA::Policy_ptr TAO_PrivateConnectionPolicy::copy (CORBA::Environment &ACE_TRY_ENV) + ACE_THROW_SPEC ((CORBA::SystemException)) { TAO_PrivateConnectionPolicy* tmp; ACE_NEW_THROW_EX (tmp, @@ -189,6 +197,7 @@ TAO_PrivateConnectionPolicy::copy (CORBA::Environment &ACE_TRY_ENV) void TAO_PrivateConnectionPolicy::destroy (CORBA::Environment &) + ACE_THROW_SPEC ((CORBA::SystemException)) { } @@ -229,12 +238,14 @@ TAO_PriorityBandedConnectionPolicy::priority_bands (CORBA::Environment &ACE_TRY_ CORBA::PolicyType TAO_PriorityBandedConnectionPolicy::policy_type (CORBA::Environment &) + ACE_THROW_SPEC ((CORBA::SystemException)) { return RTCORBA::PRIORITY_BANDED_CONNECTION_POLICY_TYPE; } CORBA::Policy_ptr TAO_PriorityBandedConnectionPolicy::copy (CORBA::Environment &ACE_TRY_ENV) + ACE_THROW_SPEC ((CORBA::SystemException)) { TAO_PriorityBandedConnectionPolicy *tmp; ACE_NEW_THROW_EX (tmp, @@ -247,6 +258,7 @@ TAO_PriorityBandedConnectionPolicy::copy (CORBA::Environment &ACE_TRY_ENV) } void TAO_PriorityBandedConnectionPolicy::destroy (CORBA::Environment &) + ACE_THROW_SPEC ((CORBA::SystemException)) { } @@ -431,12 +443,14 @@ TAO_ServerProtocolPolicy::protocols (CORBA::Environment &ACE_TRY_ENV) CORBA::PolicyType TAO_ServerProtocolPolicy::policy_type (CORBA::Environment &) + ACE_THROW_SPEC ((CORBA::SystemException)) { return RTCORBA::SERVER_PROTOCOL_POLICY_TYPE; } CORBA::Policy_ptr TAO_ServerProtocolPolicy::copy (CORBA::Environment &ACE_TRY_ENV) + ACE_THROW_SPEC ((CORBA::SystemException)) { TAO_ServerProtocolPolicy* tmp; ACE_NEW_THROW_EX (tmp, @@ -450,6 +464,7 @@ TAO_ServerProtocolPolicy::copy (CORBA::Environment &ACE_TRY_ENV) void TAO_ServerProtocolPolicy::destroy (CORBA::Environment &) + ACE_THROW_SPEC ((CORBA::SystemException)) { } @@ -490,12 +505,14 @@ TAO_ClientProtocolPolicy::protocols (CORBA::Environment &ACE_TRY_ENV) CORBA::PolicyType TAO_ClientProtocolPolicy::policy_type (CORBA::Environment &) + ACE_THROW_SPEC ((CORBA::SystemException)) { return RTCORBA::CLIENT_PROTOCOL_POLICY_TYPE; } CORBA::Policy_ptr TAO_ClientProtocolPolicy::copy (CORBA::Environment &ACE_TRY_ENV) + ACE_THROW_SPEC ((CORBA::SystemException)) { TAO_ClientProtocolPolicy* tmp; ACE_NEW_THROW_EX (tmp, @@ -509,6 +526,7 @@ TAO_ClientProtocolPolicy::copy (CORBA::Environment &ACE_TRY_ENV) void TAO_ClientProtocolPolicy::destroy (CORBA::Environment &) + ACE_THROW_SPEC ((CORBA::SystemException)) { } diff --git a/TAO/tao/RT_Policy_i.h b/TAO/tao/RT_Policy_i.h index 246953b37d8..d70e6e0ea0b 100644 --- a/TAO/tao/RT_Policy_i.h +++ b/TAO/tao/RT_Policy_i.h @@ -73,22 +73,25 @@ public: virtual RTCORBA::PriorityModel priority_model (CORBA::Environment &ACE_TRY_ENV = TAO_default_environment ()) - ACE_THROW_SPEC (()); + ACE_THROW_SPEC ((CORBA::SystemException)); virtual RTCORBA::Priority server_priority (CORBA::Environment &ACE_TRY_ENV = TAO_default_environment ()) - ACE_THROW_SPEC (()); + ACE_THROW_SPEC ((CORBA::SystemException)); virtual CORBA::PolicyType policy_type (CORBA::Environment &ACE_TRY_ENV = - TAO_default_environment ()); + TAO_default_environment ()) + ACE_THROW_SPEC ((CORBA::SystemException)); virtual CORBA::Policy_ptr copy (CORBA::Environment &ACE_TRY_ENV = - TAO_default_environment ()); + TAO_default_environment ()) + ACE_THROW_SPEC ((CORBA::SystemException)); virtual void destroy (CORBA::Environment &ACE_TRY_ENV = - TAO_default_environment ()); + TAO_default_environment ()) + ACE_THROW_SPEC ((CORBA::SystemException)); virtual CORBA::Boolean _tao_encode (TAO_OutputCDR &out_cdr); // This method writes a CDR representation of the object state. @@ -142,13 +145,16 @@ public: virtual CORBA::PolicyType policy_type (CORBA::Environment &ACE_TRY_ENV = - TAO_default_environment ()); + TAO_default_environment ()) + ACE_THROW_SPEC ((CORBA::SystemException)); virtual CORBA::Policy_ptr copy (CORBA::Environment &ACE_TRY_ENV = - TAO_default_environment ()); - + TAO_default_environment ()) + ACE_THROW_SPEC ((CORBA::SystemException)); + virtual void destroy (CORBA::Environment &ACE_TRY_ENV = - TAO_default_environment ()); + TAO_default_environment ()) + ACE_THROW_SPEC ((CORBA::SystemException)); // = Override CORBA::LocalObject no-op methods to // provide reference counting. @@ -185,13 +191,16 @@ public: virtual CORBA::PolicyType policy_type (CORBA::Environment &ACE_TRY_ENV = - TAO_default_environment ()); + TAO_default_environment ()) + ACE_THROW_SPEC ((CORBA::SystemException)); virtual CORBA::Policy_ptr copy (CORBA::Environment &ACE_TRY_ENV = - TAO_default_environment ()); + TAO_default_environment ()) + ACE_THROW_SPEC ((CORBA::SystemException)); virtual void destroy (CORBA::Environment &ACE_TRY_ENV = - TAO_default_environment ()); + TAO_default_environment ()) + ACE_THROW_SPEC ((CORBA::SystemException)); // = Override CORBA::LocalObject no-op methods to // provide reference counting. @@ -237,13 +246,16 @@ public: virtual CORBA::PolicyType policy_type (CORBA::Environment &ACE_TRY_ENV = - TAO_default_environment ()); + TAO_default_environment ()) + ACE_THROW_SPEC ((CORBA::SystemException)); virtual CORBA::Policy_ptr copy (CORBA::Environment &ACE_TRY_ENV = - TAO_default_environment ()); + TAO_default_environment ()) + ACE_THROW_SPEC ((CORBA::SystemException)); virtual void destroy (CORBA::Environment &ACE_TRY_ENV = - TAO_default_environment ()); + TAO_default_environment ()) + ACE_THROW_SPEC ((CORBA::SystemException)); virtual CORBA::Boolean _tao_encode (TAO_OutputCDR &out_cdr); // This method writes a CDR representation of the current object. @@ -296,13 +308,16 @@ public: virtual CORBA::PolicyType policy_type (CORBA::Environment &ACE_TRY_ENV = - TAO_default_environment ()); + TAO_default_environment ()) + ACE_THROW_SPEC ((CORBA::SystemException)); virtual CORBA::Policy_ptr copy (CORBA::Environment &ACE_TRY_ENV = - TAO_default_environment ()); + TAO_default_environment ()) + ACE_THROW_SPEC ((CORBA::SystemException)); virtual void destroy (CORBA::Environment &ACE_TRY_ENV = - TAO_default_environment ()); + TAO_default_environment ()) + ACE_THROW_SPEC ((CORBA::SystemException)); // = Override CORBA::LocalObject no-op methods to // provide reference counting. @@ -348,13 +363,16 @@ public: virtual CORBA::PolicyType policy_type (CORBA::Environment &ACE_TRY_ENV = - TAO_default_environment ()); + TAO_default_environment ()) + ACE_THROW_SPEC ((CORBA::SystemException)); virtual CORBA::Policy_ptr copy (CORBA::Environment &ACE_TRY_ENV = - TAO_default_environment ()); + TAO_default_environment ()) + ACE_THROW_SPEC ((CORBA::SystemException)); virtual void destroy (CORBA::Environment &ACE_TRY_ENV = - TAO_default_environment ()); + TAO_default_environment ()) + ACE_THROW_SPEC ((CORBA::SystemException)); // = CDR Encoder/Decoder. diff --git a/TAO/tao/SHMIOP_Connect.cpp b/TAO/tao/SHMIOP_Connect.cpp index 886c9dafb2f..2544f92e312 100644 --- a/TAO/tao/SHMIOP_Connect.cpp +++ b/TAO/tao/SHMIOP_Connect.cpp @@ -12,6 +12,7 @@ #include "tao/Messaging_Policy_i.h" #include "tao/GIOP_Message_Acceptors.h" #include "tao/GIOP_Message_Lite.h" +#include "tao/Server_Strategy_Factory.h" #if !defined (__ACE_INLINE__) # include "tao/SHMIOP_Connect.i" @@ -217,6 +218,15 @@ TAO_SHMIOP_Server_Connection_Handler::handle_close (ACE_HANDLE handle, --this->refcount_; if (this->refcount_ == 0) { + // Remove the handle from the ORB Core's handle set so that it + // isn't included in the set that is passed to the reactor upon + // ORB destruction. + TAO_Server_Strategy_Factory *f = + this->orb_core_->server_factory (); + + if (f->activate_server_connections () == 0) + (void) this->orb_core_->remove_handle (handle); + this->peer().remove (); return TAO_SHMIOP_SVC_HANDLER::handle_close (handle, rm); } diff --git a/TAO/tao/SHMIOP_Transport.cpp b/TAO/tao/SHMIOP_Transport.cpp index 0c8b8b41751..8c69a0568cb 100644 --- a/TAO/tao/SHMIOP_Transport.cpp +++ b/TAO/tao/SHMIOP_Transport.cpp @@ -5,6 +5,8 @@ #if defined (TAO_HAS_SHMIOP) && (TAO_HAS_SHMIOP != 0) +ACE_RCSID (tao, SHMIOP_Transport, "$Id$") + #include "tao/SHMIOP_Connect.h" #include "tao/SHMIOP_Profile.h" #include "tao/Timeprobe.h" diff --git a/TAO/tao/UIOP_Connect.cpp b/TAO/tao/UIOP_Connect.cpp index 1a1a05d8912..68f2b4ac238 100644 --- a/TAO/tao/UIOP_Connect.cpp +++ b/TAO/tao/UIOP_Connect.cpp @@ -11,7 +11,7 @@ #include "tao/ORB.h" #include "tao/CDR.h" #include "tao/Timeprobe.h" - +#include "tao/Server_Strategy_Factory.h" #include "tao/Messaging_Policy_i.h" #if !defined (__ACE_INLINE__) @@ -204,7 +204,18 @@ TAO_UIOP_Server_Connection_Handler::handle_close (ACE_HANDLE handle, --this->refcount_; if (this->refcount_ == 0) - return TAO_UIOP_SVC_HANDLER::handle_close (handle, rm); + { + // Remove the handle from the ORB Core's handle set so that it + // isn't included in the set that is passed to the reactor upon + // ORB destruction. + TAO_Server_Strategy_Factory *f = + this->orb_core_->server_factory (); + + if (f->activate_server_connections () == 0) + (void) this->orb_core_->remove_handle (handle); + + return TAO_UIOP_SVC_HANDLER::handle_close (handle, rm); + } return 0; } diff --git a/TAO/tao/UIOP_Transport.cpp b/TAO/tao/UIOP_Transport.cpp index c2dab7b6fb4..ef0f7c2a558 100644 --- a/TAO/tao/UIOP_Transport.cpp +++ b/TAO/tao/UIOP_Transport.cpp @@ -6,6 +6,8 @@ #if TAO_HAS_UIOP == 1 +ACE_RCSID (tao, UIOP_Transport, "$Id$") + #include "tao/UIOP_Connect.h" #include "tao/UIOP_Profile.h" #include "tao/Timeprobe.h" diff --git a/TAO/tao/Version.h b/TAO/tao/Version.h index 56c585ac26a..edde25f9418 100644 --- a/TAO/tao/Version.h +++ b/TAO/tao/Version.h @@ -3,5 +3,5 @@ #define TAO_MAJOR_VERSION 1 #define TAO_MINOR_VERSION 1 -#define TAO_BETA_VERSION 5 -#define TAO_VERSION "1.1.5" +#define TAO_BETA_VERSION 7 +#define TAO_VERSION "1.1.7" diff --git a/TAO/tao/Wait_On_Leader_Follower.cpp b/TAO/tao/Wait_On_Leader_Follower.cpp index f666bcc5bb4..2190ba52c76 100644 --- a/TAO/tao/Wait_On_Leader_Follower.cpp +++ b/TAO/tao/Wait_On_Leader_Follower.cpp @@ -191,9 +191,9 @@ TAO_Wait_On_Leader_Follower::wait (ACE_Time_Value *max_wait_time, ACE_GUARD_RETURN (ACE_Reverse_Lock<ACE_SYNCH_MUTEX>, rev_mon, leader_follower.reverse_lock (), -1); - // @@ Do we need to do this? // Become owner of the reactor. - orb_core->reactor ()->owner (ACE_Thread::self ()); + ACE_Reactor *reactor = orb_core->reactor (); + reactor->owner (ACE_Thread::self ()); // Run the reactor event loop. @@ -205,7 +205,7 @@ TAO_Wait_On_Leader_Follower::wait (ACE_Time_Value *max_wait_time, while (1) { // Run the event loop. - result = orb_core->reactor ()->handle_events (max_wait_time); + result = reactor->handle_events (max_wait_time); // If we got our reply, no need to run the event loop any // further. diff --git a/TAO/tao/corba.h b/TAO/tao/corba.h index bd87b3430df..6e28b48cdf8 100644 --- a/TAO/tao/corba.h +++ b/TAO/tao/corba.h @@ -56,9 +56,9 @@ // TAO specific files, avoid them as much as possible. #include "tao/Interceptor.h" -#if (TAO_HAS_SMART_PROXES == 1) +#if (TAO_HAS_SMART_PROXIES == 1) #include "tao/Smart_Proxies.h" -#endif /*TAO_HAS_SMART_PROXES == 1*/ +#endif /*TAO_HAS_SMART_PROXIES == 1*/ #include "tao/Stub.h" #include "tao/params.h" #include "tao/ORB_Core.h" |