haikuports: dev-lang/openjdk NetworkInterface.isLoopback() crashes with java.net.SocketException
Description
NetworkInterface
methods that call native code (e.g. isLoopback()
, isUp()
, getMTU()
) crash with an exception.
Original issue
Gradle build tool cannot be run on Haiku’s OpenJDK. Upon startup Gradle 6.x searches for a loopback interface and fails with a crash:
java.net.SocketException: Invalid Argument (getFlags() failed)
at java.net.NetworkInterface.isLoopback0(Native Method)
at java.net.NetworkInterface.isLoopback(NetworkInterface.java:411)
at org.gradle.internal.remote.internal.inet.InetAddresses.analyzeNetworkInterface(InetAddresses.java:55)
at org.gradle.internal.remote.internal.inet.InetAddresses.analyzeNetworkInterfaces(InetAddresses.java:47)
at org.gradle.internal.remote.internal.inet.InetAddresses.<init>(InetAddresses.java:40)
at org.gradle.internal.remote.internal.inet.InetAddressFactory.init(InetAddressFactory.java:99)
at org.gradle.internal.remote.internal.inet.InetAddressFactory.getWildcardBindingAddress(InetAddressFactory.java:84)
at org.gradle.cache.internal.locklistener.FileLockCommunicator.<init>(FileLockCommunicator.java:49)
at org.gradle.cache.internal.locklistener.DefaultFileLockContentionHandler.getCommunicator(DefaultFileLockContentionHandler.java:263)
at org.gradle.cache.internal.locklistener.DefaultFileLockContentionHandler.reservePort(DefaultFileLockContentionHandler.java:255)
at org.gradle.cache.internal.DefaultFileLockManager.lock(DefaultFileLockManager.java:108)
…
Sample to reproduce
import java.net.InetAddress;
import java.net.NetworkInterface;
import java.net.SocketException;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.List;
public class Net {
public static void main(String[] args) throws Exception {
Net net = new Net();
net.analyze();
}
public void analyze() throws Exception {
Enumeration<NetworkInterface> interfaces = NetworkInterface.getNetworkInterfaces();
if (interfaces == null) {
log("No network interfaces found");
return;
}
while (interfaces.hasMoreElements()) {
NetworkInterface networkInterface = interfaces.nextElement();
log("Network interface %s", networkInterface.getDisplayName());
try {
// NetworkInterface.isLoopback() throws
// "java.net.SocketException: Invalid Argument (getFlags() failed)"
log("Is this a loopback interface? %s", networkInterface.isLoopback());
// NetworkInterface.isUp() also throws the same exception
log("Is this a interface up? %s", networkInterface.isUp());
} catch (Throwable e) {
log("Error while querying interface %s", networkInterface);
e.printStackTrace();
}
}
}
private void log(String message, Object... args) {
System.out.println(String.format(message, args));
}
}
When that code is run on my Haiku installation, it outputs the following exceptions:
Network interface loop
Error while querying interface name:loop (loop)
java.net.SocketException: Invalid Argument (getFlags() failed)
at java.base/java.net.NetworkInterface.isLoopback0(Native Method)
at java.base/java.net.NetworkInterface.isLoopback(NetworkInterface.java:458)
at Net.analyze(Net.java:28)
at Net.main(Net.java:12)
Network interface /dev/net/pcnet/0
Error while querying interface name:/dev/net/pcnet/0 (/dev/net/pcnet/0)
java.net.SocketException: Invalid Argument (getFlags() failed)
at java.base/java.net.NetworkInterface.isLoopback0(Native Method)
at java.base/java.net.NetworkInterface.isLoopback(NetworkInterface.java:458)
at Net.analyze(Net.java:28)
at Net.main(Net.java:12)
Environment
Haiku x86_64 Walter (Revision hrev 54672) Kernel 23.10.2020 6:34:17
VM VMWare Fusion 12 on macOS 10.15.7 2 CPUs, 8192 Mb
OpenJDK Reproduces on various versions: 1.8.u242_b8-2, 11.0.4.11-1, 13.0.2.8-1
About this issue
- Original URL
- State: closed
- Created 4 years ago
- Comments: 17 (17 by maintainers)
all versions are rebuilt with the patch.
I added a patch in 0c53275807ec4873d69691f30c0482773237909e
@volo-droid indeed sorry for the mix-up The Haiku change is needed because the OpenJDK code should work as is. Now yes, we need a workaround for the current Haiku release. Probably at Haikuports.
Yup.