handle ACKs past client down
authorChristian Grothoff <christian@grothoff.org>
Wed, 25 Jan 2017 19:04:32 +0000 (20:04 +0100)
committerChristian Grothoff <christian@grothoff.org>
Wed, 25 Jan 2017 19:04:32 +0000 (20:04 +0100)
src/cadet/gnunet-service-cadet-new_channel.c

index 29ad732b076b23e353a6907a0df773449f793283..83911f530c61a40605d898a8edc11de3d9257e77 100644 (file)
@@ -861,9 +861,16 @@ send_ack_to_client (struct CadetChannel *ch,
   struct GNUNET_CADET_LocalAck *ack;
   struct CadetChannelClient *ccc;
 
+  ccc = (GNUNET_YES == to_owner) ? ch->owner : ch->dest;
+  if (NULL == ccc)
+  {
+    /* This can happen if we are just getting ACKs after
+       our local client already disconnected. */
+    GNUNET_assert (GNUNET_YES == ch->destroy);
+    return;
+  }
   env = GNUNET_MQ_msg (ack,
                        GNUNET_MESSAGE_TYPE_CADET_LOCAL_ACK);
-  ccc = (GNUNET_YES == to_owner) ? ch->owner : ch->dest;
   ack->ccn = ccc->ccn;
   LOG (GNUNET_ERROR_TYPE_DEBUG,
        "Sending CADET_LOCAL_ACK to %s (%s) at ccn %X (%u/%u pending)\n",
@@ -1432,6 +1439,7 @@ cmp_crm_by_next_retry (void *cls,
   return GNUNET_NO;
 }
 
+
 /**
  * Function called once the tunnel has sent one of our messages.
  * If the message is unreliable, simply frees the `crm`. If the