X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=src%2Fcore%2Fgnunet-service-core_sessions.c;h=1f697cf160d2d04e2cc2a1d5839808db0c21c67f;hb=b0c7119fa2f43fe1b5978651152974359de5a5d2;hp=108fd47cfa0379f7a73baf472139135968d94f62;hpb=83b19539f4d322b43683f5838b72e9ec2c8e6073;p=oweals%2Fgnunet.git diff --git a/src/core/gnunet-service-core_sessions.c b/src/core/gnunet-service-core_sessions.c index 108fd47cf..1f697cf16 100644 --- a/src/core/gnunet-service-core_sessions.c +++ b/src/core/gnunet-service-core_sessions.c @@ -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;