messenger-gtk

Gtk+3 graphical user interfaces for GNUnet Messenger
Log | Files | Refs | Submodules | README | LICENSE

commit 424099aba377f8791411302c3b84314186d5b1fb
parent 9fb1a5d25f79281977768f5514401162c4f45eff
Author: Jacki <jacki@thejackimonster.de>
Date:   Thu,  1 Aug 2024 01:09:40 +0200

Fix segfault caused by list of discourse subscriptions

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

Diffstat:
Msrc/discourse.c | 49+++++++++++++++----------------------------------
Msrc/discourse.h | 11-----------
2 files changed, 15 insertions(+), 45 deletions(-)

diff --git a/src/discourse.c b/src/discourse.c @@ -163,6 +163,8 @@ _setup_video_gst_pipelines_of_subscription(MESSENGER_DiscourseSubscriptionInfo * "video/x-h264", "stream-format", G_TYPE_STRING, "avc", "alignment", G_TYPE_STRING, "au", + "width", G_TYPE_INT, 1280, + "height", G_TYPE_INT, 720, NULL ); @@ -224,11 +226,8 @@ discourse_subscription_destroy_info(MESSENGER_DiscourseSubscriptionInfo *info) { g_assert(info); - if (info->audio_stream_source) - gst_element_set_state(info->audio_stream_source, GST_STATE_NULL); - - if (info->audio_converter) - gst_element_set_state(info->audio_converter, GST_STATE_NULL); + if ((info->audio_stream_source) || (info->audio_converter)) + gst_element_set_state(info->discourse->audio_mix_pipeline, GST_STATE_NULL); if (info->video_stream_pipeline) { @@ -262,6 +261,8 @@ discourse_subscription_destroy_info(MESSENGER_DiscourseSubscriptionInfo *info) info->audio_converter, NULL ); + + gst_element_set_state(info->discourse->audio_mix_pipeline, GST_STATE_PLAYING); } g_free(info); @@ -520,6 +521,8 @@ _setup_video_gst_pipelines(MESSENGER_DiscourseInfo *info) "video/x-h264", "stream-format", G_TYPE_STRING, "avc", "alignment", G_TYPE_STRING, "au", + "width", G_TYPE_INT, 1280, + "height", G_TYPE_INT, 720, NULL ); @@ -692,18 +695,22 @@ discourse_update_subscriptions(struct GNUNET_CHAT_Discourse *discourse) continue; } - link = g_list_remove_link(info->subscriptions, link); + GList *rest = g_list_remove_link(info->subscriptions, link); if (!drop) drop = link; else drop = g_list_concat(drop, link); + + if (!rest) + break; } sub = drop; while (sub) { sub_info = (MESSENGER_DiscourseSubscriptionInfo*) (sub->data); + discourse_subscription_destroy_info(sub_info); sub = g_list_next(sub); } @@ -859,9 +866,10 @@ discourse_link_widget(const struct GNUNET_CHAT_Discourse *discourse, while (sub) { sub_info = (MESSENGER_DiscourseSubscriptionInfo*) (sub->data); - if (contact == sub_info->contact) + if ((sub_info) && (contact == sub_info->contact)) break; + sub_info = NULL; sub = g_list_next(sub); } @@ -870,30 +878,3 @@ discourse_link_widget(const struct GNUNET_CHAT_Discourse *discourse, return discourse_subscription_link_widget(sub_info, container, TRUE); } - -gboolean -discourse_unlink_widget(const struct GNUNET_CHAT_Discourse *discourse, - const struct GNUNET_CHAT_Contact *contact) -{ - MESSENGER_DiscourseInfo* info = GNUNET_CHAT_discourse_get_user_pointer(discourse); - - if (!info) - return FALSE; - - GList *sub = info->subscriptions; - MESSENGER_DiscourseSubscriptionInfo *sub_info = NULL; - - while (sub) - { - sub_info = (MESSENGER_DiscourseSubscriptionInfo*) (sub->data); - if (contact == sub_info->contact) - break; - - sub = g_list_next(sub); - } - - if (!sub_info) - return FALSE; - - return discourse_subscription_link_widget(sub_info, NULL, FALSE); -} diff --git a/src/discourse.h b/src/discourse.h @@ -200,15 +200,4 @@ discourse_link_widget(const struct GNUNET_CHAT_Discourse *discourse, const struct GNUNET_CHAT_Contact *contact, GtkContainer *container); -/** - * Unlinks a widget from the video pipeline of a discourse - * for a given chat contact from its current parent. - * - * @param discourse Chat discourse - * @param contact Chat contact - */ -gboolean -discourse_unlink_widget(const struct GNUNET_CHAT_Discourse *discourse, - const struct GNUNET_CHAT_Contact *contact); - #endif /* DISCOURSE_H_ */