[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[GNUnet-SVN] r25921 - gnunet/src/testbed
From: |
gnunet |
Subject: |
[GNUnet-SVN] r25921 - gnunet/src/testbed |
Date: |
Sat, 26 Jan 2013 15:27:22 +0100 |
Author: harsha
Date: 2013-01-26 15:27:22 +0100 (Sat, 26 Jan 2013)
New Revision: 25921
Modified:
gnunet/src/testbed/gnunet-service-testbed_oc.c
Log:
bound remote overlay connect operation execution to limited number of open file
descriptors
Modified: gnunet/src/testbed/gnunet-service-testbed_oc.c
===================================================================
--- gnunet/src/testbed/gnunet-service-testbed_oc.c 2013-01-26 14:00:28 UTC
(rev 25920)
+++ gnunet/src/testbed/gnunet-service-testbed_oc.c 2013-01-26 14:27:22 UTC
(rev 25921)
@@ -1282,6 +1282,11 @@
static void
cleanup_rocc (struct RemoteOverlayConnectCtx *rocc)
{
+ if (NULL != rocc->lop)
+ {
+ GNUNET_TESTBED_operation_release_ (rocc->lop);
+ return;
+ }
LOG_DEBUG ("0x%llx: Cleaning up rocc\n", rocc->op_id);
if (GNUNET_SCHEDULER_NO_TASK != rocc->attempt_connect_task_id)
GNUNET_SCHEDULER_cancel (rocc->attempt_connect_task_id);
@@ -1419,6 +1424,52 @@
/**
+ * Callback which will be called when remote overlay connect operation is
+ * started
+ *
+ * @param cls the remote overlay connect context
+ */
+static void
+opstart_remote_overlay_connect (void *cls)
+{
+ struct RemoteOverlayConnectCtx *rocc = cls;
+
+ GNUNET_assert (GNUNET_SCHEDULER_NO_TASK == rocc->timeout_rocc_task_id);
+ rocc->tcc.op_id = rocc->op_id;
+ rocc->tcc.th =
+ GNUNET_TRANSPORT_connect (rocc->peer->details.local.cfg, NULL, rocc,
NULL,
+ &transport_connect_notify, NULL);
+ if (NULL == rocc->tcc.th)
+ {
+ rocc->timeout_rocc_task_id =
+ GNUNET_SCHEDULER_add_now (&timeout_rocc_task, rocc);
+ return;
+ }
+ rocc->tcc.pid = &rocc->a_id;
+ rocc->attempt_connect_task_id =
+ GNUNET_SCHEDULER_add_now (&attempt_connect_task, rocc);
+ rocc->timeout_rocc_task_id =
+ GNUNET_SCHEDULER_add_delayed (TIMEOUT, &timeout_rocc_task, rocc);
+}
+
+
+/**
+ * Callback which will be called when remote overlay connect operation is
+ * released
+ *
+ * @param cls the remote overlay connect context
+ */
+static void
+oprelease_remote_overlay_connect (void *cls)
+{
+ struct RemoteOverlayConnectCtx *rocc = cls;
+
+ GNUNET_assert (NULL != rocc->lop);
+ rocc->lop = NULL;
+ cleanup_rocc (rocc);
+}
+
+/**
* Handler for GNUNET_MESSAGE_TYPE_TESTBED_REQUESTCONNECT messages
*
* @param cls NULL
@@ -1487,25 +1538,15 @@
"from local peer %u to peer %4s with hello size: %u\n",
rocc->op_id, peer_id, GNUNET_i2s (&rocc->a_id), hsize);
rocc->peer = peer;
- rocc->peer->reference_cnt++;
- rocc->tcc.op_id = rocc->op_id;
- rocc->tcc.th =
- GNUNET_TRANSPORT_connect (rocc->peer->details.local.cfg, NULL, rocc,
NULL,
- &transport_connect_notify, NULL);
- if (NULL == rocc->tcc.th)
- {
- GNUNET_break (0);
- GNUNET_free (rocc);
- GNUNET_SERVER_receive_done (client, GNUNET_SYSERR);
- return;
- }
- rocc->tcc.pid = &rocc->a_id;
+ rocc->peer->reference_cnt++;
rocc->hello = GNUNET_malloc (hsize);
memcpy (rocc->hello, msg->hello, hsize);
- rocc->attempt_connect_task_id =
- GNUNET_SCHEDULER_add_now (&attempt_connect_task, rocc);
- rocc->timeout_rocc_task_id =
- GNUNET_SCHEDULER_add_delayed (TIMEOUT, &timeout_rocc_task, rocc);
+ rocc->lop =
+ GNUNET_TESTBED_operation_create_ (rocc, &opstart_remote_overlay_connect,
+ &oprelease_remote_overlay_connect);
+ /* This operation needs only 1 connection to transport */
+ GNUNET_TESTBED_operation_queue_insert2_ (GST_opq_openfds, rocc->lop, 1);
+ GNUNET_TESTBED_operation_begin_wait_ (rocc->lop);
GNUNET_SERVER_receive_done (client, GNUNET_OK);
}
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [GNUnet-SVN] r25921 - gnunet/src/testbed,
gnunet <=