[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);
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [GNUnet-SVN] r34456 - gnunet/src/set,
gnunet <=