gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[gnunet] 01/04: fix recursive loading of BC


From: gnunet
Subject: [gnunet] 01/04: fix recursive loading of BC
Date: Mon, 10 Jan 2022 14:22:40 +0100

This is an automated email from the git hooks/post-receive script.

grothoff pushed a commit to branch master
in repository gnunet.

commit 95aaa49664421c44006bb43e37cbce8cf9c27c5a
Author: Christian Grothoff <christian@grothoff.org>
AuthorDate: Mon Jan 10 11:50:44 2022 +0100

    fix recursive loading of BC
---
 src/consensus/plugin_block_consensus.c | 45 ++++++++++++++++++++++++++++------
 1 file changed, 37 insertions(+), 8 deletions(-)

diff --git a/src/consensus/plugin_block_consensus.c 
b/src/consensus/plugin_block_consensus.c
index 67309bc79..430a2c0cb 100644
--- a/src/consensus/plugin_block_consensus.c
+++ b/src/consensus/plugin_block_consensus.c
@@ -30,6 +30,23 @@
 #include "gnunet_block_group_lib.h"
 
 
+/**
+ * Our closure.
+ */
+struct BlockContext
+{
+  /**
+   * Configuration to use.
+   */
+  const struct GNUNET_CONFIGURATION_Handle *cfg;
+
+  /**
+   * Lazily initialized block context.
+   */
+  struct GNUNET_BLOCK_Context *bc;
+};
+
+
 /**
  * Function called to validate a reply or a request.  For
  * request evaluation, simply pass "NULL" for the reply_block.
@@ -58,6 +75,7 @@ block_plugin_consensus_evaluate (void *cls,
                                  const void *reply_block,
                                  size_t reply_block_size)
 {
+  struct BlockContext *bctx = cls;
   const struct ConsensusElement *ce = reply_block;
 
   if (reply_block_size < sizeof(struct ConsensusElement))
@@ -66,7 +84,9 @@ block_plugin_consensus_evaluate (void *cls,
        (0 == ce->payload_type) )
     return GNUNET_BLOCK_EVALUATION_OK_MORE;
 
-  return GNUNET_BLOCK_evaluate (ctx,
+  if (NULL == bctx->bc)
+    bctx->bc = GNUNET_BLOCK_context_create (bctx->cfg);
+  return GNUNET_BLOCK_evaluate (bctx->bc,
                                 type,
                                 group,
                                 eo,
@@ -120,7 +140,7 @@ block_plugin_consensus_check_block (void *cls,
                                     const void *block,
                                     size_t block_size)
 {
-  struct GNUNET_BLOCK_Context *ctx = cls;
+  struct BlockContext *ctx = cls;
   const struct ConsensusElement *ce = block;
 
   if (block_size < sizeof(*ce))
@@ -128,7 +148,9 @@ block_plugin_consensus_check_block (void *cls,
   if ( (0 != ce->marker) ||
        (0 == ce->payload_type) )
     return GNUNET_OK;
-  return GNUNET_BLOCK_check_block (ctx,
+  if (NULL == ctx->bc)
+    ctx->bc = GNUNET_BLOCK_context_create (ctx->cfg);
+  return GNUNET_BLOCK_check_block (ctx->bc,
                                    ntohl (ce->payload_type),
                                    query,
                                    &ce[1],
@@ -163,7 +185,7 @@ block_plugin_consensus_check_reply (
   const void *reply_block,
   size_t reply_block_size)
 {
-  struct GNUNET_BLOCK_Context *ctx = cls;
+  struct BlockContext *ctx = cls;
   const struct ConsensusElement *ce = reply_block;
 
   if (reply_block_size < sizeof(struct ConsensusElement))
@@ -171,7 +193,9 @@ block_plugin_consensus_check_reply (
   if ( (0 != ce->marker) ||
        (0 == ce->payload_type) )
     return GNUNET_BLOCK_REPLY_OK_MORE;
-  return GNUNET_BLOCK_check_reply (ctx,
+  if (NULL == ctx->bc)
+    ctx->bc = GNUNET_BLOCK_context_create (ctx->cfg);
+  return GNUNET_BLOCK_check_reply (ctx->bc,
                                    ntohl (ce->payload_type),
                                    group,
                                    query,
@@ -215,10 +239,13 @@ libgnunet_plugin_block_consensus_init (void *cls)
     GNUNET_BLOCK_TYPE_ANY       /* end of list */
   };
   const struct GNUNET_CONFIGURATION_Handle *cfg = cls;
+  struct BlockContext *ctx;
   struct GNUNET_BLOCK_PluginFunctions *api;
 
+  ctx = GNUNET_new (struct BlockContext);
+  ctx->cfg = cfg;
   api = GNUNET_new (struct GNUNET_BLOCK_PluginFunctions);
-  api->cls = GNUNET_BLOCK_context_create (cfg);
+  api->cls = ctx;
   api->evaluate = &block_plugin_consensus_evaluate;
   api->get_key = &block_plugin_consensus_get_key;
   api->check_query = &block_plugin_consensus_check_query;
@@ -236,9 +263,11 @@ void *
 libgnunet_plugin_block_consensus_done (void *cls)
 {
   struct GNUNET_BLOCK_PluginFunctions *api = cls;
-  struct GNUNET_BLOCK_Context *bc = api->cls;
+  struct BlockContext *ctx = api->cls;
 
-  GNUNET_BLOCK_context_destroy (bc);
+  if (NULL != ctx->bc)
+    GNUNET_BLOCK_context_destroy (ctx->bc);
+  GNUNET_free (ctx);
   GNUNET_free (api);
   return NULL;
 }

-- 
To stop receiving notification emails like this one, please contact
gnunet@gnunet.org.



reply via email to

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