You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@harmony.apache.org by te...@apache.org on 2008/11/28 13:08:31 UTC
svn commit: r721444 - in
/harmony/enhanced/classlib/trunk/modules/luni/src/main: java/java/net/
java/org/apache/harmony/luni/net/ java/org/apache/harmony/luni/platform/
native/luni/shared/
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 {@link #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 {@link #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
Re: svn commit: r721444 - in /harmony/enhanced/classlib/trunk/modules/luni/src/main:
java/java/net/ java/org/apache/harmony/luni/net/ java/org/apache/harmony/luni/platform/
native/luni/shared/
Posted by Tim Ellison <t....@gmail.com>.
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, <te...@apache.org> 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 {@link #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 {@link #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
>>
>>
>>
>
Re: svn commit: r721444 - in /harmony/enhanced/classlib/trunk/modules/luni/src/main: java/java/net/ java/org/apache/harmony/luni/net/ java/org/apache/harmony/luni/platform/ native/luni/shared/
Posted by chunrong lai <ch...@gmail.com>.
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, <te...@apache.org> 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 {@link #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 {@link #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
>
>
>