/** * Cancel pending reverse lookup request * * @param lr the lookup request to cancel */ void GNUNET_GNS_reverse_lookup_cancel (struct GNUNET_GNS_ReverseLookupRequest *lr) { struct GNUNET_GNS_Handle *handle = lr->gns_handle; GNUNET_CONTAINER_DLL_remove (handle->rev_lookup_head, handle->rev_lookup_tail, lr); GNUNET_MQ_discard (lr->env); GNUNET_free (lr); }
void GNUNET_MQ_destroy (struct GNUNET_MQ_Handle *mq) { if (NULL != mq->destroy_impl) { mq->destroy_impl (mq, mq->impl_state); } if (NULL != mq->continue_task) { GNUNET_SCHEDULER_cancel (mq->continue_task); mq->continue_task = NULL; } while (NULL != mq->envelope_head) { struct GNUNET_MQ_Envelope *ev; ev = mq->envelope_head; ev->parent_queue = NULL; GNUNET_CONTAINER_DLL_remove (mq->envelope_head, mq->envelope_tail, ev); GNUNET_MQ_discard (ev); } if (NULL != mq->current_envelope) { /* we can only discard envelopes that * are not queued! */ mq->current_envelope->parent_queue = NULL; GNUNET_MQ_discard (mq->current_envelope); mq->current_envelope = NULL; } if (NULL != mq->assoc_map) { GNUNET_CONTAINER_multihashmap32_destroy (mq->assoc_map); mq->assoc_map = NULL; } GNUNET_free (mq); }
/** * Destroy the given set operation. * * @param oh set operation to destroy */ static void set_operation_destroy (struct GNUNET_SET_OperationHandle *oh) { struct GNUNET_SET_Handle *set = oh->set; struct GNUNET_SET_OperationHandle *h_assoc; if (NULL != oh->conclude_mqm) GNUNET_MQ_discard (oh->conclude_mqm); /* is the operation already commited? */ if (NULL != set) { GNUNET_CONTAINER_DLL_remove (set->ops_head, set->ops_tail, oh); h_assoc = GNUNET_MQ_assoc_remove (set->mq, oh->request_id); GNUNET_assert ((NULL == h_assoc) || (h_assoc == oh)); } GNUNET_free (oh); }
/** * This tunnel is no longer used, destroy it. * * @param cls the idle tunnel */ static void destroy_tunnel (void *cls) { struct CadetTunnel *t = cls; struct CadetTConnection *ct; struct CadetTunnelQueueEntry *tqe; t->destroy_task = NULL; GNUNET_assert (0 == GNUNET_CONTAINER_multihashmap32_size (t->channels)); while (NULL != (ct = t->connection_head)) { GNUNET_assert (ct->t == t); GNUNET_CONTAINER_DLL_remove (t->connection_head, t->connection_tail, ct); GCC_destroy (ct->cc); GNUNET_free (ct); } while (NULL != (tqe = t->tq_head)) { GNUNET_CONTAINER_DLL_remove (t->tq_head, t->tq_tail, tqe); GNUNET_MQ_discard (tqe->env); GNUNET_free (tqe); } GCP_drop_tunnel (t->destination, t); GNUNET_CONTAINER_multihashmap32_destroy (t->channels); if (NULL != t->maintain_connections_task) { GNUNET_SCHEDULER_cancel (t->maintain_connections_task); t->maintain_connections_task = NULL; } GNUNET_free (t); }