Compare commits

...

7 Commits

Author SHA1 Message Date
Vladimir Lagunov
7dc3ddd974 JBR-9779 io-over-nio: RandomAccessFile now can open Windows pipes
The WinAPI function `GetFileAttributesW` actually opens a file and immediately closes it. If the file is a named pipe, it triggers a connection to the listener of the pipe. The listener closes the connection also asynchronously.

If the pipe is created with `nMaxInstances=1`, this code does not work:

```java
var path = Path.of("""\\.\pipe\openssh-ssh-agent""")

// `readAttributes` calls `GetFileAttributesW`, it opens the file and then closes it.
if (Files.readAttributes(path, BasicFileAttributes.class).isRegularFile()) {
  // Very probable race condition: the listener of the pipe has already received
  // the request of opening the file triggered by `GetFileAttributesW`
  // but hasn't closed the connection on their side yet.
  Files.newByteChannel(path);  // Fails with ERROR_PIPE_BUSY.
}
```

This revision adds an explicit check if some file looks like a Windows pipe. In these cases `RandomAccessFile` and `FileInputStream` don't call `Files.readAttributes` for the file.
2025-12-22 13:16:30 +01:00
Vladimir Lagunov
a3fdce3eb8 JBR-9779 Refactor: extract common logic for getting nio path in FileInputStream, RandomAccessFile, and FileOutputStream 2025-12-22 13:04:05 +01:00
Vitaly Provodin
c9ff46a1db JBR-9756 take JBR debug symbols from images/symbols 2025-12-18 05:54:46 +04:00
Vladimir Lagunov
f22792bf7e JBR-9797 Enable jbr.java.io.over.nio in JBR 25 2025-12-17 16:23:02 +01:00
Maxim Kartashev
b86151562f JBR-9768 sources/TestNoNULL.java: 'NULL' found in src/hotspot/share/runtime/arguments.cpp at line 3878 2025-12-11 12:09:19 +04:00
Vladimir Dvorak
00dfb2b2ce JBR-9757 DCEVM: Nullify MemberName in MethodHandle for invokevirtual/invokeinterface 2025-12-08 19:31:04 +01:00
Vitaly Provodin
4c46c41847 update exclude list based on the outcomes of agent updates: linux-6.14.0-1015-aws -> linux-6.14.0-1017-aws 2025-12-08 14:26:07 +04:00
19 changed files with 247 additions and 68 deletions

View File

@@ -132,6 +132,20 @@ function zip_native_debug_symbols() {
tar --no-recursion --null -T - -czf ../"$jbr_diz_name".tar.gz) || do_exit $?
}
function zip_native_debug_symbols_win() {
image_bundle_path=$(echo $1 | cut -d"/" -f-4)
jdk_name=$(echo $1 | cut -d"/" -f5)
jbr_pdb_name=$2
[ -d "$jbr_pdb_name" ] && rm -rf $jbr_pdb_name
mkdir $jbr_pdb_name
rsync_target="../../../../"$jbr_pdb_name
(cd $image_bundle_path && find . -name '*' -exec rsync -R {} $rsync_target \;)
(/usr/bin/zip -r $jbr_pdb_name.zip $jbr_pdb_name) || do_exit $?
}
function do_exit() {
exit_code=$1
[ $do_reset_changes -eq 1 ] && git checkout HEAD jb/project/tools/common/modules.list src/java.desktop/share/classes/module-info.java

View File

@@ -102,7 +102,7 @@ function create_image_bundle {
mv release "$IMAGES_DIR"/"$__root_dir"/release
cp $IMAGES_DIR/jdk/lib/src.zip "$IMAGES_DIR"/"$__root_dir"/lib
copy_jmods "$__modules" "$__modules_path" "$IMAGES_DIR"/"$__root_dir"/jmods
zip_native_debug_symbols $IMAGES_DIR/jdk "${JBR}_diz"
zip_native_debug_symbols $IMAGES_DIR/symbols "${JBR}_diz"
fi
# jmod does not preserve file permissions (JDK-8173610)

View File

@@ -122,7 +122,7 @@ function create_image_bundle {
mv release "$IMAGES_DIR"/"$__root_dir"/release
cp $IMAGES_DIR/jdk/lib/src.zip "$IMAGES_DIR"/"$__root_dir"/lib
copy_jmods "$__modules" "$__modules_path" "$IMAGES_DIR"/"$__root_dir"/jmods
zip_native_debug_symbols $IMAGES_DIR/jdk "${JBR}_diz"
zip_native_debug_symbols $IMAGES_DIR/symbols "${JBR}_diz"
fi
# jmod does not preserve file permissions (JDK-8173610)

View File

@@ -69,7 +69,7 @@ function create_image_bundle {
mv release "$IMAGES_DIR"/"$__root_dir"/release
cp $IMAGES_DIR/jdk/lib/src.zip "$IMAGES_DIR"/"$__root_dir"/lib
copy_jmods "$__modules" "$__modules_path" "$IMAGES_DIR"/"$__root_dir"/jmods
zip_native_debug_symbols $IMAGES_DIR/jdk "${JBR}_diz"
zip_native_debug_symbols $IMAGES_DIR/symbols "${JBR}_diz"
fi
# jmod does not preserve file permissions (JDK-8173610)

View File

@@ -96,7 +96,7 @@ function create_image_bundle {
mv release $JRE_CONTENTS/Home/release
cp $IMAGES_DIR/jdk-bundle/jdk-$JBSDK_VERSION.jdk/Contents/Home/lib/src.zip $JRE_CONTENTS/Home/lib
copy_jmods "$__modules" "$__modules_path" "$JRE_CONTENTS"/Home/jmods
zip_native_debug_symbols $IMAGES_DIR/jdk-bundle/jdk-$JBSDK_VERSION.jdk "${JBR}_diz"
zip_native_debug_symbols $IMAGES_DIR/symbols "${JBR}_diz"
fi
if [ "$bundle_type" == "jcef" ]; then

View File

@@ -80,6 +80,7 @@ function create_image_bundle {
rsync -amv --include="*/" --include="*.pdb" --exclude="*" $dir $__root_dir
done
copy_jmods "$__modules" "$__modules_path" "$__root_dir"/jmods
zip_native_debug_symbols_win $IMAGES_DIR/symbols "${__root_dir}_pdb"
fi
}

View File

@@ -73,6 +73,7 @@ function create_image_bundle {
rsync -amv --include="*/" --include="*.pdb" --exclude="*" $dir $__root_dir
done
copy_jmods "$__modules" "$__modules_path" "$__root_dir"/jmods
zip_native_debug_symbols_win $IMAGES_DIR/symbols "${__root_dir}_pdb"
fi
}

View File

@@ -69,6 +69,7 @@ function create_image_bundle {
rsync -amv --include="*/" --include="*.pdb" --exclude="*" $dir $__root_dir
done
copy_jmods "$__modules" "$__modules_path" "$__root_dir"/jmods
zip_native_debug_symbols_win $IMAGES_DIR/symbols "${__root_dir}_pdb"
fi
}

View File

@@ -371,7 +371,24 @@ class ChangePointersOopClosure : public BasicOopIterateClosure {
int ref_kind = (flags >> REFERENCE_KIND_SHIFT) & REFERENCE_KIND_MASK;
if (MethodHandles::ref_kind_is_method(ref_kind)) {
Method* m = (Method*) java_lang_invoke_MemberName::vmtarget(obj);
if (m != nullptr && m->method_holder()->is_redefining()) {
if (m == Universe::throw_no_such_method_error()) {
// ResolvedMethodTable patches ResolvedMethodName.vmtarget to throw_no_such_method_error() when a method is deleted
oop clazz = java_lang_invoke_MemberName::clazz(obj);
if (clazz != nullptr) {
Klass* k = java_lang_Class::as_Klass(clazz);
if (k != nullptr && (k->is_redefining() || k->new_version() != nullptr)
&& (k->newest_version() != vmClasses::internal_Unsafe_klass()->newest_version())) {
// vmtarget is a throw-sentinel
intptr_t vmindex = java_lang_invoke_MemberName::vmindex(obj);
if (vmindex >= 0) {
// A vtable/itable vmindex can still be cached for invokeVirtual/invokeInterface handles.
// After class redefinition the vtable/itable layout may change and the deleted method is
// no longer at this slot, so we must clear the oop.
return false;
}
}
}
} else if (m != nullptr && m->method_holder()->is_redefining()) {
// Let's try to re-resolve method
InstanceKlass* newest = InstanceKlass::cast(m->method_holder()->newest_version());
Method* new_method = newest->find_method(m->name(), m->signature());

View File

@@ -3875,7 +3875,7 @@ static const char * get_toolkit_name() {
wl_display_disconnect_t fp_wl_display_disconnect = (wl_display_disconnect_t) dlsym(libwayland, "wl_display_disconnect");
if (fp_wl_display_connect && fp_wl_display_disconnect) {
void* display = fp_wl_display_connect(NULL);
void* display = fp_wl_display_connect(nullptr);
if (display) {
toolkit_name = "WLToolkit";
fp_wl_display_disconnect(display);

View File

@@ -40,7 +40,7 @@ public class IoOverNio {
*/
public static final Debug DEBUG;
public static final boolean IS_ENABLED_IN_GENERAL =
System.getProperty("jbr.java.io.use.nio", "false").equalsIgnoreCase("true");
System.getProperty("jbr.java.io.use.nio", "true").equalsIgnoreCase("true");
private static final ThreadLocal<Integer> ALLOW_IN_THIS_THREAD = new ThreadLocal<>();
static {

View File

@@ -28,7 +28,6 @@ package java.io;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;
import java.nio.file.Files;
import java.nio.file.InvalidPathException;
import java.nio.file.Path;
import java.nio.file.StandardOpenOption;
import java.util.Arrays;
@@ -158,25 +157,11 @@ public class FileInputStream extends InputStream
try (var guard = IoOverNio.RecursionGuard.create(FileInputStream.class)) {
IoOverNio.blackhole(guard);
java.nio.file.FileSystem nioFs = IoOverNioFileSystem.acquireNioFs(path);
Path nioPath = null;
if (nioFs != null && path != null) {
try {
nioPath = nioFs.getPath(path);
isRegularFile = Files.isRegularFile(nioPath);
} catch (InvalidPathException _) {
// Nothing.
}
}
// Two significant differences between the legacy java.io and java.nio.files:
// * java.nio.file allows to open directories as streams, java.io.FileInputStream doesn't.
// * java.nio.file doesn't work well with pseudo devices, i.e., `seek()` fails, while java.io works well.
useNio = nioPath != null && isRegularFile == Boolean.TRUE;
Path nioPath = IoOverNioFileSystem.getNioPath(file, true);
useNio = nioPath != null;
if (useNio) {
var bundle = IoOverNioFileSystem.initializeStreamUsingNio(
this, nioFs, file, nioPath, Set.of(StandardOpenOption.READ), channelCleanable);
this, nioPath.getFileSystem(), file, nioPath, Set.of(StandardOpenOption.READ), channelCleanable);
channel = bundle.channel();
fd = bundle.fd();
externalChannelHolder = bundle.externalChannelHolder();

View File

@@ -227,11 +227,10 @@ public class FileOutputStream extends OutputStream
try (var guard = IoOverNio.RecursionGuard.create(FileOutputStream.class)) {
IoOverNio.blackhole(guard);
java.nio.file.FileSystem nioFs = IoOverNioFileSystem.acquireNioFs(path);
useNio = path != null && nioFs != null;
Path nioPath = IoOverNioFileSystem.getNioPath(file, false);
useNio = nioPath != null;
if (useNio) {
Path nioPath = nioFs.getPath(path);
java.nio.file.FileSystem nioFs = nioPath.getFileSystem();
// java.io backend doesn't open DOS hidden files for writing, but java.nio.file opens.
// This code mimics the old behavior.
if (nioFs.getSeparator().equals("\\")) {

View File

@@ -41,6 +41,7 @@ import java.nio.file.FileSystems;
import java.nio.file.Files;
import java.nio.file.InvalidPathException;
import java.nio.file.LinkOption;
import java.nio.file.NoSuchFileException;
import java.nio.file.OpenOption;
import java.nio.file.Path;
import java.nio.file.StandardCopyOption;
@@ -58,6 +59,7 @@ import java.util.ArrayList;
import java.util.Arrays;
import java.util.EnumSet;
import java.util.List;
import java.util.Locale;
import java.util.Objects;
import java.util.Set;
@@ -123,6 +125,69 @@ class IoOverNioFileSystem extends FileSystem {
return result;
}
static Path getNioPath(File file, boolean mustBeRegularFile) {
String path = file.getPath();
java.nio.file.FileSystem nioFs = IoOverNioFileSystem.acquireNioFs(path);
if (nioFs == null) {
return null;
}
Path nioPath;
try {
nioPath = nioFs.getPath(path);
} catch (InvalidPathException _) {
return null;
}
if (!mustBeRegularFile) {
return nioPath;
}
if (isWindowsPipe(nioPath)) {
// https://learn.microsoft.com/en-us/windows/win32/api/winbase/nf-winbase-createnamedpipea see nMaxInstances:
//
// Getting file attributes in this case is dangerous.
// GetFileAttributesW acquires a connection to the pipe internally,
// occupying a place on the server side.
// The server and the client are very likely two different processes, and it takes time to deliver
// the connection closing message to the server.
// If the caller invokes CreateFileW fast enough after GetFileAttributesW and nMaxInstances = 1,
// CreateFileW is called before the server closes the previous connection created by GetFileAttributesW
// and ERROR_PIPE_BUSY is returned.
//
// Anyway, `readAttributes(nioPath).isRegularFile()` returns true for pipes, so it's safe to return here.
return nioPath;
}
// Two significant differences between the legacy java.io and java.nio.files:
// * java.nio.file allows to open directories as streams, java.io.FileInputStream doesn't.
// * java.nio.file doesn't work well with pseudo devices, i.e., `seek()` fails, while java.io works well.
try {
if (Files.readAttributes(nioPath, BasicFileAttributes.class, LinkOption.NOFOLLOW_LINKS).isRegularFile()) {
return nioPath;
}
} catch (NoSuchFileException _) {
return nioPath;
} catch (IOException _) {
// Ignored.
}
return null;
}
/**
* <a href="https://learn.microsoft.com/en-us/windows/win32/ipc/pipe-names">
* The pipe path format: {@code ^\\(\w+|\.)\pipe\.*}
* </a>
*/
private static boolean isWindowsPipe(Path path) {
// A small JMH benchmark shows that this code takes less than a microsecond,
// and the JIT compiler does its job very well here.
return path.isAbsolute() &&
path.getRoot().toString().startsWith("\\\\") &&
path.getRoot().toString().toLowerCase(Locale.getDefault()).endsWith("\\pipe\\");
}
private static boolean setPermission0(java.nio.file.FileSystem nioFs, File f, int access, boolean enable, boolean owneronly) {
if (f.getPath().isEmpty()) {
if (nioFs.getSeparator().equals("\\")) {

View File

@@ -27,16 +27,11 @@ package java.io;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;
import java.nio.channels.NonWritableChannelException;
import java.nio.file.FileSystem;
import java.nio.file.Files;
import java.nio.file.InvalidPathException;
import java.nio.file.LinkOption;
import java.nio.file.NoSuchFileException;
import java.nio.file.OpenOption;
import java.nio.file.Path;
import java.nio.channels.NonWritableChannelException;
import java.nio.file.OpenOption;
import java.nio.file.StandardOpenOption;
import java.nio.file.attribute.BasicFileAttributes;
import java.util.Arrays;
import java.util.HashSet;
@@ -281,35 +276,11 @@ public class RandomAccessFile implements DataOutput, DataInput, Closeable {
try (var guard = IoOverNio.RecursionGuard.create(RandomAccessFile.class)) {
IoOverNio.blackhole(guard);
FileSystem nioFs = IoOverNioFileSystem.acquireNioFs(path);
Path nioPath = null;
if (nioFs != null) {
try {
nioPath = nioFs.getPath(path);
} catch (InvalidPathException _) {
// Nothing.
}
}
// Two significant differences between the legacy java.io and java.nio.files:
// * java.nio.file allows to open directories as streams, java.io.FileInputStream doesn't.
// * java.nio.file doesn't work well with pseudo devices, i.e., `seek()` fails, while java.io works well.
boolean isRegularFile;
try {
isRegularFile = nioPath != null &&
Files.readAttributes(nioPath, BasicFileAttributes.class, LinkOption.NOFOLLOW_LINKS).isRegularFile();
}
catch (NoSuchFileException _) {
isRegularFile = true;
}
catch (IOException _) {
isRegularFile = false;
}
useNio = nioPath != null && isRegularFile;
Path nioPath = IoOverNioFileSystem.getNioPath(file, true);
useNio = nioPath != null;
if (useNio) {
var bundle = IoOverNioFileSystem.initializeStreamUsingNio(
this, nioFs, file, nioPath, optionsForChannel(imode), channelCleanable);
this, nioPath.getFileSystem(), file, nioPath, optionsForChannel(imode), channelCleanable);
channel = bundle.channel();
fd = bundle.fd();
externalChannelHolder = bundle.externalChannelHolder();

View File

@@ -24,11 +24,14 @@
/* @test
* @summary java.io.RandomAccessFileTest uses java.nio.file inside.
* @library testNio
* @compile --enable-preview --source 25 RandomAccessFileTest.java
* @run junit/othervm
* -Djava.nio.file.spi.DefaultFileSystemProvider=testNio.ManglingFileSystemProvider
* -Djava.nio.file.spi.DefaultFileSystemProvider=testNio.ManglingFileSystemProvidera
* -Djbr.java.io.use.nio=true
* --add-opens jdk.unsupported/com.sun.nio.file=ALL-UNNAMED
* --add-opens java.base/java.io=ALL-UNNAMED
* --enable-native-access=ALL-UNNAMED
* --enable-preview
* RandomAccessFileTest
*/
@@ -45,6 +48,9 @@ import testNio.ManglingFileSystemProvider;
import java.io.EOFException;
import java.io.File;
import java.io.RandomAccessFile;
import java.lang.foreign.*;
import java.lang.invoke.MethodHandle;
import java.lang.invoke.VarHandle;
import java.lang.reflect.Field;
import java.nio.channels.FileChannel;
import java.nio.channels.FileLock;
@@ -55,6 +61,7 @@ import java.util.Arrays;
import java.util.Collections;
import java.util.EnumSet;
import java.util.Objects;
import java.util.concurrent.atomic.AtomicBoolean;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
@@ -293,4 +300,122 @@ public class RandomAccessFileTest {
FileSystems.getDefault().provider().newFileChannel(file.toPath(), Collections.singleton(option)).close();
}
}
/**
* JBR-9779
*/
@Test
public void testWindowsPipe() throws Throwable {
Assume.assumeTrue("Windows-only test", System.getProperty("os.name").toLowerCase().startsWith("win"));
// Creating a pipe.
Linker linker = Linker.nativeLinker();
SymbolLookup loader = SymbolLookup.libraryLookup("kernel32", Arena.global());
StructLayout captureLayout = Linker.Option.captureStateLayout();
VarHandle GetLastError = captureLayout.varHandle(MemoryLayout.PathElement.groupElement("GetLastError"));
MethodHandle CreateNamedPipeW = linker.downcallHandle(
loader.find("CreateNamedPipeW").get(),
FunctionDescriptor.of(ValueLayout.JAVA_LONG,
ValueLayout.ADDRESS, ValueLayout.JAVA_INT, ValueLayout.JAVA_INT,
ValueLayout.JAVA_INT, ValueLayout.JAVA_INT, ValueLayout.JAVA_INT, ValueLayout.JAVA_INT,
ValueLayout.ADDRESS),
Linker.Option.captureCallState("GetLastError")
);
MethodHandle ConnectNamedPipe = linker.downcallHandle(
loader.find("ConnectNamedPipe").get(),
FunctionDescriptor.of(ValueLayout.JAVA_INT, ValueLayout.JAVA_LONG, ValueLayout.ADDRESS),
Linker.Option.captureCallState("GetLastError")
);
MethodHandle DisconnectNamedPipe = linker.downcallHandle(
loader.find("DisconnectNamedPipe").get(),
FunctionDescriptor.of(ValueLayout.JAVA_INT, ValueLayout.JAVA_LONG)
);
MethodHandle PeekNamedPipe = linker.downcallHandle(
loader.find("PeekNamedPipe").get(),
FunctionDescriptor.of(ValueLayout.JAVA_INT, ValueLayout.JAVA_LONG,
ValueLayout.ADDRESS, ValueLayout.JAVA_INT, ValueLayout.ADDRESS,
ValueLayout.ADDRESS, ValueLayout.ADDRESS)
);
MethodHandle CloseHandle = linker.downcallHandle(
loader.find("CloseHandle").get(),
FunctionDescriptor.of(ValueLayout.JAVA_INT, ValueLayout.JAVA_LONG)
);
String pipeName = "\\\\.\\pipe\\jbr-test-pipe-" + System.nanoTime();
Arena arena = Arena.ofAuto();
char[] nameChars = (pipeName + "\0").toCharArray(); // `char` on Windows is UTF-16, as WinAPI expects.
MemorySegment pipeWinPath = arena.allocateFrom(ValueLayout.JAVA_CHAR, nameChars);
MemorySegment capturedState = arena.allocate(captureLayout);
final long INVALID_HANDLE_VALUE = -1L;
long hPipe = (long) CreateNamedPipeW.invokeExact(
capturedState,
pipeWinPath,
0x00000003, // dwOpenMode = PIPE_ACCESS_DUPLEX
0x00000000, // dwPipeMode = PIPE_TYPE_BYTE
1, // nMaxInstances. Limit to 1 to force ERROR_PIPE_BUSY.
1024, // nOutBufferSize
1024, // nInBufferSize
0, // nDefaultTimeOut
MemorySegment.NULL // lpSecurityAttributes
);
if (hPipe == INVALID_HANDLE_VALUE) {
int errorCode = (int) GetLastError.get(capturedState);
throw new Exception("CreateNamedPipeW failed: " + errorCode);
}
AtomicBoolean keepRunning = new AtomicBoolean(true);
Thread serverThread = new Thread(() -> {
// This server accepts a connection and does nothing until the client disconnects explicitly.
try {
int i = 0;
while (keepRunning.get()) {
int connected = (int) ConnectNamedPipe.invokeExact(capturedState, hPipe, MemorySegment.NULL);
if (connected == 0) {
int errorCode = (int) GetLastError.get(capturedState);
// https://learn.microsoft.com/en-us/windows/win32/debug/system-error-codes--0-499-
if (errorCode == 6 && !keepRunning.get()) { // ERROR_INVALID_HANDLE
break;
}
throw new Exception("ConnectNamedPipe failed: " + errorCode);
}
try {
int peekResult;
do {
// Random timeout. The timeout must be big enough to reveal possible consequent
// attempts to connect to the pipe.
Thread.sleep(1000);
// Check if the pipe is still connected by peeking at it.
peekResult = (int) PeekNamedPipe.invokeExact(hPipe, MemorySegment.NULL, 0,
MemorySegment.NULL, MemorySegment.NULL, MemorySegment.NULL);
}
while (keepRunning.get() && peekResult != 0);
} finally {
int disconnected = (int) DisconnectNamedPipe.invokeExact(hPipe);
}
}
} catch (Throwable e) {
e.printStackTrace();
}
});
serverThread.setDaemon(true);
serverThread.start();
try {
new RandomAccessFile(pipeName, "rw").close();
} finally {
keepRunning.set(false);
int closed = (int) CloseHandle.invokeExact(hPipe);
}
}
}

View File

@@ -112,7 +112,7 @@
############################################################################
java/awt/dnd/RemoveDropTargetCrashTest/RemoveDropTargetCrashTest.java JBR-8960 windows-x64
java/awt/Focus/ModalDialogInFocusEventTest.java JBR-7818 linux-6.14.0-1010-aws,linux-6.14.0-1012-aws,linux-6.14.0-1014-aws,linux-6.14.0-1015-aws
java/awt/Focus/ModalDialogInFocusEventTest.java JBR-7818 linux-6.14.0-1010-aws,linux-6.14.0-1012-aws,linux-6.14.0-1014-aws,linux-6.14.0-1015-aws,linux-6.14.0-1017-aws
java/awt/Frame/GetGraphicsStressTest/GetGraphicsStressTest.java JBR-8542 windows-all timeout
java/awt/Graphics2D/TextPerf.java JBR-8541 linux-all,windows-all
java/awt/GridBagLayout/ComponentShortage.java 8355280,JBR-9347 windows-all,linux-all,macosx-x64

View File

@@ -893,7 +893,7 @@ java/nio/channels/DatagramChannel/ManySourcesAndTargets.java 8264385 macosx-a
java/nio/channels/DatagramChannel/MulticastSendReceiveTests.java 8144003,JBR-9218 macosx-all,linux-6.15.8-100.fc41.x86_64,linux-6.16.7-100.fc41.x86_64,linux-linux-6.16.7-200.fc42.x86_64,linux-6.17.7-200.fc42.x86_64,linux-6.17.8-200.fc42.x86_64
java/nio/channels/DatagramChannel/Promiscuous.java 8144003,JBR-9218 macosx-all,linux-6.15.8-100.fc41.x86_64,linux-6.16.7-100.fc41.x86_64,linux-linux-6.16.7-200.fc42.x86_64,linux-6.17.7-200.fc42.x86_64,linux-6.17.8-200.fc42.x86_64
java/nio/channels/DatagramChannel/PromiscuousIPv6.java JBR-8828,JBR-9218 macosx-x64,linux-6.15.8-100.fc41.x86_64,linux-6.16.7-100.fc41.x86_64,linux-linux-6.16.7-200.fc42.x86_64,linux-6.17.7-200.fc42.x86_64,linux-6.17.8-200.fc42.x86_64
java/nio/channels/DatagramChannel/SendReceiveMaxSize.java JBR-9447 linux-6.14.0-1013-aws,linux-6.14.0-1014-aws,linux-6.14.0-1015-aws
java/nio/channels/DatagramChannel/SendReceiveMaxSize.java JBR-9447 linux-6.14.0-1013-aws,linux-6.14.0-1014-aws,linux-6.14.0-1015-aws,linux-6.14.0-1017-aws
java/nio/channels/DatagramChannel/Unref.java 8233437 generic-all
java/nio/channels/FileChannel/LargeGatheringWrite.java JBR-9316 linux-6.15.8-100.fc41.x86_64,linux-6.16.7-100.fc41.x86_64,linux-linux-6.16.7-200.fc42.x86_64,linux-6.17.7-200.fc42.x86_64,linux-6.17.8-200.fc42.x86_64
java/nio/channels/Selector/LotsOfInterrupts.java#virtual JBR-8940 windows-aarch64

View File

@@ -2,7 +2,7 @@ java/awt/font/GlyphVector/LayoutCompatTest.java JBR-8262 linux-all
java/awt/MenuShortcut/FunctionKeyShortcut.java JBR-7932 linux-all
java/awt/Multiscreen/MultiScreenCheckScreenIDTest.java JBR-8263 linux-x64
javax/swing/JComponent/6989617/bug6989617.java JBR-8796 linux-6.14.0-1010-aws,linux-6.14.0-1012-aws,linux-6.14.0-1014-aws,linux-6.14.0-1015-aws
javax/swing/JComponent/6989617/bug6989617.java JBR-8796 linux-6.14.0-1010-aws,linux-6.14.0-1012-aws,linux-6.14.0-1014-aws,linux-6.14.0-1015-aws,linux-6.14.0-1017-aws
javax/swing/JDesktopPane/TestDesktopManagerNPE.java JBR-8449 linux-x64
javax/swing/GraphicsConfigNotifier/TestMultiScreenGConfigNotify.java JBR-8266 linux-x64
javax/swing/InputVerifier/VerifyTarget/VerifyTargetTest.java JBR-7520,JBR-9320 linux-6.8.0-1036-aws,linux-6.8.0-1039-aws,linux-6.8.0-1040-aws,linux-6.8.0-1043-aws,linux-6.14.9-arch1-1