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();
}