430 break; |
430 break; |
431 } |
431 } |
432 assert(oldest_age_node->identity() == NULL, "invariant"); |
432 assert(oldest_age_node->identity() == NULL, "invariant"); |
433 BufferPtr const buffer = oldest_age_node->retired_buffer(); |
433 BufferPtr const buffer = oldest_age_node->retired_buffer(); |
434 assert(buffer->retired(), "invariant"); |
434 assert(buffer->retired(), "invariant"); |
435 discarded_size += buffer->unflushed_size(); |
435 discarded_size += buffer->discard(); |
|
436 assert(buffer->unflushed_size() == 0, "invariant"); |
436 num_full_post_discard = control().decrement_full(); |
437 num_full_post_discard = control().decrement_full(); |
|
438 mspace_release_full(oldest_age_node, _age_mspace); |
437 if (buffer->transient()) { |
439 if (buffer->transient()) { |
438 mspace_release_full(buffer, _transient_mspace); |
440 mspace_release_full(buffer, _transient_mspace); |
439 mspace_release_full(oldest_age_node, _age_mspace); |
|
440 continue; |
441 continue; |
441 } else { |
|
442 mspace_release_full(oldest_age_node, _age_mspace); |
|
443 buffer->reinitialize(); |
|
444 buffer->release(); // publish |
|
445 break; |
|
446 } |
442 } |
|
443 buffer->reinitialize(); |
|
444 buffer->release(); // publish |
|
445 break; |
447 } |
446 } |
448 JfrBuffer_lock->unlock(); |
447 JfrBuffer_lock->unlock(); |
449 const size_t number_of_discards = num_full_pre_discard - num_full_post_discard; |
448 const size_t number_of_discards = num_full_pre_discard - num_full_post_discard; |
450 if (number_of_discards > 0) { |
449 if (number_of_discards > 0) { |
451 log_discard(number_of_discards, discarded_size, num_full_post_discard); |
450 log_discard(number_of_discards, discarded_size, num_full_post_discard); |