Thanks Chunrong. Fixed @ r722815. Regards, Tim
chunrong lai wrote: > It is a note that multiple classlib tests fail in Linux platform with this > commit, according to the integrity results. > Below is the stacktrace. > > [java] [junit] Uncaught exception in Thread-18: > [java] [junit] java.lang.UnsatisfiedLinkError: Cannot load native > org/apache/harmony/luni/platform/OSNetworkSystem.write(Ljava/io/FileDescriptor;[BII)I > [java] [junit] at > org.apache.harmony.luni.net.PlainSocketImpl.write(PlainSocketImpl.java:554) > [java] [junit] at > org.apache.harmony.luni.net.SocketOutputStream.write(SocketOutputStream.java:50) > [java] [junit] at > org.apache.harmony.xnet.provider.jsse.SSLSocketImpl.close(SSLSocketImpl.java:507) > [java] [junit] at > org.apache.harmony.xnet.provider.jsse.SSLSocketFunctionalTest$2.run(SSLSocketFunctionalTest.java:322) > [java] [junit] Caused by: java.lang.UnsatisfiedLinkError: > org/apache/harmony/luni/platform/OSNetworkSystem.write(Ljava/io/FileDescriptor;[BII)I > [java] [junit] at > org.apache.harmony.luni.net.PlainSocketImpl.write(PlainSocketImpl.java:554) > > > On Fri, Nov 28, 2008 at 8:08 PM, <[EMAIL PROTECTED]> wrote: > >> Author: tellison >> Date: Fri Nov 28 04:08:30 2008 >> New Revision: 721444 >> >> URL: http://svn.apache.org/viewvc?rev=721444&view=rev >> Log: >> Continued tidy-up of socket read and write functionality. >> - Switch callers from using sendStream() to write(). sendStream() will be >> removed as redundant. >> - Switch callers from using receiveStream() to read(). receiveStream() >> will be removed as redundant. >> - Extend read() native to account for non-blocking sockets. >> >> Modified: >> >> >> harmony/enhanced/classlib/trunk/modules/luni/src/main/java/java/net/SocketImpl.java >> >> >> harmony/enhanced/classlib/trunk/modules/luni/src/main/java/org/apache/harmony/luni/net/PlainSocketImpl.java >> >> >> harmony/enhanced/classlib/trunk/modules/luni/src/main/java/org/apache/harmony/luni/platform/OSNetworkSystem.java >> >> >> harmony/enhanced/classlib/trunk/modules/luni/src/main/native/luni/shared/OSNetworkSystem.c >> >> Modified: >> harmony/enhanced/classlib/trunk/modules/luni/src/main/java/java/net/SocketImpl.java >> URL: >> http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/luni/src/main/java/java/net/SocketImpl.java?rev=721444&r1=721443&r2=721444&view=diff >> >> ============================================================================== >> --- >> harmony/enhanced/classlib/trunk/modules/luni/src/main/java/java/net/SocketImpl.java >> (original) >> +++ >> harmony/enhanced/classlib/trunk/modules/luni/src/main/java/java/net/SocketImpl.java >> Fri Nov 28 04:08:30 2008 >> @@ -274,7 +274,7 @@ >> return this.netImpl.sendDatagram2(fd, buffer, offset, count, >> port, >> address); >> } >> - return this.netImpl.sendStream(fd, buffer, offset, count); >> + return this.netImpl.write(fd, buffer, offset, count); >> } >> >> /** >> >> Modified: >> harmony/enhanced/classlib/trunk/modules/luni/src/main/java/org/apache/harmony/luni/net/PlainSocketImpl.java >> URL: >> http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/luni/src/main/java/org/apache/harmony/luni/net/PlainSocketImpl.java?rev=721444&r1=721443&r2=721444&view=diff >> >> ============================================================================== >> --- >> harmony/enhanced/classlib/trunk/modules/luni/src/main/java/org/apache/harmony/luni/net/PlainSocketImpl.java >> (original) >> +++ >> harmony/enhanced/classlib/trunk/modules/luni/src/main/java/org/apache/harmony/luni/net/PlainSocketImpl.java >> Fri Nov 28 04:08:30 2008 >> @@ -534,16 +534,16 @@ >> if (shutdownInput) { >> return -1; >> } >> - try { >> - int read = netImpl.receiveStream(fd, buffer, offset, count, >> - receiveTimeout); >> - if (read == -1) { >> - shutdownInput = true; >> - } >> - return read; >> - } catch (InterruptedIOException e) { >> - throw new SocketTimeoutException(e.getMessage()); >> + int read = netImpl.read(fd, buffer, offset, count, >> receiveTimeout); >> + // Return of zero bytes for a blocking socket means a timeout >> occurred >> + if (read == 0) { >> + throw new SocketTimeoutException(); >> } >> + // Return of -1 indicates the peer was closed >> + if (read == -1) { >> + shutdownInput = true; >> + } >> + return read; >> } >> >> int write(byte[] buffer, int offset, int count) throws IOException { >> @@ -551,6 +551,6 @@ >> return netImpl.sendDatagram2(fd, buffer, offset, count, port, >> address); >> } >> - return netImpl.sendStream(fd, buffer, offset, count); >> + return netImpl.write(fd, buffer, offset, count); >> } >> } >> >> Modified: >> harmony/enhanced/classlib/trunk/modules/luni/src/main/java/org/apache/harmony/luni/platform/OSNetworkSystem.java >> URL: >> http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/luni/src/main/java/org/apache/harmony/luni/platform/OSNetworkSystem.java?rev=721444&r1=721443&r2=721444&view=diff >> >> ============================================================================== >> --- >> harmony/enhanced/classlib/trunk/modules/luni/src/main/java/org/apache/harmony/luni/platform/OSNetworkSystem.java >> (original) >> +++ >> harmony/enhanced/classlib/trunk/modules/luni/src/main/java/org/apache/harmony/luni/platform/OSNetworkSystem.java >> Fri Nov 28 04:08:30 2008 >> @@ -228,6 +228,11 @@ >> /** >> * Read available bytes from the given file descriptor into a byte >> array. >> * >> + * The read has an optional timeout parameter, which if non-zero is >> the >> + * length of time that the read will wait on a select call to see if >> any >> + * bytes are available for reading. If the timeout expires the method >> + * returns zero to indicate no bytes were read. >> + * >> * @param fd >> * the socket file descriptor to read >> * @param data >> @@ -238,7 +243,9 @@ >> * @param count >> * the maximum number of bytes to read >> * @param timeout >> - * the length of time to wait for the bytes, in >> milliseconds >> + * the length of time to wait for the bytes, in >> milliseconds; or >> + * zero to indicate no timeout applied. When there is no >> timeout >> + * applied the read may block based upon socket options. >> * @return number of bytes read, or zero if there were no bytes >> available >> * before the timeout occurred, or -1 to indicate the socket is >> * closed >> @@ -314,11 +321,13 @@ >> * the max number of bytes to receive >> * @param timeout >> * the max time the read operation should block waiting for >> data >> - * @return int the actual number of bytes read >> + * @return the actual number of bytes read >> * @throws IOException >> * @throws SocketException >> * if an error occurs while reading >> + * @deprecated use [EMAIL PROTECTED] #read(FileDescriptor, byte[], int, >> int, >> int)} >> */ >> + @Deprecated >> public native int receiveStream(FileDescriptor aFD, byte[] data, >> int offset, int count, int timeout) throws IOException; >> >> @@ -482,7 +491,9 @@ >> * @throws IOException >> * @throws SocketException >> * if an error occurs while writing >> + * @deprecated use [EMAIL PROTECTED] #write(FileDescriptor, byte[], >> int, int)} >> */ >> + @Deprecated >> public native int sendStream(FileDescriptor fd, byte[] data, int >> offset, >> int count) throws IOException; >> >> >> Modified: >> harmony/enhanced/classlib/trunk/modules/luni/src/main/native/luni/shared/OSNetworkSystem.c >> URL: >> http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/luni/src/main/native/luni/shared/OSNetworkSystem.c?rev=721444&r1=721443&r2=721444&view=diff >> >> ============================================================================== >> --- >> harmony/enhanced/classlib/trunk/modules/luni/src/main/native/luni/shared/OSNetworkSystem.c >> (original) >> +++ >> harmony/enhanced/classlib/trunk/modules/luni/src/main/native/luni/shared/OSNetworkSystem.c >> Fri Nov 28 04:08:30 2008 >> @@ -339,7 +339,7 @@ >> /* Read directly into the byte array */ >> result = >> Java_org_apache_harmony_luni_platform_OSNetworkSystem_readDirect >> - (env, thiz, fd, (jlong) (IDATA)message + offset, count, timeout); >> + (env, thiz, fd, (jlong) (IDATA)(message + offset), count, timeout); >> >> /* If the pointer was to a copy it needs to be released */ >> if (isCopy == JNI_TRUE) { >> @@ -361,32 +361,38 @@ >> */ >> JNIEXPORT jint JNICALL >> Java_org_apache_harmony_luni_platform_OSNetworkSystem_readDirect >> - (JNIEnv * env, jobject thiz, jobject fileDescriptor, jlong address, >> + (JNIEnv * env, jobject thiz, jobject fd, jlong address, >> jint count, jint timeout) >> { >> PORT_ACCESS_FROM_ENV(env); >> hysocket_t hysocketP; >> - jbyte *message = (jbyte *) (IDATA)address; >> + U_8 *message = (U_8 *)(IDATA)address; >> I_32 result, localCount; >> >> - hysocketP = getJavaIoFileDescriptorContentsAsAPointer(env, >> fileDescriptor); >> + hysocketP = getJavaIoFileDescriptorContentsAsAPointer(env, fd); >> >> - /* Check and potentially wait to see if any bytes available */ >> - result = selectRead(env, hysocketP, timeout * 1000, FALSE); >> - if (0 > result) { >> - if (result == HYPORT_ERROR_SOCKET_TIMEOUT) { >> - return (jint) 0; // return zero bytes to indicate timeout >> + /* A non-zero timeout will first check, and potentially wait, to see if >> any >> + * bytes are available >> + */ >> + if (timeout != 0) { >> + result = selectRead(env, hysocketP, timeout * 1000, FALSE); >> + if (0 > result) { >> + if (result == HYPORT_ERROR_SOCKET_TIMEOUT) { >> + return (jint) 0; // return zero bytes to indicate timeout >> + } >> + throwJavaNetSocketException(env, result); >> + return (jint) 0; // Unused, exception takes precedence >> } >> - throwJavaNetSocketException(env, result); >> - return (jint) 0; // Unused, exception takes precedence >> } >> >> /* Limit size of read to 64k bytes */ >> localCount = (count < 65536) ? count : 65536; >> - >> - result = >> - hysock_read(hysocketP, (U_8 *) message, localCount, HYSOCK_NOFLAGS); >> + result = hysock_read(hysocketP, message, localCount, HYSOCK_NOFLAGS); >> if (0 > result) { >> + if (HYPORT_ERROR_SOCKET_WOULDBLOCK == result) { >> + /* We were asked to read on a nonblocking socket and there is no >> data available */ >> + return (jint) 0; >> + } >> throwJavaNetSocketException(env, result); >> return (jint) 0; >> } >> @@ -395,6 +401,7 @@ >> return (0 == result) ? (jint) - 1 : (jint) result; >> } >> >> + >> /* >> * Class: org_apache_harmony_luni_platform_OSNetworkSystem >> * Method: write >> @@ -415,7 +422,7 @@ >> /* Write directly from the byte array */ >> result = >> Java_org_apache_harmony_luni_platform_OSNetworkSystem_writeDirect >> - (env, thiz, fd, (jlong)((IDATA) message + offset), count); >> + (env, thiz, fd, (jlong) (IDATA)(message + offset), count); >> >> >> /* If the pointer was to a copy it needs to be released */ >> @@ -1622,6 +1629,9 @@ >> } >> } >> >> +/* >> + * Deprecated. Use >> Java_org_apache_harmony_luni_platform_OSNetworkSystem_read >> + */ >> JNIEXPORT jint JNICALL >> Java_org_apache_harmony_luni_platform_OSNetworkSystem_receiveStream >> (JNIEnv * env, jobject thiz, jobject fileDescriptor, jbyteArray data, >> @@ -1682,9 +1692,7 @@ >> >> >> /* >> - * Class: org_apache_harmony_luni_platform_OSNetworkSystem >> - * Method: sendStream >> - * Signature: (Ljava/io/FileDescriptor;[BII)I >> + * Deprecated : use >> Java_org_apache_harmony_luni_platform_OSNetworkSystem_write >> */ >> JNIEXPORT jint JNICALL >> Java_org_apache_harmony_luni_platform_OSNetworkSystem_sendStream >> >> >> >
