Fixed issue: NETTY-10 (DefaultChannelPipeline.removeFirst() and removeLast() throws NullPointerException)

* Made sure NoSuchElementException is thrown when the pipeline is empty
* Made sure NullPointerException is not thrown when the pipeline contains only one handler
This commit is contained in:
Trustin Lee 2008-08-18 02:38:54 +00:00
parent 8e9b51a412
commit 866a74305c

View File

@ -171,9 +171,17 @@ public class DefaultChannelPipeline implements ChannelPipeline {
}
DefaultChannelHandlerContext oldHead = head;
oldHead.next.prev = null;
head = oldHead.next;
name2ctx.remove(oldHead.getName());
if (oldHead == null) {
throw new NoSuchElementException();
}
if (oldHead.next == null) {
head = tail = null;
name2ctx.clear();
} else {
oldHead.next.prev = null;
head = oldHead.next;
name2ctx.remove(oldHead.getName());
}
return oldHead.getHandler();
}
@ -183,9 +191,17 @@ public class DefaultChannelPipeline implements ChannelPipeline {
}
DefaultChannelHandlerContext oldTail = tail;
oldTail.prev.next = null;
tail = oldTail.prev;
name2ctx.remove(oldTail.getName());
if (oldTail == null) {
throw new NoSuchElementException();
}
if (oldTail.prev == null) {
head = tail = null;
name2ctx.clear();
} else {
oldTail.prev.next = null;
tail = oldTail.prev;
name2ctx.remove(oldTail.getName());
}
return oldTail.getHandler();
}