X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=src%2Fset%2Fgnunet-service-set.c;h=e9555928a2ece493d0025b1a64c3bc3751227038;hb=29e6158507a0758192075ac6ece7ba8e75ddc49a;hp=cfddef6fbf62c3bc4ae2ba7369b2d0a3c01e4a7c;hpb=383814672c031e49c4dffca0a69af3b0973d2248;p=oweals%2Fgnunet.git diff --git a/src/set/gnunet-service-set.c b/src/set/gnunet-service-set.c index cfddef6fb..e9555928a 100644 --- a/src/set/gnunet-service-set.c +++ b/src/set/gnunet-service-set.c @@ -1,6 +1,6 @@ /* This file is part of GNUnet - Copyright (C) 2013, 2014 Christian Grothoff (and other contributing authors) + Copyright (C) 2013, 2014 GNUnet e.V. GNUnet is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published @@ -975,7 +975,7 @@ again: GNUNET_CONTAINER_multihashmap_iterator_destroy (set->iter); set->iter = NULL; set->iteration_id++; - + GNUNET_assert (set->content->iterator_count > 0); set->content->iterator_count -= 1; @@ -1113,6 +1113,13 @@ handle_client_create_set (void *cls, } set->operation = ntohl (msg->operation); set->state = set->vt->create (); + if (NULL == set->state) + { + /* initialization failed (i.e. out of memory) */ + GNUNET_free (set); + GNUNET_SERVER_client_disconnect (client); + return; + } set->content = GNUNET_new (struct SetContent); set->content->refcount = 1; set->content->elements = GNUNET_CONTAINER_multihashmap_create (1, GNUNET_YES); @@ -1497,7 +1504,7 @@ handle_client_copy_lazy_connect (void *cls, { found = GNUNET_YES; break; - } + } } if (GNUNET_NO == found) @@ -1706,8 +1713,7 @@ handle_client_accept (void *cls, * @param tc context information (why was this task triggered now) */ static void -shutdown_task (void *cls, - const struct GNUNET_SCHEDULER_TaskContext *tc) +shutdown_task (void *cls) { while (NULL != incoming_head) incoming_destroy (incoming_head); @@ -1740,13 +1746,14 @@ shutdown_task (void *cls, * @param tc context information (why was this task triggered now) */ static void -incoming_timeout_cb (void *cls, - const struct GNUNET_SCHEDULER_TaskContext *tc) +incoming_timeout_cb (void *cls) { struct Operation *incoming = cls; + const struct GNUNET_SCHEDULER_TaskContext *tc; incoming->timeout_task = NULL; GNUNET_assert (GNUNET_YES == incoming->is_incoming); + tc = GNUNET_SCHEDULER_get_task_context (); if (0 != (tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN)) return; GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, @@ -1981,6 +1988,7 @@ run (void *cls, { &dispatch_p2p_message, GNUNET_MESSAGE_TYPE_SET_P2P_ELEMENT_REQUESTS, 0}, { &dispatch_p2p_message, GNUNET_MESSAGE_TYPE_SET_UNION_P2P_DONE, 0}, { &dispatch_p2p_message, GNUNET_MESSAGE_TYPE_SET_UNION_P2P_SE, 0}, + { &dispatch_p2p_message, GNUNET_MESSAGE_TYPE_SET_UNION_P2P_SEC, 0}, { &dispatch_p2p_message, GNUNET_MESSAGE_TYPE_SET_INTERSECTION_P2P_ELEMENT_INFO, 0}, { &dispatch_p2p_message, GNUNET_MESSAGE_TYPE_SET_INTERSECTION_P2P_BF, 0}, { &dispatch_p2p_message, GNUNET_MESSAGE_TYPE_SET_INTERSECTION_P2P_DONE, 0},