diff options
author | jxh <jxh@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 2000-10-03 01:54:05 +0000 |
---|---|---|
committer | jxh <jxh@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 2000-10-03 01:54:05 +0000 |
commit | c355754a5f4255a0c5f5c429cc4af68aada8dc22 (patch) | |
tree | cc5d63f9c4f2ccc87aab30b45527e0ffaa8cf821 /ace | |
parent | 64b4f4f87963bf88c2615429895471c35a12ff1a (diff) | |
download | ATCD-c355754a5f4255a0c5f5c429cc4af68aada8dc22.tar.gz |
Detect of TSS instance of ACE_Thread_Exit fails to create.
Diffstat (limited to 'ace')
-rw-r--r-- | ace/Thread_Adapter.cpp | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/ace/Thread_Adapter.cpp b/ace/Thread_Adapter.cpp index 5c29550410e..337031226cf 100644 --- a/ace/Thread_Adapter.cpp +++ b/ace/Thread_Adapter.cpp @@ -59,8 +59,25 @@ ACE_Thread_Adapter::invoke (void) // pointer directly (it's stored in thread-specific storage), so // it's ok to dereference it here and only store it as a // reference. + + // Except if it is null, then the thr_mgr() method crashes. + // -jxh + if (this->thr_mgr () != 0) { + ACE_Thread_Exit *exit_hook_instance = ACE_Thread_Exit::instance (); + if (exit_hook_instance == 0) + { + // Using a ACE_Thread_Exit that was created off the + // stack gives NT problems. So, instead, we wait + // half a second and then try again. + + ACE_OS::sleep (ACE_Time_Value (0, 500000)); + exit_hook_instance = ACE_Thread_Exit::instance (); + + // ACE_ASSERT (exit_hook_instance); + } + ACE_Thread_Exit &exit_hook = *ACE_Thread_Exit::instance (); // Keep track of the <Thread_Manager> that's associated with this // <exit_hook>. |