aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authort3sserakt <t3ss@posteo.de>2024-01-10 11:36:36 +0100
committert3sserakt <t3ss@posteo.de>2024-01-10 11:36:36 +0100
commit78b0a9aeb72e0b37989c8cf56534057f0d38ed9e (patch)
treeea10a2d70ddd5aed188c44a47f57f96811f667cd
parent84b76e31d77e88c36b40d334c9990c7029b00d35 (diff)
downloadgnunet-78b0a9aeb72e0b37989c8cf56534057f0d38ed9e.tar.gz
gnunet-78b0a9aeb72e0b37989c8cf56534057f0d38ed9e.zip
Fixed bug in logic freeing timedout QueueEntry.
-rw-r--r--src/service/transport/gnunet-service-transport.c25
1 files changed, 20 insertions, 5 deletions
diff --git a/src/service/transport/gnunet-service-transport.c b/src/service/transport/gnunet-service-transport.c
index ab64ddf32..2bfde7f7f 100644
--- a/src/service/transport/gnunet-service-transport.c
+++ b/src/service/transport/gnunet-service-transport.c
@@ -4542,21 +4542,36 @@ free_timedout_queue_entry (void *cls)
4542 struct TransportClient *tc = cls; 4542 struct TransportClient *tc = cls;
4543 struct GNUNET_TIME_Absolute now = GNUNET_TIME_absolute_get (); 4543 struct GNUNET_TIME_Absolute now = GNUNET_TIME_absolute_get ();
4544 4544
4545 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
4546 "freeing timedout queue entries\n");
4547
4548 tc->details.communicator.free_queue_entry_task = NULL;
4545 for (struct Queue *queue = tc->details.communicator.queue_head; NULL != queue; 4549 for (struct Queue *queue = tc->details.communicator.queue_head; NULL != queue;
4546 queue = queue->next_client) 4550 queue = queue->next_client)
4547 { 4551 {
4548 for (struct QueueEntry *qep = queue->queue_head; NULL != qep; 4552 struct QueueEntry *qep = queue->queue_head;
4549 qep = qep->next) 4553
4554 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
4555 "checking QID %u for timedout queue entries\n",
4556 queue->qid);
4557 while (NULL != qep)
4550 { 4558 {
4551 struct GNUNET_TIME_Relative diff = GNUNET_TIME_absolute_get_difference (qep->creation_timestamp, now); 4559 struct QueueEntry *pos = qep;
4560
4561 qep = qep->next;
4562 struct GNUNET_TIME_Relative diff = GNUNET_TIME_absolute_get_difference (pos->creation_timestamp, now);
4563
4564 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
4565 "diff to now %s \n",
4566 GNUNET_TIME_relative2s (diff, GNUNET_NO));
4552 if (GNUNET_TIME_relative_cmp (QUEUE_ENTRY_TIMEOUT, < , diff)) 4567 if (GNUNET_TIME_relative_cmp (QUEUE_ENTRY_TIMEOUT, < , diff))
4553 { 4568 {
4554 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, 4569 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
4555 "Freeing timed out QueueEntry with MID %" PRIu64 4570 "Freeing timed out QueueEntry with MID %" PRIu64
4556 " and QID %u\n", 4571 " and QID %u\n",
4557 qep->mid, 4572 pos->mid,
4558 queue->qid); 4573 queue->qid);
4559 free_queue_entry(qep, tc); 4574 free_queue_entry(pos, tc);
4560 } 4575 }
4561 } 4576 }
4562 } 4577 }