Mercurial > hg > graal-jvmci-8
comparison src/share/vm/classfile/symbolTable.cpp @ 8718:0ede345ec7c9
8009829: CDS: JDK JPRT test fails crash in Symbol::equals()
Summary: -Xshare:dump was creating a Symbol in C_heap. There's an assert there that jdk jprt wasn't hitting because it was only done in product
Reviewed-by: dholmes, hseigel, iklam
author | coleenp |
---|---|
date | Wed, 13 Mar 2013 15:15:56 -0400 |
parents | 2aa953165ade |
children | ede380e13960 |
comparison
equal
deleted
inserted
replaced
8717:d6320e955c89 | 8718:0ede345ec7c9 |
---|---|
1 /* | 1 /* |
2 * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. | 2 * Copyright (c) 1997, 2013, 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. |
47 Symbol* SymbolTable::allocate_symbol(const u1* name, int len, bool c_heap, TRAPS) { | 47 Symbol* SymbolTable::allocate_symbol(const u1* name, int len, bool c_heap, TRAPS) { |
48 assert (len <= Symbol::max_length(), "should be checked by caller"); | 48 assert (len <= Symbol::max_length(), "should be checked by caller"); |
49 | 49 |
50 Symbol* sym; | 50 Symbol* sym; |
51 | 51 |
52 if (c_heap) { | 52 if (DumpSharedSpaces) { |
53 // Allocate all symbols to CLD shared metaspace | |
54 sym = new (len, ClassLoaderData::the_null_class_loader_data(), THREAD) Symbol(name, len, -1); | |
55 } else if (c_heap) { | |
53 // refcount starts as 1 | 56 // refcount starts as 1 |
54 assert(!DumpSharedSpaces, "never allocate to C heap"); | |
55 sym = new (len, THREAD) Symbol(name, len, 1); | 57 sym = new (len, THREAD) Symbol(name, len, 1); |
56 assert(sym != NULL, "new should call vm_exit_out_of_memory if C_HEAP is exhausted"); | 58 assert(sym != NULL, "new should call vm_exit_out_of_memory if C_HEAP is exhausted"); |
57 } else { | 59 } else { |
58 if (DumpSharedSpaces) { | 60 // Allocate to global arena |
59 sym = new (len, ClassLoaderData::the_null_class_loader_data(), THREAD) Symbol(name, len, -1); | |
60 } else { | |
61 sym = new (len, arena(), THREAD) Symbol(name, len, -1); | 61 sym = new (len, arena(), THREAD) Symbol(name, len, -1); |
62 } | |
63 } | 62 } |
64 return sym; | 63 return sym; |
65 } | 64 } |
66 | 65 |
67 void SymbolTable::initialize_symbols(int arena_alloc_size) { | 66 void SymbolTable::initialize_symbols(int arena_alloc_size) { |