diff --git a/src/main/java/net/openhft/chronicle/network/WireTcpHandler.java b/src/main/java/net/openhft/chronicle/network/WireTcpHandler.java
index <HASH>..<HASH> 100755
--- a/src/main/java/net/openhft/chronicle/network/WireTcpHandler.java
+++ b/src/main/java/net/openhft/chronicle/network/WireTcpHandler.java
@@ -94,6 +94,7 @@ public abstract class WireTcpHandler implements TcpHandler {
 
         long limit = in.readLimit();
         long end = in.readPosition() + length + SIZE_OF_SIZE;
+        assert end <= limit;
         long outPos = out.writePosition();
         try {
 
@@ -115,11 +116,17 @@ public abstract class WireTcpHandler implements TcpHandler {
 
             if (written > 0)
                 return false;
-        } catch (Exception e) {
+        } catch (Throwable e) {
             LOG.error("", e);
         } finally {
             in.readLimit(limit);
-            in.readPosition(end);
+            try {
+                in.readPosition(end);
+            } catch (Exception e) {
+                throw new IllegalStateException("position: " + end
+                        + ", readLimit: " + in.readLimit() + " " + in.toDebugString(), e);
+
+            }
         }
 
         return true;
CE-<I> Add more diagnostics.