diff options
author | Christian Grothoff <christian@grothoff.org> | 2010-11-23 16:18:19 +0000 |
---|---|---|
committer | Christian Grothoff <christian@grothoff.org> | 2010-11-23 16:18:19 +0000 |
commit | 2d8268aefde82aa59895dcd55a5eb80bab7ca7a8 (patch) | |
tree | 63fd64277b3a318efbeb7f44a66459247c04f207 | |
parent | 7f47ffbde7e95bb949f340e1a48aa05e73654a3e (diff) | |
download | gnunet-2d8268aefde82aa59895dcd55a5eb80bab7ca7a8.tar.gz gnunet-2d8268aefde82aa59895dcd55a5eb80bab7ca7a8.zip |
fix for Nate
-rw-r--r-- | src/core/core_api.c | 20 |
1 files changed, 16 insertions, 4 deletions
diff --git a/src/core/core_api.c b/src/core/core_api.c index d77a0b13c..21622852b 100644 --- a/src/core/core_api.c +++ b/src/core/core_api.c | |||
@@ -590,14 +590,26 @@ transmission_timeout (void *cls, | |||
590 | const struct GNUNET_SCHEDULER_TaskContext *tc) | 590 | const struct GNUNET_SCHEDULER_TaskContext *tc) |
591 | { | 591 | { |
592 | struct PeerRecord *pr = cls; | 592 | struct PeerRecord *pr = cls; |
593 | struct GNUNET_CORE_Handle *h = pr->ch; | ||
593 | struct GNUNET_CORE_TransmitHandle *th; | 594 | struct GNUNET_CORE_TransmitHandle *th; |
594 | 595 | ||
595 | pr->timeout_task = GNUNET_SCHEDULER_NO_TASK; | 596 | pr->timeout_task = GNUNET_SCHEDULER_NO_TASK; |
596 | th = pr->pending_head; | 597 | th = pr->pending_head; |
597 | GNUNET_CONTAINER_DLL_remove (pr->pending_head, | 598 | GNUNET_CONTAINER_DLL_remove (pr->pending_head, |
598 | pr->pending_tail, | 599 | pr->pending_tail, |
599 | th); | 600 | th); |
600 | pr->queue_size--; | 601 | pr->queue_size--; |
602 | if ( (pr->prev != NULL) || | ||
603 | (pr->next != NULL) || | ||
604 | (pr == h->ready_peer_head) ) | ||
605 | { | ||
606 | /* the request that was 'approved' by core was | ||
607 | canceled before it could be transmitted; remove | ||
608 | us from the 'ready' list */ | ||
609 | GNUNET_CONTAINER_DLL_remove (h->ready_peer_head, | ||
610 | h->ready_peer_tail, | ||
611 | pr); | ||
612 | } | ||
601 | #if DEBUG_CORE | 613 | #if DEBUG_CORE |
602 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, | 614 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, |
603 | "Signalling timeout of request for transmission to CORE service\n"); | 615 | "Signalling timeout of request for transmission to CORE service\n"); |
@@ -1514,9 +1526,9 @@ GNUNET_CORE_notify_transmit_ready (struct GNUNET_CORE_Handle *handle, | |||
1514 | /* bound queue size */ | 1526 | /* bound queue size */ |
1515 | if (pr->queue_size == handle->queue_size) | 1527 | if (pr->queue_size == handle->queue_size) |
1516 | { | 1528 | { |
1517 | /* find lowest-priority entry */ | 1529 | /* find lowest-priority entry, but skip the head of the list */ |
1518 | minp = pr->pending_head; | 1530 | minp = pr->pending_head->next; |
1519 | prev = minp->next; | 1531 | prev = minp; |
1520 | while (prev != NULL) | 1532 | while (prev != NULL) |
1521 | { | 1533 | { |
1522 | if (prev->priority < minp->priority) | 1534 | if (prev->priority < minp->priority) |