mirror of
https://github.com/openjdk/jdk.git
synced 2026-05-20 18:37:51 +00:00
Merge
This commit is contained in:
commit
4baee38c64
@ -309,7 +309,7 @@ define SetupBuildJvmtiDemoBody
|
||||
|
||||
ifeq ($$($1_TOOLCHAIN), TOOLCHAIN_LINK_CXX)
|
||||
# For C++, we also need some special treatment.
|
||||
$1_LDFLAGS := $(LDFLAGS_CXX_JDK)
|
||||
$1_LDFLAGS := $$(LDFLAGS_CXX_JDK)
|
||||
$1_LIBS := $(LIBCXX)
|
||||
|
||||
ifeq ($(OPENJDK_TARGET_CPU_ARCH), sparc)
|
||||
@ -324,9 +324,9 @@ define SetupBuildJvmtiDemoBody
|
||||
OPTIMIZATION := LOW, \
|
||||
CFLAGS := $$($1_CFLAGS_INCLUDE) $$(CFLAGS_JDKLIB) $$(CFLAGS_DEBUG_SYMBOLS), \
|
||||
CXXFLAGS := $$($1_CXXFLAGS), \
|
||||
LDFLAGS := $(filter-out -incremental:no -opt:ref, $(LDFLAGS_JDKLIB)) \
|
||||
LDFLAGS := $(filter-out -incremental:no -opt:ref, $$(LDFLAGS_JDKLIB)) \
|
||||
$$($1_LDFLAGS), \
|
||||
LDFLAGS_macosx := $(call SET_EXECUTABLE_ORIGIN), \
|
||||
LDFLAGS_macosx := $$(call SET_EXECUTABLE_ORIGIN), \
|
||||
LIBS := $$($1_LIBS), \
|
||||
LIBS_solaris := -lc, \
|
||||
VERSIONINFO_RESOURCE := $(GLOBAL_VERSION_INFO_RESOURCE), \
|
||||
|
||||
@ -127,8 +127,7 @@ ifneq ($(BUILD_JEXEC_SRC), )
|
||||
$(BUILD_JEXEC_INC), \
|
||||
CFLAGS_linux := -fPIC, \
|
||||
CFLAGS_solaris := -KPIC, \
|
||||
LDFLAGS := $(LDFLAGS_JDKEXE) \
|
||||
$(call SET_SHARED_LIBRARY_NAME,$(LIBRARY_PREFIX)$(SHARED_LIBRARY_SUFFIX)), \
|
||||
LDFLAGS := $(LDFLAGS_JDKEXE), \
|
||||
OBJECT_DIR := $(SUPPORT_OUTPUTDIR)/native/$(MODULE)/jexec_obj, \
|
||||
OUTPUT_DIR := $(BUILD_JEXEC_DST_DIR), \
|
||||
DEBUG_SYMBOLS := true, \
|
||||
|
||||
@ -89,7 +89,6 @@ $(eval $(call SetupNativeCompilation,BUILD_UNPACKEXE, \
|
||||
MAPFILE := $(UNPACK_MAPFILE),\
|
||||
LDFLAGS := $(UNPACKEXE_ZIPOBJS) \
|
||||
$(LDFLAGS_JDKEXE) $(LDFLAGS_CXX_JDK) \
|
||||
$(call SET_SHARED_LIBRARY_NAME,$(LIBRARY_PREFIX)unpack$(SHARED_LIBRARY_SUFFIX)) \
|
||||
$(call SET_SHARED_LIBRARY_ORIGIN), \
|
||||
LIBS := $(UNPACKEXE_LIBS) $(LIBCXX), \
|
||||
LIBS_solaris := -lc, \
|
||||
|
||||
@ -25,6 +25,12 @@
|
||||
|
||||
include NativeCompilation.gmk
|
||||
|
||||
# SetupNativeCompilation now supports debug symbols on macosx for hotspot.
|
||||
# Disable it here for the jdk binaries until we decide to enable them.
|
||||
ifeq ($(OPENJDK_TARGET_OS), macosx)
|
||||
ENABLE_DEBUG_SYMBOLS := false
|
||||
endif
|
||||
|
||||
# Prepare the find cache.
|
||||
$(eval $(call FillCacheFind, $(JDK_TOPDIR)/src/java.base/share/native/launcher))
|
||||
|
||||
@ -180,15 +186,12 @@ define SetupBuildLauncherBody
|
||||
CFLAGS_linux := -fPIC, \
|
||||
CFLAGS_solaris := -KPIC -DHAVE_GETHRTIME, \
|
||||
CFLAGS_windows := $$($1_CFLAGS_windows), \
|
||||
LDFLAGS := $(LDFLAGS_JDKEXE) \
|
||||
LDFLAGS := $$(LDFLAGS_JDKEXE) \
|
||||
$$(ORIGIN_ARG) \
|
||||
$$($1_LDFLAGS), \
|
||||
LDFLAGS_linux := \
|
||||
$(call SET_SHARED_LIBRARY_NAME,$(LIBRARY_PREFIX)$(SHARED_LIBRARY_SUFFIX)) \
|
||||
-L$(SUPPORT_OUTPUTDIR)/modules_libs/java.base$(OPENJDK_TARGET_CPU_LIBDIR)/jli, \
|
||||
LDFLAGS_macosx := $(call SET_SHARED_LIBRARY_NAME,$1), \
|
||||
LDFLAGS_solaris := $$($1_LDFLAGS_solaris) \
|
||||
$(call SET_SHARED_LIBRARY_NAME,$(LIBRARY_PREFIX)$(SHARED_LIBRARY_SUFFIX)) \
|
||||
-L$(SUPPORT_OUTPUTDIR)/modules_libs/java.base$(OPENJDK_TARGET_CPU_LIBDIR)/jli, \
|
||||
MAPFILE := $$($1_MAPFILE), \
|
||||
LIBS := $(JDKEXE_LIBS) $$($1_LIBS), \
|
||||
|
||||
@ -683,7 +683,7 @@ $(eval $(call SetupNativeCompilation,BUILD_LIBFONTMANAGER, \
|
||||
WARNINGS_AS_ERRORS_gcc := false, \
|
||||
WARNINGS_AS_ERRORS_solstudio := false, \
|
||||
MAPFILE := $(BUILD_LIBFONTMANAGER_MAPFILE), \
|
||||
LDFLAGS := $(subst -Xlinker -z -Xlinker defs,,$(LDFLAGS_JDKLIB)) $(LDFLAGS_CXX_JDK) \
|
||||
LDFLAGS := $(subst -Wl$(COMMA)-z$(COMMA)defs,,$(LDFLAGS_JDKLIB)) $(LDFLAGS_CXX_JDK) \
|
||||
$(call SET_SHARED_LIBRARY_ORIGIN), \
|
||||
LDFLAGS_unix := -L$(INSTALL_LIBRARIES_HERE), \
|
||||
LDFLAGS_macosx := -undefined dynamic_lookup, \
|
||||
@ -799,7 +799,7 @@ else # OPENJDK_TARGET_OS not windows
|
||||
LDFLAGS := $(LDFLAGS_JDKLIB) \
|
||||
$(call SET_SHARED_LIBRARY_ORIGIN), \
|
||||
LDFLAGS_unix := -L$(INSTALL_LIBRARIES_HERE), \
|
||||
LDFLAGS_macosx := -Xlinker -rpath -Xlinker @loader_path, \
|
||||
LDFLAGS_macosx := -Wl$(COMMA)-rpath$(COMMA)@loader_path, \
|
||||
LIBS_unix := $(JAWT_LIBS) $(JDKLIB_LIBS), \
|
||||
LIBS_solaris := $(X_LIBS) -lXrender, \
|
||||
LIBS_macosx := -framework Cocoa, \
|
||||
@ -1034,7 +1034,7 @@ ifeq ($(OPENJDK_TARGET_OS), macosx)
|
||||
-I$(SUPPORT_OUTPUTDIR)/headers/java.desktop, \
|
||||
LDFLAGS := $(LDFLAGS_JDKLIB) \
|
||||
$(call SET_SHARED_LIBRARY_ORIGIN) \
|
||||
-Xlinker -rpath -Xlinker @loader_path \
|
||||
-Wl$(COMMA)-rpath$(COMMA)@loader_path \
|
||||
-L$(INSTALL_LIBRARIES_HERE), \
|
||||
LIBS := -lawt -losxapp -lawt_lwawt \
|
||||
-framework Cocoa \
|
||||
|
||||
@ -65,7 +65,7 @@ $(eval $(call SetupNativeCompilation,BUILD_LIBINSTRUMENT, \
|
||||
-L$(call FindLibDirForModule, java.base)/jli, \
|
||||
LDFLAGS_solaris := $(call SET_SHARED_LIBRARY_ORIGIN,/jli) \
|
||||
-L$(call FindLibDirForModule, java.base)/jli, \
|
||||
LDFLAGS_macosx := -Xlinker -all_load $(SUPPORT_OUTPUTDIR)/native/java.base/libjli_static.a, \
|
||||
LDFLAGS_macosx := -Wl$(COMMA)-all_load, \
|
||||
LDFLAGS_aix := -L$(SUPPORT_OUTPUTDIR)/native/java.base, \
|
||||
LDFLAGS_windows := -export:Agent_OnAttach, \
|
||||
LIBS := $(JDKLIB_LIBS), \
|
||||
@ -74,7 +74,8 @@ $(eval $(call SetupNativeCompilation,BUILD_LIBINSTRUMENT, \
|
||||
LIBS_solaris := -ljli $(LIBDL), \
|
||||
LIBS_aix := -liconv -ljli_static $(LIBDL), \
|
||||
LIBS_macosx := -liconv -framework Cocoa -framework Security \
|
||||
-framework ApplicationServices, \
|
||||
-framework ApplicationServices \
|
||||
$(SUPPORT_OUTPUTDIR)/native/java.base/libjli_static.a, \
|
||||
LIBS_windows := $(WIN_JAVA_LIB) advapi32.lib \
|
||||
$(SUPPORT_OUTPUTDIR)/native/java.base/jli_static.lib, \
|
||||
VERSIONINFO_RESOURCE := $(GLOBAL_VERSION_INFO_RESOURCE), \
|
||||
|
||||
@ -46,6 +46,12 @@ else
|
||||
endif
|
||||
endif
|
||||
|
||||
# SetupNativeCompilation now supports debug symbols on macosx for hotspot.
|
||||
# Disable it here for the jdk libraries until we decide to enable them.
|
||||
ifeq ($(OPENJDK_TARGET_OS), macosx)
|
||||
ENABLE_DEBUG_SYMBOLS := false
|
||||
endif
|
||||
|
||||
################################################################################
|
||||
# Find the default set of src dirs for a native library.
|
||||
# Param 1 - module name
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1996, 2005, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1996, 2015, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -225,9 +225,12 @@ public class CharArrayReader extends Reader {
|
||||
* Closes the stream and releases any system resources associated with
|
||||
* it. Once the stream has been closed, further read(), ready(),
|
||||
* mark(), reset(), or skip() invocations will throw an IOException.
|
||||
* Closing a previously closed stream has no effect.
|
||||
* Closing a previously closed stream has no effect. This method will block
|
||||
* while there is another thread blocking on the reader.
|
||||
*/
|
||||
public void close() {
|
||||
buf = null;
|
||||
synchronized (lock) {
|
||||
buf = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1996, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1996, 2015, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -241,13 +241,16 @@ public class PushbackReader extends FilterReader {
|
||||
* Closes the stream and releases any system resources associated with
|
||||
* it. Once the stream has been closed, further read(),
|
||||
* unread(), ready(), or skip() invocations will throw an IOException.
|
||||
* Closing a previously closed stream has no effect.
|
||||
* Closing a previously closed stream has no effect. This method will block
|
||||
* while there is another thread blocking on the reader.
|
||||
*
|
||||
* @exception IOException If an I/O error occurs
|
||||
*/
|
||||
public void close() throws IOException {
|
||||
super.close();
|
||||
buf = null;
|
||||
synchronized (lock) {
|
||||
super.close();
|
||||
buf = null;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1996, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1996, 2015, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -194,9 +194,12 @@ public class StringReader extends Reader {
|
||||
* Closes the stream and releases any system resources associated with
|
||||
* it. Once the stream has been closed, further read(),
|
||||
* ready(), mark(), or reset() invocations will throw an IOException.
|
||||
* Closing a previously closed stream has no effect.
|
||||
* Closing a previously closed stream has no effect. This method will block
|
||||
* while there is another thread blocking on the reader.
|
||||
*/
|
||||
public void close() {
|
||||
str = null;
|
||||
synchronized (lock) {
|
||||
str = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -304,8 +304,8 @@ public final class StackWalker {
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a {@code StackWalker} instance with the given {@ocde options} specifying
|
||||
* the stack frame information it can access. If the given {@ocde options}
|
||||
* Returns a {@code StackWalker} instance with the given {@code options} specifying
|
||||
* the stack frame information it can access. If the given {@code options}
|
||||
* is empty, this {@code StackWalker} is configured to skip all
|
||||
* {@linkplain Option#SHOW_HIDDEN_FRAMES hidden frames} and no
|
||||
* {@linkplain Option#RETAIN_CLASS_REFERENCE class reference} is retained.
|
||||
|
||||
@ -95,16 +95,19 @@ jdk_util_other = \
|
||||
-:jdk_concurrent \
|
||||
-:jdk_stream
|
||||
|
||||
# java.util.concurrent (JSR-166)
|
||||
# Maintained by JSR-166 EG (Doug Lea et al)
|
||||
# Deque and PriorityQueue are also generally maintained by JSR-166
|
||||
jdk_concurrent = \
|
||||
java/util/concurrent \
|
||||
java/util/Deque \
|
||||
java/util/PriorityQueue
|
||||
|
||||
# Java Collections Framework
|
||||
# All collections, core and concurrent
|
||||
jdk_collections = \
|
||||
:jdk_collections_core \
|
||||
:jdk_concurrent
|
||||
|
||||
# java.util.concurrent
|
||||
# Includes concurrent collections plus other stuff
|
||||
# Maintained by JSR-166 EG (Doug Lea et al)
|
||||
jdk_concurrent = \
|
||||
java/util/concurrent
|
||||
|
||||
# Java Collections Framework core classes
|
||||
jdk_collections_core = \
|
||||
java/util/AbstractCollection \
|
||||
java/util/AbstractList \
|
||||
java/util/AbstractMap \
|
||||
@ -114,19 +117,22 @@ jdk_collections = \
|
||||
java/util/BitSet \
|
||||
java/util/Collection \
|
||||
java/util/Collections \
|
||||
java/util/Comparator \
|
||||
java/util/Deque \
|
||||
java/util/EnumMap \
|
||||
java/util/EnumSet \
|
||||
java/util/Comparator \
|
||||
java/util/Iterator \
|
||||
java/util/HashMap \
|
||||
java/util/HashSet \
|
||||
java/util/Hashtable \
|
||||
java/util/IdentityHashMap \
|
||||
java/util/List \
|
||||
java/util/Iterator \
|
||||
java/util/LinkedHashMap \
|
||||
java/util/LinkedHashSet \
|
||||
java/util/LinkedList \
|
||||
java/util/List \
|
||||
java/util/Map \
|
||||
java/util/NavigableMap \
|
||||
java/util/PriorityQueue \
|
||||
java/util/TimSort \
|
||||
java/util/TreeMap \
|
||||
java/util/Vector \
|
||||
|
||||
115
jdk/test/java/io/PushbackReader/ReadCloseRaceNPE.java
Normal file
115
jdk/test/java/io/PushbackReader/ReadCloseRaceNPE.java
Normal file
@ -0,0 +1,115 @@
|
||||
/*
|
||||
* Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
* under the terms of the GNU General Public License version 2 only, as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* This code is distributed in the hope that it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
* version 2 for more details (a copy is included in the LICENSE file that
|
||||
* accompanied this code).
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License version
|
||||
* 2 along with this work; if not, write to the Free Software Foundation,
|
||||
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
*
|
||||
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||
* or visit www.oracle.com if you need additional information or have any
|
||||
* questions.
|
||||
*/
|
||||
|
||||
/*
|
||||
* @test
|
||||
* @bug 8143394
|
||||
* @summary Check for NullPointerException in race between read() and close().
|
||||
*/
|
||||
import java.io.CharArrayReader;
|
||||
import java.io.IOException;
|
||||
import java.io.PushbackReader;
|
||||
import java.io.Reader;
|
||||
import java.io.StringReader;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.atomic.AtomicBoolean;
|
||||
import java.util.concurrent.atomic.AtomicReference;
|
||||
import java.util.function.Supplier;
|
||||
|
||||
public class ReadCloseRaceNPE {
|
||||
|
||||
private static final int BUF_SIZE = 1000;
|
||||
private static final long TIMEOUT_MS = 3000;
|
||||
|
||||
private static final List<Exception> failures = new ArrayList<>();
|
||||
|
||||
private static void testReader(final Supplier<Reader> readerSupplier)
|
||||
throws InterruptedException {
|
||||
AtomicReference<Reader> readerRef =
|
||||
new AtomicReference<>(readerSupplier.get());
|
||||
|
||||
AtomicBoolean isFinished = new AtomicBoolean();
|
||||
|
||||
Runnable readTask = () -> {
|
||||
long startTime = System.currentTimeMillis();
|
||||
while (System.currentTimeMillis() - startTime < TIMEOUT_MS) {
|
||||
try {
|
||||
readerRef.get().read();
|
||||
} catch (Exception e) {
|
||||
if (!(e instanceof IOException)) {
|
||||
failures.add(e);
|
||||
break;
|
||||
}
|
||||
readerRef.set(readerSupplier.get());
|
||||
}
|
||||
}
|
||||
isFinished.set(true);
|
||||
};
|
||||
|
||||
Runnable closeTask = () -> {
|
||||
while (!isFinished.get()) {
|
||||
try {
|
||||
readerRef.get().close();
|
||||
} catch (Exception e) {
|
||||
if (!(e instanceof IOException)) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
Thread readThread = new Thread(readTask);
|
||||
Thread closeThread = new Thread(closeTask);
|
||||
|
||||
readThread.start();
|
||||
closeThread.start();
|
||||
readThread.join();
|
||||
closeThread.join();
|
||||
}
|
||||
|
||||
public static void main(String[] args) throws Throwable {
|
||||
final String s = "Two riders were approaching.\\n";
|
||||
|
||||
Supplier<Reader> charPushbackReaderSupplier = () -> {
|
||||
char buf[] = new char[s.length()];
|
||||
s.getChars(0, s.length(), buf, 0);
|
||||
CharArrayReader in = new CharArrayReader(buf);
|
||||
return new PushbackReader(in, BUF_SIZE);
|
||||
};
|
||||
|
||||
testReader(charPushbackReaderSupplier);
|
||||
|
||||
Supplier<Reader> stringPushbackReaderSupplier = () -> {
|
||||
StringReader in = new StringReader(s);
|
||||
return new PushbackReader(in, BUF_SIZE);
|
||||
};
|
||||
|
||||
testReader(stringPushbackReaderSupplier);
|
||||
|
||||
if (!failures.isEmpty()) {
|
||||
failures.stream().forEach((x) -> ((Exception) x).printStackTrace());
|
||||
throw new RuntimeException("PushbackReaderNPE failed");
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user