diff options
author | Adam Mitz <mitza@ociweb.com> | 2017-12-21 10:18:10 -0600 |
---|---|---|
committer | Adam Mitz <mitza@ociweb.com> | 2017-12-21 10:18:10 -0600 |
commit | 5bbbaacd283951886642a5113300f0c0543e51c0 (patch) | |
tree | 35df250886496051ad069e9725602b583017d6f8 /ACE/ace/Singleton.cpp | |
parent | a68721afec17c9ac51077591bf12159645ef0756 (diff) | |
download | ATCD-5bbbaacd283951886642a5113300f0c0543e51c0.tar.gz |
fixed issue #554 ACE_Singleton use after ACE::fini, ACE::init
Diffstat (limited to 'ACE/ace/Singleton.cpp')
-rw-r--r-- | ACE/ace/Singleton.cpp | 17 |
1 files changed, 15 insertions, 2 deletions
diff --git a/ACE/ace/Singleton.cpp b/ACE/ace/Singleton.cpp index d6a7a23a3a2..52ca2b53d36 100644 --- a/ACE/ace/Singleton.cpp +++ b/ACE/ace/Singleton.cpp @@ -101,8 +101,11 @@ ACE_Singleton<TYPE, ACE_LOCK>::instance (void) ACE_NEW_RETURN (singleton, (ACE_Singleton<TYPE, ACE_LOCK>), 0); // Register for destruction with ACE_Object_Manager. +#if !defined (ACE_MT_SAFE) || (ACE_MT_SAFE == 0) ACE_Object_Manager::at_exit (singleton, 0, typeid (TYPE).name ()); -#if defined (ACE_MT_SAFE) && (ACE_MT_SAFE != 0) +#else + ACE_Object_Manager::at_exit (singleton, &lock, + typeid (TYPE).name ()); } #endif /* ACE_MT_SAFE */ } @@ -112,11 +115,21 @@ ACE_Singleton<TYPE, ACE_LOCK>::instance (void) } template <class TYPE, class ACE_LOCK> void -ACE_Singleton<TYPE, ACE_LOCK>::cleanup (void *) +ACE_Singleton<TYPE, ACE_LOCK>::cleanup (void *param) { ACE_Object_Manager::remove_at_exit (this); delete this; ACE_Singleton<TYPE, ACE_LOCK>::instance_i () = 0; + +#if !defined ACE_MT_SAFE || ACE_MT_SAFE == 0 || defined ACE_FACE_SAFETY_BASE + ACE_UNUSED_ARG (param); +#else + if (param) + { + ACE_LOCK **lock = static_cast<ACE_LOCK **> (param); + *lock = 0; + } +#endif } template <class TYPE, class ACE_LOCK> void |