diff options
author | Like Ma <likemartinma@gmail.com> | 2019-03-09 02:09:32 +0800 |
---|---|---|
committer | Like Ma <likemartinma@gmail.com> | 2019-12-11 11:22:06 +0800 |
commit | e4e843a66e9388138dfcb64328637221d264b6a0 (patch) | |
tree | fff2b2153a423b64559a4a78c4005e19dae1b7ba | |
parent | 3cb77e292612ea00bfc9b39d2d7103c50fa5e54c (diff) | |
download | ATCD-e4e843a66e9388138dfcb64328637221d264b6a0.tar.gz |
Fix ACE_Thread_Manager::join memory leak and deadlock.
-rw-r--r-- | ACE/ace/Thread_Manager.cpp | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/ACE/ace/Thread_Manager.cpp b/ACE/ace/Thread_Manager.cpp index 172e4a43af8..0d6de7694ca 100644 --- a/ACE/ace/Thread_Manager.cpp +++ b/ACE/ace/Thread_Manager.cpp @@ -1496,14 +1496,18 @@ ACE_Thread_Manager::join (ACE_thread_t tid, ACE_THR_FUNC_RETURN *status) { if (ACE_OS::thr_equal (biter.next ()->thr_id_, tid)) { - ACE_Thread_Descriptor_Base *tdbl = biter.advance_and_remove (false); +#if defined (ACE_HAS_CPP11) + std::unique_ptr<ACE_Thread_Descriptor_Base> tdbl (biter.advance_and_remove (false)); +#else + auto_ptr<ACE_Thread_Descriptor_Base> tdbl (biter.advance_and_remove (false)); +#endif /* ACE_HAS_CPP11 */ + ace_mon.release(); #ifndef ACE_LACKS_PTHREAD_JOIN if (ACE_Thread::join (tdbl->thr_handle_, status) == -1) { return -1; } #endif - delete tdbl; // return immediately if we've found the thread we want to join. return 0; |