hotspot/src/share/vm/oops/instanceKlass.cpp
changeset 3916 9acd7f9d4f52
parent 3824 86e9e4b25bdf
parent 3912 3aaaaad1ccb0
child 4094 1f424b2b2171
equal deleted inserted replaced
3828:fa1565f1aa3d 3916:9acd7f9d4f52
  2150   // only one compilation can be active
  2150   // only one compilation can be active
  2151   NEEDS_CLEANUP
  2151   NEEDS_CLEANUP
  2152   // This is a short non-blocking critical region, so the no safepoint check is ok.
  2152   // This is a short non-blocking critical region, so the no safepoint check is ok.
  2153   OsrList_lock->lock_without_safepoint_check();
  2153   OsrList_lock->lock_without_safepoint_check();
  2154   assert(n->is_osr_method(), "wrong kind of nmethod");
  2154   assert(n->is_osr_method(), "wrong kind of nmethod");
  2155   n->set_link(osr_nmethods_head());
  2155   n->set_osr_link(osr_nmethods_head());
  2156   set_osr_nmethods_head(n);
  2156   set_osr_nmethods_head(n);
  2157   // Remember to unlock again
  2157   // Remember to unlock again
  2158   OsrList_lock->unlock();
  2158   OsrList_lock->unlock();
  2159 }
  2159 }
  2160 
  2160 
  2166   nmethod* last = NULL;
  2166   nmethod* last = NULL;
  2167   nmethod* cur  = osr_nmethods_head();
  2167   nmethod* cur  = osr_nmethods_head();
  2168   // Search for match
  2168   // Search for match
  2169   while(cur != NULL && cur != n) {
  2169   while(cur != NULL && cur != n) {
  2170     last = cur;
  2170     last = cur;
  2171     cur = cur->link();
  2171     cur = cur->osr_link();
  2172   }
  2172   }
  2173   if (cur == n) {
  2173   if (cur == n) {
  2174     if (last == NULL) {
  2174     if (last == NULL) {
  2175       // Remove first element
  2175       // Remove first element
  2176       set_osr_nmethods_head(osr_nmethods_head()->link());
  2176       set_osr_nmethods_head(osr_nmethods_head()->osr_link());
  2177     } else {
  2177     } else {
  2178       last->set_link(cur->link());
  2178       last->set_osr_link(cur->osr_link());
  2179     }
  2179     }
  2180   }
  2180   }
  2181   n->set_link(NULL);
  2181   n->set_osr_link(NULL);
  2182   // Remember to unlock again
  2182   // Remember to unlock again
  2183   OsrList_lock->unlock();
  2183   OsrList_lock->unlock();
  2184 }
  2184 }
  2185 
  2185 
  2186 nmethod* instanceKlass::lookup_osr_nmethod(const methodOop m, int bci) const {
  2186 nmethod* instanceKlass::lookup_osr_nmethod(const methodOop m, int bci) const {
  2193         (bci == InvocationEntryBci || osr->osr_entry_bci() == bci)) {
  2193         (bci == InvocationEntryBci || osr->osr_entry_bci() == bci)) {
  2194       // Found a match - return it.
  2194       // Found a match - return it.
  2195       OsrList_lock->unlock();
  2195       OsrList_lock->unlock();
  2196       return osr;
  2196       return osr;
  2197     }
  2197     }
  2198     osr = osr->link();
  2198     osr = osr->osr_link();
  2199   }
  2199   }
  2200   OsrList_lock->unlock();
  2200   OsrList_lock->unlock();
  2201   return NULL;
  2201   return NULL;
  2202 }
  2202 }
  2203 
  2203