summaryrefslogtreecommitdiff
path: root/ace/Service_Config.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'ace/Service_Config.cpp')
-rw-r--r--ace/Service_Config.cpp764
1 files changed, 0 insertions, 764 deletions
diff --git a/ace/Service_Config.cpp b/ace/Service_Config.cpp
deleted file mode 100644
index 82eb7a5a137..00000000000
--- a/ace/Service_Config.cpp
+++ /dev/null
@@ -1,764 +0,0 @@
-// $Id$
-
-#define ACE_BUILD_DLL
-#include "ace/Svc_Conf.h"
-#include "ace/Get_Opt.h"
-#include "ace/ARGV.h"
-#include "ace/Malloc.h"
-#include "ace/Service_Manager.h"
-#include "ace/Service_Repository.h"
-#include "ace/Service_Types.h"
-#include "ace/Containers.h"
-#include "ace/Auto_Ptr.h"
-#if !defined (ACE_HAS_WINCE)
-# include "ace/Proactor.h"
-#endif /* !ACE_HAS_WINCE */
-#include "ace/Reactor.h"
-#include "ace/Thread_Manager.h"
-
-#include "ace/Service_Config.h"
-
-#if !defined (__ACE_INLINE__)
-#include "ace/Service_Config.i"
-#endif /* __ACE_INLINE__ */
-
-ACE_RCSID(ace, Service_Config, "$Id$")
-
-ACE_ALLOC_HOOK_DEFINE(ACE_Service_Config)
-
-void
-ACE_Service_Config::dump (void) const
-{
- ACE_TRACE ("ACE_Service_Config::dump");
-}
-
-// All the factory functions that allocate default statically linked
-// services should be placed below.
-
-// Allocate a Service Manager.
-
-ACE_FACTORY_DEFINE (ACE, ACE_Service_Manager)
-
-// ----------------------------------------
-
-// Set the signal handler to point to the handle_signal() function.
-ACE_Sig_Adapter *ACE_Service_Config::signal_handler_ = 0;
-
-// Trigger a reconfiguration.
-sig_atomic_t ACE_Service_Config::reconfig_occurred_ = 0;
-
- // = Set by command-line options.
-char ACE_Service_Config::be_a_daemon_ = 0;
-char ACE_Service_Config::no_static_svcs_ = 1;
-
-// Number of the signal used to trigger reconfiguration.
-int ACE_Service_Config::signum_ = SIGHUP;
-
-// Name of file used to store messages.
-LPCTSTR ACE_Service_Config::logger_key_ = ACE_DEFAULT_LOGGER_KEY;
-
-// Name of the service configuration file.
-const ASYS_TCHAR *ACE_Service_Config::service_config_file_ = ASYS_TEXT (ACE_DEFAULT_SVC_CONF);
-
-// The ACE_Service_Manager static service object is now defined
-// by the ACE_Object_Manager, in Object_Manager.cpp.
-
-// List of statically configured services.
-
-ACE_STATIC_SVCS *ACE_Service_Config::static_svcs_ = 0;
-ACE_SVC_QUEUE *ACE_Service_Config::svc_queue_ = 0;
-
-ACE_STATIC_SVCS *
-ACE_Service_Config::static_svcs (void)
-{
- if (ACE_Service_Config::static_svcs_ == 0)
- ACE_NEW_RETURN (ACE_Service_Config::static_svcs_, ACE_STATIC_SVCS, 0);
-
- return ACE_Service_Config::static_svcs_;
-}
-
-ACE_Allocator *
-ACE_Service_Config::alloc (void)
-{
- ACE_TRACE ("ACE_Service_Config::allocator");
- return ACE_Allocator::instance ();
-}
-
-ACE_Allocator *
-ACE_Service_Config::alloc (ACE_Allocator *r)
-{
- ACE_TRACE ("ACE_Service_Config::allocator");
- return ACE_Allocator::instance (r);
-}
-
-ACE_Reactor *
-ACE_Service_Config::reactor (void)
-{
- ACE_TRACE ("ACE_Service_Config::reactor");
- return ACE_Reactor::instance ();
-}
-
-ACE_Reactor *
-ACE_Service_Config::reactor (ACE_Reactor *r)
-{
- ACE_TRACE ("ACE_Service_Config::reactor");
- return ACE_Reactor::instance (r);
-}
-
-ACE_Service_Repository *
-ACE_Service_Config::svc_rep ()
-{
- ACE_TRACE ("ACE_Service_Config::svc_rep");
- return ACE_Service_Repository::instance ();
-}
-
-ACE_Service_Repository *
-ACE_Service_Config::svc_rep (ACE_Service_Repository *s)
-{
- ACE_TRACE ("ACE_Service_Config::svc_rep");
- return ACE_Service_Repository::instance (s);
-}
-
-ACE_Thread_Manager *
-ACE_Service_Config::thr_mgr (void)
-{
- ACE_TRACE ("ACE_Service_Config::thr_mgr");
- return ACE_Thread_Manager::instance ();
-}
-
-ACE_Thread_Manager *
-ACE_Service_Config::thr_mgr (ACE_Thread_Manager *tm)
-{
- ACE_TRACE ("ACE_Service_Config::thr_mgr");
- return ACE_Thread_Manager::instance (tm);
-}
-
-// Totally remove <svc_name> from the daemon by removing it from the
-// ACE_Reactor, and unlinking it if necessary.
-
-int
-ACE_Service_Config::remove (const ASYS_TCHAR svc_name[])
-{
- ACE_TRACE ("ACE_Service_Config::remove");
- return ACE_Service_Repository::instance ()->remove (svc_name);
-}
-
-// Suspend SVC_NAME. Note that this will not unlink the service from
-// the daemon if it was dynamically linked, it will mark it as being
-// suspended in the Service Repository and call the suspend() member
-// function on the appropriate ACE_Service_Object. A service can be
-// resumed later on by calling the RESUME() member function...
-
-int
-ACE_Service_Config::suspend (const ASYS_TCHAR svc_name[])
-{
- ACE_TRACE ("ACE_Service_Config::suspend");
- return ACE_Service_Repository::instance ()->suspend (svc_name);
-}
-
-// Resume a SVC_NAME that was previously suspended or has not yet
-// been resumed (e.g., a static service).
-
-int
-ACE_Service_Config::resume (const ASYS_TCHAR svc_name[])
-{
- ACE_TRACE ("ACE_Service_Config::resume");
- return ACE_Service_Repository::instance ()->resume (svc_name);
-}
-
-// Initialize the Service Repository. Note that this *must* be
-// performed in the constructor (rather than open()) since otherwise
-// the repository will not be properly initialized to allow static
-// configuration of services...
-
-ACE_Service_Config::ACE_Service_Config (int ignore_static_svcs,
- size_t size,
- int signum)
-{
- ACE_TRACE ("ACE_Service_Config::ACE_Service_Config");
- ACE_Service_Config::no_static_svcs_ = (char) ignore_static_svcs;
- ACE_Service_Config::signum_ = signum;
-
- // Initialize the Service Repository.
- ACE_Service_Repository::instance (size);
-
- // Initialize the ACE_Reactor (the ACE_Reactor should be the same
- // size as the ACE_Service_Repository).
- ACE_Reactor::instance ();
-}
-
-// Handle the command-line options intended for the
-// ACE_Service_Config.
-
-void
-ACE_Service_Config::parse_args (int argc, ASYS_TCHAR *argv[])
-{
- ACE_TRACE ("ACE_Service_Config::parse_args");
- ACE_Get_Opt getopt (argc,
- argv,
- ASYS_TEXT ("bdf:k:nys:S:"),
- 1); // Start at argv[1].
-
- for (int c; (c = getopt ()) != -1; )
- switch (c)
- {
- case 'b':
- ACE_Service_Config::be_a_daemon_ = 1;
- break;
- case 'd':
- ACE::debug (1);
- break;
- case 'f':
- ACE_Service_Config::service_config_file_ = getopt.optarg;
- break;
- case 'k':
- ACE_Service_Config::logger_key_ = ACE_WIDE_STRING (getopt.optarg);
- break;
- case 'n':
- ACE_Service_Config::no_static_svcs_ = 1;
- break;
- case 'y':
- ACE_Service_Config::no_static_svcs_ = 0;
- break;
- case 's':
- {
- // There's no point in dealing with this on NT since it
- // doesn't really support signals very well...
-#if !defined (ACE_LACKS_UNIX_SIGNALS)
- ACE_Service_Config::signum_ = ACE_OS::atoi (getopt.optarg);
-
- if (ACE_Reactor::instance ()->register_handler
- (ACE_Service_Config::signum_,
- ACE_Service_Config::signal_handler_) == -1)
- ACE_ERROR ((LM_ERROR,
- ASYS_TEXT ("cannot obtain signal handler\n")));
-#endif /* ACE_LACKS_UNIX_SIGNALS */
- break;
- }
- case 'S':
- if (ACE_Service_Config::svc_queue_ == 0)
- ACE_Service_Config::svc_queue_ = new ACE_SVC_QUEUE;
-
- if (ACE_Service_Config::svc_queue_->enqueue_head
- (ACE_CString (getopt.optarg)) == -1)
- ACE_ERROR ((LM_ERROR,
- ASYS_TEXT ("%p\n"),
- "enqueue_head"));
- break;
- default:
- ACE_ERROR ((LM_ERROR,
- ASYS_TEXT ("%c is not a ACE_Service_Config option\n"),
- c));
- break;
- }
-}
-
-// Initialize and activate a statically linked service.
-
-int
-ACE_Service_Config::initialize (const ASYS_TCHAR svc_name[],
- ASYS_TCHAR *parameters)
-{
- ACE_TRACE ("ACE_Service_Config::initialize");
- ACE_ARGV args (parameters);
- ACE_Service_Type *srp = 0;
-
- if (ACE::debug ())
- ACE_DEBUG ((LM_DEBUG,
- ASYS_TEXT ("opening static service %s\n"),
- svc_name));
-
- if (ACE_Service_Repository::instance ()->find (svc_name,
- (const ACE_Service_Type **) &srp) == -1)
- ACE_ERROR_RETURN ((LM_ERROR,
- ASYS_TEXT ("%s not found\n"),
- svc_name),
- -1);
-
- else if (srp->type ()->init (args.argc (),
- args.argv ()) == -1)
- ACE_ERROR_RETURN ((LM_ERROR,
- ASYS_TEXT ("static initialization failed, %p\n"),
- svc_name),
- -1);
- else
- {
- srp->active (1);
- return 0;
- }
-}
-
-// Dynamically link the shared object file and retrieve a pointer to
-// the designated shared object in this file.
-
-int
-ACE_Service_Config::initialize (const ACE_Service_Type *sr,
- ASYS_TCHAR parameters[])
-{
- ACE_TRACE ("ACE_Service_Config::initialize");
- ACE_ARGV args (parameters);
-
- if (ACE::debug ())
- ACE_DEBUG ((LM_DEBUG,
- ASYS_TEXT ("opening dynamic service %s\n"),
- sr->name ()));
-
- if (ACE_Service_Repository::instance ()->insert (sr) == -1)
- ACE_ERROR_RETURN ((LM_ERROR,
- ASYS_TEXT ("insertion failed, %p\n"),
- sr->name ()),
- -1);
- else if (sr->type ()->init (args.argc (),
- args.argv ()) == -1)
- ACE_ERROR_RETURN ((LM_ERROR,
- ASYS_TEXT ("dynamic initialization failed for %s\n"),
- sr->name ()),
- -1);
- else
- return 0;
-}
-
-int
-ACE_Service_Config::process_directives_i (void)
-{
- // AC 970827 Skip the heap check because yacc allocates a buffer
- // here which will be reported as a memory leak for some reason.
- ACE_NO_HEAP_CHECK
-
- // The fact that these are all global variables means that we really
- // can't be doing this processing in multiple threads
- // simultaneously...
- ace_yyerrno = 0;
- ace_yylineno = 1;
-
- // Use an auto_ptr to make sure that we release this memory
- // regardless of how we exit...
- ACE_NEW_RETURN (ace_obstack,
- ACE_Obstack,
- -1);
-
- auto_ptr<ACE_Obstack> holder (ace_obstack);
-
- ace_yyparse ();
-
- if (ace_yyerrno > 0)
- {
- errno = EINVAL; // This is a hack, better errors should be provided...
- return ace_yyerrno;
- }
- else
- return 0;
-}
-
-int
-ACE_Service_Config::process_directive (const ASYS_TCHAR directive[])
-{
- ACE_TRACE ("ACE_Service_Config::process_directives");
- ACE_UNUSED_ARG (directive);
-
- // Place <directive> into a buffer that the YY_INPUT macro knows how
- // to process correctly.
- ace_yydirective = directive;
-
- int result = ACE_Service_Config::process_directives_i ();
-
- // Reset to 0 to avoid confusing the YY_INPUT macro on subsequent
- // requests.
- ace_yydirective = 0;
- return result;
-}
-
-// Process service configuration requests as indicated in the
-// <service_config_file>.
-
-int
-ACE_Service_Config::process_directives (void)
-{
- ACE_TRACE ("ACE_Service_Config::process_directives");
-
- FILE *fp = ACE_OS::fopen (ACE_Service_Config::service_config_file_,
- ASYS_TEXT ("r"));
-
- if (fp == 0)
- {
- errno = ENOENT;
- return -1; // No service configuration file
- }
- else
- {
- ace_yyrestart (fp);
- return ACE_Service_Config::process_directives_i ();
- }
-}
-
-int
-ACE_Service_Config::process_commandline_directives (void)
-{
- int result = 0;
-
- if (ACE_Service_Config::svc_queue_ != 0)
- {
- ACE_CString *sptr = 0;
- ACE_SVC_QUEUE &queue = *ACE_Service_Config::svc_queue_;
-
- for (ACE_SVC_QUEUE_ITERATOR iter (queue);
- iter.next (sptr) != 0;
- iter.advance ())
- {
- // Process just a single directive.
- if (ACE_Service_Config::process_directive (ASYS_WIDE_STRING (sptr->fast_rep ())) == -1)
- {
- ACE_ERROR ((LM_ERROR,
- ASYS_TEXT ("%p\n"),
- ASYS_TEXT ("process_directive")));
- result = -1;
- }
- }
-
- delete ACE_Service_Config::svc_queue_;
- ACE_Service_Config::svc_queue_ = 0;
- }
-
- return result;
-}
-
-// Add the default statically-linked services to the Service
-// Repository.
-
-int
-ACE_Service_Config::load_static_svcs (void)
-{
- ACE_TRACE ("ACE_Service_Config::load_static_svcs");
-
- ACE_Static_Svc_Descriptor **ssdp = 0;
- ACE_STATIC_SVCS &svcs = *ACE_Service_Config::static_svcs ();
-
- for (ACE_STATIC_SVCS_ITERATOR iter (svcs);
- iter.next (ssdp) != 0;
- iter.advance ())
- {
- ACE_Static_Svc_Descriptor *ssd = *ssdp;
-
- ACE_Service_Object_Exterminator gobbler;
- void *sym = (*ssd->alloc_)(&gobbler);
-
- ACE_Service_Type_Impl *stp =
- ace_create_service_type (ssd->name_,
- ssd->type_,
- sym,
- ssd->flags_,
- gobbler);
- if (stp == 0)
- continue;
-
- ACE_Service_Type *sr;
-
- ACE_NEW_RETURN (sr, ACE_Service_Type (ssd->name_,
- stp,
- 0,
- ssd->active_), -1);
-
- if (ACE_Service_Repository::instance ()->insert (sr) == -1)
- return -1;
- }
- return 0;
-}
-
-// Performs an open without parsing command-line arguments.
-
-int
-ACE_Service_Config::open (const ASYS_TCHAR program_name[],
- LPCTSTR logger_key)
-{
- int retval = 0;
- ACE_TRACE ("ACE_Service_Config::open");
-
- // Clear the LM_DEBUG bit from log messages if appropriate
- if (ACE::debug ())
- ACE_Log_Msg::disable_debug_messages ();
- // Become a daemon before doing anything else.
- if (ACE_Service_Config::be_a_daemon_)
- ACE_Service_Config::start_daemon ();
-
- u_long flags = ACE_LOG_MSG->flags ();
-
- if (flags == 0)
- // Only use STDERR if the caller hasn't already set the flags.
- flags = (u_long) ACE_Log_Msg::STDERR;
-
- LPCTSTR key = logger_key;
-
- if (key == 0 || ACE_OS::strcmp (key, ACE_DEFAULT_LOGGER_KEY) == 0)
- // Only use the static <logger_key_> if the caller doesn't
- // override it in the parameter list or if the key supplied is
- // equal to the default static logger key.
- key = ACE_Service_Config::logger_key_;
-
- if (ACE_LOG_MSG->open (program_name,
- flags,
- key) == -1)
- retval = -1;
- else
- {
- if (ACE::debug ())
- ACE_DEBUG ((LM_STARTUP,
- ASYS_TEXT ("starting up daemon %n\n")));
-
- // Initialize the Service Repository (this will still work if
- // user forgets to define an object of type ACE_Service_Config).
- ACE_Service_Repository::instance (ACE_Service_Config::MAX_SERVICES);
-
- // Initialize the ACE_Reactor (the ACE_Reactor should be the
- // same size as the ACE_Service_Repository).
- ACE_Reactor::instance ();
-
- // See if we need to load the static services.
- if (ACE_Service_Config::no_static_svcs_ == 0
- && ACE_Service_Config::load_static_svcs () == -1)
- retval = -1;
- else
- {
- int result = ACE_Service_Config::process_commandline_directives ();
- retval = ACE_Service_Config::process_directives () + result;
- }
-
- // There's no point in dealing with this on NT since it doesn't really
- // support signals very well...
-#if !defined (ACE_LACKS_UNIX_SIGNALS)
- // This really ought to be a Singleton I suspect...
-
- if (ACE_Reactor::instance ()->register_handler
- (ACE_Service_Config::signum_,
- ACE_Service_Config::signal_handler_) == -1)
- ACE_ERROR ((LM_ERROR,
- ASYS_TEXT ("can't register signal handler\n")));
-#endif /* ACE_LACKS_UNIX_SIGNALS */
- }
-
- if (ACE::debug ())
- ACE_Log_Msg::enable_debug_messages ();
-
- return retval;
-}
-
-ACE_Service_Config::ACE_Service_Config (const ASYS_TCHAR program_name[],
- LPCTSTR logger_key)
-{
- ACE_TRACE ("ACE_Service_Config::ACE_Service_Config");
-
- if (this->open (program_name, logger_key) == -1
- && errno != ENOENT)
- // Only print out an error if it wasn't the svc.conf file that was
- // missing.
- ACE_ERROR ((LM_ERROR,
- ASYS_TEXT ("%p\n"), program_name));
-}
-
-// Signal handling API to trigger dynamic reconfiguration.
-
-void
-ACE_Service_Config::handle_signal (int sig,
- siginfo_t *,
- ucontext_t *)
-{
- ACE_TRACE ("ACE_Service_Config::handle_signal");
-
- if (ACE_Service_Config::signum_ != sig)
- ACE_ERROR ((LM_ERROR,
- ASYS_TEXT ("error, signal %S does match %S\n"),
- sig,
- ACE_Service_Config::signum_));
- if (ACE::debug ())
- ACE_DEBUG ((LM_DEBUG,
- ASYS_TEXT ("signal %S occurred\n"),
- sig));
- ACE_Service_Config::reconfig_occurred_ = 1;
-}
-
-// Trigger the reconfiguration process.
-
-void
-ACE_Service_Config::reconfigure (void)
-{
- ACE_TRACE ("ACE_Service_Config::reconfigure");
-
- ACE_Service_Config::reconfig_occurred_ = 0;
-
- if (ACE::debug ())
- {
- time_t t = ACE_OS::time (0);
- if (ACE::debug ())
- ACE_DEBUG ((LM_DEBUG,
- ASYS_TEXT ("beginning reconfiguration at %s"),
- ACE_OS::ctime (&t)));
- }
- if (ACE_Service_Config::process_directives () == -1)
- ACE_ERROR ((LM_ERROR,
- ASYS_TEXT ("%p\n"),
- ASYS_TEXT ("process_directives")));
-}
-
-// Run the event loop until the <ACE_Reactor::handle_events>
-// method returns -1 or the <end_reactor_event_loop> method
-// is invoked.
-
-int
-ACE_Service_Config::run_reactor_event_loop (void)
-{
- ACE_TRACE ("ACE_Service_Config::run_reactor_event_loop");
-
- return ACE_Reactor::run_event_loop ();
-}
-
-// Run the event loop until the <ACE_Reactor::handle_events>
-// method returns -1, the <end_reactor_event_loop> method
-// is invoked, or the <ACE_Time_Value> expires.
-
-int
-ACE_Service_Config::run_reactor_event_loop (ACE_Time_Value &tv)
-{
- ACE_TRACE ("ACE_Service_Config::run_reactor_event_loop");
-
- return ACE_Reactor::run_event_loop (tv);
-}
-
-/* static */
-int
-ACE_Service_Config::end_reactor_event_loop (void)
-{
- ACE_TRACE ("ACE_Service_Config::end_reactor_event_loop");
- return ACE_Reactor::end_event_loop ();
-}
-
-/* static */
-int
-ACE_Service_Config::reactor_event_loop_done (void)
-{
- ACE_TRACE ("ACE_Service_Config::reactor_event_loop_done");
- return ACE_Reactor::event_loop_done ();
-}
-
-// Tidy up and perform last rites on a terminating ACE_Service_Config.
-int
-ACE_Service_Config::close (void)
-{
- ACE_TRACE ("ACE_Service_Config::close");
-
- // ACE_Service_Config must be deleted before the Singletons are
- // closed so that an object's fini() method may reference a
- // valid ACE_Reactor.
- ACE_Service_Config::close_svcs ();
-
- // The Singletons can be used independently of the services.
- // Therefore, this call must go out here.
- ACE_Service_Config::close_singletons ();
-
- // Delete the dynamically allocated static_svcs instance.
- delete ACE_Service_Config::static_svcs_;
- ACE_Service_Config::static_svcs_ = 0;
-
- return 0;
-}
-
-int
-ACE_Service_Config::close_svcs (void)
-{
- ACE_TRACE ("ACE_Service_Config::close_svcs");
-
- ACE_Service_Repository::close_singleton ();
-
- return 0;
-}
-
-int
-ACE_Service_Config::fini_svcs (void)
-{
- ACE_TRACE ("ACE_Service_Config::fini_svcs");
-
- // Clear the LM_DEBUG bit from log messages if appropriate
- if (ACE::debug ())
- ACE_Log_Msg::disable_debug_messages ();
-
- int result = ACE_Service_Repository::instance ()->fini ();
-
- if (ACE::debug ())
- ACE_Log_Msg::enable_debug_messages ();
-
- return result;
-}
-
-int
-ACE_Service_Config::close_singletons (void)
-{
- ACE_TRACE ("ACE_Service_Config::close_singletons");
-
- ACE_Reactor::close_singleton ();
-#if !defined (ACE_HAS_WINCE)
- ACE_Proactor::close_singleton ();
-#endif /* !ACE_HAS_WINCE */
- ACE_Thread_Manager::close_singleton ();
-
- return 0;
-}
-
-// Perform user-specified close activities and remove dynamic memory.
-
-
-ACE_Service_Config::~ACE_Service_Config (void)
-{
- ACE_TRACE ("ACE_Service_Config::~ACE_Service_Config");
-}
-
-// ************************************************************
-
-/* static */
-int
-ACE_Service_Config::reconfig_occurred (void)
-{
- ACE_TRACE ("ACE_Service_Config::reconfig_occurred");
- return ACE_Service_Config::reconfig_occurred_ != 0;
-}
-
-void
-ACE_Service_Config::reconfig_occurred (int config_occurred)
-{
- ACE_TRACE ("ACE_Service_Config::reconfig_occurred");
- ACE_Service_Config::reconfig_occurred_ = config_occurred;
-}
-
-// Become a daemon (i.e., run as a "background" process).
-
-int
-ACE_Service_Config::start_daemon (void)
-{
- ACE_TRACE ("ACE_Service_Config::start_daemon");
- return ACE::daemonize ();
-}
-
-#if defined (ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION)
-template class ACE_Node<ACE_Static_Svc_Descriptor *>;
-template class ACE_Unbounded_Set<ACE_Static_Svc_Descriptor *>;
-template class ACE_Unbounded_Set_Iterator<ACE_Static_Svc_Descriptor *>;
-template class ACE_Node<ACE_CString>;
-template class ACE_Unbounded_Queue<ACE_CString>;
-template class ACE_Unbounded_Queue_Iterator<ACE_CString>;
-template class ACE_Unbounded_Set<ACE_CString>;
-template class ACE_Unbounded_Set_Iterator<ACE_CString>;
-template class ACE_Malloc<ACE_LOCAL_MEMORY_POOL, ACE_Null_Mutex>;
-template class ACE_Allocator_Adapter<ACE_Malloc<ACE_LOCAL_MEMORY_POOL, ACE_Null_Mutex> >;
-template class auto_ptr<ACE_Obstack>;
-template class ACE_Auto_Basic_Ptr<ACE_Obstack>;
-#elif defined (ACE_HAS_TEMPLATE_INSTANTIATION_PRAGMA)
-#pragma instantiate ACE_Node<ACE_Static_Svc_Descriptor *>
-#pragma instantiate ACE_Unbounded_Set<ACE_Static_Svc_Descriptor *>
-#pragma instantiate ACE_Unbounded_Set_Iterator<ACE_Static_Svc_Descriptor *>
-#pragma instantiate ACE_Node<ACE_CString>
-#pragma instantiate ACE_Unbounded_Queue<ACE_CString>
-#pragma instantiate ACE_Unbounded_Queue_Iterator<ACE_CString>
-#pragma instantiate ACE_Unbounded_Set<ACE_CString>
-#pragma instantiate ACE_Unbounded_Set_Iterator<ACE_CString>
-#pragma instantiate ACE_Malloc<ACE_LOCAL_MEMORY_POOL, ACE_Null_Mutex>
-#pragma instantiate ACE_Allocator_Adapter<ACE_Malloc<ACE_LOCAL_MEMORY_POOL, ACE_Null_Mutex> >
-#pragma instantiate auto_ptr<ACE_Obstack>
-#pragma instantiate ACE_Auto_Basic_Ptr<ACE_Obstack>
-#endif /* ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION */