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

Print this page
rev 6052 : [mq]: jdk.patch

*** 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 traceHandle = null; + if (isBlocking()) { + traceHandle = IoTrace.socketReadBegin(remoteAddress.getAddress(), + remoteAddress.getPort(), 0); + } int n = 0; try { // Set up the interruption machinery; see // AbstractInterruptibleChannel for details
*** 383,392 **** --- 388,399 ---- // interrupted at the exact moment that a non-blocking I/O // request is made. // end(n > 0 || (n == IOStatus.UNAVAILABLE)); + IoTrace.socketReadEnd(traceHandle, IOStatus.normalize(n)); + // Extra case for socket channels: Asynchronous shutdown // synchronized (stateLock) { if ((n <= 0) && (!isInputOpen)) return IOStatus.EOF;
*** 405,414 **** --- 412,426 ---- throw new IndexOutOfBoundsException(); synchronized (readLock) { if (!ensureReadOpen()) return -1; long n = 0; + Object traceHandle = null; + if (isBlocking()) { + traceHandle = IoTrace.socketReadBegin(remoteAddress.getAddress(), + remoteAddress.getPort(), 0); + } try { begin(); synchronized (stateLock) { if (!isOpen()) return 0;
*** 422,431 **** --- 434,444 ---- return IOStatus.normalize(n); } } finally { readerCleanup(); end(n > 0 || (n == IOStatus.UNAVAILABLE)); + IoTrace.socketReadEnd(traceHandle, IOStatus.normalize(n)); synchronized (stateLock) { if ((n <= 0) && (!isInputOpen)) return IOStatus.EOF; } assert IOStatus.check(n);
*** 437,446 **** --- 450,463 ---- if (buf == null) throw new NullPointerException(); synchronized (writeLock) { ensureWriteOpen(); int n = 0; + Object traceHandle = + IoTrace.socketWriteBegin(remoteAddress.getAddress(), + remoteAddress.getPort()); + try { begin(); synchronized (stateLock) { if (!isOpen()) return 0;
*** 453,462 **** --- 470,480 ---- return IOStatus.normalize(n); } } finally { writerCleanup(); end(n > 0 || (n == IOStatus.UNAVAILABLE)); + IoTrace.socketWriteEnd(traceHandle, IOStatus.normalize(n)); synchronized (stateLock) { if ((n <= 0) && (!isOutputOpen)) throw new AsynchronousCloseException(); } assert IOStatus.check(n);
*** 470,479 **** --- 488,500 ---- if ((offset < 0) || (length < 0) || (offset > srcs.length - length)) throw new IndexOutOfBoundsException(); synchronized (writeLock) { ensureWriteOpen(); long n = 0; + Object traceHandle = + IoTrace.socketWriteBegin(remoteAddress.getAddress(), + remoteAddress.getPort()); try { begin(); synchronized (stateLock) { if (!isOpen()) return 0;
*** 486,495 **** --- 507,517 ---- return IOStatus.normalize(n); } } finally { writerCleanup(); end((n > 0) || (n == IOStatus.UNAVAILABLE)); + IoTrace.socketWriteEnd(traceHandle, IOStatus.normalize(n)); synchronized (stateLock) { if ((n <= 0) && (!isOutputOpen)) throw new AsynchronousCloseException(); } assert IOStatus.check(n);