This is the mail archive of the java-patches@gcc.gnu.org mailing list for the Java project.
| Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
|---|---|---|
| Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
| Other format: | [Raw text] | |
Hi People,
Operations on Plain[Datagram]Socket aren't
interruptible under Sun's JRE; this patch simply
resets and ignores the thread's interrupted
flag after such operations. With this patch,
I get an almost-perfect diff with the attached test
between Sun's JRE 1.4.2 and gcj on Win32.
-- Mohan
http://www.thisiscool.com/
http://www.animalsong.org/
ChangeLog
2003-12-11 Mohan Embar <gnustuff@thisiscool.com>
* gnu/java/net/natPlainDatagramSocketImplWin32.cc:
Removed unused InterruptedIOException.h include.
* gnu/java/net/natPlainSocketImplWin32.cc
(connect): Reset and ignore our thread's interrupted
flag instead of testing and throwing an InterruptedIOException
if set.
(accept): Likewise + changed case of SocketTimeoutException
text.
(write): Likewise (for both overloads).
(doRead): Likewise.
Index: gnu/java/net/natPlainDatagramSocketImplWin32.cc
===================================================================
RCS file: /cvs/gcc/gcc/libjava/gnu/java/net/natPlainDatagramSocketImplWin32.cc,v
retrieving revision 1.6
diff -u -2 -r1.6 natPlainDatagramSocketImplWin32.cc
--- gnu/java/net/natPlainDatagramSocketImplWin32.cc 4 Dec 2003 10:59:56 -0000 1.6
+++ gnu/java/net/natPlainDatagramSocketImplWin32.cc 12 Dec 2003 04:14:20 -0000
@@ -18,5 +18,4 @@
#include <gnu/java/net/PlainDatagramSocketImpl.h>
#include <java/io/IOException.h>
-#include <java/io/InterruptedIOException.h>
#include <java/net/BindException.h>
#include <java/net/SocketException.h>
Index: gnu/java/net/natPlainSocketImplWin32.cc
===================================================================
RCS file: /cvs/gcc/gcc/libjava/gnu/java/net/natPlainSocketImplWin32.cc,v
retrieving revision 1.8
diff -u -2 -r1.8 natPlainSocketImplWin32.cc
--- gnu/java/net/natPlainSocketImplWin32.cc 1 Dec 2003 14:32:26 -0000 1.8
+++ gnu/java/net/natPlainSocketImplWin32.cc 12 Dec 2003 04:14:21 -0000
@@ -18,5 +18,4 @@
#include <gnu/java/net/PlainSocketImpl$SocketOutputStream.h>
#include <java/io/IOException.h>
-#include <java/io/InterruptedIOException.h>
#include <java/net/BindException.h>
#include <java/net/ConnectException.h>
@@ -177,7 +176,11 @@
// MS constants got undefined
+ // Reset and ignore our thread's interrupted flag.
+ // It's not possible to interrupt these sort of
+ // operations on Win32 anyway.
+ ::java::lang::Thread::interrupted();
+
if (dwRet == WSA_WAIT_FAILED)
throwConnectException ();
-
else if (dwRet == WSA_WAIT_TIMEOUT)
throw new ::java::net::SocketTimeoutException
@@ -276,9 +279,12 @@
// MS constants got undefined
+ // Reset and ignore our thread's interrupted flag.
+ ::java::lang::Thread::interrupted();
+
if (dwRet == WSA_WAIT_FAILED)
goto error;
else if (dwRet == WSA_WAIT_TIMEOUT)
throw new ::java::net::SocketTimeoutException
- (JvNewStringUTF ("accept timed out"));
+ (JvNewStringUTF ("Accept timed out"));
}
}
@@ -362,12 +368,10 @@
{
DWORD dwErr = WSAGetLastError();
- if (::java::lang::Thread::interrupted())
- {
- ::java::io::InterruptedIOException *iioe
- = new ::java::io::InterruptedIOException
- (_Jv_WinStrError (dwErr));
- iioe->bytesTransferred = 0;
- throw iioe;
- }
+
+ // Reset and ignore our thread's interrupted flag.
+ // It's not possible to interrupt these sort of
+ // operations on Win32 anyway.
+ ::java::lang::Thread::interrupted();
+
// Some errors should not cause exceptions.
if (dwErr != WSAENOTCONN && dwErr != WSAECONNRESET
@@ -398,12 +402,8 @@
{
DWORD dwErr = WSAGetLastError();
- if (::java::lang::Thread::interrupted())
- {
- ::java::io::InterruptedIOException *iioe
- = new ::java::io::InterruptedIOException
- (_Jv_WinStrError (dwErr));
- iioe->bytesTransferred = written;
- throw iioe;
- }
+
+ // Reset and ignore our thread's interrupted flag.
+ ::java::lang::Thread::interrupted();
+
// Some errors should not cause exceptions.
if (dwErr != WSAENOTCONN && dwErr != WSAECONNRESET
@@ -457,13 +457,8 @@
// save WSAGetLastError() before calling Thread.interrupted()
- if (::java::lang::Thread::interrupted())
- {
- ::java::io::InterruptedIOException *iioe =
- new ::java::io::InterruptedIOException
- (JvNewStringUTF("read interrupted"));
- iioe->bytesTransferred = r == -1 ? 0 : r;
- throw iioe;
- }
- else if (r == -1)
+ // Reset and ignore our thread's interrupted flag.
+ ::java::lang::Thread::interrupted();
+
+ if (r == -1)
{
error:
@@ -475,5 +470,5 @@
if (dwErrorCode == WSAETIMEDOUT)
throw new ::java::net::SocketTimeoutException
- (JvNewStringUTF ("read timed out") );
+ (JvNewStringUTF ("Read timed out") );
else
_Jv_ThrowIOException (dwErrorCode);
Attachment:
NetTest.tar.bz2
Description: application/bzip2
| Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
|---|---|---|
| Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |