src/share/classes/sun/nio/ch/SocketChannelImpl.java

Print this page
rev 5501 : imported patch io-trace

*** 31,41 **** import java.nio.ByteBuffer; import java.nio.channels.*; import java.nio.channels.spi.*; import java.util.*; import sun.net.NetHooks; ! /** * An implementation of SocketChannels */ --- 31,41 ---- import java.nio.ByteBuffer; import java.nio.channels.*; import java.nio.channels.spi.*; import java.util.*; import sun.net.NetHooks; ! import sun.misc.IoTrace; /** * An implementation of SocketChannels */
*** 78,89 **** private static final int ST_KILLPENDING = 3; private static final int ST_KILLED = 4; private int state = ST_UNINITIALIZED; // Binding ! private SocketAddress localAddress; ! private SocketAddress remoteAddress; // Input/Output open private boolean isInputOpen = true; private boolean isOutputOpen = true; private boolean readyToConnect = false; --- 78,89 ---- private static final int ST_KILLPENDING = 3; private static final int ST_KILLED = 4; private int state = ST_UNINITIALIZED; // Binding ! private InetSocketAddress localAddress; ! private InetSocketAddress remoteAddress; // Input/Output open private boolean isInputOpen = true; private boolean isOutputOpen = true; private boolean readyToConnect = false;
*** 276,285 **** --- 276,290 ---- throw new NullPointerException(); synchronized (readLock) { if (!ensureReadOpen()) return -1; + Object traceContext = null; + if (isBlocking()) { + traceContext = IoTrace.socketReadBegin(remoteAddress.getAddress(), + remoteAddress.getPort(), 0); + } int n = 0; try { // Set up the interruption machinery; see // AbstractInterruptibleChannel for details
*** 365,374 **** --- 370,384 ---- return IOStatus.normalize(n); } } 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 // normally; otherwise it checks the interrupt and open state // of this channel and throws an appropriate exception if
*** 405,414 **** --- 415,429 ---- throw new IndexOutOfBoundsException(); synchronized (readLock) { if (!ensureReadOpen()) return -1; long n = 0; + Object traceContext = null; + if (isBlocking()) { + traceContext = IoTrace.socketReadBegin(remoteAddress.getAddress(), + remoteAddress.getPort(), 0); + } try { begin(); synchronized (stateLock) { if (!isOpen()) return 0;
*** 421,430 **** --- 436,448 ---- continue; return IOStatus.normalize(n); } } finally { readerCleanup(); + if (isBlocking()) { + IoTrace.socketReadEnd(traceContext, n > 0 ? n : 0); + } end(n > 0 || (n == IOStatus.UNAVAILABLE)); synchronized (stateLock) { if ((n <= 0) && (!isInputOpen)) return IOStatus.EOF; }
*** 437,446 **** --- 455,468 ---- if (buf == null) throw new NullPointerException(); synchronized (writeLock) { ensureWriteOpen(); int n = 0; + Object traceContext = + IoTrace.socketWriteBegin(remoteAddress.getAddress(), + remoteAddress.getPort()); + try { begin(); synchronized (stateLock) { if (!isOpen()) return 0;
*** 452,461 **** --- 474,484 ---- continue; return IOStatus.normalize(n); } } finally { writerCleanup(); + IoTrace.socketWriteEnd(traceContext, n > 0 ? n : 0); end(n > 0 || (n == IOStatus.UNAVAILABLE)); synchronized (stateLock) { if ((n <= 0) && (!isOutputOpen)) throw new AsynchronousCloseException(); }
*** 470,479 **** --- 493,505 ---- if ((offset < 0) || (length < 0) || (offset > srcs.length - length)) throw new IndexOutOfBoundsException(); synchronized (writeLock) { ensureWriteOpen(); long n = 0; + Object traceContext = + IoTrace.socketWriteBegin(remoteAddress.getAddress(), + remoteAddress.getPort()); try { begin(); synchronized (stateLock) { if (!isOpen()) return 0;
*** 485,494 **** --- 511,521 ---- continue; return IOStatus.normalize(n); } } finally { writerCleanup(); + IoTrace.socketWriteEnd(traceContext, n > 0 ? n : 0); end((n > 0) || (n == IOStatus.UNAVAILABLE)); synchronized (stateLock) { if ((n <= 0) && (!isOutputOpen)) throw new AsynchronousCloseException(); }