Fri, 20 Sep 2013 10:53:28 +0200
8024974: Incorrect use of GC_locker::is_active()
Summary: SymbolTable and StringTable can make calls to GC_locker::is_active() outside a safepoint. This isn't safe because the GC_locker active state (lock count) is only updated at a safepoint and only remains valid as long as _needs_gc is true. However, outside a safepoint_needs_gc can change to false at any time, which makes it impossible to do a correct call to is_active() in that context. In this case these calls can just be removed since the input argument to basic_add() should never be on the heap and so there's no need to check the GC_locker state. This change also adjusts the assert() in is_active() to makes sure all calls to this function are always done under a safepoint.
Reviewed-by: brutisso, dcubed
Contributed-by: per.liden@oracle.com
duke@435 | 1 | # |
mikael@4153 | 2 | # Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. |
duke@435 | 3 | # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
duke@435 | 4 | # |
duke@435 | 5 | # This code is free software; you can redistribute it and/or modify it |
duke@435 | 6 | # under the terms of the GNU General Public License version 2 only, as |
duke@435 | 7 | # published by the Free Software Foundation. |
duke@435 | 8 | # |
duke@435 | 9 | # This code is distributed in the hope that it will be useful, but WITHOUT |
duke@435 | 10 | # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
duke@435 | 11 | # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
duke@435 | 12 | # version 2 for more details (a copy is included in the LICENSE file that |
duke@435 | 13 | # accompanied this code). |
duke@435 | 14 | # |
duke@435 | 15 | # You should have received a copy of the GNU General Public License version |
duke@435 | 16 | # 2 along with this work; if not, write to the Free Software Foundation, |
duke@435 | 17 | # Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. |
duke@435 | 18 | # |
trims@1907 | 19 | # Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA |
trims@1907 | 20 | # or visit www.oracle.com if you need additional information or have any |
trims@1907 | 21 | # questions. |
duke@435 | 22 | # |
duke@435 | 23 | # |
duke@435 | 24 | |
duke@435 | 25 | # These are the commands used externally to compile and run. |
dcubed@3990 | 26 | # The \ are used here for traditional Windows apps and " quoted to get |
dcubed@3990 | 27 | # past the Unix-like shell: |
duke@435 | 28 | !ifdef BootStrapDir |
dcubed@3990 | 29 | RUN_JAVA="$(BootStrapDir)\bin\java" |
dcubed@3990 | 30 | RUN_JAVAP="$(BootStrapDir)\bin\javap" |
dcubed@3990 | 31 | RUN_JAVAH="$(BootStrapDir)\bin\javah" |
dcubed@3990 | 32 | RUN_JAR="$(BootStrapDir)\bin\jar" |
dcubed@3990 | 33 | COMPILE_JAVAC="$(BootStrapDir)\bin\javac" $(BOOTSTRAP_JAVAC_FLAGS) |
dcubed@3990 | 34 | COMPILE_RMIC="$(BootStrapDir)\bin\rmic" |
duke@435 | 35 | BOOT_JAVA_HOME=$(BootStrapDir) |
duke@435 | 36 | !else |
duke@435 | 37 | RUN_JAVA=java |
duke@435 | 38 | RUN_JAVAP=javap |
duke@435 | 39 | RUN_JAVAH=javah |
duke@435 | 40 | RUN_JAR=jar |
andrew@1406 | 41 | COMPILE_JAVAC=javac $(BOOTSTRAP_JAVAC_FLAGS) |
duke@435 | 42 | COMPILE_RMIC=rmic |
duke@435 | 43 | BOOT_JAVA_HOME= |
duke@435 | 44 | !endif |
duke@435 | 45 | |
andrew@1406 | 46 | # Settings for javac |
andrew@1406 | 47 | BOOT_SOURCE_LANGUAGE_VERSION=6 |
andrew@1406 | 48 | BOOT_TARGET_CLASS_VERSION=6 |
andrew@1406 | 49 | JAVAC_FLAGS=-g -encoding ascii |
andrew@1406 | 50 | BOOTSTRAP_JAVAC_FLAGS=$(JAVAC_FLAGS) -source $(BOOT_SOURCE_LANGUAGE_VERSION) -target $(BOOT_TARGET_CLASS_VERSION) |
andrew@1406 | 51 | |
sla@2369 | 52 | ProjectFile=jvm.vcproj |
ikrylov@1094 | 53 | |
duke@435 | 54 | !if "$(MSC_VER)" == "1200" |
ikrylov@1094 | 55 | |
duke@435 | 56 | VcVersion=VC6 |
sla@2540 | 57 | ProjectFile=jvm.dsp |
ikrylov@1094 | 58 | |
ikrylov@1094 | 59 | !elseif "$(MSC_VER)" == "1400" |
ikrylov@1094 | 60 | |
ikrylov@1094 | 61 | VcVersion=VC8 |
ikrylov@1094 | 62 | |
ikrylov@1094 | 63 | !elseif "$(MSC_VER)" == "1500" |
ikrylov@1094 | 64 | |
ikrylov@1094 | 65 | VcVersion=VC9 |
ikrylov@1094 | 66 | |
sla@2369 | 67 | !elseif "$(MSC_VER)" == "1600" |
sla@2369 | 68 | |
sla@2675 | 69 | VcVersion=VC10 |
sla@2675 | 70 | ProjectFile=jvm.vcxproj |
sla@2369 | 71 | |
iklam@5605 | 72 | !elseif "$(MSC_VER)" == "1700" |
iklam@5605 | 73 | # This is VS2012, but it loads VS10 projects just fine (and will |
iklam@5605 | 74 | # upgrade them automatically to VS2012 format). |
iklam@5605 | 75 | |
iklam@5605 | 76 | VcVersion=VC10 |
iklam@5605 | 77 | ProjectFile=jvm.vcxproj |
iklam@5605 | 78 | |
duke@435 | 79 | !else |
ikrylov@1094 | 80 | |
duke@435 | 81 | VcVersion=VC7 |
ikrylov@1094 | 82 | |
duke@435 | 83 | !endif |