gnunet-svn
[Top][All Lists]
Advanced

[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);
 }
 




reply via email to

[Prev in Thread] Current Thread [Next in Thread]