equal
deleted
inserted
replaced
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); |