From a3bb0c6e205c6151c525b73cbf143907f8455327 Mon Sep 17 00:00:00 2001 From: Ivan Yarcev Date: Wed, 27 Nov 2024 12:43:10 +0600 Subject: [PATCH] Fixed crash, caused by multiple updates --- source/ubl-settings-kernel.c | 28 +++++++++++++++++----------- 1 file changed, 17 insertions(+), 11 deletions(-) diff --git a/source/ubl-settings-kernel.c b/source/ubl-settings-kernel.c index 3ac7c44..78a8729 100644 --- a/source/ubl-settings-kernel.c +++ b/source/ubl-settings-kernel.c @@ -200,6 +200,10 @@ gboolean yon_tab_create_tags(kernels_tab *tab){ yon_tag_add(GTK_BOX(tab->install_tags_box),UNKNOWN_LABEL,"tag_grey",NULL); } gtk_widget_show(tab->main_box); + + g_mutex_lock(&main_config.update_mutex); + main_config.update_active--; + g_mutex_unlock(&main_config.update_mutex); return G_SOURCE_REMOVE; } @@ -212,6 +216,9 @@ char *yon_package_string_set(char *target){ } void *yon_tab_set_installed(kernels_tab *tab){ + g_mutex_lock(&main_config.update_mutex); + main_config.update_active++; + g_mutex_unlock(&main_config.update_mutex); char *target_module = yon_package_string_set(tab->module); char *target_package = yon_package_string_set(tab->package); char *check_install_command = NULL; @@ -259,9 +266,6 @@ void *yon_interface_update(main_window *widgets){ lock=main_config.update_active; g_mutex_unlock(&main_config.update_mutex); if (!lock){ - g_mutex_lock(&main_config.update_mutex); - main_config.update_active=1; - g_mutex_unlock(&main_config.update_mutex); yon_ubl_status_box_render(LOADING_LABEL,BACKGROUND_IMAGE_INFO_TYPE); { GList *list = gtk_container_get_children(GTK_CONTAINER(widgets->KernelsPackageBox)); @@ -313,10 +317,6 @@ void *yon_interface_update(main_window *widgets){ break; } textdomain(LocaleName); - - g_mutex_lock(&main_config.update_mutex); - main_config.update_active=0; - g_mutex_unlock(&main_config.update_mutex); } return NULL; } @@ -855,12 +855,18 @@ void config_init(){ } void on_update_clicked(GtkWidget *, main_window *widgets){ - yon_dictionary_free_all(main_config.kernel_tabs,free); - yon_dictionary_free_all(main_config.addition_tabs,free); - main_config.kernel_tabs=NULL; - main_config.addition_tabs=NULL; + int lock=0; + g_mutex_lock(&main_config.update_mutex); + lock = main_config.update_active; + g_mutex_unlock(&main_config.update_mutex); + if (!lock){ + yon_dictionary_free_all(main_config.kernel_tabs,free); + yon_dictionary_free_all(main_config.addition_tabs,free); + main_config.kernel_tabs=NULL; + main_config.addition_tabs=NULL; yon_interface_update(widgets); + } } void on_info_clicked(GtkWidget *self, char *, kernels_tab *tab){