From dd181a90e1f10f84a1e265c75dc7294f00f3ea19 Mon Sep 17 00:00:00 2001
From: zab2 <zab2@mail.i2p>
Date: Thu, 25 Jul 2013 20:07:12 +0000
Subject: [PATCH] Fix NPE when cancelling PacketLocal's

---
 .../src/net/i2p/client/streaming/PacketLocal.java  | 14 +++++++++++---
 1 file changed, 11 insertions(+), 3 deletions(-)

diff --git a/apps/streaming/java/src/net/i2p/client/streaming/PacketLocal.java b/apps/streaming/java/src/net/i2p/client/streaming/PacketLocal.java
index 31c008c48b..7a9d78f680 100644
--- a/apps/streaming/java/src/net/i2p/client/streaming/PacketLocal.java
+++ b/apps/streaming/java/src/net/i2p/client/streaming/PacketLocal.java
@@ -32,7 +32,7 @@ class PacketLocal extends Packet implements MessageOutputStream.WriteStatus {
     private long _cancelledOn;
     private final AtomicInteger _nackCount = new AtomicInteger(0);
     private volatile boolean _retransmitted;
-    private SimpleTimer2.TimedEvent _resendEvent;
+    private volatile SimpleTimer2.TimedEvent _resendEvent;
     
     /** not bound to a connection */
     public PacketLocal(I2PAppContext ctx, Destination to) {
@@ -112,6 +112,13 @@ class PacketLocal extends Packet implements MessageOutputStream.WriteStatus {
         _numSends++;
         _lastSend = _context.clock().now();
     }
+    
+    private void cancelResend() {
+        SimpleTimer2.TimedEvent ev = _resendEvent;
+        if (ev != null) 
+            ev.cancel();
+    }
+    
     public void ackReceived() {
         final long now = _context.clock().now();
         synchronized (this) {
@@ -120,15 +127,16 @@ class PacketLocal extends Packet implements MessageOutputStream.WriteStatus {
             releasePayload();
             notifyAll();
         }
-        _resendEvent.cancel();
+        cancelResend();
     }
+    
     public void cancelled() { 
         synchronized (this) {
             _cancelledOn = _context.clock().now();
             releasePayload();
             notifyAll();
         }
-        _resendEvent.cancel();
+       cancelResend();
         if (_log.shouldLog(Log.DEBUG))
             _log.debug("Cancelled! " + toString(), new Exception("cancelled"));
     }
-- 
GitLab