[PATCH 08/66] kconfig: gconf: always destroy dialog in on_window1_delete_event()

Masahiro Yamada posted 66 patches 3 months, 2 weeks ago
[PATCH 08/66] kconfig: gconf: always destroy dialog in on_window1_delete_event()
Posted by Masahiro Yamada 3 months, 2 weeks ago
When gtk_dialog_run() returns GTK_RESPONSE_YES or GTK_RESPONSE_NO,
gtk_widget_destroy() is not called, resulting is a memory leak.

It is better to always destroy the dialog, even if the application
is about to exit.

Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
---

 scripts/kconfig/gconf.c | 13 ++++++++-----
 1 file changed, 8 insertions(+), 5 deletions(-)

diff --git a/scripts/kconfig/gconf.c b/scripts/kconfig/gconf.c
index 769f38307f34..52d439a5119b 100644
--- a/scripts/kconfig/gconf.c
+++ b/scripts/kconfig/gconf.c
@@ -378,6 +378,7 @@ gboolean on_window1_delete_event(GtkWidget * widget, GdkEvent * event,
 {
 	GtkWidget *dialog, *label;
 	gint result;
+	gint ret = FALSE;
 
 	if (!conf_get_changed())
 		return FALSE;
@@ -404,17 +405,19 @@ gboolean on_window1_delete_event(GtkWidget * widget, GdkEvent * event,
 	switch (result) {
 	case GTK_RESPONSE_YES:
 		on_save_activate(NULL, NULL);
-		return FALSE;
+		break;
 	case GTK_RESPONSE_NO:
-		return FALSE;
+		break;
 	case GTK_RESPONSE_CANCEL:
 	case GTK_RESPONSE_DELETE_EVENT:
 	default:
-		gtk_widget_destroy(dialog);
-		return TRUE;
+		ret = TRUE;
+		break;
 	}
 
-	return FALSE;
+	gtk_widget_destroy(dialog);
+
+	return ret;
 }
 
 
-- 
2.43.0
Re: [PATCH 08/66] kconfig: gconf: always destroy dialog in on_window1_delete_event()
Posted by Randy Dunlap 3 months, 1 week ago

On 6/24/25 8:04 AM, Masahiro Yamada wrote:
> When gtk_dialog_run() returns GTK_RESPONSE_YES or GTK_RESPONSE_NO,
> gtk_widget_destroy() is not called, resulting is a memory leak.
> 
> It is better to always destroy the dialog, even if the application
> is about to exit.
> 
> Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>

Acked-by: Randy Dunlap <rdunlap@infradead.org>

> ---
> 
>  scripts/kconfig/gconf.c | 13 ++++++++-----
>  1 file changed, 8 insertions(+), 5 deletions(-)
> 
> diff --git a/scripts/kconfig/gconf.c b/scripts/kconfig/gconf.c
> index 769f38307f34..52d439a5119b 100644
> --- a/scripts/kconfig/gconf.c
> +++ b/scripts/kconfig/gconf.c
> @@ -378,6 +378,7 @@ gboolean on_window1_delete_event(GtkWidget * widget, GdkEvent * event,
>  {
>  	GtkWidget *dialog, *label;
>  	gint result;
> +	gint ret = FALSE;
>  
>  	if (!conf_get_changed())
>  		return FALSE;
> @@ -404,17 +405,19 @@ gboolean on_window1_delete_event(GtkWidget * widget, GdkEvent * event,
>  	switch (result) {
>  	case GTK_RESPONSE_YES:
>  		on_save_activate(NULL, NULL);
> -		return FALSE;
> +		break;
>  	case GTK_RESPONSE_NO:
> -		return FALSE;
> +		break;
>  	case GTK_RESPONSE_CANCEL:
>  	case GTK_RESPONSE_DELETE_EVENT:
>  	default:
> -		gtk_widget_destroy(dialog);
> -		return TRUE;
> +		ret = TRUE;
> +		break;
>  	}
>  
> -	return FALSE;
> +	gtk_widget_destroy(dialog);
> +
> +	return ret;
>  }
>  
>  

-- 
~Randy