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 DEFAULTACTIONS=clean post_update create
27 default:: $(SUBDIRS)
29 !ifndef DIR
30 DIR=.
31 !endif
33 !ifndef CXX
34 CXX=cl.exe
35 !endif
38 !ifdef SUBDIRS
39 # \ is used below because $(MAKE) is nmake here, which expects Windows paths
40 $(SUBDIRS): FORCE
41 @if not exist $@ mkdir $@
42 @if not exist $@/local.make echo # Empty > $@/local.make
43 @echo nmake $(ACTION) in $(DIR)/$@
44 cd $@ && $(MAKE) -NOLOGO -f $(WorkSpace)\make\windows\makefiles\$@.make $(ACTION) DIR=$(DIR)\$@ BUILD_FLAVOR=$(BUILD_FLAVOR)
45 !endif
47 # Creates the needed directory
48 create::
49 !if "$(DIR)" != "."
50 @echo mkdir $(DIR)
51 !endif
53 # Epilog to update for generating derived files
54 post_update::
56 # Removes scrap files
57 clean:: FORCE
58 -@rm -f *.OLD *.publish
60 # Remove all scrap files and all generated files
61 pure:: clean
62 -@rm -f *.OLD *.publish
64 $(DEFAULTACTIONS) $(ACTIONS)::
65 !ifdef SUBDIRS
66 @$(MAKE) -nologo ACTION=$@ DIR=$(DIR)
67 !endif
69 FORCE: