diff options
author | bala <balanatarajan@users.noreply.github.com> | 2002-07-25 12:21:51 +0000 |
---|---|---|
committer | bala <balanatarajan@users.noreply.github.com> | 2002-07-25 12:21:51 +0000 |
commit | 92ef3def5aed5f430931e86687bd25ab2d68099d (patch) | |
tree | c47e9fe9d49808bab654f73f469ca9c9f7085c50 /TAO/tao/Thread_Lane_Resources.cpp | |
parent | 261fcb402f72474d26e7e1c9b75c301099e9f316 (diff) | |
download | ATCD-allocators_lanes.tar.gz |
ChangeLogTag: Thu Jul 25 07:17:02 2002 Balachandran Natarajan <bala@cs.wustl.edu>allocators_lanes
Diffstat (limited to 'TAO/tao/Thread_Lane_Resources.cpp')
-rw-r--r-- | TAO/tao/Thread_Lane_Resources.cpp | 89 |
1 files changed, 88 insertions, 1 deletions
diff --git a/TAO/tao/Thread_Lane_Resources.cpp b/TAO/tao/Thread_Lane_Resources.cpp index 8275653b391..c66f1c2a964 100644 --- a/TAO/tao/Thread_Lane_Resources.cpp +++ b/TAO/tao/Thread_Lane_Resources.cpp @@ -23,7 +23,11 @@ TAO_Thread_Lane_Resources::TAO_Thread_Lane_Resources (TAO_ORB_Core &orb_core, connector_registry_ (0), transport_cache_ (0), leader_follower_ (0), - new_leader_generator_ (new_leader_generator) + 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) { // Create the transport cache. ACE_NEW (this->transport_cache_, @@ -151,6 +155,67 @@ TAO_Thread_Lane_Resources::leader_follower (void) } +ACE_Allocator* +TAO_Thread_Lane_Resources::input_cdr_dblock_allocator (void) +{ + if (this->input_cdr_dblock_allocator_ == 0) + { + // 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 (); + } + + return this->input_cdr_dblock_allocator_; +} + + +ACE_Allocator* +TAO_Thread_Lane_Resources::input_cdr_buffer_allocator (void) +{ + if (this->input_cdr_buffer_allocator_ == 0) + { + // 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 (); + } + + return this->input_cdr_buffer_allocator_; +} + + +ACE_Allocator* +TAO_Thread_Lane_Resources::input_cdr_msgblock_allocator (void) +{ + if (this->input_cdr_msgblock_allocator_ == 0) + { + // 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 (); + } + + return this->input_cdr_msgblock_allocator_; +} + +ACE_Allocator* +TAO_Thread_Lane_Resources::transport_message_buffer_allocator (void) +{ + if (this->transport_message_buffer_allocator_ == 0) + { + // 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 (); + } + + return this->transport_message_buffer_allocator_; +} int TAO_Thread_Lane_Resources::open_acceptor_registry (int ignore_address @@ -171,6 +236,12 @@ TAO_Thread_Lane_Resources::open_acceptor_registry (int ignore_address return result; } +TAO_Resource_Factory * +TAO_Thread_Lane_Resources::resource_factory (void) +{ + return this->orb_core_.resource_factory (); +} + void TAO_Thread_Lane_Resources::finalize (void) { @@ -189,6 +260,22 @@ TAO_Thread_Lane_Resources::finalize (void) delete this->acceptor_registry_; } + if (this->input_cdr_dblock_allocator_ != 0) + 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 (); + delete this->input_cdr_buffer_allocator_; + + if (this->input_cdr_msgblock_allocator_ != 0) + 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 (); + delete this->transport_message_buffer_allocator_; + // 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 |