diff options
Diffstat (limited to 'trunk/ACE/ace/Init_ACE.cpp')
-rw-r--r-- | trunk/ACE/ace/Init_ACE.cpp | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/trunk/ACE/ace/Init_ACE.cpp b/trunk/ACE/ace/Init_ACE.cpp new file mode 100644 index 00000000000..f997c09d4f8 --- /dev/null +++ b/trunk/ACE/ace/Init_ACE.cpp @@ -0,0 +1,45 @@ +#include "ace/Init_ACE.h" + +#include "ace/Object_Manager.h" + +ACE_RCSID (ace, + Init_ACE, + "$Id$") + + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +unsigned int ACE::init_fini_count_ = 0; + +int +ACE::init (void) +{ + // Don't use ACE_TRACE, because Object_Manager might not have been + // instantiated yet. + // ACE_TRACE ("ACE::init"); + + ++ACE::init_fini_count_; + + return ACE_Object_Manager::instance ()->init (); +} + +int +ACE::fini (void) +{ + ACE_TRACE ("ACE::fini"); + + if (ACE::init_fini_count_ > 0) + { + if (--ACE::init_fini_count_ == 0) + return ACE_Object_Manager::instance ()->fini (); + else + // Wait for remaining fini () calls. + return 1; + } + else + // More ACE::fini () calls than ACE::init () calls. Bad + // application! + return -1; +} + +ACE_END_VERSIONED_NAMESPACE_DECL |