diff options
author | t3sserakt <t3ss@posteo.de> | 2024-01-10 11:36:36 +0100 |
---|---|---|
committer | t3sserakt <t3ss@posteo.de> | 2024-01-10 11:36:36 +0100 |
commit | 78b0a9aeb72e0b37989c8cf56534057f0d38ed9e (patch) | |
tree | ea10a2d70ddd5aed188c44a47f57f96811f667cd | |
parent | 84b76e31d77e88c36b40d334c9990c7029b00d35 (diff) | |
download | gnunet-78b0a9aeb72e0b37989c8cf56534057f0d38ed9e.tar.gz gnunet-78b0a9aeb72e0b37989c8cf56534057f0d38ed9e.zip |
Fixed bug in logic freeing timedout QueueEntry.
-rw-r--r-- | src/service/transport/gnunet-service-transport.c | 25 |
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 | } |