From fcc5b889b3c4783313567deb995d7437434469a3 Mon Sep 17 00:00:00 2001 From: Christian Grothoff Date: Wed, 17 Feb 2010 22:17:37 +0000 Subject: fix state machine update --- src/transport/gnunet-service-transport.c | 9 +++++--- src/transport/test_transport_api_tcp_peer1.conf | 2 +- src/transport/test_transport_api_tcp_peer2.conf | 4 ++-- src/transport/transport_api.c | 28 ++++++++++++++++++++++++- 4 files changed, 36 insertions(+), 7 deletions(-) diff --git a/src/transport/gnunet-service-transport.c b/src/transport/gnunet-service-transport.c index 8f88311b0..b89bc8bce 100644 --- a/src/transport/gnunet-service-transport.c +++ b/src/transport/gnunet-service-transport.c @@ -1194,9 +1194,6 @@ try_transmission_to_peer (struct NeighbourList *neighbour) /* FIXME: support bi-directional use of TCP */ if (mq->specific_address == NULL) mq->specific_address = find_ready_address(neighbour); - GNUNET_CONTAINER_DLL_remove (neighbour->messages_head, - neighbour->messages_tail, - mq); if (mq->specific_address == NULL) { timeout = GNUNET_TIME_absolute_get_remaining (mq->timeout); @@ -1210,6 +1207,9 @@ try_transmission_to_peer (struct NeighbourList *neighbour) #endif if (mq->client != NULL) transmit_send_ok (mq->client, neighbour, GNUNET_NO); + GNUNET_CONTAINER_DLL_remove (neighbour->messages_head, + neighbour->messages_tail, + mq); GNUNET_free (mq); return; /* nobody ready */ } @@ -1229,6 +1229,9 @@ try_transmission_to_peer (struct NeighbourList *neighbour) #endif return; } + GNUNET_CONTAINER_DLL_remove (neighbour->messages_head, + neighbour->messages_tail, + mq); if (mq->specific_address->connected == GNUNET_NO) mq->specific_address->connect_attempts++; rl = mq->specific_address->ready_list; diff --git a/src/transport/test_transport_api_tcp_peer1.conf b/src/transport/test_transport_api_tcp_peer1.conf index 77902fd20..e854db16a 100644 --- a/src/transport/test_transport_api_tcp_peer1.conf +++ b/src/transport/test_transport_api_tcp_peer1.conf @@ -49,7 +49,7 @@ MINIMUM-FRIENDS = 0 [transport] PLUGINS = tcp -#DEBUG = YES +DEBUG = YES #PREFIX = xterm -T transport2 -e gdb --command=cmd --args #PREFIX = valgrind --leak-check=full ALLOW_SHUTDOWN = YES diff --git a/src/transport/test_transport_api_tcp_peer2.conf b/src/transport/test_transport_api_tcp_peer2.conf index 870a4809e..44c6850ce 100644 --- a/src/transport/test_transport_api_tcp_peer2.conf +++ b/src/transport/test_transport_api_tcp_peer2.conf @@ -49,8 +49,8 @@ MINIMUM-FRIENDS = 0 [transport] PLUGINS = tcp -#DEBUG = YES -PREFIX = +DEBUG = YES +# PREFIX = ALLOW_SHUTDOWN = YES ACCEPT_FROM6 = ::1; ACCEPT_FROM = 127.0.0.1; diff --git a/src/transport/transport_api.c b/src/transport/transport_api.c index 020253bc7..b99e8969b 100644 --- a/src/transport/transport_api.c +++ b/src/transport/transport_api.c @@ -640,6 +640,26 @@ transport_notify_ready (void *cls, size_t size, void *buf) ret += (mret + sizeof (struct OutboundMessage)); size -= (mret + sizeof (struct OutboundMessage)); } + else + { + switch (n->transmit_stage) + { + case TS_NEW: + GNUNET_break (0); + break; + case TS_QUEUED: + GNUNET_break (0); + break; + case TS_TRANSMITTED: + n->transmit_stage = TS_NEW; + break; + case TS_TRANSMITTED_QUEUED: + GNUNET_break (0); + break; + default: + GNUNET_break (0); + } + } } schedule_transmission (h); #if DEBUG_TRANSPORT @@ -1565,9 +1585,15 @@ peer_transmit_timeout (void *cls, void *notify_cls; th->notify_delay_task = GNUNET_SCHEDULER_NO_TASK; + n = th->neighbour; +#if DEBUG_TRANSPORT + GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, + "Triggering timeout for request to transmit to `%4s' (%d)\n", + GNUNET_i2s (&n->id), + n->transmit_stage); +#endif notify = th->notify; notify_cls = th->notify_cls; - n = th->neighbour; switch (n->transmit_stage) { case TS_NEW: -- cgit v1.2.3