summaryrefslogtreecommitdiff
path: root/TAO
diff options
context:
space:
mode:
Diffstat (limited to 'TAO')
-rw-r--r--TAO/ChangeLog-98c37
-rw-r--r--TAO/orbsvcs/Naming_Service/Naming_Service.cpp23
-rw-r--r--TAO/orbsvcs/orbsvcs/IOR_Multicast.cpp6
-rw-r--r--TAO/orbsvcs/orbsvcs/IOR_Multicast.h8
-rw-r--r--TAO/orbsvcs/orbsvcs/Naming/CosNaming_i.cpp30
-rw-r--r--TAO/orbsvcs/orbsvcs/Naming/CosNaming_i.h4
-rw-r--r--TAO/orbsvcs/orbsvcs/Naming/Naming_Utils.cpp352
-rw-r--r--TAO/orbsvcs/orbsvcs/Naming/Naming_Utils.h92
-rw-r--r--TAO/performance-tests/Cubit/TAO/DII_Cubit/client.cpp2
-rw-r--r--TAO/performance-tests/Cubit/TAO/IDL_Cubit/Cubit_Client.cpp2
-rw-r--r--TAO/tao/Connect.cpp25
-rw-r--r--TAO/tao/Connect.h14
-rw-r--r--TAO/tao/Environment.cpp70
-rw-r--r--TAO/tao/GIOP.cpp12
-rw-r--r--TAO/tao/IIOP_Object.cpp7
-rw-r--r--TAO/tao/IIOP_Object.i15
-rw-r--r--TAO/tao/Invocation.cpp7
-rw-r--r--TAO/tao/ORB.cpp48
18 files changed, 321 insertions, 433 deletions
diff --git a/TAO/ChangeLog-98c b/TAO/ChangeLog-98c
index 07243866396..bddacbcb170 100644
--- a/TAO/ChangeLog-98c
+++ b/TAO/ChangeLog-98c
@@ -1,3 +1,40 @@
+Mon Sep 21 01:38:46 1998 Irfan Pyarali <irfan@cs.wustl.edu>
+
+ * performance-tests/Cubit/TAO/DII_Cubit/client.cpp (init_naming_service):
+ * performance-tests/Cubit/TAO/IDL_Cubit/Cubit_Client.cpp
+ (init_naming_service): Fixed initialization of Naming_Server.
+
+ * orbsvcs/orbsvcs/IOR_Multicast.h (TAO_IOR_Multicast): Changed
+ char * to const char *.
+
+ * orbsvcs/orbsvcs/Naming/Naming_Utils.h (TAO_Naming_Server):
+ Complete revamp of Naming_Server and Naming_Client. New
+ implementation is better with respect to functionality, memory
+ management and other indescribable things ;-)
+
+ * orbsvcs/orbsvcs/Naming/CosNaming_i.cpp (TAO_NamingContext):
+ Deprecated init(). Also fixed some other simple stuff.
+
+ * tao/IIOP_Object.cpp (IIOP_Object): Fixed initialization for
+ this->fwd_profile_lock_ptr_.
+
+ * tao/IIOP_Object.i (reset_handler) and (~IIOP_Object): Added code
+ to cleanup hint svc_handler.
+
+ * tao/ORB.cpp: Fixed template instantiations.
+
+ * tao/GIOP:
+ * tao/Invocation.cpp
+
+ Changed close to handle_close.
+
+ * tao/Environment.cpp (print_exception): Check for zero exception
+ before printing.
+
+ * tao/Connect.cpp (handle_close): Close socket but don't delete
+ instance. Instance will be deleted when all "hints" are
+ removed. Instance is deleted in close().
+
Sun Sep 20 23:30:20 1998 Douglas C. Schmidt <schmidt@tango.cs.wustl.edu>
* tao/ORB: It is now possible to give an ACE_Time_Value to the
diff --git a/TAO/orbsvcs/Naming_Service/Naming_Service.cpp b/TAO/orbsvcs/Naming_Service/Naming_Service.cpp
index 41aed3838ad..b22a07be06f 100644
--- a/TAO/orbsvcs/Naming_Service/Naming_Service.cpp
+++ b/TAO/orbsvcs/Naming_Service/Naming_Service.cpp
@@ -20,18 +20,18 @@
ACE_RCSID(Naming_Service, Naming_Service, "$Id$")
-// Default Constructor.
+ // Default Constructor.
-TAO_Naming_Service::TAO_Naming_Service (void)
- : ior_output_file_ (0),
- pid_file_name_ (0)
+ TAO_Naming_Service::TAO_Naming_Service (void)
+ : ior_output_file_ (0),
+ pid_file_name_ (0)
{
}
// Constructor taking command-line arguments.
TAO_Naming_Service::TAO_Naming_Service (int argc,
- char* argv[])
+ char* argv[])
: ior_output_file_ (0),
pid_file_name_ (0)
{
@@ -40,7 +40,7 @@ TAO_Naming_Service::TAO_Naming_Service (int argc,
int
TAO_Naming_Service::parse_args (int argc,
- char *argv[])
+ char *argv[])
{
ACE_Get_Opt get_opts (argc, argv, "do:p:");
int c;
@@ -80,7 +80,7 @@ TAO_Naming_Service::parse_args (int argc,
// Initialize the state of the TAO_Naming_Service object
int
TAO_Naming_Service::init (int argc,
- char* argv[])
+ char* argv[])
{
int result;
CORBA::ORB_var orb;
@@ -93,14 +93,12 @@ TAO_Naming_Service::init (int argc,
"child_poa",
TAO_TRY_ENV);
TAO_CHECK_ENV;
-
+
orb = this->orb_manager_.orb ();
child_poa = this->orb_manager_.child_poa ();
-
+
result = this->my_naming_server_.init (orb.in (),
- child_poa.in (),
- argc,
- argv);
+ child_poa.in ());
TAO_CHECK_ENV;
if (result == -1)
return result;
@@ -180,3 +178,4 @@ main (int argc, char* argv[])
TAO_ENDTRY;
return 0;
}
+
diff --git a/TAO/orbsvcs/orbsvcs/IOR_Multicast.cpp b/TAO/orbsvcs/orbsvcs/IOR_Multicast.cpp
index 6af828d1c10..898b98e781e 100644
--- a/TAO/orbsvcs/orbsvcs/IOR_Multicast.cpp
+++ b/TAO/orbsvcs/orbsvcs/IOR_Multicast.cpp
@@ -16,7 +16,7 @@ TAO_IOR_Multicast::TAO_IOR_Multicast (void)
{
}
-TAO_IOR_Multicast::TAO_IOR_Multicast (char * ior,
+TAO_IOR_Multicast::TAO_IOR_Multicast (const char *ior,
u_short port,
const char *mcast_addr,
TAO_Service_ID service_id)
@@ -33,9 +33,9 @@ TAO_IOR_Multicast::~TAO_IOR_Multicast (void)
}
int
-TAO_IOR_Multicast::init (char* ior,
+TAO_IOR_Multicast::init (const char *ior,
u_short port,
- const char* mcast_addr,
+ const char *mcast_addr,
TAO_Service_ID service_id)
{
this->service_id_ = service_id;
diff --git a/TAO/orbsvcs/orbsvcs/IOR_Multicast.h b/TAO/orbsvcs/orbsvcs/IOR_Multicast.h
index c80663a9993..5e9dfb36354 100644
--- a/TAO/orbsvcs/orbsvcs/IOR_Multicast.h
+++ b/TAO/orbsvcs/orbsvcs/IOR_Multicast.h
@@ -37,14 +37,14 @@ public:
TAO_IOR_Multicast (void);
// Default constructor
- TAO_IOR_Multicast (char * ior,
+ TAO_IOR_Multicast (const char *ior,
u_short port,
const char *mcast_addr,
TAO_Service_ID service_id);
- int init (char* ior,
+ int init (const char *ior,
u_short port,
- const char* mcast_addr,
+ const char *mcast_addr,
TAO_Service_ID service_id);
// destructor
@@ -73,7 +73,7 @@ private:
ACE_INET_Addr mcast_addr_;
// multicast address
- char * ior_;
+ const char *ior_;
// object reference to send in response to the multicast
ACE_INET_Addr response_addr_;
diff --git a/TAO/orbsvcs/orbsvcs/Naming/CosNaming_i.cpp b/TAO/orbsvcs/orbsvcs/Naming/CosNaming_i.cpp
index 3674b5fe449..5d40fada498 100644
--- a/TAO/orbsvcs/orbsvcs/Naming/CosNaming_i.cpp
+++ b/TAO/orbsvcs/orbsvcs/Naming/CosNaming_i.cpp
@@ -30,19 +30,13 @@ TAO_NamingContext::TAO_NamingContext (PortableServer::POA_ptr poa,
ACE_ERROR ((LM_ERROR,
"%p\n",
"TAO_NamingContext"));
-}
-int
-TAO_NamingContext::init (void)
-{
// Get the lock from the ORB, which knows what type is appropriate.
// This method must be called AFTER the ORB has been initialized via
// <CORBA::ORB_init> since otherwise <TAO_ORB_Core_instance> won't
// work correctly...
- ACE_ALLOCATOR_RETURN (this->lock_,
- TAO_ORB_Core_instance ()->server_factory ()->create_servant_lock (),
- -1);
- return 0;
+ ACE_ALLOCATOR (this->lock_,
+ TAO_ORB_Core_instance ()->server_factory ()->create_servant_lock ());
}
TAO_NamingContext::~TAO_NamingContext (void)
@@ -465,33 +459,26 @@ TAO_NamingContext::new_context (CORBA::Environment &_env)
{
TAO_NamingContext *c = 0;
- CosNaming::NamingContext_ptr result =
- CosNaming::NamingContext::_nil ();
+ CosNaming::NamingContext_var result;
ACE_NEW_THROW_RETURN (c,
TAO_NamingContext (poa_.in ()),
CORBA::NO_MEMORY (CORBA::COMPLETED_NO),
- result);
- if (c->init () == -1)
- {
- delete c;
- TAO_THROW_RETURN (CORBA::INTERNAL (CORBA::COMPLETED_NO),
- result);
- }
-
+ result._retn ());
TAO_TRY
{
result = c->_this (TAO_TRY_ENV);
TAO_CHECK_ENV;
- return result;
+ return result._retn ();
}
TAO_CATCHANY
{
delete c;
- CORBA::release (result);
- TAO_RETHROW_RETURN (CosNaming::NamingContext::_nil ());
+ TAO_RETHROW_RETURN (result._retn ());
}
TAO_ENDTRY;
+
+ return result._retn ();
}
CosNaming::NamingContext_ptr
@@ -696,6 +683,7 @@ TAO_NamingContext::list_helper (TAO_BindingIterator* &bind_iter,
ACE_NEW_TRY_THROW (bind_iter,
TAO_BindingIterator (hash_iter, this->poa_.in (), this->lock_),
CORBA::NO_MEMORY (CORBA::COMPLETED_NO));
+ TAO_CHECK_ENV;
}
TAO_CATCHANY
{
diff --git a/TAO/orbsvcs/orbsvcs/Naming/CosNaming_i.h b/TAO/orbsvcs/orbsvcs/Naming/CosNaming_i.h
index 551d58629a6..9ad6d748e47 100644
--- a/TAO/orbsvcs/orbsvcs/Naming/CosNaming_i.h
+++ b/TAO/orbsvcs/orbsvcs/Naming/CosNaming_i.h
@@ -45,10 +45,6 @@ public:
// Default constructor, which initializes the <size> of the table,
// and sets a root flag.
- int init (void);
- // Initialize the lock. The ORB must be initialized when this
- // constructor is called.
-
~TAO_NamingContext (void);
// destructor.
diff --git a/TAO/orbsvcs/orbsvcs/Naming/Naming_Utils.cpp b/TAO/orbsvcs/orbsvcs/Naming/Naming_Utils.cpp
index e6f39dcd4e7..b750398841f 100644
--- a/TAO/orbsvcs/orbsvcs/Naming/Naming_Utils.cpp
+++ b/TAO/orbsvcs/orbsvcs/Naming/Naming_Utils.cpp
@@ -1,23 +1,5 @@
// $Id$
-// ============================================================================
-//
-// = LIBRARY
-// TAO/orbsvcs/Naming_Service
-//
-// = FILENAME
-// Naming_Utils.cpp
-//
-// = DESCRIPTION
-// This class implements a Naming Server wrapper class that holds
-// a Naming Context for TAO NameService.
-//
-// = AUTHOR
-// Nagarajan Surendran <naga@cs.wustl.edu>
-// Matthew Braun <mjb2@cec.wustl.edu>
-//
-// ============================================================================
-
#include "orbsvcs/CosNamingC.h"
#include "tao/corba.h"
#include "Naming_Utils.h"
@@ -25,42 +7,43 @@
ACE_RCSID(Naming, Naming_Utils, "$Id$")
-// Default constructor
-
TAO_Naming_Server::TAO_Naming_Server (void)
- : ior_multicast_ (0),
- naming_context_name_ (CORBA::string_dup ("NameService"))
+ : naming_context_impl_ (0),
+ naming_context_ (),
+ ior_multicast_ (0),
+ naming_service_ior_ ()
{
}
-// Constructor which takes an ORB and POA.
-
TAO_Naming_Server::TAO_Naming_Server (CORBA::ORB_ptr orb,
- PortableServer::POA_ptr child_poa,
- int argc,
- char **argv)
+ PortableServer::POA_ptr poa,
+ ACE_Time_Value *timeout,
+ int resolve_for_existing_naming_service)
+ : naming_context_impl_ (0),
+ naming_context_ (),
+ ior_multicast_ (0),
+ naming_service_ior_ ()
{
- if (this->init (orb, child_poa, argc, argv) == -1)
+ if (this->init (orb,
+ poa,
+ timeout,
+ resolve_for_existing_naming_service) == -1)
ACE_ERROR ((LM_ERROR,
"(%P|%t) %p\n",
"TAO_Naming_Server::init"));
}
-// Function to locate (or create if necessary) a name service under
-// the passed ORB and POA
-
int
TAO_Naming_Server::init (CORBA::ORB_ptr orb,
- PortableServer::POA_ptr child_poa,
- int argc,
- char **argv)
+ PortableServer::POA_ptr poa,
+ ACE_Time_Value *timeout,
+ int resolve_for_existing_naming_service)
{
- CORBA::Object_var naming_obj =
- // @@ Irfan, here is where we could put a smaller bound on the
- // amount of time that we're willing to wait to resolve the
- // "NameService."
- orb->resolve_initial_references ("NameService");
+ CORBA::Object_var naming_obj;
+
+ if (resolve_for_existing_naming_service)
+ naming_obj = orb->resolve_initial_references ("NameService", timeout);
if (CORBA::is_nil (naming_obj.in ()))
{
@@ -68,9 +51,7 @@ TAO_Naming_Server::init (CORBA::ORB_ptr orb,
ACE_DEBUG ((LM_DEBUG,
"\nNameService not resolved, so we'll become a NameService\n"));
return this->init_new_naming (orb,
- child_poa,
- argc,
- argv);
+ poa);
}
else
{
@@ -78,8 +59,6 @@ TAO_Naming_Server::init (CORBA::ORB_ptr orb,
ACE_DEBUG ((LM_DEBUG,
"\nNameService found!\n"));
- if (this->naming_context_impl_.init () == -1)
- return -1;
TAO_TRY
{
this->naming_context_ =
@@ -87,225 +66,111 @@ TAO_Naming_Server::init (CORBA::ORB_ptr orb,
TAO_TRY_ENV);
TAO_CHECK_ENV;
- CORBA::String_var str =
+ this->naming_service_ior_ =
orb->object_to_string (naming_obj.in (),
TAO_TRY_ENV);
TAO_CHECK_ENV;
-
- this->naming_service_ior_ = str.in ();
- this->naming_context_name_ = CORBA::string_dup ("");
}
TAO_CATCHANY
{
TAO_TRY_ENV.print_exception ("TAO_Naming_Server::init");
}
TAO_ENDTRY;
-
- // @@ Irfan, must we actually dynamically allocate the
- // <naming_ior>?
- char *naming_ior =
- ACE_OS::strdup (this->naming_service_ior_.in ());
- u_short port =
- TAO_ORB_Core_instance ()->orb_params ()->name_service_port ();
-
- ACE_NEW_RETURN (this->ior_multicast_,
- TAO_IOR_Multicast (naming_ior,
- port,
- ACE_DEFAULT_MULTICAST_ADDR,
- TAO_SERVICEID_NAMESERVICE),
- -1);
}
return 0;
}
-// Function to initialize the name server object under the passed ORB
-// and POA.
int
TAO_Naming_Server::init_new_naming (CORBA::ORB_ptr orb,
- PortableServer::POA_ptr child_poa,
- int argc,
- char **argv)
+ PortableServer::POA_ptr poa)
{
- // Initialize our <TAO_NamingContext> instance.
- if (this->naming_context_impl_.init () == -1)
- return -1;
+ ACE_NEW_RETURN (this->naming_context_impl_,
+ TAO_NamingContext (poa,
+ ACE_DEFAULT_MAP_SIZE,
+ 1),
+ -1);
- // Parse command-line arguments to determine if this name server
- // instance is part of a naming tree that resides under the default
- // name server.
- ACE_Arg_Shifter args (argc, argv);
-
- while (args.is_anything_left ())
+ TAO_TRY
{
- char *current_arg = args.get_current ();
+ PortableServer::ObjectId_var id =
+ PortableServer::string_to_ObjectId ("NameService");
+
+ poa->activate_object_with_id (id.in (),
+ this->naming_context_impl_,
+ TAO_TRY_ENV);
- if (ACE_OS::strcmp (current_arg, "-NScontextname") == 0)
- {
- args.consume_arg ();
-
- if (args.is_parameter_next ())
- {
- this->naming_context_name_ =
- CORBA::string_dup (args.get_current ());
- args.consume_arg ();
- }
- }
- else
- args.ignore_arg ();
- }
+ TAO_CHECK_ENV;
- TAO_TRY
- {
- // Check if this invocation is creating a naming context
- // different from the default NameService context, if not,
- // instantiate a name service, and listen on multicast port.
- if (ACE_OS::strcmp (this->naming_context_name_.in (),
- "NameService") == 0)
- {
- // Get the naming context ptr to NameService and register
- // with the POA.
- this->naming_context_ =
- this->naming_context_impl_._this (TAO_TRY_ENV);
- TAO_CHECK_ENV;
+ this->naming_context_ =
+ this->naming_context_impl_->_this (TAO_TRY_ENV);
+ TAO_CHECK_ENV;
- PortableServer::ObjectId_var id =
- PortableServer::string_to_ObjectId ("NameService");
-
- child_poa->activate_object_with_id (id.in (),
- &this->naming_context_impl_,
- TAO_TRY_ENV);
- TAO_CHECK_ENV;
-
- // Stringify the objref we'll be implementing, and print it
- // to stdout. Someone will take that string and give it to
- // a client. Then release the object.
- CORBA::Object_var obj =
- child_poa->id_to_reference (id.in (),
- TAO_TRY_ENV);
- TAO_CHECK_ENV;
-
- this->naming_service_ior_=
- orb->object_to_string (obj.in (),
- TAO_TRY_ENV);
- TAO_CHECK_ENV;
-
- if (TAO_debug_level > 0)
- ACE_DEBUG ((LM_DEBUG,
- "NameService IOR is <%s>\n",
- this->naming_service_ior_.in ()));
-
+
+ // Stringify the objref we'll be implementing, and print it to
+ // stdout. Someone will take that string and give it to a
+ // client. Then release the object.
+ CORBA::Object_var obj =
+ poa->id_to_reference (id.in (),
+ TAO_TRY_ENV);
+ TAO_CHECK_ENV;
+
+ this->naming_service_ior_=
+ orb->object_to_string (obj.in (),
+ TAO_TRY_ENV);
+ TAO_CHECK_ENV;
+
+ if (TAO_debug_level > 0)
+ ACE_DEBUG ((LM_DEBUG,
+ "NameService IOR is <%s>\n",
+ this->naming_service_ior_.in ()));
+
#if defined (ACE_HAS_IP_MULTICAST)
- // Get reactor instance from TAO.
- ACE_Reactor *reactor =
- TAO_ORB_Core_instance ()->reactor ();
+ // Get reactor instance from TAO.
+ ACE_Reactor *reactor =
+ TAO_ORB_Core_instance ()->reactor ();
- // First, see if the user has given us a multicast port number
- // for the name service on the command-line;
- u_short port =
- TAO_ORB_Core_instance ()->orb_params ()->name_service_port ();
-
- if (port == 0)
- {
- const char *port_number =
- ACE_OS::getenv ("NameServicePort");
-
- if (port_number != 0)
- port = ACE_OS::atoi (port_number);
- }
-
- if (port == 0)
- port = TAO_DEFAULT_NAME_SERVER_REQUEST_PORT;
-
- char *naming_ior = ACE_OS::strdup (this->naming_service_ior_.in ());
-
- // Instantiate a server which will receive requests for an ior
- ACE_NEW_RETURN (this->ior_multicast_,
- TAO_IOR_Multicast (naming_ior,
- port,
- ACE_DEFAULT_MULTICAST_ADDR,
- TAO_SERVICEID_NAMESERVICE),
- -1);
+ // First, see if the user has given us a multicast port number
+ // for the name service on the command-line;
+ u_short port =
+ TAO_ORB_Core_instance ()->orb_params ()->name_service_port ();
- // Register event handler for the ior multicast.
- if (reactor->register_handler (this->ior_multicast_,
- ACE_Event_Handler::READ_MASK) == -1)
- {
- if (TAO_debug_level > 0)
- ACE_DEBUG ((LM_DEBUG,
- "cannot register Event handler\n"));
- }
- else
- {
- if (TAO_debug_level > 0)
- ACE_DEBUG ((LM_DEBUG,
- "The multicast server setup is done.\n"));
- }
-#endif /* ACE_HAS_IP_MULTICAST */
- }
+ if (port == 0)
+ {
+ const char *port_number =
+ ACE_OS::getenv ("NameServicePort");
+
+ if (port_number != 0)
+ port = ACE_OS::atoi (port_number);
+ }
+
+ if (port == 0)
+ port = TAO_DEFAULT_NAME_SERVER_REQUEST_PORT;
+
+ // Instantiate a server which will receive requests for an ior
+ ACE_NEW_RETURN (this->ior_multicast_,
+ TAO_IOR_Multicast (this->naming_service_ior_.in (),
+ port,
+ ACE_DEFAULT_MULTICAST_ADDR,
+ TAO_SERVICEID_NAMESERVICE),
+ -1);
+
+ // Register event handler for the ior multicast.
+ if (reactor->register_handler (this->ior_multicast_,
+ ACE_Event_Handler::READ_MASK) == -1)
+ {
+ if (TAO_debug_level > 0)
+ ACE_DEBUG ((LM_DEBUG,
+ "cannot register Event handler\n"));
+ return -1;
+ }
else
- {
- // We are instantiating a name service to manage a naming
- // context other than the default NameService context. We
- // need to verify that all contexts in the compound name
- // exist (if we are passed a compound naming context). Any
- // missing contexts will be created and bound into the
- // naming service utilized by this name server instance.
- // Finally, this name server will bind the context that it's
- // managing into it's parent's context.
-
- CORBA::Object_var default_ns =
- orb->resolve_initial_references ("NameService");
-
- if (CORBA::is_nil (default_ns.in ()))
- ACE_ERROR ((LM_ERROR,
- "%p\n",
- "NameService"));
-
- CosNaming::NamingContext_var default_ctx =
- CosNaming::NamingContext::_narrow (default_ns.in (),
- TAO_TRY_ENV);
- TAO_CHECK_ENV;
-
- // Temporary hack, to see if this works as expected. Need
- // to add code to walk the naming tree from root to the
- // context represented by this server.
- PortableServer::ObjectId_var id =
- PortableServer::string_to_ObjectId (this->naming_context_name_.in ());
-
- child_poa->activate_object_with_id (id.in (),
- &naming_context_impl_,
- TAO_TRY_ENV);
- TAO_CHECK_ENV;
-
- // Stringify the objref we'll be implementing, and print it to
- // stdout. Someone will take that string and give it to a
- // client. Then release the object.
- CORBA::Object_var obj =
- child_poa->id_to_reference (id.in (),
- TAO_TRY_ENV);
- TAO_CHECK_ENV;
-
- this->naming_service_ior_=
- orb->object_to_string (obj.in (),
- TAO_TRY_ENV);
- TAO_CHECK_ENV;
-
- if (TAO_debug_level > 0)
- ACE_DEBUG ((LM_DEBUG,
- "NameService IOR is <%s>\n",
- this->naming_service_ior_.in ()));
-
- // Bind our context into the default name server.
- CosNaming::Name ctx_name (1);
- ctx_name.length (1);
- ctx_name[0].id = CORBA::string_dup (naming_context_name_.in ());
-
- default_ctx->bind_context (ctx_name,
- naming_context_impl_._this (TAO_TRY_ENV),
- TAO_TRY_ENV);
- TAO_CHECK_ENV;
- }
+ {
+ if (TAO_debug_level > 0)
+ ACE_DEBUG ((LM_DEBUG,
+ "The multicast server setup is done.\n"));
+ }
+#endif /* ACE_HAS_IP_MULTICAST */
}
TAO_CATCHANY
{
@@ -321,7 +186,7 @@ TAO_Naming_Server::init_new_naming (CORBA::ORB_ptr orb,
TAO_NamingContext &
TAO_Naming_Server::get_naming_context (void)
{
- return naming_context_impl_ ;
+ return *this->naming_context_impl_;
}
CORBA::String
@@ -333,22 +198,21 @@ TAO_Naming_Server::naming_service_ior (void)
// Returns a pointer to the NamingContext.
CosNaming::NamingContext_ptr
-TAO_Naming_Server::operator -> (void) const
+TAO_Naming_Server::operator-> (void) const
{
return this->naming_context_.ptr ();
}
-// Destructor.
-
TAO_Naming_Server::~TAO_Naming_Server (void)
{
if (this->ior_multicast_ != 0)
{
TAO_ORB_Core_instance ()->reactor ()->remove_handler
(this->ior_multicast_,
- ACE_Event_Handler::READ_MASK);
+ ACE_Event_Handler::READ_MASK | ACE_Event_Handler::DONT_CALL);
delete this->ior_multicast_;
}
+ delete this->naming_context_impl_;
}
// Returns a pointer to the NamingContext.
@@ -368,9 +232,7 @@ TAO_Naming_Client::get_context (void) const
}
int
-TAO_Naming_Client::init (CORBA::ORB_ptr orb,
- int argc,
- char *argv[])
+TAO_Naming_Client::init (CORBA::ORB_ptr orb)
{
TAO_TRY
{
diff --git a/TAO/orbsvcs/orbsvcs/Naming/Naming_Utils.h b/TAO/orbsvcs/orbsvcs/Naming/Naming_Utils.h
index d941551be20..ecea3afc753 100644
--- a/TAO/orbsvcs/orbsvcs/Naming/Naming_Utils.h
+++ b/TAO/orbsvcs/orbsvcs/Naming/Naming_Utils.h
@@ -30,50 +30,38 @@
class TAO_ORBSVCS_Export TAO_Naming_Server
{
// = TITLE
- // Defines a wrapper class that holds a Naming Context
- // implementation for a TAO "NamingService" naming context.
+ //
+ // Defines a wrapper class that holds the root Naming Context.
//
// = DESCRIPTION
- // This class takes an ORB and POA reference and activates the
- // NamingService naming context object under that. It also
- // defines the operator-> so that <NamingContext> functions like
- // <bind>, <unbind> .. can be called on a <NameServer> object.
- // This class is intended to simplify programs that want to play
- // the role of a Naming Service servers. To simplify programs
- // that want to play the role of Naming Service clients, use
- // <TAO_Naming_Client>.
+ //
+ // This class either finds an existing Naming Service or creates
+ // one. It also defines the operator-> so that <NamingContext>
+ // functions like <bind>, <unbind> .. can be called on a
+ // <NameServer> object. This class is intended to simplify
+ // programs that want to play the role of a Naming Service
+ // servers. To simplify programs that want to play the role of
+ // Naming Service clients, use <TAO_Naming_Client>.
public:
- // = Initialization and termination methods.
-
TAO_Naming_Server (void);
- //Default constructor.
+ // Default constructor.
TAO_Naming_Server (CORBA::ORB_ptr orb,
- PortableServer::POA_ptr root_poa,
- int argc = 0,
- char **argv = 0);
- // Takes the POA under which to register the Naming Service
- // implementation object. The <argc> and <argv> commmand-line
- // arguments are parsed to determine if this name server instance is
- // part of a naming tree that resides under the default name server.
+ PortableServer::POA_ptr poa,
+ ACE_Time_Value *timeout = 0,
+ int resolve_for_existing_naming_service = 1);
+ // Either find an existing Naming Service or creates one. Takes the
+ // POA under which to register the Naming Service implementation
+ // object.
int init (CORBA::ORB_ptr orb,
- PortableServer::POA_ptr root_poa,
- int argc = 0,
- char **argv = 0);
- // Locate a name server under the given ORB and POA. If no name
- // server can be resolved, create a new name server.
+ PortableServer::POA_ptr poa,
+ ACE_Time_Value *timeout = 0,
+ int resolve_for_existing_naming_service = 1);
+ // Either find an existing Naming Service or creates one. Takes the
+ // POA under which to register the Naming Service implementation
+ // object.
- int init_new_naming (CORBA::ORB_ptr orb,
- PortableServer::POA_ptr root_poa,
- int argc = 0,
- char **argv = 0);
- // Initialize a new name server under the given ORB and POA, even
- // if one already exists. The <argc> and <argv> commmand-line
- // arguments are parsed to determine if this name server instance is
- // part of a naming tree that resides under the default name
- // server.
-
~TAO_Naming_Server (void);
// Destructor.
@@ -87,12 +75,13 @@ public:
CosNaming::NamingContext_ptr operator-> (void) const;
// Returns a <NamingContext_ptr>.
-private:
- // @@ Marina, can you please revise this to use dynamic allocation
- // rather than be allocated in the class. This will make sure that
- // we follow a consistent policy for managing the memory of our
- // NamingContexts...
- TAO_NamingContext naming_context_impl_;
+protected:
+
+ int init_new_naming (CORBA::ORB_ptr orb,
+ PortableServer::POA_ptr root_poa);
+ // Initialize a new name server under the given ORB and POA.
+
+ TAO_NamingContext *naming_context_impl_;
// Naming context implementation for "NameService".
CosNaming::NamingContext_var naming_context_;
@@ -103,19 +92,17 @@ private:
CORBA::String_var naming_service_ior_;
// The IOR string of the naming service.
-
- CORBA::String_var naming_context_name_;
- // Name of the naming context (if different than
- // "NameService").
};
class TAO_ORBSVCS_Export TAO_Naming_Client
{
// = TITLE
+ //
// Defines a wrapper class that simplifies initialization and
// access to a <NamingContext>.
//
// = DESCRIPTION
+ //
// This class takes an ORB reference and contacts the
// NamingService naming context object under that. It also
// defines the operator-> so that <NamingContext> functions like
@@ -124,18 +111,11 @@ class TAO_ORBSVCS_Export TAO_Naming_Client
// the role of a Naming Service clients.
public:
- // = Initialization and termination methods.
-
TAO_Naming_Client (void);
- //Default constructor.
+ // Default constructor.
- int init (CORBA::ORB_ptr orb,
- int argc = 0,
- char **argv = 0);
- // Initialize the name server under the given ORB and POA. The
- // <argc> and <argv> commmand-line arguments are parsed to determine
- // if this name server instance is part of a naming tree that
- // resides under the default name server.
+ int init (CORBA::ORB_ptr orb);
+ // Initialize the name server.
~TAO_Naming_Client (void);
// Destructor.
@@ -146,7 +126,7 @@ public:
CosNaming::NamingContext_ptr get_context (void) const;
// Returns the NamingContext
-private:
+protected:
CosNaming::NamingContext_var naming_context_;
// NamingContext ptr.
};
diff --git a/TAO/performance-tests/Cubit/TAO/DII_Cubit/client.cpp b/TAO/performance-tests/Cubit/TAO/DII_Cubit/client.cpp
index 87ca3963316..9cf30b229a3 100644
--- a/TAO/performance-tests/Cubit/TAO/DII_Cubit/client.cpp
+++ b/TAO/performance-tests/Cubit/TAO/DII_Cubit/client.cpp
@@ -332,7 +332,7 @@ DII_Cubit_Client::init_naming_service (void)
TAO_TRY
{
// Initialize the naming services
- if (my_name_client_.init (orb_var_.in (), argc_, argv_) != 0)
+ if (my_name_client_.init (orb_var_.in ()) != 0)
ACE_ERROR_RETURN ((LM_ERROR,
" (%P|%t) Unable to initialize "
"the TAO_Naming_Client. \n"),
diff --git a/TAO/performance-tests/Cubit/TAO/IDL_Cubit/Cubit_Client.cpp b/TAO/performance-tests/Cubit/TAO/IDL_Cubit/Cubit_Client.cpp
index 934eb5b5dbb..b7af1860af0 100644
--- a/TAO/performance-tests/Cubit/TAO/IDL_Cubit/Cubit_Client.cpp
+++ b/TAO/performance-tests/Cubit/TAO/IDL_Cubit/Cubit_Client.cpp
@@ -1020,7 +1020,7 @@ Cubit_Client::init_naming_service (void)
*/
// Initialize the naming services
- if (my_name_client_.init (orb_.in (), argc_, argv_) != 0)
+ if (my_name_client_.init (orb_.in ()) != 0)
ACE_ERROR_RETURN ((LM_ERROR,
" (%P|%t) Unable to initialize "
"the TAO_Naming_Client. \n"),
diff --git a/TAO/tao/Connect.cpp b/TAO/tao/Connect.cpp
index 812bc1f0fbd..a1aa8ffc6af 100644
--- a/TAO/tao/Connect.cpp
+++ b/TAO/tao/Connect.cpp
@@ -479,7 +479,7 @@ TAO_Server_Connection_Handler::send_error (CORBA::ULong request_id,
ACE_DEBUG ((LM_DEBUG,"(%P|%t) closing conn %d after fault %p\n",
this->peer().get_handle (),
"TAO_Server_ConnectionHandler::send_error"));
- this->close ();
+ this->handle_close ();
return;
}
TAO_ENDTRY;
@@ -589,7 +589,7 @@ TAO_Server_Connection_Handler::handle_input (ACE_HANDLE)
ACE_ERROR ((LM_ERROR,
"(%P|%t) exception thrown "
"but client is not waiting a response\n"));
- this->close ();
+ this->handle_close ();
result = -1;
}
return result;
@@ -603,7 +603,7 @@ TAO_Server_Connection_Handler::handle_input (ACE_HANDLE)
"(%P|%t) closing conn %d after fault %p\n",
this->peer().get_handle (),
"TAO_Server_ConnectionHandler::handle_input"));
- this->close ();
+ this->handle_close ();
return -1;
}
TAO_ENDTRY;
@@ -621,7 +621,7 @@ TAO_Server_Connection_Handler::handle_input (ACE_HANDLE)
"(%P|%t) %s: closing conn, no exception, "
"but expecting response\n",
"TAO_Server_ConnectionHandler::handle_input"));
- this->close ();
+ this->handle_close ();
return -1;
}
}
@@ -634,7 +634,7 @@ TAO_Server_Connection_Handler::handle_input (ACE_HANDLE)
"(%P|%t) %s: closing conn, no exception, "
"but expecting response\n",
"TAO_Server_ConnectionHandler::handle_input"));
- this->close ();
+ this->handle_close ();
return -1;
}
@@ -967,7 +967,20 @@ TAO_Client_Connection_Handler::handle_close (ACE_HANDLE handle,
handle,
rm));
- return BASECLASS::handle_close (handle, rm);
+ if (this->recycler ())
+ this->recycler ()->mark_as_closed (this->recycling_act ());
+
+ this->shutdown ();
+
+ return 0;
+}
+
+int
+TAO_Client_Connection_Handler::close (u_long flags)
+{
+ this->destroy ();
+
+ return 0;
}
#define TAO_SVC_TUPLE ACE_Svc_Tuple<TAO_Client_Connection_Handler>
diff --git a/TAO/tao/Connect.h b/TAO/tao/Connect.h
index 6fb6f8e0015..ab0cfac8707 100644
--- a/TAO/tao/Connect.h
+++ b/TAO/tao/Connect.h
@@ -58,8 +58,12 @@ public:
virtual int handle_input (ACE_HANDLE = ACE_INVALID_HANDLE);
// Called when a a response from a twoway invocation is available.
- virtual int handle_close (ACE_HANDLE, ACE_Reactor_Mask);
- // Perform appropriate closing of the connection.
+ virtual int handle_close (ACE_HANDLE = ACE_INVALID_HANDLE,
+ ACE_Reactor_Mask = ACE_Event_Handler::NULL_MASK);
+ // Perform appropriate closing.
+
+ virtual int close (u_long flags = 0);
+ // Object termination hook.
private:
typedef TAO_SVC_HANDLER BASECLASS;
@@ -154,9 +158,9 @@ protected:
// Reads a message from the <peer()>, dispatching and servicing it
// appropriately.
- virtual int handle_close (ACE_HANDLE,
- ACE_Reactor_Mask);
- // Perform appropriate closing of the connection.
+ virtual int handle_close (ACE_HANDLE = ACE_INVALID_HANDLE,
+ ACE_Reactor_Mask = ACE_Event_Handler::NULL_MASK);
+ // Perform appropriate closing.
TAO_ORB_Core *orb_core_;
// Cache the ORB Core to minimize
diff --git a/TAO/tao/Environment.cpp b/TAO/tao/Environment.cpp
index 8a4090584f2..43f60951209 100644
--- a/TAO/tao/Environment.cpp
+++ b/TAO/tao/Environment.cpp
@@ -144,40 +144,46 @@ void
CORBA::Environment::print_exception (const char *info,
FILE *) const
{
- const char *id = this->exception_->_id ();
-
- ACE_DEBUG ((LM_ERROR, "(%P|%t) EXCEPTION, %s\n", info));
-
- // @@ get rid of this logic, and rely on some member function on
- // Exception to say if it's user or system exception.
-
- if (this->exception_type () == CORBA::SYSTEM_EXCEPTION)
+ if (this->exception_)
{
- CORBA::SystemException *x2 =
- CORBA_SystemException::_narrow (this->exception_);
-
- // @@ there are a other few "user exceptions" in the CORBA
- // scope, they're not all standard/system exceptions ... really
- // need to either compare exhaustively against all those IDs
- // (yeech) or (preferably) to represent the exception type
- // directly in the exception value so it can be queried.
-
- ACE_DEBUG ((LM_ERROR,
- "(%P|%t) system exception, ID '%s'\n",
- id));
- ACE_DEBUG ((LM_ERROR,
- "(%P|%t) minor code = %x, completed = %s\n",
- x2->minor (),
- (x2->completion () == CORBA::COMPLETED_YES) ? "YES" :
- (x2->completion () == CORBA::COMPLETED_NO) ? "NO" :
- (x2->completion () == CORBA::COMPLETED_MAYBE) ? "MAYBE" :
- "garbage"));
+ const char *id = this->exception_->_id ();
+
+ ACE_DEBUG ((LM_ERROR, "(%P|%t) EXCEPTION, %s\n", info));
+
+ // @@ get rid of this logic, and rely on some member function on
+ // Exception to say if it's user or system exception.
+
+ if (this->exception_type () == CORBA::SYSTEM_EXCEPTION)
+ {
+ CORBA::SystemException *x2 =
+ CORBA_SystemException::_narrow (this->exception_);
+
+ // @@ there are a other few "user exceptions" in the CORBA
+ // scope, they're not all standard/system exceptions ... really
+ // need to either compare exhaustively against all those IDs
+ // (yeech) or (preferably) to represent the exception type
+ // directly in the exception value so it can be queried.
+
+ ACE_DEBUG ((LM_ERROR,
+ "(%P|%t) system exception, ID '%s'\n",
+ id));
+ ACE_DEBUG ((LM_ERROR,
+ "(%P|%t) minor code = %x, completed = %s\n",
+ x2->minor (),
+ (x2->completion () == CORBA::COMPLETED_YES) ? "YES" :
+ (x2->completion () == CORBA::COMPLETED_NO) ? "NO" :
+ (x2->completion () == CORBA::COMPLETED_MAYBE) ? "MAYBE" :
+ "garbage"));
+ }
+ else
+ // @@ we can use the exception's typecode to dump all the data
+ // held within it ...
+
+ ACE_DEBUG ((LM_ERROR,
+ "(%P|%t) user exception, ID '%s'\n",
+ id));
}
else
- // @@ we can use the exception's typecode to dump all the data
- // held within it ...
-
ACE_DEBUG ((LM_ERROR,
- "(%P|%t) user exception, ID '%s'\n",
- id));
+ "(%P|%t) no exception\n"));
}
diff --git a/TAO/tao/GIOP.cpp b/TAO/tao/GIOP.cpp
index f5041d7b3ce..863bc03d8da 100644
--- a/TAO/tao/GIOP.cpp
+++ b/TAO/tao/GIOP.cpp
@@ -287,7 +287,7 @@ TAO_GIOP::send_request (TAO_SVC_HANDLER *handler,
ACE_DEBUG ((LM_DEBUG,
"(%P|%t) closing conn %d after fault %p\n",
peer.get_handle (), "GIOP::send_request"));
- handler->close ();
+ handler->handle_close ();
return 0;
}
else if (n == 0)
@@ -297,7 +297,7 @@ TAO_GIOP::send_request (TAO_SVC_HANDLER *handler,
"(%P|%t) GIOP::send_request (): "
"EOF, closing conn %d\n",
peer.get_handle ()));
- handler->close ();
+ handler->handle_close ();
return 0;
}
iovcnt = 0;
@@ -313,7 +313,7 @@ TAO_GIOP::send_request (TAO_SVC_HANDLER *handler,
ACE_DEBUG ((LM_DEBUG,
"(%P|%t) closing conn %d after fault %p\n",
peer.get_handle (), "GIOP::send_request"));
- handler->close ();
+ handler->handle_close ();
return 0;
}
else if (n == 0)
@@ -323,7 +323,7 @@ TAO_GIOP::send_request (TAO_SVC_HANDLER *handler,
"(%P|%t) GIOP::send_request (): "
"EOF, closing conn %d\n",
peer.get_handle ()));
- handler->close ();
+ handler->handle_close ();
return 0;
}
iovcnt = 0;
@@ -374,7 +374,7 @@ TAO_GIOP::close_connection (TAO_Client_Connection_Handler *&handler,
handler->peer ().send (close_message, TAO_GIOP_HEADER_LEN);
ACE_HANDLE which = handler->peer ().get_handle ();
- handler->close ();
+ handler->handle_close ();
handler = 0;
ACE_DEBUG ((LM_DEBUG,
"(%P|%t) shut down socket %d\n", which));
@@ -406,7 +406,7 @@ TAO_GIOP::send_error (TAO_Client_Connection_Handler *&handler)
TAO_GIOP_HEADER_LEN);
handler->peer ().send_n (error_message, TAO_GIOP_HEADER_LEN);
ACE_HANDLE which = handler->peer ().get_handle ();
- handler->close ();
+ handler->handle_close ();
handler = 0;
if (TAO_orbdebug)
ACE_DEBUG ((LM_DEBUG, "(%P|%t) aborted socket %d\n", which));
diff --git a/TAO/tao/IIOP_Object.cpp b/TAO/tao/IIOP_Object.cpp
index 17f7a5d79be..b00ead1c4c3 100644
--- a/TAO/tao/IIOP_Object.cpp
+++ b/TAO/tao/IIOP_Object.cpp
@@ -338,6 +338,8 @@ IIOP_Object::IIOP_Object (const char *host,
refcount_ (1),
handler_ (0)
{
+ this->fwd_profile_lock_ptr_ =
+ TAO_ORB_Core_instance ()->client_factory ()->create_iiop_profile_lock ();
}
// Constructor. It will usually be used by the server side.
@@ -351,9 +353,8 @@ IIOP_Object::IIOP_Object (char *repository_id,
refcount_ (1),
handler_ (0)
{
- this->fwd_profile_lock_ptr_ = TAO_ORB_Core_instance ()
- ->client_factory ()
- ->create_iiop_profile_lock ();
+ this->fwd_profile_lock_ptr_ =
+ TAO_ORB_Core_instance ()->client_factory ()->create_iiop_profile_lock ();
}
// THREADING NOTE: Code below this point is of course thread-safe (at
diff --git a/TAO/tao/IIOP_Object.i b/TAO/tao/IIOP_Object.i
index ffa50e0f1f7..eed11414d1a 100644
--- a/TAO/tao/IIOP_Object.i
+++ b/TAO/tao/IIOP_Object.i
@@ -40,6 +40,10 @@ IIOP_Object::~IIOP_Object (void)
assert (this->refcount_ == 0);
delete this->fwd_profile_;
delete this->fwd_profile_lock_ptr_;
+
+ // Cleanup hint
+ if (this->handler_ != 0)
+ this->handler_->cleanup_hint ();
}
ACE_INLINE
@@ -52,9 +56,8 @@ IIOP_Object::IIOP_Object (char *repository_id)
first_locate_request_ (0),
handler_ (0)
{
- this->fwd_profile_lock_ptr_ = TAO_ORB_Core_instance ()
- ->client_factory ()
- ->create_iiop_profile_lock ();
+ this->fwd_profile_lock_ptr_ =
+ TAO_ORB_Core_instance ()->client_factory ()->create_iiop_profile_lock ();
}
ACE_INLINE
@@ -69,9 +72,8 @@ IIOP_Object::IIOP_Object (char *repository_id,
first_locate_request_ (0),
handler_ (0)
{
- this->fwd_profile_lock_ptr_ = TAO_ORB_Core_instance ()
- ->client_factory ()
- ->create_iiop_profile_lock ();
+ this->fwd_profile_lock_ptr_ =
+ TAO_ORB_Core_instance ()->client_factory ()->create_iiop_profile_lock ();
}
@@ -155,6 +157,7 @@ IIOP_Object::handler (void)
ACE_INLINE void
IIOP_Object::reset_handler (void)
{
+ this->handler_->cleanup_hint ();
this->handler_ = 0;
}
diff --git a/TAO/tao/Invocation.cpp b/TAO/tao/Invocation.cpp
index cab4335662f..f91113947b2 100644
--- a/TAO/tao/Invocation.cpp
+++ b/TAO/tao/Invocation.cpp
@@ -370,7 +370,7 @@ TAO_GIOP_Invocation::invoke (CORBA::Boolean is_roundtrip,
// Send Request, return on error or if we're done
if (this->data_->handler ()->send_request (this->out_stream_,
- is_roundtrip) == -1)
+ is_roundtrip) == -1)
{
// send_request () closed the connection; we just set the
// handler to 0 here.
@@ -423,7 +423,7 @@ TAO_GIOP_Invocation::close_connection (void)
// resets the flag of the first call locate request to true
}
- this->data_->handler ()->close ();
+ this->data_->handler ()->handle_close ();
this->data_->reset_handler ();
return TAO_GIOP_LOCATION_FORWARD;
}
@@ -1038,8 +1038,7 @@ TAO_GIOP_Locate_Request_Invocation::invoke (CORBA::Environment &env)
{
// Send Request, return on error or if we're done
- if (this->data_->handler ()->send_request (this->out_stream_,
- 1) == -1)
+ if (this->data_->handler ()->send_request (this->out_stream_, 1) == -1)
{
// send_request () closed the connection; we just set the
// handler to 0 here.
diff --git a/TAO/tao/ORB.cpp b/TAO/tao/ORB.cpp
index faa616f56ff..21468128b64 100644
--- a/TAO/tao/ORB.cpp
+++ b/TAO/tao/ORB.cpp
@@ -865,9 +865,9 @@ operator>>(TAO_InputCDR& cdr, TAO_opaque& x)
// ****************************************************************
-#define TAO_HASH_ADDR ACE_Hash_Addr<ACE_INET_Addr>
-#define TAO_RECYCLABLE_ADDR ACE_Recyclable<TAO_HASH_ADDR>
-#define TAO_HASH_RECYCLABLE_ADDR ACE_Hash_Recyclable<TAO_HASH_ADDR>
+#define CACHED_CONNECT_STRATEGY ACE_Cached_Connect_Strategy<Svc_Handler, ACE_SOCK_CONNECTOR, ACE_SYNCH_MUTEX>
+#define HASH_ADDR CACHED_CONNECT_STRATEGY::HASH_ADDRESS
+#define REFCOUNTED_HASH_RECYCLABLE_ADDR CACHED_CONNECT_STRATEGY::REFCOUNTED_HASH_RECYCLABLE_ADDRESS
#if defined (ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION)
@@ -877,18 +877,18 @@ template class TAO_Unbounded_Sequence<CORBA::Octet>;
template class ACE_Dynamic_Service<TAO_Server_Strategy_Factory>;
template class ACE_Dynamic_Service<TAO_Client_Strategy_Factory>;
-template class ACE_Cached_Connect_Strategy<TAO_Client_Connection_Handler, TAO_SOCK_CONNECTOR, TAO_Cached_Connector_Lock>;
+template class CACHED_CONNECT_STRATEGY;
template class ACE_Guard<TAO_Cached_Connector_Lock>;
template class ACE_Atomic_Op<ACE_SYNCH_MUTEX, u_int>;
-template class ACE_Hash_Map_Entry<TAO_HASH_RECYCLABLE_ADDR, TAO_Client_Connection_Handler *>;
-template class ACE_Hash_Map_Manager<TAO_HASH_RECYCLABLE_ADDR, TAO_Client_Connection_Handler *, ACE_SYNCH_MUTEX>;
-template class ACE_Hash_Map_Iterator_Base<TAO_HASH_RECYCLABLE_ADDR, TAO_Client_Connection_Handler *, ACE_SYNCH_MUTEX>;
-template class ACE_Hash_Map_Iterator<TAO_HASH_RECYCLABLE_ADDR, TAO_Client_Connection_Handler *, ACE_SYNCH_MUTEX>;
-template class ACE_Hash_Map_Reverse_Iterator<TAO_HASH_RECYCLABLE_ADDR, TAO_Client_Connection_Handler *, ACE_SYNCH_MUTEX>;
-template class ACE_Hash_Map_Manager<TAO_HASH_RECYCLABLE_ADDR, TAO_Client_Connection_Handler *, ACE_SYNCH_NULL_MUTEX>;
-template class ACE_Hash_Map_Iterator_Base<TAO_HASH_RECYCLABLE_ADDR, TAO_Client_Connection_Handler *, ACE_SYNCH_NULL_MUTEX>;
-template class ACE_Hash_Map_Iterator<TAO_HASH_RECYCLABLE_ADDR, TAO_Client_Connection_Handler *, ACE_SYNCH_NULL_MUTEX>;
-template class ACE_Hash_Map_Reverse_Iterator<TAO_HASH_RECYCLABLE_ADDR, TAO_Client_Connection_Handler *, ACE_SYNCH_NULL_MUTEX>;
+template class ACE_Hash_Map_Entry<REFCOUNTED_HASH_RECYCLABLE_ADDR, TAO_Client_Connection_Handler *>;
+template class ACE_Hash_Map_Manager<REFCOUNTED_HASH_RECYCLABLE_ADDR, TAO_Client_Connection_Handler *, ACE_SYNCH_MUTEX>;
+template class ACE_Hash_Map_Iterator_Base<REFCOUNTED_HASH_RECYCLABLE_ADDR, TAO_Client_Connection_Handler *, ACE_SYNCH_MUTEX>;
+template class ACE_Hash_Map_Iterator<REFCOUNTED_HASH_RECYCLABLE_ADDR, TAO_Client_Connection_Handler *, ACE_SYNCH_MUTEX>;
+template class ACE_Hash_Map_Reverse_Iterator<REFCOUNTED_HASH_RECYCLABLE_ADDR, TAO_Client_Connection_Handler *, ACE_SYNCH_MUTEX>;
+template class ACE_Hash_Map_Manager<REFCOUNTED_HASH_RECYCLABLE_ADDR, TAO_Client_Connection_Handler *, ACE_SYNCH_NULL_MUTEX>;
+template class ACE_Hash_Map_Iterator_Base<REFCOUNTED_HASH_RECYCLABLE_ADDR, TAO_Client_Connection_Handler *, ACE_SYNCH_NULL_MUTEX>;
+template class ACE_Hash_Map_Iterator<REFCOUNTED_HASH_RECYCLABLE_ADDR, TAO_Client_Connection_Handler *, ACE_SYNCH_NULL_MUTEX>;
+template class ACE_Hash_Map_Reverse_Iterator<REFCOUNTED_HASH_RECYCLABLE_ADDR, TAO_Client_Connection_Handler *, ACE_SYNCH_NULL_MUTEX>;
#elif defined (ACE_HAS_TEMPLATE_INSTANTIATION_PRAGMA)
@@ -898,17 +898,17 @@ template class ACE_Hash_Map_Reverse_Iterator<TAO_HASH_RECYCLABLE_ADDR, TAO_Clien
#pragma instantiate ACE_Dynamic_Service<TAO_Server_Strategy_Factory>
#pragma instantiate ACE_Dynamic_Service<TAO_Client_Strategy_Factory>
-#pragma instantiate ACE_Cached_Connect_Strategy<TAO_Client_Connection_Handler, TAO_SOCK_CONNECTOR, TAO_Cached_Connector_Lock>
+#pragma instantiate CACHED_CONNECT_STRATEGY
#pragma instantiate ACE_Guard<TAO_Cached_Connector_Lock>
#pragma instantiate ACE_Atomic_Op<ACE_SYNCH_MUTEX, u_int>
-//#pragma instantiate TAO_HASH_RECYCLABLE_ADDR
-#pragma instantiate ACE_Hash_Map_Entry<TAO_HASH_RECYCLABLE_ADDR, TAO_Client_Connection_Handler *>
-#pragma instantiate ACE_Hash_Map_Manager<TAO_HASH_RECYCLABLE_ADDR, TAO_Client_Connection_Handler *, ACE_SYNCH_MUTEX>
-#pragma instantiate ACE_Hash_Map_Iterator_Base<TAO_HASH_RECYCLABLE_ADDR, TAO_Client_Connection_Handler *, ACE_SYNCH_MUTEX>
-#pragma instantiate ACE_Hash_Map_Iterator<TAO_HASH_RECYCLABLE_ADDR, TAO_Client_Connection_Handler *, ACE_SYNCH_MUTEX>
-#pragma instantiate ACE_Hash_Map_Reverse_Iterator<TAO_HASH_RECYCLABLE_ADDR, TAO_Client_Connection_Handler *, ACE_SYNCH_MUTEX>
-#pragma instantiate ACE_Hash_Map_Manager<TAO_HASH_RECYCLABLE_ADDR, TAO_Client_Connection_Handler *, ACE_SYNCH_NULL_MUTEX>
-#pragma instantiate ACE_Hash_Map_Iterator_Base<TAO_HASH_RECYCLABLE_ADDR, TAO_Client_Connection_Handler *, ACE_SYNCH_NULL_MUTEX>
-#pragma instantiate ACE_Hash_Map_Iterator<TAO_HASH_RECYCLABLE_ADDR, TAO_Client_Connection_Handler *, ACE_SYNCH_NULL_MUTEX>
-#pragma instantiate ACE_Hash_Map_Reverse_Iterator<TAO_HASH_RECYCLABLE_ADDR, TAO_Client_Connection_Handler *, ACE_SYNCH_NULL_MUTEX>
+//#pragma instantiate REFCOUNTED_HASH_RECYCLABLE_ADDR
+#pragma instantiate ACE_Hash_Map_Entry<REFCOUNTED_HASH_RECYCLABLE_ADDR, TAO_Client_Connection_Handler *>
+#pragma instantiate ACE_Hash_Map_Manager<REFCOUNTED_HASH_RECYCLABLE_ADDR, TAO_Client_Connection_Handler *, ACE_SYNCH_MUTEX>
+#pragma instantiate ACE_Hash_Map_Iterator_Base<REFCOUNTED_HASH_RECYCLABLE_ADDR, TAO_Client_Connection_Handler *, ACE_SYNCH_MUTEX>
+#pragma instantiate ACE_Hash_Map_Iterator<REFCOUNTED_HASH_RECYCLABLE_ADDR, TAO_Client_Connection_Handler *, ACE_SYNCH_MUTEX>
+#pragma instantiate ACE_Hash_Map_Reverse_Iterator<REFCOUNTED_HASH_RECYCLABLE_ADDR, TAO_Client_Connection_Handler *, ACE_SYNCH_MUTEX>
+#pragma instantiate ACE_Hash_Map_Manager<REFCOUNTED_HASH_RECYCLABLE_ADDR, TAO_Client_Connection_Handler *, ACE_SYNCH_NULL_MUTEX>
+#pragma instantiate ACE_Hash_Map_Iterator_Base<REFCOUNTED_HASH_RECYCLABLE_ADDR, TAO_Client_Connection_Handler *, ACE_SYNCH_NULL_MUTEX>
+#pragma instantiate ACE_Hash_Map_Iterator<REFCOUNTED_HASH_RECYCLABLE_ADDR, TAO_Client_Connection_Handler *, ACE_SYNCH_NULL_MUTEX>
+#pragma instantiate ACE_Hash_Map_Reverse_Iterator<REFCOUNTED_HASH_RECYCLABLE_ADDR, TAO_Client_Connection_Handler *, ACE_SYNCH_NULL_MUTEX>
#endif /* ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION */