--- old/src/share/classes/sun/nio/ch/SocketChannelImpl.java 2012-11-13 10:48:03.000000000 +0100 +++ new/src/share/classes/sun/nio/ch/SocketChannelImpl.java 2012-11-13 10:48:03.000000000 +0100 @@ -33,7 +33,8 @@ import java.nio.channels.spi.*; import java.util.*; import sun.net.NetHooks; - +import sun.misc.IoTrace; +import sun.misc.IoTraceContext; /** * An implementation of SocketChannels @@ -80,8 +81,8 @@ private int state = ST_UNINITIALIZED; // Binding - private SocketAddress localAddress; - private SocketAddress remoteAddress; + private InetSocketAddress localAddress; + private InetSocketAddress remoteAddress; // Input/Output open private boolean isInputOpen = true; @@ -278,6 +279,11 @@ synchronized (readLock) { if (!ensureReadOpen()) return -1; + IoTraceContext traceContext = null; + if (isBlocking()) { + traceContext = IoTrace.socketReadBegin(remoteAddress.getAddress(), + remoteAddress.getPort(), 0); + } int n = 0; try { @@ -367,6 +373,11 @@ } finally { readerCleanup(); // Clear reader thread + + if (isBlocking()) { + IoTrace.socketReadEnd(traceContext, n > 0 ? n : 0); + } + // The end method, which is defined in our superclass // AbstractInterruptibleChannel, resets the interruption // machinery. If its argument is true then it returns @@ -407,6 +418,11 @@ if (!ensureReadOpen()) return -1; long n = 0; + IoTraceContext traceContext = null; + if (isBlocking()) { + traceContext = IoTrace.socketReadBegin(remoteAddress.getAddress(), + remoteAddress.getPort(), 0); + } try { begin(); synchronized (stateLock) { @@ -423,6 +439,9 @@ } } finally { readerCleanup(); + if (isBlocking()) { + IoTrace.socketReadEnd(traceContext, n > 0 ? n : 0); + } end(n > 0 || (n == IOStatus.UNAVAILABLE)); synchronized (stateLock) { if ((n <= 0) && (!isInputOpen)) @@ -439,6 +458,10 @@ synchronized (writeLock) { ensureWriteOpen(); int n = 0; + IoTraceContext traceContext = + IoTrace.socketWriteBegin(remoteAddress.getAddress(), + remoteAddress.getPort()); + try { begin(); synchronized (stateLock) { @@ -454,6 +477,7 @@ } } finally { writerCleanup(); + IoTrace.socketWriteEnd(traceContext, n > 0 ? n : 0); end(n > 0 || (n == IOStatus.UNAVAILABLE)); synchronized (stateLock) { if ((n <= 0) && (!isOutputOpen)) @@ -472,6 +496,9 @@ synchronized (writeLock) { ensureWriteOpen(); long n = 0; + IoTraceContext traceContext = + IoTrace.socketWriteBegin(remoteAddress.getAddress(), + remoteAddress.getPort()); try { begin(); synchronized (stateLock) { @@ -487,6 +514,7 @@ } } finally { writerCleanup(); + IoTrace.socketWriteEnd(traceContext, n > 0 ? n : 0); end((n > 0) || (n == IOStatus.UNAVAILABLE)); synchronized (stateLock) { if ((n <= 0) && (!isOutputOpen))