< prev index next >

src/share/vm/runtime/park.cpp

Print this page

        

@@ -146,19 +146,27 @@
     // Do this the hard way -- materialize a new Parker..
     p = new Parker() ;
   }
   p->AssociatedWith = t ;          // Associate p with t
   p->FreeNext       = NULL ;
+  p->_counter       = 0;
   return p ;
 }
 
 
 void Parker::Release (Parker * p) {
   if (p == NULL) return ;
   guarantee (p->AssociatedWith != NULL, "invariant") ;
   guarantee (p->FreeNext == NULL      , "invariant") ;
-  p->AssociatedWith = NULL ;
+
+  int status = pthread_mutex_lock(p->_mutex);
+  assert(status == 0, "invariant");
+  {
+    p->AssociatedWith = NULL;
+  }
+  pthread_mutex_unlock(p->_mutex);
+  assert(status == 0, "invariant");
 
   Thread::SpinAcquire(&ListLock, "ParkerFreeListRelease");
   {
     p->FreeNext = FreeList;
     FreeList = p;
< prev index next >