fixing mantis 1961
authorChristian Grothoff <christian@grothoff.org>
Fri, 25 Nov 2011 16:10:58 +0000 (16:10 +0000)
committerChristian Grothoff <christian@grothoff.org>
Fri, 25 Nov 2011 16:10:58 +0000 (16:10 +0000)
src/core/gnunet-service-core_clients.c
src/core/gnunet-service-core_sessions.c

index 98a55bef92e5103c71dd2c4da228fef281d18ab5..5d06af6403ae4d2ce5d42aad33d0989a872074ce 100644 (file)
@@ -606,15 +606,24 @@ GSC_CLIENTS_solicit_request (struct GSC_ClientActiveRequest *car)
   struct SendMessageReady smr;
 
   c = car->client_handle;
+  if (GNUNET_YES !=
+      GNUNET_CONTAINER_multihashmap_contains (c->connectmap,
+                                             &car->
+                                             target.hashPubKey))
+  {
+    /* connection has gone down since, drop request */
+    GNUNET_assert (0 !=
+                  memcmp (&car->target, &GSC_my_identity,
+                          sizeof (struct GNUNET_PeerIdentity)));
+    GSC_SESSIONS_dequeue_request (car);
+    GSC_CLIENTS_reject_request (car);
+    return;
+  }
   smr.header.size = htons (sizeof (struct SendMessageReady));
   smr.header.type = htons (GNUNET_MESSAGE_TYPE_CORE_SEND_READY);
   smr.size = htons (car->msize);
   smr.smr_id = car->smr_id;
   smr.peer = car->target;
-  GNUNET_assert (GNUNET_YES ==
-                 GNUNET_CONTAINER_multihashmap_contains (c->connectmap,
-                                                         &car->
-                                                         target.hashPubKey));
   send_to_client (c, &smr.header, GNUNET_NO);
 }
 
index 51bd03279bdd6129a95d6e11576e0d544abd0b3a..2192728099851eff425fcd9bbd336d5b68895f4d 100644 (file)
@@ -432,12 +432,15 @@ static void
 solicit_messages (struct Session *session)
 {
   struct GSC_ClientActiveRequest *car;
+  struct GSC_ClientActiveRequest *nxt;
   size_t so_size;
 
   discard_expired_requests (session);
   so_size = 0;
-  for (car = session->active_client_request_head; NULL != car; car = car->next)
+  nxt = session->active_client_request_head;
+  while (NULL != (car = nxt) )
   {
+    nxt = car->next;
     if (so_size + car->msize > GNUNET_CONSTANTS_MAX_ENCRYPTED_MESSAGE_SIZE)
       break;
     so_size += car->msize;