[network-manager-applet/jklimes/rh979123-eap-crash] eap: use G_DEFINE_BOXED_TYPE to simplify code and be thread-safe (rh #979123)



commit af2d0491fbecc22ff0da39735e9aff504969e1f0
Author: Jiří Klimeš <jklimes redhat com>
Date:   Tue Sep 3 16:01:51 2013 +0200

    eap: use G_DEFINE_BOXED_TYPE to simplify code and be thread-safe (rh #979123)
    
    inner_auth_combo_changed_cb():
      model = gtk_combo_box_get_model (GTK_COMBO_BOX (combo));
      gtk_combo_box_get_active_iter (GTK_COMBO_BOX (combo), &iter);
      gtk_tree_model_get (model, &iter, I_METHOD_COLUMN, &eap, -1);
      g_assert (eap);
    
    gtk_combo_box_get_model() failed and thus g_assert (eap) failed as well.
    
    On some circumstances type_id reset 0 in eap_method_get_g_type(). That caused
    g_boxed_type_register_static() to be called again, which resulted in failing
    assertion 'g_type_form_name (name) == 0' and thus eap_method_get_g_type()
    returned 0 instead of proper GType. Later using 0 made gtk_list_store_new()
    fail to get proper GListStore:
    inner_auth_combo_init:
    auth_model = gtk_list_store_new (2, G_TYPE_STRING, eap_method_get_type ())
    
    https://bugzilla.redhat.com/show_bug.cgi?id=979123

 src/connection-editor/page-wifi-security.c |    2 +-
 src/libnm-gtk/nm-wifi-dialog.c             |    2 +-
 src/wireless-security/eap-method-fast.c    |    2 +-
 src/wireless-security/eap-method-peap.c    |    2 +-
 src/wireless-security/eap-method-ttls.c    |    2 +-
 src/wireless-security/eap-method.c         |   14 +-------------
 src/wireless-security/eap-method.h         |    2 +-
 src/wireless-security/wireless-security.c  |   16 ++--------------
 src/wireless-security/wireless-security.h  |    2 +-
 9 files changed, 10 insertions(+), 34 deletions(-)
---
diff --git a/src/connection-editor/page-wifi-security.c b/src/connection-editor/page-wifi-security.c
index bd4e918..488898c 100644
--- a/src/connection-editor/page-wifi-security.c
+++ b/src/connection-editor/page-wifi-security.c
@@ -253,7 +253,7 @@ finish_setup (CEPageWifiSecurity *self, gpointer unused, GError *error, gpointer
        if (s_wireless_sec)
                default_type = get_default_type_for_security (s_wireless_sec);
 
-       sec_model = gtk_list_store_new (3, G_TYPE_STRING, wireless_security_get_g_type (), G_TYPE_BOOLEAN);
+       sec_model = gtk_list_store_new (3, G_TYPE_STRING, wireless_security_get_type (), G_TYPE_BOOLEAN);
 
        if (nm_utils_security_valid (NMU_SEC_NONE, dev_caps, FALSE, is_adhoc, 0, 0, 0)) {
                gtk_list_store_append (sec_model, &iter);
diff --git a/src/libnm-gtk/nm-wifi-dialog.c b/src/libnm-gtk/nm-wifi-dialog.c
index bcd5cb7..31fc3d4 100644
--- a/src/libnm-gtk/nm-wifi-dialog.c
+++ b/src/libnm-gtk/nm-wifi-dialog.c
@@ -863,7 +863,7 @@ security_combo_init (NMAWifiDialog *self, gboolean secrets_only)
                wep_type = NM_WEP_KEY_TYPE_PASSPHRASE;
        }
 
-       sec_model = gtk_list_store_new (2, G_TYPE_STRING, wireless_security_get_g_type ());
+       sec_model = gtk_list_store_new (2, G_TYPE_STRING, wireless_security_get_type ());
 
        if (nm_utils_security_valid (NMU_SEC_NONE, dev_caps, !!priv->ap, is_adhoc, ap_flags, ap_wpa, ap_rsn)) 
{
                gtk_list_store_append (sec_model, &iter);
diff --git a/src/wireless-security/eap-method-fast.c b/src/wireless-security/eap-method-fast.c
index e34c3f5..853367f 100644
--- a/src/wireless-security/eap-method-fast.c
+++ b/src/wireless-security/eap-method-fast.c
@@ -241,7 +241,7 @@ inner_auth_combo_init (EAPMethodFAST *method,
        guint32 active = 0;
        const char *phase2_auth = NULL;
 
-       auth_model = gtk_list_store_new (2, G_TYPE_STRING, eap_method_get_g_type ());
+       auth_model = gtk_list_store_new (2, G_TYPE_STRING, eap_method_get_type ());
 
        if (s_8021x) {
                if (nm_setting_802_1x_get_phase2_auth (s_8021x))
diff --git a/src/wireless-security/eap-method-peap.c b/src/wireless-security/eap-method-peap.c
index 51a32a7..f8ef35b 100644
--- a/src/wireless-security/eap-method-peap.c
+++ b/src/wireless-security/eap-method-peap.c
@@ -244,7 +244,7 @@ inner_auth_combo_init (EAPMethodPEAP *method,
        guint32 active = 0;
        const char *phase2_auth = NULL;
 
-       auth_model = gtk_list_store_new (2, G_TYPE_STRING, eap_method_get_g_type ());
+       auth_model = gtk_list_store_new (2, G_TYPE_STRING, eap_method_get_type ());
 
        if (s_8021x) {
                if (nm_setting_802_1x_get_phase2_auth (s_8021x))
diff --git a/src/wireless-security/eap-method-ttls.c b/src/wireless-security/eap-method-ttls.c
index bf50e74..e8c9e4d 100644
--- a/src/wireless-security/eap-method-ttls.c
+++ b/src/wireless-security/eap-method-ttls.c
@@ -228,7 +228,7 @@ inner_auth_combo_init (EAPMethodTTLS *method,
        guint32 active = 0;
        const char *phase2_auth = NULL;
 
-       auth_model = gtk_list_store_new (2, G_TYPE_STRING, eap_method_get_g_type ());
+       auth_model = gtk_list_store_new (2, G_TYPE_STRING, eap_method_get_type ());
 
        if (s_8021x) {
                if (nm_setting_802_1x_get_phase2_auth (s_8021x))
diff --git a/src/wireless-security/eap-method.c b/src/wireless-security/eap-method.c
index 5184b46..d9f3c72 100644
--- a/src/wireless-security/eap-method.c
+++ b/src/wireless-security/eap-method.c
@@ -37,19 +37,7 @@
 #include "eap-method.h"
 #include "nm-utils.h"
 
-GType
-eap_method_get_g_type (void)
-{
-       static GType type_id = 0;
-
-       if (!type_id) {
-               type_id = g_boxed_type_register_static ("EAPMethod",
-                                                       (GBoxedCopyFunc) eap_method_ref,
-                                                       (GBoxedFreeFunc) eap_method_unref);
-       }
-
-       return type_id;
-}
+G_DEFINE_BOXED_TYPE (EAPMethod, eap_method, eap_method_ref, eap_method_unref)
 
 GtkWidget *
 eap_method_get_widget (EAPMethod *method)
diff --git a/src/wireless-security/eap-method.h b/src/wireless-security/eap-method.h
index 626a3d7..030fa88 100644
--- a/src/wireless-security/eap-method.h
+++ b/src/wireless-security/eap-method.h
@@ -73,7 +73,7 @@ EAPMethod *eap_method_ref (EAPMethod *method);
 
 void eap_method_unref (EAPMethod *method);
 
-GType eap_method_get_g_type (void);
+GType eap_method_get_type (void);
 
 /* Below for internal use only */
 
diff --git a/src/wireless-security/wireless-security.c b/src/wireless-security/wireless-security.c
index 73315b1..3778e87 100644
--- a/src/wireless-security/wireless-security.c
+++ b/src/wireless-security/wireless-security.c
@@ -37,19 +37,7 @@
 #include "wireless-security.h"
 #include "eap-method.h"
 
-GType
-wireless_security_get_g_type (void)
-{
-       static GType type_id = 0;
-
-       if (!type_id) {
-               type_id = g_boxed_type_register_static ("WirelessSecurity",
-                                                       (GBoxedCopyFunc) wireless_security_ref,
-                                                       (GBoxedFreeFunc) wireless_security_unref);
-       }
-
-       return type_id;
-}
+G_DEFINE_BOXED_TYPE (WirelessSecurity, wireless_security, wireless_security_ref, wireless_security_unref)
 
 GtkWidget *
 wireless_security_get_widget (WirelessSecurity *sec)
@@ -414,7 +402,7 @@ ws_802_1x_auth_combo_init (WirelessSecurity *sec,
        /* initialize WirelessSecurity userpass from connection (clear if no connection) */
        wireless_security_set_userpass_802_1x (sec, connection);
 
-       auth_model = gtk_list_store_new (2, G_TYPE_STRING, eap_method_get_g_type ());
+       auth_model = gtk_list_store_new (2, G_TYPE_STRING, eap_method_get_type ());
 
        if (wired) {
                em_md5 = eap_method_simple_new (sec,
diff --git a/src/wireless-security/wireless-security.h b/src/wireless-security/wireless-security.h
index 149a21d..4a1a4fe 100644
--- a/src/wireless-security/wireless-security.h
+++ b/src/wireless-security/wireless-security.h
@@ -93,7 +93,7 @@ WirelessSecurity *wireless_security_ref (WirelessSecurity *sec);
 
 void wireless_security_unref (WirelessSecurity *sec);
 
-GType wireless_security_get_g_type (void);
+GType wireless_security_get_type (void);
 
 /* Below for internal use only */
 


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