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
1 #
2 # Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved.
3 # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 #
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
7 # published by the Free Software Foundation.
8 #
9 # This code is distributed in the hope that it will be useful, but WITHOUT
10 # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
12 # version 2 for more details (a copy is included in the LICENSE file that
13 # accompanied this code).
14 #
15 # You should have received a copy of the GNU General Public License version
16 # 2 along with this work; if not, write to the Free Software Foundation,
17 # Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18 #
19 # Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20 # or visit www.oracle.com if you need additional information or have any
21 # questions.
22 #
23 #
25 HS_INTERNAL_NAME=jvm
26 HS_FNAME=$(HS_INTERNAL_NAME).dll
27 AOUT=$(HS_FNAME)
28 SAWINDBG=sawindbg.dll
29 GENERATED=../generated
31 # Allow the user to turn off precompiled headers from the command line.
32 !if "$(USE_PRECOMPILED_HEADER)" != "0"
33 BUILD_PCH_FILE=_build_pch_file.obj
34 !endif
36 default:: $(BUILD_PCH_FILE) $(AOUT) checkAndBuildSA
38 !include ../local.make
39 !include compile.make
41 # _NMT_NOINLINE_ informs NMT that no inlining by Compiler
42 CXX_FLAGS=$(CXX_FLAGS) $(DEBUG_OPT_OPTION) /D "_NMT_NOINLINE_"
44 !include $(WorkSpace)/make/windows/makefiles/vm.make
45 !include local.make
47 HS_BUILD_ID=$(HS_BUILD_VER)-debug
49 # Force resources to be rebuilt every time
50 $(Res_Files): FORCE
52 $(AOUT): $(Res_Files) $(Obj_Files) vm.def
53 $(LD) @<<
54 $(LD_FLAGS) /out:$@ /implib:$*.lib /def:vm.def $(Obj_Files) $(Res_Files)
55 <<
56 !if "$(MT)" != ""
57 # The previous link command created a .manifest file that we want to
58 # insert into the linked artifact so we do not need to track it
59 # separately. Use ";#2" for .dll and ";#1" for .exe:
60 $(MT) /manifest $@.manifest /outputresource:$@;#2
61 !endif
62 !if "$(ENABLE_FULL_DEBUG_SYMBOLS)" == "1"
63 !if "$(ZIP_DEBUGINFO_FILES)" == "1"
64 $(ZIPEXE) -q $*.diz $*.map $*.pdb
65 $(RM) $*.map $*.pdb
66 !endif
67 !endif
69 !include $(WorkSpace)/make/windows/makefiles/shared.make
70 !include $(WorkSpace)/make/windows/makefiles/sa.make