diff options
Diffstat (limited to 'ace/OS/Init_ACE.cpp')
-rw-r--r-- | ace/OS/Init_ACE.cpp | 44 |
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; +} |