adding Ludo's gnunet-download-manager.scm back to SVN HEAD
[oweals/gnunet.git] / src / core / gnunet-service-core_sessions.c
index 108fd47cfa0379f7a73baf472139135968d94f62..1f697cf160d2d04e2cc2a1d5839808db0c21c67f 100644 (file)
@@ -171,6 +171,7 @@ GSC_SESSIONS_end (const struct GNUNET_PeerIdentity *pid)
 {
   struct Session *session;
   struct GSC_ClientActiveRequest *car;
+  struct SessionMessageEntry *sme;
 
   session = find_session (pid);
   if (NULL == session)
@@ -190,6 +191,11 @@ GSC_SESSIONS_end (const struct GNUNET_PeerIdentity *pid)
                                  session->active_client_request_tail, car);
     GSC_CLIENTS_reject_request (car);
   }
+  while (NULL != (sme = session->sme_head))
+  {
+    GNUNET_CONTAINER_DLL_remove (session->sme_head, session->sme_tail, sme);
+    GNUNET_free (sme);
+  }
   GNUNET_SCHEDULER_cancel (session->typemap_task);
   GSC_CLIENTS_notify_clients_about_neighbour (&session->peer, NULL,
                                               0 /* FIXME: ATSI */ ,
@@ -335,17 +341,11 @@ GSC_SESSIONS_queue_request (struct GSC_ClientActiveRequest *car)
   session = find_session (&car->target);
   if (session == NULL)
   {
-    /* neighbour must have disconnected since request was issued,
-     * ignore (client will realize it once it processes the
-     * disconnect notification) */
 #if DEBUG_CORE
     GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
                 "Dropped client request for transmission (am disconnected)\n");
 #endif
-    GNUNET_STATISTICS_update (GSC_stats,
-                              gettext_noop
-                              ("# send requests dropped (disconnected)"), 1,
-                              GNUNET_NO);
+    GNUNET_break (0);           /* should have been rejected earlier */
     GSC_CLIENTS_reject_request (car);
     return;
   }
@@ -430,12 +430,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;