src/hotspot/share/classfile/metadataOnStackMark.cpp
changeset 54150 5529640c5f67
parent 47216 71c04702a3d5
child 54355 f226ab0b7f21
equal deleted inserted replaced
54149:c61f09122d3b 54150:5529640c5f67
     1 /*
     1 /*
     2  * Copyright (c) 2013, 2016, Oracle and/or its affiliates. All rights reserved.
     2  * Copyright (c) 2013, 2019, Oracle and/or its affiliates. All rights reserved.
     3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
     3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
     4  *
     4  *
     5  * This code is free software; you can redistribute it and/or modify it
     5  * This code is free software; you can redistribute it and/or modify it
     6  * under the terms of the GNU General Public License version 2 only, as
     6  * under the terms of the GNU General Public License version 2 only, as
     7  * published by the Free Software Foundation.
     7  * published by the Free Software Foundation.
    40 MetadataOnStackBuffer* MetadataOnStackMark::_free_buffers = NULL;
    40 MetadataOnStackBuffer* MetadataOnStackMark::_free_buffers = NULL;
    41 
    41 
    42 MetadataOnStackBuffer* MetadataOnStackMark::_current_buffer = NULL;
    42 MetadataOnStackBuffer* MetadataOnStackMark::_current_buffer = NULL;
    43 NOT_PRODUCT(bool MetadataOnStackMark::_is_active = false;)
    43 NOT_PRODUCT(bool MetadataOnStackMark::_is_active = false;)
    44 
    44 
       
    45 class MetadataOnStackClosure : public MetadataClosure {
       
    46   void do_metadata(Metadata* m) { Metadata::mark_on_stack(m); }
       
    47 };
       
    48 
    45 // Walk metadata on the stack and mark it so that redefinition doesn't delete
    49 // Walk metadata on the stack and mark it so that redefinition doesn't delete
    46 // it.  Class unloading only deletes in-error class files, methods created by
    50 // it.  Class unloading only deletes in-error class files, methods created by
    47 // the relocator and dummy constant pools.  None of these appear anywhere except
    51 // the relocator and dummy constant pools.  None of these appear anywhere except
    48 // in metadata Handles.
    52 // in metadata Handles.
    49 MetadataOnStackMark::MetadataOnStackMark(bool redefinition_walk) {
    53 MetadataOnStackMark::MetadataOnStackMark(bool redefinition_walk) {
    53   NOT_PRODUCT(_is_active = true;)
    57   NOT_PRODUCT(_is_active = true;)
    54 
    58 
    55   Threads::metadata_handles_do(Metadata::mark_on_stack);
    59   Threads::metadata_handles_do(Metadata::mark_on_stack);
    56 
    60 
    57   if (redefinition_walk) {
    61   if (redefinition_walk) {
    58     Threads::metadata_do(Metadata::mark_on_stack);
    62     MetadataOnStackClosure md_on_stack;
    59     CodeCache::metadata_do(Metadata::mark_on_stack);
    63     Threads::metadata_do(&md_on_stack);
       
    64     CodeCache::metadata_do(&md_on_stack);
    60     CompileBroker::mark_on_stack();
    65     CompileBroker::mark_on_stack();
    61     JvmtiCurrentBreakpoints::metadata_do(Metadata::mark_on_stack);
    66     JvmtiCurrentBreakpoints::metadata_do(Metadata::mark_on_stack);
    62     ThreadService::metadata_do(Metadata::mark_on_stack);
    67     ThreadService::metadata_do(Metadata::mark_on_stack);
    63 #if INCLUDE_JVMCI
    68 #if INCLUDE_JVMCI
    64     JVMCIRuntime::metadata_do(Metadata::mark_on_stack);
    69     JVMCIRuntime::metadata_do(Metadata::mark_on_stack);