From ec16ac90f1a6ed861da2d215266c8fbb14f837de Mon Sep 17 00:00:00 2001 From: Ivan Yarcev Date: Wed, 9 Apr 2025 11:29:51 +0600 Subject: [PATCH] Fixed thread memory errors --- source/ubl-settings-services.c | 32 +++++++++++++++++++++----------- source/ubl-settings-services.h | 2 +- 2 files changed, 22 insertions(+), 12 deletions(-) diff --git a/source/ubl-settings-services.c b/source/ubl-settings-services.c index 0a69dd4..6f665c1 100644 --- a/source/ubl-settings-services.c +++ b/source/ubl-settings-services.c @@ -73,7 +73,7 @@ void on_config_local_load(GtkWidget *self,main_window *widgets){ main_config.update_thread_active=1; yon_load_proceed(YON_CONFIG_LOCAL); yon_ubl_status_box_render(LIST_LOAD_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); - gdk_threads_add_idle((GSourceFunc)((gboolean*)(void*)yon_interface_update),widgets); + g_idle_add((GSourceFunc)yon_interface_update,widgets); main_config.load_mode=1; } } @@ -84,7 +84,7 @@ void on_config_global_load(GtkWidget *self,main_window *widgets){ main_config.update_thread_active=1; yon_load_proceed(YON_CONFIG_GLOBAL); yon_ubl_status_box_render(LIST_LOAD_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); - gdk_threads_add_idle((GSourceFunc)((gboolean*)(void*)yon_interface_update),widgets); + g_idle_add((GSourceFunc)yon_interface_update,widgets); main_config.load_mode=0; } @@ -97,7 +97,7 @@ void on_config_custom_load(GtkWidget *self,main_window *widgets){ yon_ubl_status_box_render(GLOBAL_LOAD_SUCCESS_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); textdomain(LocaleName); main_config.load_mode=3; - yon_interface_update(widgets); + g_idle_add((GSourceFunc)yon_interface_update,widgets); } void on_service_constant_update(){ @@ -780,12 +780,12 @@ void on_system_log_clicked(GtkWidget *self, main_window *widgets){ } -void *on_terminal_relaunch(log_window *window){ +gboolean on_terminal_relaunch(log_window *window){ gtk_widget_set_sensitive(window->SystemTerminal,0); sleep(1); gtk_widget_set_sensitive(window->SystemTerminal,1); yon_terminal_integrated_start_shell(window->SystemTerminal,window->target,NULL,NULL); - return NULL; + return G_SOURCE_REMOVE; } void on_save_clicked(GtkWidget *self, log_window *window){ @@ -793,7 +793,7 @@ void on_save_clicked(GtkWidget *self, log_window *window){ vte_terminal_feed_child(VTE_TERMINAL(window->SystemTerminal),"\30",-1); vte_terminal_feed_child(VTE_TERMINAL(window->SystemTerminal),"Y\r",-1); gtk_widget_grab_focus(window->SystemTerminal); - g_thread_new(NULL,(GThreadFunc)on_terminal_relaunch,window); + g_idle_add((GSourceFunc)on_terminal_relaunch,window); } void on_update_clicked(GtkWidget *self, log_window *window){ @@ -1097,6 +1097,7 @@ gboolean yon_interface_update(main_window *widgets){ gtk_list_store_clear(widgets->UserList); gtk_list_store_clear(widgets->ConfigList); gtk_list_store_clear(widgets->TimersList); + while(gtk_events_pending()) gtk_main_iteration(); int system_size; config_str system_services = yon_config_load(load_services_command,&system_size); int user_size; @@ -1129,6 +1130,7 @@ gboolean yon_interface_update(main_window *widgets){ } } + while(gtk_events_pending()) gtk_main_iteration(); for (int i=0; iTimersList,&iter,0,unit,1,next,2,left,3,last,4,passed,5,activates,-1); } } + while(gtk_events_pending()) gtk_main_iteration(); { int parsed_size; char *enabled = yon_config_get_by_key(SERVICES_ENABLE_PARAMETER); @@ -1284,6 +1289,7 @@ gboolean yon_interface_update(main_window *widgets){ } yon_char_parsed_free(parsed,parsed_size); + while(gtk_events_pending()) gtk_main_iteration(); char *disabled = yon_config_get_by_key(SERVICES_DISABLE_PARAMETER); parsed = yon_char_parse(disabled,&parsed_size,","); valid = gtk_tree_model_get_iter_first(model,&iter); @@ -1302,6 +1308,7 @@ gboolean yon_interface_update(main_window *widgets){ } yon_char_parsed_free(parsed,parsed_size); + while(gtk_events_pending()) gtk_main_iteration(); char *masked = yon_config_get_by_key(SERVICES_MASK_PARAMETER); parsed = yon_char_parse(masked,&parsed_size,","); valid = gtk_tree_model_get_iter_first(model,&iter); @@ -1319,6 +1326,7 @@ gboolean yon_interface_update(main_window *widgets){ } } } + while(gtk_events_pending()) gtk_main_iteration(); { int parsed_size; @@ -1343,6 +1351,7 @@ gboolean yon_interface_update(main_window *widgets){ } yon_char_parsed_free(parsed,parsed_size); + while(gtk_events_pending()) gtk_main_iteration(); char *disabled = yon_config_get_by_key(SERVICES_DISABLE_PARAMETER); parsed = yon_char_parse(disabled,&parsed_size,","); valid = gtk_tree_model_get_iter_first(model,&iter); @@ -1361,6 +1370,7 @@ gboolean yon_interface_update(main_window *widgets){ } yon_char_parsed_free(parsed,parsed_size); + while(gtk_events_pending()) gtk_main_iteration(); char *masked = yon_config_get_by_key(SERVICES_MASK_PARAMETER); parsed = yon_char_parse(masked,&parsed_size,","); valid = gtk_tree_model_get_iter_first(model,&iter); @@ -1378,12 +1388,13 @@ gboolean yon_interface_update(main_window *widgets){ } } } + while(gtk_events_pending()) gtk_main_iteration(); gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->SystemUnitsTree),GTK_TREE_MODEL(widgets->SystemFilter)); gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->UserUnitsTree),GTK_TREE_MODEL(widgets->UserFilter)); gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->ConfigMainTree),GTK_TREE_MODEL(widgets->ConfigList)); gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->TimersMainTree),GTK_TREE_MODEL(widgets->TimersList)); main_config.update_thread_active=0; - return 0; + return G_SOURCE_REMOVE; } void on_interface_update(GtkWidget *self, main_window *widgets){ @@ -1392,8 +1403,7 @@ void on_interface_update(GtkWidget *self, main_window *widgets){ gtk_tree_selection_unselect_all(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->SystemUnitsTree))); gtk_tree_selection_unselect_all(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->UserUnitsTree))); main_config.update_thread_active=1; - pthread_t tid; - pthread_create(&tid,NULL,(void*)(void*)((yon_interface_update)),widgets); + g_idle_add((GSourceFunc)yon_interface_update,widgets); } } @@ -1851,8 +1861,8 @@ void yon_main_window_complete(main_window *widgets){ yon_ubl_status_box_render(LIST_LOAD_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); if (!main_config.update_thread_active){ main_config.update_thread_active=1; - pthread_t tid; - pthread_create(&tid,NULL,(void*)(void*)((yon_interface_update)),widgets); + g_idle_add((GSourceFunc)yon_interface_update,widgets); + } yon_save_window_set_postsave_function(on_save_done,widgets); } diff --git a/source/ubl-settings-services.h b/source/ubl-settings-services.h index a005427..1b5c73d 100644 --- a/source/ubl-settings-services.h +++ b/source/ubl-settings-services.h @@ -377,7 +377,7 @@ void on_system_info_clicked(GtkWidget *self, main_window *widgets); void on_system_log_clicked(GtkWidget *self, main_window *widgets); -void *on_terminal_relaunch(log_window *window); +gboolean on_terminal_relaunch(log_window *window); void on_save_clicked(GtkWidget *self, log_window *window); void on_update_clicked(GtkWidget *self, log_window *window); void on_system_edit_clicked(GtkWidget *self, main_window *widgets);