< prev index next >

src/share/vm/gc/g1/ptrQueue.hpp

Print this page
rev 9215 : imported patch remove_dead_code
rev 9216 : imported patch rename_perm
rev 9219 : [mq]: access
rev 9220 : [mq]: noncopyable
rev 9221 : [mq]: simplify_loops

*** 38,85 **** class PtrQueueSet; class PtrQueue VALUE_OBJ_CLASS_SPEC { friend class VMStructs; ! protected: // The ptr queue set to which this queue belongs. ! PtrQueueSet* _qset; // Whether updates should be logged. bool _active; // The buffer. void** _buf; ! // The index at which an object was last enqueued. Starts at "_sz" // (indicating an empty buffer) and goes towards zero. size_t _index; ! // The size of the buffer. size_t _sz; - // If true, the queue is permanent, and doesn't need to deallocate - // its buffer in the destructor (since that obtains a lock which may not - // be legally locked by then. - bool _perm; - // If there is a lock associated with this buffer, this is that lock. Mutex* _lock; PtrQueueSet* qset() { return _qset; } ! bool is_permanent() const { return _perm; } // Process queue entries and release resources, if not permanent. void flush_impl(); - public: // Initialize this queue to contain a null buffer, and be part of the // given PtrQueueSet. ! PtrQueue(PtrQueueSet* qset, bool perm = false, bool active = false); // Requires queue flushed or permanent. ~PtrQueue(); // Associate a lock with a ptr queue. void set_lock(Mutex* lock) { _lock = lock; } void reset() { if (_buf != NULL) _index = _sz; } --- 38,90 ---- class PtrQueueSet; class PtrQueue VALUE_OBJ_CLASS_SPEC { friend class VMStructs; ! // Noncopyable - not defined. ! PtrQueue(const PtrQueue&); ! PtrQueue& operator=(const PtrQueue&); ! // The ptr queue set to which this queue belongs. ! PtrQueueSet* const _qset; // Whether updates should be logged. bool _active; + // If true, the queue is permanent, and doesn't need to deallocate + // its buffer in the destructor (since that obtains a lock which may not + // be legally locked by then. + const bool _permanent; + + protected: // The buffer. void** _buf; ! // The (byte) index at which an object was last enqueued. Starts at "_sz" // (indicating an empty buffer) and goes towards zero. size_t _index; ! // The (byte) size of the buffer. size_t _sz; // If there is a lock associated with this buffer, this is that lock. Mutex* _lock; PtrQueueSet* qset() { return _qset; } ! bool is_permanent() const { return _permanent; } // Process queue entries and release resources, if not permanent. void flush_impl(); // Initialize this queue to contain a null buffer, and be part of the // given PtrQueueSet. ! PtrQueue(PtrQueueSet* qset, bool permanent = false, bool active = false); // Requires queue flushed or permanent. ~PtrQueue(); + public: + // Associate a lock with a ptr queue. void set_lock(Mutex* lock) { _lock = lock; } void reset() { if (_buf != NULL) _index = _sz; }
*** 127,143 **** } } bool is_active() { return _active; } ! static int byte_index_to_index(int ind) { ! assert((ind % oopSize) == 0, "Invariant."); ! return ind / oopSize; ! } ! ! static int index_to_byte_index(int byte_ind) { ! return byte_ind * oopSize; } // To support compiler. static ByteSize byte_offset_of_index() { return byte_offset_of(PtrQueue, _index); --- 132,144 ---- } } bool is_active() { return _active; } ! static size_t byte_index_to_index(size_t ind) { ! assert((ind % sizeof(void*)) == 0, "Invariant."); ! return ind / sizeof(void*); } // To support compiler. static ByteSize byte_offset_of_index() { return byte_offset_of(PtrQueue, _index);
*** 244,273 **** virtual bool mut_process_buffer(void** buf) { ShouldNotReachHere(); return false; } - public: // Create an empty ptr queue set. PtrQueueSet(bool notify_when_complete = false); // Because of init-order concerns, we can't pass these as constructor // arguments. ! void initialize(Monitor* cbl_mon, Mutex* fl_lock, int process_completed_threshold, int max_completed_queue, ! PtrQueueSet *fl_owner = NULL) { ! _max_completed_queue = max_completed_queue; ! _process_completed_threshold = process_completed_threshold; ! _completed_queue_padding = 0; ! assert(cbl_mon != NULL && fl_lock != NULL, "Init order issue?"); ! _cbl_mon = cbl_mon; ! _fl_lock = fl_lock; ! _fl_owner = (fl_owner != NULL) ? fl_owner : this; ! } ! // Return an empty oop array of size _sz (required to be non-zero). void** allocate_buffer(); // Return an empty buffer to the free list. The "buf" argument is // required to be a pointer to the head of an array of length "_sz". void deallocate_buffer(void** buf); --- 245,269 ---- virtual bool mut_process_buffer(void** buf) { ShouldNotReachHere(); return false; } // Create an empty ptr queue set. PtrQueueSet(bool notify_when_complete = false); + ~PtrQueueSet(); // Because of init-order concerns, we can't pass these as constructor // arguments. ! void initialize(Monitor* cbl_mon, ! Mutex* fl_lock, int process_completed_threshold, int max_completed_queue, ! PtrQueueSet *fl_owner = NULL); ! ! public: ! // Return an empty array of size _sz (required to be non-zero). void** allocate_buffer(); // Return an empty buffer to the free list. The "buf" argument is // required to be a pointer to the head of an array of length "_sz". void deallocate_buffer(void** buf);
< prev index next >