[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[GNUnet-SVN] r21572 - gnunet/src/transport
From: |
gnunet |
Subject: |
[GNUnet-SVN] r21572 - gnunet/src/transport |
Date: |
Fri, 25 May 2012 10:25:18 +0200 |
Author: wachs
Date: 2012-05-25 10:25:18 +0200 (Fri, 25 May 2012)
New Revision: 21572
Modified:
gnunet/src/transport/gnunet-service-transport_neighbours.c
Log:
Modified: gnunet/src/transport/gnunet-service-transport_neighbours.c
===================================================================
--- gnunet/src/transport/gnunet-service-transport_neighbours.c 2012-05-24
14:31:55 UTC (rev 21571)
+++ gnunet/src/transport/gnunet-service-transport_neighbours.c 2012-05-25
08:25:18 UTC (rev 21572)
@@ -842,69 +842,15 @@
}
}
-/**
- * Free a neighbour map entry.
- *
- * @param n entry to free
- */
-static void
-free_neighbour_without_terminating_sessions (struct NeighbourMapEntry *n)
-{
- struct MessageQueue *mq;
- n->is_active = NULL; /* always free'd by its own continuation! */
- /* fail messages currently in the queue */
- while (NULL != (mq = n->messages_head))
- {
- GNUNET_CONTAINER_DLL_remove (n->messages_head, n->messages_tail, mq);
- if (NULL != mq->cont)
- mq->cont (mq->cont_cls, GNUNET_SYSERR);
- GNUNET_free (mq);
- }
- /* It is too late to send other peer disconnect notifications, but at
- least internally we need to get clean... */
- if (GNUNET_YES == test_connected (n))
- {
- GNUNET_STATISTICS_set (GST_stats,
- gettext_noop ("# peers connected"),
- --neighbours_connected,
- GNUNET_NO);
- disconnect_notify_cb (callback_cls, &n->id);
- }
-
- n->state = S_DISCONNECT_FINISHED;
-
- GNUNET_assert (GNUNET_YES ==
- GNUNET_CONTAINER_multihashmap_remove (neighbours,
- &n->id.hashPubKey, n));
-
- /* cut transport-level connection */
- free_address (&n->primary_address);
- free_address (&n->alternative_address);
-
- // FIXME-ATS-API: we might want to be more specific about
- // which states we do this from in the future (ATS should
- // have given us a 'suggest_address' handle, and if we have
- // such a handle, we should cancel the operation here!
- GNUNET_ATS_suggest_address_cancel (GST_ats, &n->id);
-
- if (GNUNET_SCHEDULER_NO_TASK != n->task)
- {
- GNUNET_SCHEDULER_cancel (n->task);
- n->task = GNUNET_SCHEDULER_NO_TASK;
- }
- /* free rest of memory */
- GNUNET_free (n);
-}
-
-
/**
* Free a neighbour map entry.
*
* @param n entry to free
+ * @param terminate tell plugin to terminate sessions
*/
static void
-free_neighbour (struct NeighbourMapEntry *n)
+free_neighbour (struct NeighbourMapEntry *n, int terminate)
{
struct MessageQueue *mq;
struct GNUNET_TRANSPORT_PluginFunctions *papi;
@@ -939,8 +885,9 @@
API gives us not even the means to selectively kill only one of
them! Killing all sessions like this seems to be very, very
wrong. */
- if ( (NULL != n->primary_address.address) &&
- (NULL != (papi = GST_plugins_find
(n->primary_address.address->transport_name))) )
+ if ((GNUNET_YES == terminate) &&
+ (NULL != n->primary_address.address) &&
+ (NULL != (papi = GST_plugins_find
(n->primary_address.address->transport_name))))
papi->disconnect (papi->cls, &n->id);
n->state = S_DISCONNECT_FINISHED;
@@ -1102,7 +1049,7 @@
case S_INIT_BLACKLIST:
/* other peer is completely unaware of us, no need to send DISCONNECT */
n->state = S_DISCONNECT_FINISHED;
- free_neighbour (n);
+ free_neighbour (n, GNUNET_NO);
return;
case S_CONNECT_SENT:
send_disconnect (n);
@@ -1112,7 +1059,7 @@
case S_CONNECT_RECV_BLACKLIST:
/* we never ACK'ed the other peer's request, no need to send DISCONNECT */
n->state = S_DISCONNECT_FINISHED;
- free_neighbour (n);
+ free_neighbour (n, GNUNET_NO);
return;
case S_CONNECT_RECV_ACK:
/* we DID ACK the other peer's request, must send DISCONNECT */
@@ -1714,7 +1661,7 @@
case S_NOT_CONNECTED:
/* this should not be possible */
GNUNET_break (0);
- free_neighbour (n);
+ free_neighbour (n, GNUNET_NO);
break;
case S_INIT_ATS:
case S_INIT_BLACKLIST:
@@ -1738,7 +1685,7 @@
return; /* already connected */
case S_DISCONNECT:
/* get rid of remains, ready to re-try immediately */
- free_neighbour (n);
+ free_neighbour (n, GNUNET_NO);
break;
case S_DISCONNECT_FINISHED:
/* should not be possible */
@@ -1746,7 +1693,7 @@
default:
GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Unhandled state `%s'
\n",print_state (n->state));
GNUNET_break (0);
- free_neighbour (n);
+ free_neighbour (n, GNUNET_NO);
break;
}
}
@@ -1794,7 +1741,7 @@
case S_NOT_CONNECTED:
/* this should not be possible */
GNUNET_break (0);
- free_neighbour (n);
+ free_neighbour (n, GNUNET_NO);
break;
case S_INIT_ATS:
/* still waiting on ATS suggestion */
@@ -1962,7 +1909,7 @@
default:
GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Unhandled state `%s' \n",print_state
(n->state));
GNUNET_break (0);
- free_neighbour (n);
+ free_neighbour (n, GNUNET_NO);
break;
}
cleanup:
@@ -2111,7 +2058,7 @@
break;
case S_DISCONNECT:
/* get rid of remains without terminating sessions, ready to re-try */
- free_neighbour_without_terminating_sessions (n);
+ free_neighbour (n, GNUNET_YES);
n = setup_neighbour (peer);
n->state = S_CONNECT_RECV_ATS;
GNUNET_ATS_reset_backoff (GST_ats, peer);
@@ -2124,7 +2071,7 @@
default:
GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Unhandled state `%s' \n",print_state
(n->state));
GNUNET_break (0);
- free_neighbour (n);
+ free_neighbour (n, GNUNET_NO);
break;
}
}
@@ -2193,7 +2140,7 @@
{
case S_NOT_CONNECTED:
GNUNET_break (0);
- free_neighbour (n);
+ free_neighbour (n, GNUNET_NO);
return;
case S_INIT_ATS:
set_address (&n->primary_address,
@@ -2360,7 +2307,7 @@
/* invalid state for master task, clean up */
GNUNET_break (0);
n->state = S_DISCONNECT_FINISHED;
- free_neighbour (n);
+ free_neighbour (n, GNUNET_NO);
return;
case S_INIT_ATS:
if (0 == delay.rel_value)
@@ -2369,7 +2316,7 @@
"Connection to `%s' timed out waiting for ATS to provide
address\n",
GNUNET_i2s (&n->id));
n->state = S_DISCONNECT_FINISHED;
- free_neighbour (n);
+ free_neighbour (n, GNUNET_NO);
return;
}
break;
@@ -2380,7 +2327,7 @@
"Connection to `%s' timed out waiting for BLACKLIST to
approve address\n",
GNUNET_i2s (&n->id));
n->state = S_DISCONNECT_FINISHED;
- free_neighbour (n);
+ free_neighbour (n, GNUNET_NO);
return;
}
break;
@@ -2401,7 +2348,7 @@
"Connection to `%s' timed out waiting ATS to provide address
to use for CONNECT_ACK\n",
GNUNET_i2s (&n->id));
n->state = S_DISCONNECT_FINISHED;
- free_neighbour (n);
+ free_neighbour (n, GNUNET_NO);
return;
}
break;
@@ -2412,7 +2359,7 @@
"Connection to `%s' timed out waiting BLACKLIST to approve
address to use for CONNECT_ACK\n",
GNUNET_i2s (&n->id));
n->state = S_DISCONNECT_FINISHED;
- free_neighbour (n);
+ free_neighbour (n, GNUNET_NO);
return;
}
break;
@@ -2497,7 +2444,7 @@
"Cleaning up connection to `%s' after sending DISCONNECT\n",
GNUNET_i2s (&n->id));
n->state = S_DISCONNECT_FINISHED;
- free_neighbour (n);
+ free_neighbour (n, GNUNET_NO);
return;
case S_DISCONNECT_FINISHED:
/* how did we get here!? */
@@ -2584,7 +2531,7 @@
{
case S_NOT_CONNECTED:
GNUNET_break (0);
- free_neighbour (n);
+ free_neighbour (n, GNUNET_NO);
return;
case S_INIT_ATS:
case S_INIT_BLACKLIST:
@@ -2724,11 +2671,11 @@
{
case S_NOT_CONNECTED:
GNUNET_break (0);
- free_neighbour (n);
+ free_neighbour (n, GNUNET_NO);
return;
case S_INIT_ATS:
GNUNET_break (0);
- free_neighbour (n);
+ free_neighbour (n, GNUNET_NO);
return;
case S_INIT_BLACKLIST:
case S_CONNECT_SENT:
@@ -2743,7 +2690,7 @@
case S_CONNECT_RECV_ACK:
/* error on inbound session; free neighbour entirely */
free_address (&n->primary_address);
- free_neighbour (n);
+ free_neighbour (n, GNUNET_NO);
return;
case S_CONNECTED:
free_address (&n->primary_address);
@@ -3153,7 +3100,7 @@
"Disconnecting peer `%4s', %s\n",
GNUNET_i2s (&n->id), "SHUTDOWN_TASK");
n->state = S_DISCONNECT_FINISHED;
- free_neighbour (n);
+ free_neighbour (n, GNUNET_NO);
return GNUNET_OK;
}
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [GNUnet-SVN] r21572 - gnunet/src/transport,
gnunet <=