Fixed checking of closed channel before attempting to add credits
git-svn-id: https://hyracks.googlecode.com/svn/branches/hyracks_dev_next@1095 123451ca-8445-de46-9d55-352943316053
diff --git a/hyracks-net/src/main/java/edu/uci/ics/hyracks/net/protocols/muxdemux/ChannelControlBlock.java b/hyracks-net/src/main/java/edu/uci/ics/hyracks/net/protocols/muxdemux/ChannelControlBlock.java
index 7e11518..d6f3fd1 100644
--- a/hyracks-net/src/main/java/edu/uci/ics/hyracks/net/protocols/muxdemux/ChannelControlBlock.java
+++ b/hyracks-net/src/main/java/edu/uci/ics/hyracks/net/protocols/muxdemux/ChannelControlBlock.java
@@ -74,11 +74,11 @@
private final IBufferAcceptor eba = new IBufferAcceptor() {
@Override
public void accept(ByteBuffer buffer) {
- if (remoteClose.get()) {
- return;
- }
int delta = buffer.remaining();
synchronized (ChannelControlBlock.this) {
+ if (remoteClose.get()) {
+ return;
+ }
riEmptyStack.push(buffer);
}
cSet.addPendingCredits(channelId, delta);
@@ -305,6 +305,10 @@
remoteClose.set(true);
}
+ boolean getRemoteEOS() {
+ return remoteClose.get();
+ }
+
synchronized void reportLocalEOSAck() {
localCloseAck.set(true);
}
diff --git a/hyracks-net/src/main/java/edu/uci/ics/hyracks/net/protocols/muxdemux/ChannelSet.java b/hyracks-net/src/main/java/edu/uci/ics/hyracks/net/protocols/muxdemux/ChannelSet.java
index c3f93d2..ffdb5c6 100644
--- a/hyracks-net/src/main/java/edu/uci/ics/hyracks/net/protocols/muxdemux/ChannelSet.java
+++ b/hyracks-net/src/main/java/edu/uci/ics/hyracks/net/protocols/muxdemux/ChannelSet.java
@@ -141,12 +141,17 @@
}
synchronized (mConn) {
ChannelControlBlock ccb = ccbArray[channelId];
- int oldCredits = ccb.getReadCredits();
- ccb.setReadCredits(oldCredits + delta);
- if (oldCredits == 0) {
- assert !pendingChannelCreditsBitmap.get(channelId);
- pendingChannelCreditsBitmap.set(channelId);
- pendingWriteEventsCounter.increment();
+ if (ccb != null) {
+ if (ccb.getRemoteEOS()) {
+ return;
+ }
+ int oldCredits = ccb.getReadCredits();
+ ccb.setReadCredits(oldCredits + delta);
+ if (oldCredits == 0) {
+ assert !pendingChannelCreditsBitmap.get(channelId);
+ pendingChannelCreditsBitmap.set(channelId);
+ pendingWriteEventsCounter.increment();
+ }
}
}
}