gnunet-svn
[Top][All Lists]
Advanced

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

[GNUnet-SVN] r34456 - gnunet/src/set


From: gnunet
Subject: [GNUnet-SVN] r34456 - gnunet/src/set
Date: Sun, 30 Nov 2014 17:53:11 +0100

Author: grothoff
Date: 2014-11-30 17:53:11 +0100 (Sun, 30 Nov 2014)
New Revision: 34456

Modified:
   gnunet/src/set/gnunet-service-set.c
   gnunet/src/set/gnunet-service-set.h
   gnunet/src/set/gnunet-service-set_intersection.c
   gnunet/src/set/gnunet-service-set_union.c
Log:
-use keep as RC to address #3561

Modified: gnunet/src/set/gnunet-service-set.c
===================================================================
--- gnunet/src/set/gnunet-service-set.c 2014-11-30 00:46:58 UTC (rev 34455)
+++ gnunet/src/set/gnunet-service-set.c 2014-11-30 16:53:11 UTC (rev 34456)
@@ -1388,6 +1388,7 @@
   GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
               "channel_end_cb called\n");
   op->channel = NULL;
+  op->keep++;
   /* the vt can be null if a client already requested canceling op. */
   if (NULL != op->vt)
   {
@@ -1395,7 +1396,8 @@
                 "calling peer disconnect due to channel end\n");
     op->vt->peer_disconnect (op);
   }
-  if (GNUNET_YES != op->keep)
+  op->keep--;
+  if (0 == op->keep)
   {
     /* cadet will never call us with the context again! */
     GNUNET_free (op);

Modified: gnunet/src/set/gnunet-service-set.h
===================================================================
--- gnunet/src/set/gnunet-service-set.h 2014-11-30 00:46:58 UTC (rev 34455)
+++ gnunet/src/set/gnunet-service-set.h 2014-11-30 16:53:11 UTC (rev 34456)
@@ -388,10 +388,11 @@
   unsigned int generation_created;
 
   /**
-   * Set to #GNUNET_YES if the set service should not free the
-   * operation, as it is still needed (e.g. in some scheduled task).
+   * Incremented whenever (during shutdown) some component still
+   * needs to do something with this before the operation is freed.
+   * (Used as a reference counter, but only during termination.)
    */
-  int keep;
+  unsigned int keep;
 };
 
 

Modified: gnunet/src/set/gnunet-service-set_intersection.c
===================================================================
--- gnunet/src/set/gnunet-service-set_intersection.c    2014-11-30 00:46:58 UTC 
(rev 34455)
+++ gnunet/src/set/gnunet-service-set_intersection.c    2014-11-30 16:53:11 UTC 
(rev 34456)
@@ -549,7 +549,7 @@
   {
     GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
                 "Sending done and destroy because iterator ran out\n");
-    op->keep = GNUNET_NO;
+    op->keep--;
     send_client_done_and_destroy (op);
     return;
   }
@@ -907,7 +907,7 @@
                 GNUNET_CONTAINER_multihashmap_size (op->state->my_elements));
     op->state->full_result_iter
       = GNUNET_CONTAINER_multihashmap_iterator_create (op->state->my_elements);
-    op->keep = GNUNET_YES;
+    op->keep++;
     send_remaining_elements (op);
     return;
   }

Modified: gnunet/src/set/gnunet-service-set_union.c
===================================================================
--- gnunet/src/set/gnunet-service-set_union.c   2014-11-30 00:46:58 UTC (rev 
34455)
+++ gnunet/src/set/gnunet-service-set_union.c   2014-11-30 16:53:11 UTC (rev 
34456)
@@ -994,7 +994,6 @@
   struct Operation *op = cls;
   struct GNUNET_MQ_Envelope *ev;
   struct GNUNET_SET_ResultMessage *rm;
-  int keep = op->keep;
 
   ev = GNUNET_MQ_msg (rm, GNUNET_MESSAGE_TYPE_SET_RESULT);
   rm->request_id = htonl (op->spec->client_request_id);
@@ -1002,7 +1001,8 @@
   rm->element_type = htons (0);
   GNUNET_MQ_send (op->spec->set->client_mq, ev);
   _GSS_operation_destroy (op, GNUNET_YES);
-  if (GNUNET_YES == keep)
+  op->keep--;
+  if (0 == op->keep)
     GNUNET_free (op);
 }
 
@@ -1081,7 +1081,7 @@
   if (GNUNET_SET_RESULT_FULL == op->spec->result_mode)
   {
     /* prevent that the op is free'd by the tunnel end handler */
-    op->keep = GNUNET_YES;
+    op->keep++;
     GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
                 "sending full result set\n");
     GNUNET_assert (NULL == op->state->full_result_iter);




reply via email to

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