diff --git a/transport-native-io_uring/src/main/c/netty_io_uring_linuxsocket.c b/transport-native-io_uring/src/main/c/netty_io_uring_linuxsocket.c index 42fe12edb4..1fe0e5335f 100644 --- a/transport-native-io_uring/src/main/c/netty_io_uring_linuxsocket.c +++ b/transport-native-io_uring/src/main/c/netty_io_uring_linuxsocket.c @@ -25,7 +25,6 @@ #include #include #include -#include #include // TCP_NOTSENT_LOWAT is a linux specific define #include "netty_io_uring_linuxsocket.h" @@ -58,11 +57,6 @@ static jclass peerCredentialsClass = NULL; static jmethodID peerCredentialsMethodId = NULL; -static jfieldID fileChannelFieldId = NULL; -static jfieldID transferredFieldId = NULL; -static jfieldID fdFieldId = NULL; -static jfieldID fileDescriptorFieldId = NULL; - // JNI Registered Methods Begin static void netty_io_uring_linuxsocket_setTimeToLive(JNIEnv* env, jclass clazz, jint fd, jint optval) { netty_unix_socket_setOption(env, fd, IPPROTO_IP, IP_TTL, &optval, sizeof(optval)); @@ -625,40 +619,6 @@ static jobject netty_io_uring_linuxsocket_getPeerCredentials(JNIEnv *env, jclass (*env)->SetIntArrayRegion(env, gids, 0, 1, (jint*) &credentials.gid); return (*env)->NewObject(env, peerCredentialsClass, peerCredentialsMethodId, credentials.pid, credentials.uid, gids); } - -static jlong netty_io_uring_linuxsocket_sendFile(JNIEnv* env, jclass clazz, jint fd, jobject fileRegion, jlong base_off, jlong off, jlong len) { - jobject fileChannel = (*env)->GetObjectField(env, fileRegion, fileChannelFieldId); - if (fileChannel == NULL) { - netty_unix_errors_throwRuntimeException(env, "failed to get DefaultFileRegion.file"); - return -1; - } - jobject fileDescriptor = (*env)->GetObjectField(env, fileChannel, fileDescriptorFieldId); - if (fileDescriptor == NULL) { - netty_unix_errors_throwRuntimeException(env, "failed to get FileChannelImpl.fd"); - return -1; - } - jint srcFd = (*env)->GetIntField(env, fileDescriptor, fdFieldId); - if (srcFd == -1) { - netty_unix_errors_throwRuntimeException(env, "failed to get FileDescriptor.fd"); - return -1; - } - ssize_t res; - off_t offset = base_off + off; - int err; - do { - res = sendfile(fd, srcFd, &offset, (size_t) len); - } while (res == -1 && ((err = errno) == EINTR)); - if (res < 0) { - return -err; - } - if (res > 0) { - // update the transferred field in DefaultFileRegion - (*env)->SetLongField(env, fileRegion, transferredFieldId, off + res); - } - - return res; -} - // JNI Registered Methods End // JNI Method Registration Table Begin @@ -707,7 +667,7 @@ static const JNINativeMethod fixed_method_table[] = { static const jint fixed_method_table_size = sizeof(fixed_method_table) / sizeof(fixed_method_table[0]); static jint dynamicMethodsTableSize() { - return fixed_method_table_size + 2; // 2 is for the dynamic method signatures. + return fixed_method_table_size + 1; // 1 is for the dynamic method signatures. } static JNINativeMethod* createDynamicMethodsTable(const char* packagePrefix) { @@ -726,13 +686,6 @@ static JNINativeMethod* createDynamicMethodsTable(const char* packagePrefix) { dynamicMethod->name = "getPeerCredentials"; dynamicMethod->fnPtr = (void *) netty_io_uring_linuxsocket_getPeerCredentials; netty_unix_util_free_dynamic_name(&dynamicTypeName); - - ++dynamicMethod; - NETTY_PREPEND(packagePrefix, "io/netty/channel/DefaultFileRegion;JJJ)J", dynamicTypeName, error); - NETTY_PREPEND("(IL", dynamicTypeName, dynamicMethod->signature, error); - dynamicMethod->name = "sendFile"; - dynamicMethod->fnPtr = (void *) netty_io_uring_linuxsocket_sendFile; - netty_unix_util_free_dynamic_name(&dynamicTypeName); return dynamicMethods; error: free(dynamicTypeName); @@ -745,9 +698,6 @@ error: jint netty_io_uring_linuxsocket_JNI_OnLoad(JNIEnv* env, const char* packagePrefix) { int ret = JNI_ERR; char* nettyClassName = NULL; - jclass fileRegionCls = NULL; - jclass fileChannelCls = NULL; - jclass fileDescriptorCls = NULL; // Register the methods which are not referenced by static member variables JNINativeMethod* dynamicMethods = createDynamicMethodsTable(packagePrefix); if (dynamicMethods == NULL) { @@ -767,19 +717,6 @@ jint netty_io_uring_linuxsocket_JNI_OnLoad(JNIEnv* env, const char* packagePrefi NETTY_GET_METHOD(env, peerCredentialsClass, peerCredentialsMethodId, "", "(II[I)V", done); - NETTY_PREPEND(packagePrefix, "io/netty/channel/DefaultFileRegion", nettyClassName, done); - NETTY_FIND_CLASS(env, fileRegionCls, nettyClassName, done); - netty_unix_util_free_dynamic_name(&nettyClassName); - - NETTY_GET_FIELD(env, fileRegionCls, fileChannelFieldId, "file", "Ljava/nio/channels/FileChannel;", done); - NETTY_GET_FIELD(env, fileRegionCls, transferredFieldId, "transferred", "J", done); - - NETTY_FIND_CLASS(env, fileChannelCls, "sun/nio/ch/FileChannelImpl", done); - NETTY_GET_FIELD(env, fileChannelCls, fileDescriptorFieldId, "fd", "Ljava/io/FileDescriptor;", done); - - NETTY_FIND_CLASS(env, fileDescriptorCls, "java/io/FileDescriptor", done); - NETTY_GET_FIELD(env, fileDescriptorCls, fdFieldId, "fd", "I", done); - ret = NETTY_JNI_VERSION; done: netty_unix_util_free_dynamic_methods_table(dynamicMethods, fixed_method_table_size, dynamicMethodsTableSize()); diff --git a/transport-native-io_uring/src/main/java/io/netty/channel/uring/LinuxSocket.java b/transport-native-io_uring/src/main/java/io/netty/channel/uring/LinuxSocket.java index 39d9542f6c..b418f0bd6f 100644 --- a/transport-native-io_uring/src/main/java/io/netty/channel/uring/LinuxSocket.java +++ b/transport-native-io_uring/src/main/java/io/netty/channel/uring/LinuxSocket.java @@ -16,7 +16,6 @@ package io.netty.channel.uring; import io.netty.channel.ChannelException; -import io.netty.channel.DefaultFileRegion; import io.netty.channel.socket.InternetProtocolFamily; import io.netty.channel.unix.NativeInetAddress; import io.netty.channel.unix.PeerCredentials; @@ -31,8 +30,6 @@ import java.net.NetworkInterface; import java.net.UnknownHostException; import java.util.Enumeration; -import static io.netty.channel.unix.Errors.*; - /** * A socket which provides access Linux native methods. */ @@ -283,18 +280,6 @@ final class LinuxSocket extends Socket { setIpMulticastLoop(intValue(), ipv6, loopbackModeDisabled ? 0 : 1); } - long sendFile(DefaultFileRegion src, long baseOffset, long offset, long length) throws IOException { - // Open the file-region as it may be created via the lazy constructor. This is needed as we directly access - // the FileChannel field via JNI. - src.open(); - - long res = sendFile(intValue(), src, baseOffset, offset, length); - if (res >= 0) { - return res; - } - return ioResult("sendfile", (int) res); - } - private static InetAddress deriveInetAddress(NetworkInterface netInterface, boolean ipv6) { final InetAddress ipAny = ipv6 ? INET6_ANY : INET_ANY; if (netInterface != null) { @@ -350,8 +335,6 @@ final class LinuxSocket extends Socket { int scopeId, int interfaceIndex) throws IOException; private static native void leaveSsmGroup(int fd, boolean ipv6, byte[] group, byte[] interfaceAddress, int scopeId, int interfaceIndex, byte[] source) throws IOException; - private static native long sendFile(int socketFd, DefaultFileRegion src, long baseOffset, - long offset, long length) throws IOException; private static native int getTcpDeferAccept(int fd) throws IOException; private static native int isTcpQuickAck(int fd) throws IOException;