changeset 3654:94bcd9aa2119

7016898: PlainSocketImpl.fd is null on Windows Reviewed-by: alanb
author chegar
date Mon, 07 Feb 2011 14:08:47 +0000
parents 32f1c5f67aae
children 08e1914d5852
files src/windows/classes/java/net/PlainSocketImpl.java
diffstat 1 files changed, 23 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- a/src/windows/classes/java/net/PlainSocketImpl.java	Mon Feb 07 13:55:40 2011 +0000
+++ b/src/windows/classes/java/net/PlainSocketImpl.java	Mon Feb 07 14:08:47 2011 +0000
@@ -138,6 +138,9 @@
 
     protected synchronized void create(boolean stream) throws IOException {
         impl.create(stream);
+
+        // set fd to delegate's fd to be compatible with older releases
+        this.fd = impl.fd;
     }
 
     protected void connect(String host, int port)
@@ -166,7 +169,7 @@
         impl.doConnect(address, port, timeout);
     }
 
-     protected synchronized void bind(InetAddress address, int lport)
+    protected synchronized void bind(InetAddress address, int lport)
         throws IOException
     {
         impl.bind(address, lport);
@@ -174,9 +177,13 @@
 
     protected synchronized void accept(SocketImpl s) throws IOException {
         // pass in the real impl not the wrapper.
-        ((PlainSocketImpl)s).impl.address = new InetAddress();
-        ((PlainSocketImpl)s).impl.fd = new FileDescriptor();
-        impl.accept(((PlainSocketImpl)s).impl);
+        SocketImpl delegate = ((PlainSocketImpl)s).impl;
+        delegate.address = new InetAddress();
+        delegate.fd = new FileDescriptor();
+        impl.accept(delegate);
+
+        // set fd to delegate's fd to be compatible with older releases
+        s.fd = delegate.fd;
     }
 
     void setFileDescriptor(FileDescriptor fd) {
@@ -208,11 +215,21 @@
     }
 
     protected void close() throws IOException {
-        impl.close();
+        try {
+            impl.close();
+        } finally {
+            // set fd to delegate's fd to be compatible with older releases
+            this.fd = null;
+        }
     }
 
     void reset() throws IOException {
-        impl.reset();
+        try {
+            impl.reset();
+        } finally {
+            // set fd to delegate's fd to be compatible with older releases
+            this.fd = null;
+        }
     }
 
     protected void shutdownInput() throws IOException {