summaryrefslogtreecommitdiff
path: root/ace/OS/Init_ACE.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'ace/OS/Init_ACE.cpp')
-rw-r--r--ace/OS/Init_ACE.cpp44
1 files changed, 44 insertions, 0 deletions
diff --git a/ace/OS/Init_ACE.cpp b/ace/OS/Init_ACE.cpp
new file mode 100644
index 00000000000..d40ba6fbfb9
--- /dev/null
+++ b/ace/OS/Init_ACE.cpp
@@ -0,0 +1,44 @@
+// $Id$
+
+#include "Init_ACE.h"
+
+#include "ace/Utils/Object_Manager.h"
+
+#if defined (ACE_LACKS_INLINE_FUNCTIONS)
+#include "Init_ACE.i"
+#endif /* ACE_LACKS_INLINE_FUNCTIONS */
+
+ACE_RCSID(ace, Init_ACE, "$Id$")
+
+ // Static data members.
+ u_int ACE_Init_ACE::init_fini_count_ = 0;
+int
+ACE_Init_ACE::init (void)
+{
+ // Don't use ACE_TRACE, because Object_Manager might not have been
+ // instantiated yet.
+ // ACE_TRACE ("ACE_Init_ACE::init");
+
+ ++init_fini_count_;
+
+ return ACE_Object_Manager::instance ()->init ();
+}
+
+int
+ACE_Init_ACE::fini (void)
+{
+ ACE_TRACE ("ACE_Init_ACE::fini");
+
+ if (init_fini_count_ > 0)
+ {
+ if (--init_fini_count_ == 0)
+ return ACE_Object_Manager::instance ()->fini ();
+ else
+ // Wait for remaining fini () calls.
+ return 1;
+ }
+ else
+ // More ACE_Init_ACE::fini () calls than ACE_Init_ACE::init () calls. Bad
+ // application!
+ return -1;
+}