From 40c7705550398971a325c278042d36c09b605f76 Mon Sep 17 00:00:00 2001 From: alanb Date: Fri, 4 Mar 2011 21:26:50 +0000 Subject: [PATCH] 7023403: (ch) sun.nio.ch.SolarisEventPort.startPoll failed with AssertionError Reviewed-by: forax --- .../ch/UnixAsynchronousSocketChannelImpl.java | 19 ++++++++++++------- .../AsynchronousSocketChannel/Basic.java | 2 +- 2 files changed, 13 insertions(+), 8 deletions(-) diff --git a/src/solaris/classes/sun/nio/ch/UnixAsynchronousSocketChannelImpl.java b/src/solaris/classes/sun/nio/ch/UnixAsynchronousSocketChannelImpl.java index 13e4ad364..37caeeb9b 100644 --- a/src/solaris/classes/sun/nio/ch/UnixAsynchronousSocketChannelImpl.java +++ b/src/solaris/classes/sun/nio/ch/UnixAsynchronousSocketChannelImpl.java @@ -137,7 +137,7 @@ class UnixAsynchronousSocketChannelImpl return port; } - // register for events if there are outstanding I/O operations + // register events for outstanding I/O operations, caller already owns updateLock private void updateEvents() { assert Thread.holdsLock(updateLock); int events = 0; @@ -149,6 +149,13 @@ class UnixAsynchronousSocketChannelImpl port.startPoll(fdVal, events); } + // register events for outstanding I/O operations + private void lockAndUpdateEvents() { + synchronized (updateLock) { + updateEvents(); + } + } + // invoke to finish read and/or write operations private void finish(boolean mayInvokeDirect, boolean readable, @@ -402,9 +409,8 @@ class UnixAsynchronousSocketChannelImpl exc = x; } finally { // restart poll in case of concurrent write - synchronized (updateLock) { - updateEvents(); - } + if (!(exc instanceof AsynchronousCloseException)) + lockAndUpdateEvents(); end(); } @@ -598,9 +604,8 @@ class UnixAsynchronousSocketChannelImpl exc = x; } finally { // restart poll in case of concurrent write - synchronized (updateLock) { - updateEvents(); - } + if (!(exc instanceof AsynchronousCloseException)) + lockAndUpdateEvents(); end(); } diff --git a/test/java/nio/channels/AsynchronousSocketChannel/Basic.java b/test/java/nio/channels/AsynchronousSocketChannel/Basic.java index 9f67fc371..afe61d6d8 100644 --- a/test/java/nio/channels/AsynchronousSocketChannel/Basic.java +++ b/test/java/nio/channels/AsynchronousSocketChannel/Basic.java @@ -22,7 +22,7 @@ */ /* @test - * @bug 4607272 6842687 6878369 + * @bug 4607272 6842687 6878369 6944810 7023403 * @summary Unit test for AsynchronousSocketChannel * @run main/timeout=600 Basic */ -- GitLab