summaryrefslogtreecommitdiff
path: root/TAO/tao/Thread_Lane_Resources.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'TAO/tao/Thread_Lane_Resources.cpp')
-rw-r--r--TAO/tao/Thread_Lane_Resources.cpp189
1 files changed, 125 insertions, 64 deletions
diff --git a/TAO/tao/Thread_Lane_Resources.cpp b/TAO/tao/Thread_Lane_Resources.cpp
index a934c64286b..de3c44e31f9 100644
--- a/TAO/tao/Thread_Lane_Resources.cpp
+++ b/TAO/tao/Thread_Lane_Resources.cpp
@@ -2,7 +2,9 @@
#include "tao/Thread_Lane_Resources.h"
-ACE_RCSID(tao, Thread_Lane_Resources, "$Id$")
+ACE_RCSID (tao,
+ Thread_Lane_Resources,
+ "$Id$")
#include "tao/ORB_Core.h"
#include "tao/Acceptor_Registry.h"
@@ -18,21 +20,23 @@ ACE_RCSID(tao, Thread_Lane_Resources, "$Id$")
# include "tao/Thread_Lane_Resources.i"
#endif /* ! __ACE_INLINE__ */
-TAO_Thread_Lane_Resources::TAO_Thread_Lane_Resources (TAO_ORB_Core &orb_core,
- TAO_New_Leader_Generator *new_leader_generator)
- : orb_core_ (orb_core)
- , acceptor_registry_ (0)
- , connector_registry_ (0)
- , transport_cache_ (0)
- , leader_follower_ (0)
- , new_leader_generator_ (new_leader_generator)
- , input_cdr_dblock_allocator_ (0)
- , input_cdr_buffer_allocator_ (0)
- , input_cdr_msgblock_allocator_ (0)
- , transport_message_buffer_allocator_ (0)
- , output_cdr_dblock_allocator_ (0)
- , output_cdr_buffer_allocator_ (0)
- , output_cdr_msgblock_allocator_ (0)
+TAO_Thread_Lane_Resources::TAO_Thread_Lane_Resources (
+ TAO_ORB_Core &orb_core,
+ TAO_New_Leader_Generator *new_leader_generator
+ )
+ : orb_core_ (orb_core),
+ acceptor_registry_ (0),
+ connector_registry_ (0),
+ transport_cache_ (0),
+ leader_follower_ (0),
+ new_leader_generator_ (new_leader_generator),
+ input_cdr_dblock_allocator_ (0),
+ input_cdr_buffer_allocator_ (0),
+ input_cdr_msgblock_allocator_ (0),
+ transport_message_buffer_allocator_ (0),
+ output_cdr_dblock_allocator_ (0),
+ output_cdr_buffer_allocator_ (0),
+ output_cdr_msgblock_allocator_ (0)
{
// Create the transport cache.
ACE_NEW (this->transport_cache_,
@@ -61,7 +65,9 @@ int
TAO_Thread_Lane_Resources::is_collocated (const TAO_MProfile& mprofile)
{
if (!this->has_acceptor_registry_been_created ())
- return 0;
+ {
+ return 0;
+ }
return this->acceptor_registry ().is_collocated (mprofile);
}
@@ -78,6 +84,7 @@ TAO_Thread_Lane_Resources::acceptor_registry (void)
ace_mon,
this->lock_,
*this->acceptor_registry_);
+
if (this->acceptor_registry_ == 0)
{
// @@ Not exception safe code
@@ -112,26 +119,37 @@ TAO_Thread_Lane_Resources::connector_registry (ACE_ENV_SINGLE_ARG_DECL)
this->orb_core_.resource_factory ()->get_connector_registry ();
if (connector_registry == 0)
- ACE_THROW_RETURN (CORBA::INITIALIZE (
- CORBA::SystemException::_tao_minor_code (
- TAO_CONNECTOR_REGISTRY_INIT_LOCATION_CODE,
- 0),
- CORBA::COMPLETED_NO),
- 0);
+ {
+ ACE_THROW_RETURN (
+ CORBA::INITIALIZE (
+ CORBA::SystemException::_tao_minor_code (
+ TAO_CONNECTOR_REGISTRY_INIT_LOCATION_CODE,
+ 0
+ ),
+ CORBA::COMPLETED_NO
+ ),
+ 0
+ );
+ }
if (connector_registry->open (&this->orb_core_) != 0)
- ACE_THROW_RETURN (CORBA::INITIALIZE (
- CORBA::SystemException::_tao_minor_code (
- TAO_CONNECTOR_REGISTRY_INIT_LOCATION_CODE,
- 0),
- CORBA::COMPLETED_NO),
- 0);
+ {
+ ACE_THROW_RETURN (
+ CORBA::INITIALIZE (
+ CORBA::SystemException::_tao_minor_code (
+ TAO_CONNECTOR_REGISTRY_INIT_LOCATION_CODE,
+ 0
+ ),
+ CORBA::COMPLETED_NO
+ ),
+ 0
+ );
+ }
// Finally, everything is created and opened successfully:
// now we can assign to the member. Otherwise, the
// assignment would be premature.
- this->connector_registry_ =
- connector_registry;
+ this->connector_registry_ = connector_registry;
}
}
@@ -145,7 +163,11 @@ TAO_Thread_Lane_Resources::leader_follower (void)
// Double check.
if (this->leader_follower_ == 0)
{
- ACE_GUARD_RETURN (TAO_SYNCH_MUTEX, ace_mon, this->lock_, *this->leader_follower_);
+ ACE_GUARD_RETURN (TAO_SYNCH_MUTEX,
+ ace_mon,
+ this->lock_,
+ *this->leader_follower_);
+
if (this->leader_follower_ == 0)
{
// Create a new Leader Follower object.
@@ -167,9 +189,12 @@ TAO_Thread_Lane_Resources::input_cdr_dblock_allocator (void)
{
// Double checked locking
ACE_GUARD_RETURN (TAO_SYNCH_MUTEX, ace_mon, this->lock_, 0);
+
if (this->input_cdr_dblock_allocator_ == 0)
- this->input_cdr_dblock_allocator_ =
- this->resource_factory ()->input_cdr_dblock_allocator ();
+ {
+ this->input_cdr_dblock_allocator_ =
+ this->resource_factory ()->input_cdr_dblock_allocator ();
+ }
}
return this->input_cdr_dblock_allocator_;
@@ -183,9 +208,12 @@ TAO_Thread_Lane_Resources::input_cdr_buffer_allocator (void)
{
// Double checked locking
ACE_GUARD_RETURN (TAO_SYNCH_MUTEX, ace_mon, this->lock_, 0);
+
if (this->input_cdr_buffer_allocator_ == 0)
- this->input_cdr_buffer_allocator_ =
- this->resource_factory ()->input_cdr_buffer_allocator ();
+ {
+ this->input_cdr_buffer_allocator_ =
+ this->resource_factory ()->input_cdr_buffer_allocator ();
+ }
}
return this->input_cdr_buffer_allocator_;
@@ -199,9 +227,12 @@ TAO_Thread_Lane_Resources::input_cdr_msgblock_allocator (void)
{
// Double checked locking
ACE_GUARD_RETURN (TAO_SYNCH_MUTEX, ace_mon, this->lock_, 0);
+
if (this->input_cdr_msgblock_allocator_ == 0)
- this->input_cdr_msgblock_allocator_ =
- this->resource_factory ()->input_cdr_msgblock_allocator ();
+ {
+ this->input_cdr_msgblock_allocator_ =
+ this->resource_factory ()->input_cdr_msgblock_allocator ();
+ }
}
return this->input_cdr_msgblock_allocator_;
@@ -214,9 +245,12 @@ TAO_Thread_Lane_Resources::transport_message_buffer_allocator (void)
{
// Double checked locking
ACE_GUARD_RETURN (TAO_SYNCH_MUTEX, ace_mon, this->lock_, 0);
+
if (this->transport_message_buffer_allocator_ == 0)
- this->transport_message_buffer_allocator_ =
- this->resource_factory ()->input_cdr_dblock_allocator ();
+ {
+ this->transport_message_buffer_allocator_ =
+ this->resource_factory ()->input_cdr_dblock_allocator ();
+ }
}
return this->transport_message_buffer_allocator_;
@@ -230,9 +264,12 @@ TAO_Thread_Lane_Resources::output_cdr_dblock_allocator (void)
{
// Double checked locking
ACE_GUARD_RETURN (TAO_SYNCH_MUTEX, ace_mon, this->lock_, 0);
+
if (this->output_cdr_dblock_allocator_ == 0)
- this->output_cdr_dblock_allocator_ =
- this->resource_factory ()->output_cdr_dblock_allocator ();
+ {
+ this->output_cdr_dblock_allocator_ =
+ this->resource_factory ()->output_cdr_dblock_allocator ();
+ }
}
return this->output_cdr_dblock_allocator_;
@@ -246,9 +283,12 @@ TAO_Thread_Lane_Resources::output_cdr_buffer_allocator (void)
{
// Double checked locking
ACE_GUARD_RETURN (TAO_SYNCH_MUTEX, ace_mon, this->lock_, 0);
+
if (this->output_cdr_buffer_allocator_ == 0)
- this->output_cdr_buffer_allocator_ =
- this->resource_factory ()->output_cdr_buffer_allocator ();
+ {
+ this->output_cdr_buffer_allocator_ =
+ this->resource_factory ()->output_cdr_buffer_allocator ();
+ }
}
return this->output_cdr_buffer_allocator_;
@@ -262,9 +302,12 @@ TAO_Thread_Lane_Resources::output_cdr_msgblock_allocator (void)
{
// Double checked locking
ACE_GUARD_RETURN (TAO_SYNCH_MUTEX, ace_mon, this->lock_, 0);
+
if (this->output_cdr_msgblock_allocator_ == 0)
- this->output_cdr_msgblock_allocator_ =
- this->resource_factory ()->output_cdr_msgblock_allocator ();
+ {
+ this->output_cdr_msgblock_allocator_ =
+ this->resource_factory ()->output_cdr_msgblock_allocator ();
+ }
}
return this->output_cdr_msgblock_allocator_;
@@ -275,15 +318,13 @@ TAO_Thread_Lane_Resources::open_acceptor_registry (int ignore_address
ACE_ENV_ARG_DECL)
{
/// Access the acceptor registry.
- TAO_Acceptor_Registry &ar =
- this->acceptor_registry ();
+ TAO_Acceptor_Registry &ar = this->acceptor_registry ();
// Open it.
- int result =
- ar.open (&this->orb_core_,
- this->leader_follower ().reactor (),
- ignore_address
- ACE_ENV_ARG_PARAMETER);
+ int result = ar.open (&this->orb_core_,
+ this->leader_follower ().reactor (),
+ ignore_address
+ ACE_ENV_ARG_PARAMETER);
ACE_CHECK_RETURN (-1);
return result;
@@ -326,6 +367,7 @@ TAO_Thread_Lane_Resources::finalize (void)
// Go through the handler set, closing the connections and removing
// the references.
TAO_Connection_Handler **handler = 0;
+
for (TAO_Connection_Handler_Set::iterator iter (handlers);
iter.next (handler);
iter.advance ())
@@ -344,39 +386,59 @@ TAO_Thread_Lane_Resources::finalize (void)
// lest some of the contents in the abve, say reactor or acceptor
// may use memory from the pool..
if (this->input_cdr_dblock_allocator_ != 0)
- this->input_cdr_dblock_allocator_->remove ();
+ {
+ this->input_cdr_dblock_allocator_->remove ();
+ }
+
delete this->input_cdr_dblock_allocator_;
if (this->input_cdr_buffer_allocator_ != 0)
- this->input_cdr_buffer_allocator_->remove ();
+ {
+ this->input_cdr_buffer_allocator_->remove ();
+ }
+
delete this->input_cdr_buffer_allocator_;
if (this->input_cdr_msgblock_allocator_ != 0)
- this->input_cdr_msgblock_allocator_->remove ();
+ {
+ this->input_cdr_msgblock_allocator_->remove ();
+ }
+
delete this->input_cdr_msgblock_allocator_;
if (this->transport_message_buffer_allocator_ != 0)
- this->transport_message_buffer_allocator_->remove ();
+ {
+ this->transport_message_buffer_allocator_->remove ();
+ }
+
delete this->transport_message_buffer_allocator_;
if (this->output_cdr_dblock_allocator_ != 0)
- this->output_cdr_dblock_allocator_->remove ();
+ {
+ this->output_cdr_dblock_allocator_->remove ();
+ }
+
delete this->output_cdr_dblock_allocator_;
if (this->output_cdr_buffer_allocator_ != 0)
- this->output_cdr_buffer_allocator_->remove ();
+ {
+ this->output_cdr_buffer_allocator_->remove ();
+ }
+
delete this->output_cdr_buffer_allocator_;
if (this->output_cdr_msgblock_allocator_ != 0)
- this->output_cdr_msgblock_allocator_->remove ();
+ {
+ this->output_cdr_msgblock_allocator_->remove ();
+ }
+
delete this->output_cdr_msgblock_allocator_;
}
void
TAO_Thread_Lane_Resources::shutdown_reactor (void)
{
- TAO_Leader_Follower &leader_follower =
- this->leader_follower ();
+ TAO_Leader_Follower &leader_follower = this->leader_follower ();
ACE_GUARD (TAO_SYNCH_MUTEX,
ace_mon,
@@ -385,8 +447,7 @@ TAO_Thread_Lane_Resources::shutdown_reactor (void)
// Wakeup all the threads waiting blocked in the event loop, this
// does not guarantee that they will all go away, but reduces the
// load on the POA....
- ACE_Reactor *reactor =
- leader_follower.reactor ();
+ ACE_Reactor *reactor = leader_follower.reactor ();
reactor->wakeup_all_threads ();