< prev index next >

src/share/vm/gc_implementation/shared/concurrentGCThread.hpp

Print this page
rev 7266 : 8062036: ConcurrentMarkThread::slt may be invoked before ConcurrentMarkThread::makeSurrogateLockerThread causing intermittent crashes
Summary: Suppress gc_alot during VM init, improve error for SLT uninitialized.
Reviewed-by:


  76 // The SurrogateLockerThread is used by concurrent GC threads for
  77 // manipulating Java monitors, in particular, currently for
  78 // manipulating the pending_list_lock. XXX
  79 class SurrogateLockerThread: public JavaThread {
  80   friend class VMStructs;
  81  public:
  82   enum SLT_msg_type {
  83     empty = 0,           // no message
  84     acquirePLL,          // acquire pending list lock
  85     releaseAndNotifyPLL  // notify and release pending list lock
  86   };
  87  private:
  88   // the following are shared with the CMSThread
  89   SLT_msg_type  _buffer;  // communication buffer
  90   Monitor       _monitor; // monitor controlling buffer
  91   BasicLock     _basicLock; // used for PLL locking
  92 
  93  public:
  94   static SurrogateLockerThread* make(TRAPS);
  95 



  96   SurrogateLockerThread();
  97 
  98   bool is_hidden_from_external_view() const     { return true; }
  99 
 100   void loop(); // main method
 101 
 102   void manipulatePLL(SLT_msg_type msg);
 103 
 104 };
 105 
 106 #endif // SHARE_VM_GC_IMPLEMENTATION_SHARED_CONCURRENTGCTHREAD_HPP


  76 // The SurrogateLockerThread is used by concurrent GC threads for
  77 // manipulating Java monitors, in particular, currently for
  78 // manipulating the pending_list_lock. XXX
  79 class SurrogateLockerThread: public JavaThread {
  80   friend class VMStructs;
  81  public:
  82   enum SLT_msg_type {
  83     empty = 0,           // no message
  84     acquirePLL,          // acquire pending list lock
  85     releaseAndNotifyPLL  // notify and release pending list lock
  86   };
  87  private:
  88   // the following are shared with the CMSThread
  89   SLT_msg_type  _buffer;  // communication buffer
  90   Monitor       _monitor; // monitor controlling buffer
  91   BasicLock     _basicLock; // used for PLL locking
  92 
  93  public:
  94   static SurrogateLockerThread* make(TRAPS);
  95 
  96   // Terminate VM with error message that SLT needed but not yet created.
  97   static void report_missing_slt();
  98 
  99   SurrogateLockerThread();
 100 
 101   bool is_hidden_from_external_view() const     { return true; }
 102 
 103   void loop(); // main method
 104 
 105   void manipulatePLL(SLT_msg_type msg);
 106 
 107 };
 108 
 109 #endif // SHARE_VM_GC_IMPLEMENTATION_SHARED_CONCURRENTGCTHREAD_HPP
< prev index next >