diff options
Diffstat (limited to 'ACE/ace/Init_ACE.cpp')
-rw-r--r-- | ACE/ace/Init_ACE.cpp | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/ACE/ace/Init_ACE.cpp b/ACE/ace/Init_ACE.cpp new file mode 100644 index 00000000000..b024aa3cf4e --- /dev/null +++ b/ACE/ace/Init_ACE.cpp @@ -0,0 +1,41 @@ +// $Id$ +#include "ace/Init_ACE.h" + +#include "ace/Object_Manager.h" + +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 |