From e7d66f1df61ebdc7652ba34a4e1baddcc86b9e26 Mon Sep 17 00:00:00 2001 From: Thomas Haller Date: Tue, 8 Sep 2015 21:39:40 +0200 Subject: [PATCH] config: workaround invocation of "config-changed" signal There seems to be a bug in glib/ffi that hits on s390x/ppc64 architecture. It causes @changes in nm-dns-manager.c:config_changed_cb() to be NONE, although it is clearly set (see the related bug rh #1260577 for glib). Workaround this, by making the argument type a plain guint. Note that the ill behavior is caught by test_config_signal() in "src/tests/config/test-config.c". Related: https://bugzilla.redhat.com/show_bug.cgi?id=1062301 --- src/nm-config.c | 12 +++++++++++- src/tests/config/test-config.c | 5 ++++- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/src/nm-config.c b/src/nm-config.c index 03f9788ecc..0ccb6e6af2 100644 --- a/src/nm-config.c +++ b/src/nm-config.c @@ -1890,7 +1890,17 @@ nm_config_class_init (NMConfigClass *config_class) G_SIGNAL_RUN_FIRST, 0, NULL, NULL, NULL, - G_TYPE_NONE, 3, NM_TYPE_CONFIG_DATA, NM_TYPE_CONFIG_CHANGE_FLAGS, NM_TYPE_CONFIG_DATA); + G_TYPE_NONE, + 3, + NM_TYPE_CONFIG_DATA, + /* Use plain guint type for changes argument. This avoids + * glib/ffi bug https://bugzilla.redhat.com/show_bug.cgi?id=1260577 */ + /* NM_TYPE_CONFIG_CHANGE_FLAGS, */ + G_TYPE_UINT, + NM_TYPE_CONFIG_DATA); + + G_STATIC_ASSERT_EXPR (sizeof (guint) == sizeof (NMConfigChangeFlags)); + G_STATIC_ASSERT_EXPR (((gint64) ((NMConfigChangeFlags) -1)) > ((gint64) 0)); } static void diff --git a/src/tests/config/test-config.c b/src/tests/config/test-config.c index d8aff9c3f5..b021fe028a 100644 --- a/src/tests/config/test-config.c +++ b/src/tests/config/test-config.c @@ -807,7 +807,10 @@ test_config_signal (void) nm_config_reload (config, SIGHUP); - /* test with subscribing two signals... */ + /* test with subscribing two signals... + * + * This test exposes glib bug https://bugzilla.redhat.com/show_bug.cgi?id=1260577 + * for which we however have a workaround in 'nm-config.c' */ g_signal_connect (G_OBJECT (config), NM_CONFIG_SIGNAL_CONFIG_CHANGED, G_CALLBACK (_test_signal_config_changed_cb2),