summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordoccvs <doccvs@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>2000-09-21 18:58:05 +0000
committerdoccvs <doccvs@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>2000-09-21 18:58:05 +0000
commit278b06e0f011e1cabc1824e250581fe5f3bcbfea (patch)
tree2f50440c5f969db50407b7b17743771d2a999ec6
parent58f6944f5b3610962e95ae72d8018554df272685 (diff)
downloadATCD-278b06e0f011e1cabc1824e250581fe5f3bcbfea.tar.gz
ChangeLogTag: Thu Sep 21 11:54:58 2000 Priyanka Gontla <pgontla@ece.uci.edu>
-rw-r--r--ChangeLog13
-rw-r--r--ChangeLogs/ChangeLog-02a13
-rw-r--r--ChangeLogs/ChangeLog-03a13
-rw-r--r--ace/Proactor.cpp46
-rw-r--r--ace/Proactor.h4
-rw-r--r--ace/Service_Config.cpp7
6 files changed, 89 insertions, 7 deletions
diff --git a/ChangeLog b/ChangeLog
index 6b44f607eaf..e4abe6ac681 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,16 @@
+Thu Sep 21 11:54:58 2000 Priyanka Gontla <pgontla@ece.uci.edu>
+
+ * ace/Service_Config.h :
+ * ace/Service_Config.cpp :
+
+ * ace/Proactor.cpp:
+ * ace/Proactor.h (ACE_Proactor):
+
+ Removed dependency of Service_Config on Proactor by registering
+ the Proactor singleton with the Object_Manager when it is
+ instantiated. This way we neednot call
+ ACE_Proactor::close_singleton () in Service_Config implementation.
+
Wed Sep 20 17:25:37 2000 Steve Huston <shuston@riverace.com>
* performance-tests/UDP/udp_test.cpp: Use ACE_High_Res_Timer instead
diff --git a/ChangeLogs/ChangeLog-02a b/ChangeLogs/ChangeLog-02a
index 6b44f607eaf..e4abe6ac681 100644
--- a/ChangeLogs/ChangeLog-02a
+++ b/ChangeLogs/ChangeLog-02a
@@ -1,3 +1,16 @@
+Thu Sep 21 11:54:58 2000 Priyanka Gontla <pgontla@ece.uci.edu>
+
+ * ace/Service_Config.h :
+ * ace/Service_Config.cpp :
+
+ * ace/Proactor.cpp:
+ * ace/Proactor.h (ACE_Proactor):
+
+ Removed dependency of Service_Config on Proactor by registering
+ the Proactor singleton with the Object_Manager when it is
+ instantiated. This way we neednot call
+ ACE_Proactor::close_singleton () in Service_Config implementation.
+
Wed Sep 20 17:25:37 2000 Steve Huston <shuston@riverace.com>
* performance-tests/UDP/udp_test.cpp: Use ACE_High_Res_Timer instead
diff --git a/ChangeLogs/ChangeLog-03a b/ChangeLogs/ChangeLog-03a
index 6b44f607eaf..e4abe6ac681 100644
--- a/ChangeLogs/ChangeLog-03a
+++ b/ChangeLogs/ChangeLog-03a
@@ -1,3 +1,16 @@
+Thu Sep 21 11:54:58 2000 Priyanka Gontla <pgontla@ece.uci.edu>
+
+ * ace/Service_Config.h :
+ * ace/Service_Config.cpp :
+
+ * ace/Proactor.cpp:
+ * ace/Proactor.h (ACE_Proactor):
+
+ Removed dependency of Service_Config on Proactor by registering
+ the Proactor singleton with the Object_Manager when it is
+ instantiated. This way we neednot call
+ ACE_Proactor::close_singleton () in Service_Config implementation.
+
Wed Sep 20 17:25:37 2000 Steve Huston <shuston@riverace.com>
* performance-tests/UDP/udp_test.cpp: Use ACE_High_Res_Timer instead
diff --git a/ace/Proactor.cpp b/ace/Proactor.cpp
index d5b5b2642c1..fee8c32030b 100644
--- a/ace/Proactor.cpp
+++ b/ace/Proactor.cpp
@@ -19,6 +19,20 @@ ACE_RCSID(ace, Proactor, "$Id$")
# include "ace/WIN32_Proactor.h"
#endif /* ACE_HAS_AIO_CALLS */
+#if defined (ACE_HAS_SIG_C_FUNC)
+extern "C" void
+ACE_Proactor_Cleanup (void *instance, void *arg)
+{
+ ACE_Proactor::cleanup (instance, arg);
+}
+#endif
+
+void
+ACE_Proactor::cleanup (void *, void *)
+{
+ ACE_Proactor::close_singleton ();
+}
+
// Process-wide ACE_Proactor.
ACE_Proactor *ACE_Proactor::proactor_ = 0;
@@ -299,7 +313,23 @@ ACE_Proactor::instance (size_t /* threads */)
ACE_NEW_RETURN (ACE_Proactor::proactor_,
ACE_Proactor,
0);
+
ACE_Proactor::delete_proactor_ = 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_Proactor::proactor_,
+ ACE_Proactor_cleanup,
+ 0);
+#else
+ ACE_Object_Manager::at_exit (ACE_Proactor::proactor_,
+ ACE_Proactor::cleanup,
+ 0);
+#endif /* ACE_HAS_SIG_C_FUNC */
+
}
}
return ACE_Proactor::proactor_;
@@ -318,6 +348,20 @@ ACE_Proactor::instance (ACE_Proactor *r)
// We can't safely delete it since we don't know who created it!
ACE_Proactor::delete_proactor_ = 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_Proactor::proactor_,
+ ACE_Proactor_cleanup,
+ 0);
+#else
+ ACE_Object_Manager::at_exit (ACE_Proactor::proactor_,
+ ACE_Proactor::cleanup,
+ 0);
+#endif /* ACE_HAS_SIG_C_FUNC */
+
ACE_Proactor::proactor_ = r;
return t;
}
@@ -326,7 +370,7 @@ void
ACE_Proactor::close_singleton (void)
{
ACE_TRACE ("ACE_Proactor::close_singleton");
-
+
ACE_MT (ACE_GUARD (ACE_Recursive_Thread_Mutex, ace_mon,
*ACE_Static_Object_Lock::instance ()));
diff --git a/ace/Proactor.h b/ace/Proactor.h
index f6ace6439fb..05f1cb72a03 100644
--- a/ace/Proactor.h
+++ b/ace/Proactor.h
@@ -165,6 +165,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.
+
// = Proactor event loop management methods.
static int run_event_loop (void);
diff --git a/ace/Service_Config.cpp b/ace/Service_Config.cpp
index 8452109c265..81da0628e92 100644
--- a/ace/Service_Config.cpp
+++ b/ace/Service_Config.cpp
@@ -9,9 +9,6 @@
#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/Process_Manager.h"
@@ -830,9 +827,7 @@ ACE_Service_Config::close_singletons (void)
// so we need to close it down first.
ACE_Reactor::close_singleton ();
-#if (((defined (ACE_HAS_WINNT)) && (ACE_HAS_WINNT == 1)) || (defined (ACE_HAS_AIO_CALLS)))
- ACE_Proactor::close_singleton ();
-#endif /* (((defined (ACE_HAS_WINNT)) && (ACE_HAS_WINNT == 1)) || (defined (ACE_HAS_AIO_CALLS))) */
+
#if ! defined (ACE_THREAD_MANAGER_LACKS_STATICS)
ACE_Thread_Manager::close_singleton ();
#endif /* ! ACE_THREAD_MANAGER_LACKS_STATICS */