set profiler: allow variable element size via -w (width) option
authorFlorian Dold <florian.dold@gmail.com>
Tue, 28 Feb 2017 17:14:19 +0000 (18:14 +0100)
committerFlorian Dold <florian.dold@gmail.com>
Tue, 28 Feb 2017 17:15:30 +0000 (18:15 +0100)
src/set/gnunet-service-set.c
src/set/gnunet-set-profiler.c

index 4168685f178dd18cb2b706fd1208e0fef3b7916d..b0f8b209186c1ee4a89036ddb2f04b06df2638bd 100644 (file)
@@ -613,42 +613,6 @@ client_connect_cb (void *cls,
 }
 
 
-/**
- * Clean up after a client has disconnected
- *
- * @param cls closure, unused
- * @param client the client to clean up after
- * @param internal_cls our client-specific internal data structure
- */
-static void
-client_disconnect_cb (void *cls,
-                      struct GNUNET_SERVICE_Client *client,
-                      void *internal_cls)
-{
-  struct Listener *listener;
-  struct Set *set;
-
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-              "client disconnected, cleaning up\n");
-  set = set_get (client);
-  if (NULL != set)
-  {
-    set->client = NULL;
-    set_destroy (set);
-    GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-                "Client's set destroyed\n");
-  }
-  listener = listener_get (client);
-  if (NULL != listener)
-  {
-    listener->client = NULL;
-    listener_destroy (listener);
-    GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-                "Client's listener destroyed\n");
-  }
-}
-
-
 /**
  * Destroy an incoming request from a remote peer
  *
@@ -683,6 +647,52 @@ incoming_destroy (struct Operation *incoming)
 }
 
 
+/**
+ * Clean up after a client has disconnected
+ *
+ * @param cls closure, unused
+ * @param client the client to clean up after
+ * @param internal_cls our client-specific internal data structure
+ */
+static void
+client_disconnect_cb (void *cls,
+                      struct GNUNET_SERVICE_Client *client,
+                      void *internal_cls)
+{
+  struct Set *set;
+
+  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+              "client disconnected, cleaning up\n");
+  set = set_get (client);
+  if (NULL != set)
+  {
+    set->client = NULL;
+    set_destroy (set);
+    GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+                "Client's set destroyed\n");
+  }
+  struct Listener *listener = listener_get (client);
+  struct Operation *op = incoming_head;
+  if (NULL != listener)
+  {
+    /* destroy all incoming operations whose client just
+     * got destroyed */
+    while (NULL != op)
+    {
+      struct Operation *curr = op;
+      op = op->next;
+      if ( (GNUNET_YES == curr->is_incoming) && 
+           (curr->listener == listener) )
+        incoming_destroy (curr);
+    }
+    listener->client = NULL;
+    listener_destroy (listener);
+    GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+                "Client's listener destroyed\n");
+  }
+}
+
+
 /**
  * Suggest the given request to the listener. The listening client can
  * then accept or reject the remote request.
index d83e034a684c8c396b4c5ede9e4168f35803a6c2..7de58a0d142104f733c3bc195565bb96cbe4e00d 100644 (file)
@@ -62,6 +62,8 @@ static int byzantine;
 static int force_delta;
 static int force_full;
 
+static unsigned int element_length = 32;
+
 /**
  * Handle to the statistics service.
  */
@@ -261,15 +263,17 @@ set_insert_iterator (void *cls,
                      void *value)
 {
   struct GNUNET_SET_Handle *set = cls;
-  struct GNUNET_SET_Element *el;
-
-  el = GNUNET_malloc (sizeof (struct GNUNET_SET_Element) +
-                      sizeof (struct GNUNET_HashCode));
-  el->element_type = 0;
-  GNUNET_memcpy (&el[1], key, sizeof *key);
-  el->data = &el[1];
-  el->size = sizeof *key;
-  GNUNET_SET_add_element (set, el, NULL, NULL);
+  struct GNUNET_SET_Element el;
+
+  GNUNET_assert (element_length > 0);
+  char payload[element_length];
+
+  GNUNET_CRYPTO_random_block (GNUNET_CRYPTO_QUALITY_WEAK, payload, element_length);
+
+  el.element_type = 0;
+  el.data = payload;
+  el.size = element_length;
+  GNUNET_SET_add_element (set, &el, NULL, NULL);
   GNUNET_free (el);
   return GNUNET_YES;
 }
@@ -432,6 +436,9 @@ main (int argc, char **argv)
       { 'f', "force-full", NULL,
         gettext_noop ("force sending full set"),
         GNUNET_NO, &GNUNET_GETOPT_set_uint, &force_full },
+      { 'l', "element-length", NULL,
+        gettext_noop ("element length in byte"),
+        GNUNET_NO, &GNUNET_GETOPT_set_uint, &element_length },
       { 'd', "force-delta", NULL,
         gettext_noop ("number delta operation"),
         GNUNET_NO, &GNUNET_GETOPT_set_uint, &force_delta },