You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@harmony.apache.org by "Andrew Zhang (JIRA)" <ji...@apache.org> on 2006/07/03 11:51:29 UTC

[jira] Created: (HARMONY-728) [classlib][nio] java.nio.channels.SocketChannel.read(ByteBuffer[],int,int) fails to return even there are some data available.

[classlib][nio] java.nio.channels.SocketChannel.read(ByteBuffer[],int,int) fails to return even there are some data available.
------------------------------------------------------------------------------------------------------------------------------

         Key: HARMONY-728
         URL: http://issues.apache.org/jira/browse/HARMONY-728
     Project: Harmony
        Type: Bug

  Components: Classlib  
    Reporter: Andrew Zhang


java.nio.channels.SocketChannel.read(ByteBuffer[],int,int) fails to return even there are some data available.

Following test case reproduces the bug:

    public void test_read_$ByteBufferII_Blocking() throws IOException {
        final int CAPACITY_NORMAL = 200;
        SocketChannel sc = SocketChannel.open();
        ServerSocket server = new ServerSocket(50000);
        byte[] data = new byte[CAPACITY_NORMAL];
        for (int i = 0; i < CAPACITY_NORMAL; i++) {
            data[i] = (byte) i;
        }
        ByteBuffer[] bufferArray = new ByteBuffer[2];
        bufferArray[0] = ByteBuffer.allocate(CAPACITY_NORMAL);
        bufferArray[1] = ByteBuffer.allocate(CAPACITY_NORMAL);
        sc.connect(new InetSocketAddress(InetAddress.getLocalHost(),50000));
        Socket socket = server.accept();
        OutputStream out = socket.getOutputStream();
        out.write(data);
        // Harmony fails to return here.
        sc.read(bufferArray);
    }

RI returns while Harmony hangs. 

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
   http://www.atlassian.com/software/jira


[jira] Commented: (HARMONY-728) [classlib][nio] java.nio.channels.SocketChannel.read(ByteBuffer[],int,int) fails to return even there are some data available.

Posted by "Andrew Zhang (JIRA)" <ji...@apache.org>.
    [ http://issues.apache.org/jira/browse/HARMONY-728?page=comments#action_12419114 ] 

Andrew Zhang commented on HARMONY-728:
--------------------------------------

Hello Tim,

The fix looks good, many thanks!

Best regards,
Andrew

> [classlib][nio] java.nio.channels.SocketChannel.read(ByteBuffer[],int,int) fails to return even there are some data available.
> ------------------------------------------------------------------------------------------------------------------------------
>
>          Key: HARMONY-728
>          URL: http://issues.apache.org/jira/browse/HARMONY-728
>      Project: Harmony
>         Type: Bug

>   Components: Classlib
>     Reporter: Andrew Zhang
>     Assignee: Tim Ellison
>  Attachments: nio.diff
>
> java.nio.channels.SocketChannel.read(ByteBuffer[],int,int) fails to return even there are some data available.
> Following test case reproduces the bug:
>     public void test_read_$ByteBufferII_Blocking() throws IOException {
>         final int CAPACITY_NORMAL = 200;
>         SocketChannel sc = SocketChannel.open();
>         ServerSocket server = new ServerSocket(50000);
>         byte[] data = new byte[CAPACITY_NORMAL];
>         for (int i = 0; i < CAPACITY_NORMAL; i++) {
>             data[i] = (byte) i;
>         }
>         ByteBuffer[] bufferArray = new ByteBuffer[2];
>         bufferArray[0] = ByteBuffer.allocate(CAPACITY_NORMAL);
>         bufferArray[1] = ByteBuffer.allocate(CAPACITY_NORMAL);
>         sc.connect(new InetSocketAddress(InetAddress.getLocalHost(),50000));
>         Socket socket = server.accept();
>         OutputStream out = socket.getOutputStream();
>         out.write(data);
>         // Harmony fails to return here.
>         sc.read(bufferArray);
>     }
> RI returns while Harmony hangs. 

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
   http://www.atlassian.com/software/jira


[jira] Updated: (HARMONY-728) [classlib][nio] java.nio.channels.SocketChannel.read(ByteBuffer[],int,int) fails to return even there are some data available.

Posted by "Andrew Zhang (JIRA)" <ji...@apache.org>.
     [ http://issues.apache.org/jira/browse/HARMONY-728?page=all ]

Andrew Zhang updated HARMONY-728:
---------------------------------

    Attachment: nio.diff

Hello,

Would you please try my patch?

The patch also removes an unnecessary AsynchronousCloseException check in SocketChannelImpl.java. 

Thanks a lot!

Best regards,
Andrew

> [classlib][nio] java.nio.channels.SocketChannel.read(ByteBuffer[],int,int) fails to return even there are some data available.
> ------------------------------------------------------------------------------------------------------------------------------
>
>          Key: HARMONY-728
>          URL: http://issues.apache.org/jira/browse/HARMONY-728
>      Project: Harmony
>         Type: Bug

>   Components: Classlib
>     Reporter: Andrew Zhang
>  Attachments: nio.diff
>
> java.nio.channels.SocketChannel.read(ByteBuffer[],int,int) fails to return even there are some data available.
> Following test case reproduces the bug:
>     public void test_read_$ByteBufferII_Blocking() throws IOException {
>         final int CAPACITY_NORMAL = 200;
>         SocketChannel sc = SocketChannel.open();
>         ServerSocket server = new ServerSocket(50000);
>         byte[] data = new byte[CAPACITY_NORMAL];
>         for (int i = 0; i < CAPACITY_NORMAL; i++) {
>             data[i] = (byte) i;
>         }
>         ByteBuffer[] bufferArray = new ByteBuffer[2];
>         bufferArray[0] = ByteBuffer.allocate(CAPACITY_NORMAL);
>         bufferArray[1] = ByteBuffer.allocate(CAPACITY_NORMAL);
>         sc.connect(new InetSocketAddress(InetAddress.getLocalHost(),50000));
>         Socket socket = server.accept();
>         OutputStream out = socket.getOutputStream();
>         out.write(data);
>         // Harmony fails to return here.
>         sc.read(bufferArray);
>     }
> RI returns while Harmony hangs. 

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
   http://www.atlassian.com/software/jira


[jira] Closed: (HARMONY-728) [classlib][nio] java.nio.channels.SocketChannel.read(ByteBuffer[],int,int) fails to return even there are some data available.

Posted by "Tim Ellison (JIRA)" <ji...@apache.org>.
     [ http://issues.apache.org/jira/browse/HARMONY-728?page=all ]
     
Tim Ellison closed HARMONY-728:
-------------------------------


Verified by Andrew.


> [classlib][nio] java.nio.channels.SocketChannel.read(ByteBuffer[],int,int) fails to return even there are some data available.
> ------------------------------------------------------------------------------------------------------------------------------
>
>          Key: HARMONY-728
>          URL: http://issues.apache.org/jira/browse/HARMONY-728
>      Project: Harmony
>         Type: Bug

>   Components: Classlib
>     Reporter: Andrew Zhang
>     Assignee: Tim Ellison
>  Attachments: nio.diff
>
> java.nio.channels.SocketChannel.read(ByteBuffer[],int,int) fails to return even there are some data available.
> Following test case reproduces the bug:
>     public void test_read_$ByteBufferII_Blocking() throws IOException {
>         final int CAPACITY_NORMAL = 200;
>         SocketChannel sc = SocketChannel.open();
>         ServerSocket server = new ServerSocket(50000);
>         byte[] data = new byte[CAPACITY_NORMAL];
>         for (int i = 0; i < CAPACITY_NORMAL; i++) {
>             data[i] = (byte) i;
>         }
>         ByteBuffer[] bufferArray = new ByteBuffer[2];
>         bufferArray[0] = ByteBuffer.allocate(CAPACITY_NORMAL);
>         bufferArray[1] = ByteBuffer.allocate(CAPACITY_NORMAL);
>         sc.connect(new InetSocketAddress(InetAddress.getLocalHost(),50000));
>         Socket socket = server.accept();
>         OutputStream out = socket.getOutputStream();
>         out.write(data);
>         // Harmony fails to return here.
>         sc.read(bufferArray);
>     }
> RI returns while Harmony hangs. 

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
   http://www.atlassian.com/software/jira


[jira] Assigned: (HARMONY-728) [classlib][nio] java.nio.channels.SocketChannel.read(ByteBuffer[],int,int) fails to return even there are some data available.

Posted by "Tim Ellison (JIRA)" <ji...@apache.org>.
     [ http://issues.apache.org/jira/browse/HARMONY-728?page=all ]

Tim Ellison reassigned HARMONY-728:
-----------------------------------

    Assign To: Tim Ellison

> [classlib][nio] java.nio.channels.SocketChannel.read(ByteBuffer[],int,int) fails to return even there are some data available.
> ------------------------------------------------------------------------------------------------------------------------------
>
>          Key: HARMONY-728
>          URL: http://issues.apache.org/jira/browse/HARMONY-728
>      Project: Harmony
>         Type: Bug

>   Components: Classlib
>     Reporter: Andrew Zhang
>     Assignee: Tim Ellison
>  Attachments: nio.diff
>
> java.nio.channels.SocketChannel.read(ByteBuffer[],int,int) fails to return even there are some data available.
> Following test case reproduces the bug:
>     public void test_read_$ByteBufferII_Blocking() throws IOException {
>         final int CAPACITY_NORMAL = 200;
>         SocketChannel sc = SocketChannel.open();
>         ServerSocket server = new ServerSocket(50000);
>         byte[] data = new byte[CAPACITY_NORMAL];
>         for (int i = 0; i < CAPACITY_NORMAL; i++) {
>             data[i] = (byte) i;
>         }
>         ByteBuffer[] bufferArray = new ByteBuffer[2];
>         bufferArray[0] = ByteBuffer.allocate(CAPACITY_NORMAL);
>         bufferArray[1] = ByteBuffer.allocate(CAPACITY_NORMAL);
>         sc.connect(new InetSocketAddress(InetAddress.getLocalHost(),50000));
>         Socket socket = server.accept();
>         OutputStream out = socket.getOutputStream();
>         out.write(data);
>         // Harmony fails to return here.
>         sc.read(bufferArray);
>     }
> RI returns while Harmony hangs. 

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
   http://www.atlassian.com/software/jira


[jira] Resolved: (HARMONY-728) [classlib][nio] java.nio.channels.SocketChannel.read(ByteBuffer[],int,int) fails to return even there are some data available.

Posted by "Tim Ellison (JIRA)" <ji...@apache.org>.
     [ http://issues.apache.org/jira/browse/HARMONY-728?page=all ]
     
Tim Ellison resolved HARMONY-728:
---------------------------------

    Resolution: Fixed

Thanks Andrew,

Patch applied to NIO module at repo revision r418784.

Please check that the patch was applied as you expected.


> [classlib][nio] java.nio.channels.SocketChannel.read(ByteBuffer[],int,int) fails to return even there are some data available.
> ------------------------------------------------------------------------------------------------------------------------------
>
>          Key: HARMONY-728
>          URL: http://issues.apache.org/jira/browse/HARMONY-728
>      Project: Harmony
>         Type: Bug

>   Components: Classlib
>     Reporter: Andrew Zhang
>     Assignee: Tim Ellison
>  Attachments: nio.diff
>
> java.nio.channels.SocketChannel.read(ByteBuffer[],int,int) fails to return even there are some data available.
> Following test case reproduces the bug:
>     public void test_read_$ByteBufferII_Blocking() throws IOException {
>         final int CAPACITY_NORMAL = 200;
>         SocketChannel sc = SocketChannel.open();
>         ServerSocket server = new ServerSocket(50000);
>         byte[] data = new byte[CAPACITY_NORMAL];
>         for (int i = 0; i < CAPACITY_NORMAL; i++) {
>             data[i] = (byte) i;
>         }
>         ByteBuffer[] bufferArray = new ByteBuffer[2];
>         bufferArray[0] = ByteBuffer.allocate(CAPACITY_NORMAL);
>         bufferArray[1] = ByteBuffer.allocate(CAPACITY_NORMAL);
>         sc.connect(new InetSocketAddress(InetAddress.getLocalHost(),50000));
>         Socket socket = server.accept();
>         OutputStream out = socket.getOutputStream();
>         out.write(data);
>         // Harmony fails to return here.
>         sc.read(bufferArray);
>     }
> RI returns while Harmony hangs. 

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
   http://www.atlassian.com/software/jira