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:
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)