diff options
author | doccvs <doccvs@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 2000-10-13 21:01:51 +0000 |
---|---|---|
committer | doccvs <doccvs@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 2000-10-13 21:01:51 +0000 |
commit | 390bcb75694ef602cd923bfc2a39b31d209e68f1 (patch) | |
tree | c0a793c2719b9003a7d4940dc9b62d5b3afcc745 /ace | |
parent | 94a2900998612344bbbb5325d5700a50f6e13e54 (diff) | |
download | ATCD-390bcb75694ef602cd923bfc2a39b31d209e68f1.tar.gz |
ChangeLogTag: Fri Oct 13 13:57:40 2000 Priyanka Gontla <pgontla@ece.uci.edu>
Diffstat (limited to 'ace')
-rw-r--r-- | ace/Process_Manager.cpp | 43 | ||||
-rw-r--r-- | ace/Process_Manager.h | 4 | ||||
-rw-r--r-- | ace/Service_Config.cpp | 5 |
3 files changed, 47 insertions, 5 deletions
diff --git a/ace/Process_Manager.cpp b/ace/Process_Manager.cpp index afde854da19..cce3aa3f349 100644 --- a/ace/Process_Manager.cpp +++ b/ace/Process_Manager.cpp @@ -14,6 +14,20 @@ ACE_RCSID(ace, Process_Manager, "$Id$") +#if defined (ACE_HAS_SIG_C_FUNC) +extern "C" void +ACE_Process_Manager_cleanup (void *instance, void *arg) +{ + ACE_Process_Manager::cleanup (instance, arg); +} +#endif + +void +ACE_Process_Manager::cleanup (void *, void *) +{ + ACE_Process_Manager::close_singleton (); +} + class ACE_Managed_Process : public ACE_Process { // = TITLE @@ -114,6 +128,21 @@ ACE_Process_Manager::instance (void) ACE_Process_Manager, 0); ACE_Process_Manager::delete_instance_ = 1; + + // Register with the Object_Manager so that the wrapper to + // delete the proactor will be called when Object_Manager is + // being terminated. + +#if defined ACE_HAS_SIG_C_FUNC + ACE_Object_Manager::at_exit (ACE_Process_Manager::instance_, + ACE_Process_Manager_cleanup, + 0); +#else + ACE_Object_Manager::at_exit (ACE_Process_Manager::instance_, + ACE_Process_Manager::cleanup, + 0); +#endif /* ACE_HAS_SIG_C_FUNC */ + } } @@ -131,6 +160,20 @@ ACE_Process_Manager::instance (ACE_Process_Manager *tm) // We can't safely delete it since we don't know who created it! ACE_Process_Manager::delete_instance_ = 0; + // Register with the Object_Manager so that the wrapper to + // delete the proactor will be called when Object_Manager is + // being terminated. + +#if defined ACE_HAS_SIG_C_FUNC + ACE_Object_Manager::at_exit (ACE_Process_Manager::instance_, + ACE_Process_Manager_cleanup, + 0); +#else + ACE_Object_Manager::at_exit (ACE_Process_Manager::instance_, + ACE_Process_Manager::cleanup, + 0); +#endif /* ACE_HAS_SIG_C_FUNC */ + ACE_Process_Manager::instance_ = tm; return t; } diff --git a/ace/Process_Manager.h b/ace/Process_Manager.h index 2246f987fac..c5257f00911 100644 --- a/ace/Process_Manager.h +++ b/ace/Process_Manager.h @@ -174,6 +174,10 @@ public: static void close_singleton (void); // Delete the dynamically allocated singleton. + static void cleanup (void *instance, void *arg); + // Cleanup method, used by the <ACE_Object_Manager> to destroy the + // singleton. + // = Process creation methods. pid_t spawn (ACE_Process *proc, diff --git a/ace/Service_Config.cpp b/ace/Service_Config.cpp index bfb393e538d..df2979c9c50 100644 --- a/ace/Service_Config.cpp +++ b/ace/Service_Config.cpp @@ -11,7 +11,6 @@ #include "ace/Auto_Ptr.h" #include "ace/Reactor.h" #include "ace/Thread_Manager.h" -#include "ace/Process_Manager.h" #include "ace/Service_Config.h" @@ -822,10 +821,6 @@ ACE_Service_Config::close_singletons (void) { ACE_TRACE ("ACE_Service_Config::close_singletons"); - ACE_Process_Manager::close_singleton (); - // The Process Manager may be registered with the Reactor singleton - // so we need to close it down first. - ACE_Reactor::close_singleton (); #if ! defined (ACE_THREAD_MANAGER_LACKS_STATICS) |