libgnunetchat

library for GNUnet Messenger
Log | Files | Refs | README | LICENSE

commit 4110727b40a1c2ac4b5517a9e6304cd956e1ba7c
parent 538f92836127c6f03fb22a1aee79461ea9222d54
Author: Jacki <jacki@thejackimonster.de>
Date:   Thu, 11 Jul 2024 23:32:38 +0200

Fix discourses stalling chat application on exit

Signed-off-by: Jacki <jacki@thejackimonster.de>

Diffstat:
Msrc/gnunet_chat_context.c | 29+++++++++++++++++++++++++----
Msrc/gnunet_chat_context_intern.c | 13+++++++++++++
2 files changed, 38 insertions(+), 4 deletions(-)

diff --git a/src/gnunet_chat_context.c b/src/gnunet_chat_context.c @@ -119,12 +119,13 @@ context_destroy (struct GNUNET_CHAT_Context *context) { GNUNET_assert( (context) && - (context->timestamps) && + (context->timestamps) && (context->dependencies) && - (context->messages) && + (context->messages) && (context->taggings) && - (context->invites) && - (context->files) + (context->invites) && + (context->files) && + (context->discourses) ); if (context->request_task) @@ -150,6 +151,10 @@ context_destroy (struct GNUNET_CHAT_Context *context) context->invites, it_destroy_context_invites, NULL ); + GNUNET_CONTAINER_multishortmap_iterate( + context->discourses, it_destroy_context_discourses, NULL + ); + GNUNET_CONTAINER_multishortmap_destroy(context->member_pointers); GNUNET_CONTAINER_multishortmap_destroy(context->timestamps); @@ -200,6 +205,14 @@ context_update_room (struct GNUNET_CHAT_Context *context, if (room == context->room) return; + GNUNET_assert( + (context->timestamps) && + (context->messages) && + (context->requests) && + (context->invites) && + (context->discourses) + ); + GNUNET_CONTAINER_multishortmap_iterate( context->timestamps, it_destroy_context_timestamps, NULL ); @@ -212,6 +225,10 @@ context_update_room (struct GNUNET_CHAT_Context *context, context->invites, it_destroy_context_invites, NULL ); + GNUNET_CONTAINER_multishortmap_iterate( + context->discourses, it_destroy_context_discourses, NULL + ); + GNUNET_CONTAINER_multishortmap_destroy(context->timestamps); context->timestamps = GNUNET_CONTAINER_multishortmap_create( initial_map_size_of_room, GNUNET_NO); @@ -221,6 +238,10 @@ context_update_room (struct GNUNET_CHAT_Context *context, GNUNET_CONTAINER_multihashmap_clear(context->invites); GNUNET_CONTAINER_multihashmap_clear(context->files); + GNUNET_CONTAINER_multishortmap_destroy(context->discourses); + context->discourses = GNUNET_CONTAINER_multishortmap_create( + initial_map_size_of_room, GNUNET_NO); + if (context->room) context_delete(context, GNUNET_YES); diff --git a/src/gnunet_chat_context_intern.c b/src/gnunet_chat_context_intern.c @@ -22,6 +22,7 @@ * @file gnunet_chat_context_intern.c */ +#include "gnunet_chat_discourse.h" #include "gnunet_chat_invitation.h" #include "gnunet_chat_message.h" @@ -82,6 +83,18 @@ it_destroy_context_invites (GNUNET_UNUSED void *cls, } enum GNUNET_GenericReturnValue +it_destroy_context_discourses (GNUNET_UNUSED void *cls, + GNUNET_UNUSED const struct GNUNET_ShortHashCode *key, + void *value) +{ + GNUNET_assert(value); + + struct GNUNET_CHAT_Discourse *discourse = value; + discourse_destroy(discourse); + return GNUNET_YES; +} + +enum GNUNET_GenericReturnValue it_iterate_context_requests (void *cls, const struct GNUNET_HashCode *key, GNUNET_UNUSED void *value)