Removed cds::OS::is_thread_alive() function. This function is based of pthread_kill...
[libcds.git] / src / hp.cpp
index 6481a2cc5d8ad99e046386518eec3e1642885a6f..99a3d1659fc2298574c891d182832519d44f5dcb 100644 (file)
@@ -162,8 +162,7 @@ namespace cds { namespace gc { namespace hp {
         for ( thread_record* hprec = pHead; hprec; hprec = pNext )
         {
             assert( hprec->m_idOwner.load( atomics::memory_order_relaxed ) == nullThreadId
-                || hprec->m_idOwner.load( atomics::memory_order_relaxed ) == mainThreadId
-                || !cds::OS::is_thread_alive( hprec->m_idOwner.load( atomics::memory_order_relaxed ) )
+                || hprec->m_idOwner.load( atomics::memory_order_relaxed ) == mainThreadId )
             );
 
             retired_array& arr = hprec->retired_;
@@ -256,7 +255,6 @@ namespace cds { namespace gc { namespace hp {
     CDS_EXPORT_API void smr::free_thread_data( smr::thread_record* pRec )
     {
         assert( pRec != nullptr );
-        //CDS_HAZARDPTR_STATISTIC( ++m_Stat.m_RetireHPRec )
 
         pRec->hazards_.clear();
         scan( pRec );
@@ -447,6 +445,9 @@ namespace cds { namespace gc { namespace hp {
         const cds::OS::ThreadId curThreadId = cds::OS::get_current_thread_id();
         for ( thread_record* hprec = thread_list_.load( atomics::memory_order_acquire ); hprec; hprec = hprec->m_pNextNode.load( atomics::memory_order_relaxed ))
         {
+            if ( hprec == static_cast<thread_record*>( pThis ))
+                continue;
+
             // If m_bFree == true then hprec->retired_ is empty - we don't need to see it
             if ( hprec->m_bFree.load( atomics::memory_order_acquire ))
                 continue;
@@ -455,7 +456,7 @@ namespace cds { namespace gc { namespace hp {
             // Several threads may work concurrently so we use atomic technique only.
             {
                 cds::OS::ThreadId curOwner = hprec->m_idOwner.load( atomics::memory_order_relaxed );
-                if ( curOwner == nullThreadId || !cds::OS::is_thread_alive( curOwner ) ) {
+                if ( curOwner == nullThreadId ) {
                     if ( !hprec->m_idOwner.compare_exchange_strong( curOwner, curThreadId, atomics::memory_order_acquire, atomics::memory_order_relaxed ) )
                         continue;
                 }
@@ -464,7 +465,7 @@ namespace cds { namespace gc { namespace hp {
             }
 
             // We own the thread record successfully. Now, we can see whether it has retired pointers.
-            // If it has ones then we move to pThis that is private for current thread.
+            // If it has ones then we move them to pThis that is private for current thread.
             retired_array& src = hprec->retired_;
             retired_array& dest = pThis->retired_;
             assert( !dest.full() );