From 05f78de383404e083fb37f02b8c4112c483e257a Mon Sep 17 00:00:00 2001 From: varun-r-mallya Date: Sat, 22 Feb 2025 15:22:47 +0530 Subject: [PATCH 1/4] sysprof-greeter: add environment variable handling in profiler creation. Refactor pending. Signed-off-by: varun-r-mallya --- src/sysprof/sysprof-greeter.c | 32 ++++++++++++++++++++++++ src/sysprof/sysprof-recording-template.c | 1 + 2 files changed, 33 insertions(+) diff --git a/src/sysprof/sysprof-greeter.c b/src/sysprof/sysprof-greeter.c index 6f70ef98..332a9b1e 100644 --- a/src/sysprof/sysprof-greeter.c +++ b/src/sysprof/sysprof-greeter.c @@ -208,6 +208,23 @@ sysprof_greeter_create_profiler (SysprofGreeter *self, g_assert (SYSPROF_IS_GREETER (self)); + if (self->envvars) + { + guint n_items = g_list_model_get_n_items (G_LIST_MODEL (self->envvars)); + g_autofree char **envvars = g_new0 (char *, n_items + 1); + + for (guint i = 0; i < n_items; i++) + { + GtkStringObject *str_obj = g_list_model_get_item (G_LIST_MODEL (self->envvars), i); + + envvars[i] = g_strdup (gtk_string_object_get_string (str_obj)); + } + + g_object_set (self->recording_template, + "environ", envvars, + NULL); + } + if ((strobj = adw_combo_row_get_selected_item (self->power_combo)) && (str = gtk_string_object_get_string (strobj))) g_object_set (self->recording_template, @@ -606,6 +623,21 @@ sysprof_greeter_init (SysprofGreeter *self) create_envvar_row_cb, self, NULL); + if (self->recording_template) + { + g_auto(GStrv) environ = NULL; + g_object_get (self->recording_template, + "environ", &environ, + NULL); + if (environ) + { + for (guint i = 0; environ[i]; i++) + { + gtk_string_list_append (self->envvars, environ[i]); + } + } + } + row = gtk_list_box_get_row_at_index (self->sidebar_list_box, 0); gtk_list_box_select_row (self->sidebar_list_box, row); sidebar_row_activated_cb (self, row, self->sidebar_list_box); diff --git a/src/sysprof/sysprof-recording-template.c b/src/sysprof/sysprof-recording-template.c index 823ef042..3d7646de 100644 --- a/src/sysprof/sysprof-recording-template.c +++ b/src/sysprof/sysprof-recording-template.c @@ -491,6 +491,7 @@ sysprof_recording_template_init (SysprofRecordingTemplate *self) self->system_log = TRUE; self->command_line = g_strdup (""); self->cwd = g_strdup(""); + self->environ = g_strdupv((char * []) { NULL }); self->stack_size = DEFAULT_STACK_SIZE; } From 775d7ae5ebaa8dada2ed51d4876718f282437e8c Mon Sep 17 00:00:00 2001 From: varun-r-mallya Date: Wed, 26 Feb 2025 23:24:20 +0530 Subject: [PATCH 2/4] sysprof-greeter: refactor environment variable handling in profiler creation Signed-off-by: varun-r-mallya --- src/sysprof/sysprof-greeter.c | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/src/sysprof/sysprof-greeter.c b/src/sysprof/sysprof-greeter.c index 332a9b1e..766610b5 100644 --- a/src/sysprof/sysprof-greeter.c +++ b/src/sysprof/sysprof-greeter.c @@ -205,25 +205,25 @@ sysprof_greeter_create_profiler (SysprofGreeter *self, g_autoptr(GFile) dir = NULL; GtkStringObject *strobj; const char *str; + guint envvars_n_items; + g_autoptr(GStrvBuilder) envvars_builder = NULL; + g_autofree GStrv envvars_list = NULL; g_assert (SYSPROF_IS_GREETER (self)); - - if (self->envvars) - { - guint n_items = g_list_model_get_n_items (G_LIST_MODEL (self->envvars)); - g_autofree char **envvars = g_new0 (char *, n_items + 1); - - for (guint i = 0; i < n_items; i++) - { - GtkStringObject *str_obj = g_list_model_get_item (G_LIST_MODEL (self->envvars), i); - - envvars[i] = g_strdup (gtk_string_object_get_string (str_obj)); - } - - g_object_set (self->recording_template, - "environ", envvars, - NULL); - } + + if ((envvars_n_items = g_list_model_get_n_items (G_LIST_MODEL (self->envvars)))) + { + envvars_builder = g_strv_builder_new (); + for (guint i = 0; i < envvars_n_items; i++) + { + strobj = g_list_model_get_item (G_LIST_MODEL (self->envvars), i); + g_strv_builder_add (envvars_builder, gtk_string_object_get_string (strobj)); + } + envvars_list = g_strv_builder_end (envvars_builder); + g_object_set (self->recording_template, + "environ", envvars_list, + NULL); + } if ((strobj = adw_combo_row_get_selected_item (self->power_combo)) && (str = gtk_string_object_get_string (strobj))) From 8186cc464a2990b7cb129514a9cb3d9dfb3ce2a4 Mon Sep 17 00:00:00 2001 From: varun-r-mallya Date: Thu, 6 Mar 2025 17:57:01 +0530 Subject: [PATCH 3/4] sysprof-greeter: optimize environment variable handling in profiler creation Signed-off-by: varun-r-mallya --- src/sysprof/sysprof-greeter.c | 35 ++++++++++++++++------------------- 1 file changed, 16 insertions(+), 19 deletions(-) diff --git a/src/sysprof/sysprof-greeter.c b/src/sysprof/sysprof-greeter.c index 766610b5..aa4e64e9 100644 --- a/src/sysprof/sysprof-greeter.c +++ b/src/sysprof/sysprof-greeter.c @@ -205,25 +205,24 @@ sysprof_greeter_create_profiler (SysprofGreeter *self, g_autoptr(GFile) dir = NULL; GtkStringObject *strobj; const char *str; - guint envvars_n_items; - g_autoptr(GStrvBuilder) envvars_builder = NULL; - g_autofree GStrv envvars_list = NULL; g_assert (SYSPROF_IS_GREETER (self)); - if ((envvars_n_items = g_list_model_get_n_items (G_LIST_MODEL (self->envvars)))) - { - envvars_builder = g_strv_builder_new (); - for (guint i = 0; i < envvars_n_items; i++) - { - strobj = g_list_model_get_item (G_LIST_MODEL (self->envvars), i); - g_strv_builder_add (envvars_builder, gtk_string_object_get_string (strobj)); - } - envvars_list = g_strv_builder_end (envvars_builder); - g_object_set (self->recording_template, - "environ", envvars_list, - NULL); - } + if (g_list_model_get_n_items (G_LIST_MODEL (self->envvars))) + { + g_autoptr(GStrvBuilder) envvars_builder = g_strv_builder_new ();; + g_auto(GStrv) envvars_list = NULL; + + for (guint i = 0; i < g_list_model_get_n_items (G_LIST_MODEL (self->envvars)); i++) + { + strobj = g_list_model_get_item (G_LIST_MODEL (self->envvars), i); + g_strv_builder_add (envvars_builder, gtk_string_object_get_string (strobj)); + } + envvars_list = g_strv_builder_end (envvars_builder); + g_object_set (self->recording_template, + "environ", envvars_list, + NULL); + } if ((strobj = adw_combo_row_get_selected_item (self->power_combo)) && (str = gtk_string_object_get_string (strobj))) @@ -632,9 +631,7 @@ sysprof_greeter_init (SysprofGreeter *self) if (environ) { for (guint i = 0; environ[i]; i++) - { - gtk_string_list_append (self->envvars, environ[i]); - } + gtk_string_list_append (self->envvars, environ[i]); } } From 9cf22bc906a732b8fd5e43a163955bb09c70229b Mon Sep 17 00:00:00 2001 From: varun-r-mallya Date: Fri, 7 Mar 2025 14:16:28 +0530 Subject: [PATCH 4/4] sysprof-greeter: fix memory leak in sysprof_greeter_create_profiler Signed-off-by: varun-r-mallya --- src/sysprof/sysprof-greeter.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/sysprof/sysprof-greeter.c b/src/sysprof/sysprof-greeter.c index aa4e64e9..5f44cb60 100644 --- a/src/sysprof/sysprof-greeter.c +++ b/src/sysprof/sysprof-greeter.c @@ -207,16 +207,18 @@ sysprof_greeter_create_profiler (SysprofGreeter *self, const char *str; g_assert (SYSPROF_IS_GREETER (self)); - + if (g_list_model_get_n_items (G_LIST_MODEL (self->envvars))) { - g_autoptr(GStrvBuilder) envvars_builder = g_strv_builder_new ();; + g_autoptr(GStrvBuilder) envvars_builder = NULL; g_auto(GStrv) envvars_list = NULL; + + envvars_builder = g_strv_builder_new (); for (guint i = 0; i < g_list_model_get_n_items (G_LIST_MODEL (self->envvars)); i++) { - strobj = g_list_model_get_item (G_LIST_MODEL (self->envvars), i); - g_strv_builder_add (envvars_builder, gtk_string_object_get_string (strobj)); + g_autoptr(GtkStringObject) env_strobj = g_list_model_get_item (G_LIST_MODEL (self->envvars), i); + g_strv_builder_add (envvars_builder, gtk_string_object_get_string (env_strobj)); } envvars_list = g_strv_builder_end (envvars_builder); g_object_set (self->recording_template,