< prev index next >

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

Print this page
rev 10335 : imported patch bufnode_params

*** 31,40 **** --- 31,41 ---- // There are various techniques that require threads to be able to log // addresses. For example, a generational write barrier might log // the addresses of modified old-generation objects. This type supports // this operation. + class BufferNode; class PtrQueueSet; class PtrQueue VALUE_OBJ_CLASS_SPEC { friend class VMStructs; // Noncopyable - not defined.
*** 102,112 **** // entries were cleared from it so that it can be re-used. It should // not return false if the buffer is still full (otherwise we can // get into an infinite loop). virtual bool should_enqueue_buffer() { return true; } void handle_zero_index(); ! void locking_enqueue_completed_buffer(void** buf); void enqueue_known_active(void* ptr); size_t size() { assert(_sz >= _index, "Invariant."); --- 103,113 ---- // entries were cleared from it so that it can be re-used. It should // not return false if the buffer is still full (otherwise we can // get into an infinite loop). virtual bool should_enqueue_buffer() { return true; } void handle_zero_index(); ! void locking_enqueue_completed_buffer(BufferNode* node); void enqueue_known_active(void* ptr); size_t size() { assert(_sz >= _index, "Invariant.");
*** 134,143 **** --- 135,148 ---- static size_t byte_index_to_index(size_t ind) { assert((ind % sizeof(void*)) == 0, "Invariant."); return ind / sizeof(void*); } + static size_t index_to_byte_index(size_t ind) { + return ind * sizeof(void*); + } + // To support compiler. protected: template<typename Derived> static ByteSize byte_offset_of_index() {
*** 184,197 **** static BufferNode* allocate(size_t byte_size); // Free a BufferNode. static void deallocate(BufferNode* node); ! // Return the BufferNode containing the buffer. ! static BufferNode* make_node_from_buffer(void** buffer) { ! return reinterpret_cast<BufferNode*>( reinterpret_cast<char*>(buffer) - buffer_offset()); } // Return the buffer for node. static void** make_buffer_from_node(BufferNode *node) { // &_buffer[0] might lead to index out of bounds warnings. --- 189,205 ---- static BufferNode* allocate(size_t byte_size); // Free a BufferNode. static void deallocate(BufferNode* node); ! // Return the BufferNode containing the buffer, after setting its index. ! static BufferNode* make_node_from_buffer(void** buffer, size_t index) { ! BufferNode* node = ! reinterpret_cast<BufferNode*>( reinterpret_cast<char*>(buffer) - buffer_offset()); + node->set_index(index); + return node; } // Return the buffer for node. static void** make_buffer_from_node(BufferNode *node) { // &_buffer[0] might lead to index out of bounds warnings.
*** 241,251 **** protected: // A mutator thread does the the work of processing a buffer. // Returns "true" iff the work is complete (and the buffer may be // deallocated). ! virtual bool mut_process_buffer(void** buf) { ShouldNotReachHere(); return false; } // Create an empty ptr queue set. --- 249,259 ---- protected: // A mutator thread does the the work of processing a buffer. // Returns "true" iff the work is complete (and the buffer may be // deallocated). ! virtual bool mut_process_buffer(BufferNode* node) { ShouldNotReachHere(); return false; } // Create an empty ptr queue set.
*** 265,281 **** // 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); // Declares that "buf" is a complete buffer. ! void enqueue_complete_buffer(void** buf, size_t index = 0); // To be invoked by the mutator. ! bool process_or_enqueue_complete_buffer(void** buf); bool completed_buffers_exist_dirty() { return _n_completed_buffers > 0; } --- 273,289 ---- // 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(BufferNode* node); // Declares that "buf" is a complete buffer. ! void enqueue_complete_buffer(BufferNode* node); // To be invoked by the mutator. ! bool process_or_enqueue_complete_buffer(BufferNode* node); bool completed_buffers_exist_dirty() { return _n_completed_buffers > 0; }
< prev index next >