[network-manager-applet/NMA_0_8] applet: don't crash in nag_dialog_response_cb (rh #619775)



commit ecc6d7467c1c914876c0fd815039f650156e0345
Author: JiÅ?í KlimeÅ¡ <jklimes redhat com>
Date:   Tue Aug 3 17:25:01 2010 +0200

    applet: don't crash in nag_dialog_response_cb (rh #619775)
    
    nag_dialog_response_cb can be called more times, so we can't free
    info structure there yet.
    The bug is a regression caused by:
    "nm-applet: remember "Don't warn me again" checkbox value about missing certificate (rh #610084)"

 src/wireless-security/eap-method.c |   11 ++++++++++-
 1 files changed, 10 insertions(+), 1 deletions(-)
---
diff --git a/src/wireless-security/eap-method.c b/src/wireless-security/eap-method.c
index 514a10c..c2f8e4b 100644
--- a/src/wireless-security/eap-method.c
+++ b/src/wireless-security/eap-method.c
@@ -104,6 +104,15 @@ typedef struct {
 } NagDialogResponseInfo;
 
 static void
+nag_dialog_destroyed (gpointer data, GObject *dialog_ptr)
+{
+	NagDialogResponseInfo *info = (NagDialogResponseInfo *) data;
+
+	memset (info, '\0', sizeof (NagDialogResponseInfo));
+	g_free (info);
+}
+
+static void
 nag_dialog_response_cb (GtkDialog *nag_dialog,
                         gint response,
                         gpointer user_data)
@@ -125,7 +134,6 @@ nag_dialog_response_cb (GtkDialog *nag_dialog,
 	}
 
 	gtk_widget_hide (GTK_WIDGET (nag_dialog));
-	g_free (info);
 }
 
 GtkWidget *
@@ -198,6 +206,7 @@ eap_method_nag_init (EAPMethod *method,
 	dialog = glade_xml_get_widget (method->nag_dialog_xml, "nag_user_dialog");
 	g_assert (dialog);
 	g_signal_connect (dialog, "response", G_CALLBACK (nag_dialog_response_cb), info);
+	g_object_weak_ref (G_OBJECT (dialog), nag_dialog_destroyed, info);
 
 	widget = glade_xml_get_widget (method->nag_dialog_xml, "content_label");
 	g_assert (widget);



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]