From a72dd80a944afcc08538ecee22d00b6a9c069d0d Mon Sep 17 00:00:00 2001 From: Thomas Haller Date: Tue, 18 Aug 2015 16:10:38 +0200 Subject: [PATCH 1/3] macros: add NM_SET_OUT() macro (cherry picked from commit d4d2e65eb7fee4486e386e62a2f9d405c320e1f0) --- include/nm-macros-internal.h | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/include/nm-macros-internal.h b/include/nm-macros-internal.h index 123c49bbc6..d5a8ec5228 100644 --- a/include/nm-macros-internal.h +++ b/include/nm-macros-internal.h @@ -111,6 +111,15 @@ /* macro to return strlen() of a compile time string. */ #define STRLEN(str) ( sizeof ("" str) - 1 ) +#define NM_SET_OUT(out_val, value) \ + G_STMT_START { \ + typeof(*(out_val)) *_out_val = (out_val); \ + \ + if (_out_val) { \ + *_out_val = (value); \ + } \ + } G_STMT_END + /********************************************************/ #define _NM_IN_SET_EVAL_1(op, x, y1) \ From 5f8ae4e1e5f4f53496d259e3f4be0edcec1bea83 Mon Sep 17 00:00:00 2001 From: Francesco Giudici Date: Mon, 11 Apr 2016 16:00:49 +0200 Subject: [PATCH 2/3] device: ensure @error always set by nm_device_factory_new_link https://bugzilla.redhat.com/show_bug.cgi?id=1325631 (backported from commit c5d827057e71e349a02922982323d2e8a85081c8) --- src/devices/nm-device-factory.c | 21 ++++++++++++++++++++- src/nm-manager.c | 3 +-- 2 files changed, 21 insertions(+), 3 deletions(-) diff --git a/src/devices/nm-device-factory.c b/src/devices/nm-device-factory.c index 1303480857..b8edb9d102 100644 --- a/src/devices/nm-device-factory.c +++ b/src/devices/nm-device-factory.c @@ -88,12 +88,17 @@ nm_device_factory_new_link (NMDeviceFactory *factory, const NMLinkType *link_types = NULL; const char **setting_types = NULL; int i; + NMDevice *device; + gboolean ignore = FALSE; g_return_val_if_fail (factory != NULL, NULL); g_return_val_if_fail (plink != NULL, NULL); /* Ensure the factory can create interfaces for this connection */ nm_device_factory_get_supported_types (factory, &link_types, &setting_types); + + NM_SET_OUT (out_ignore, FALSE); + for (i = 0; link_types[i] > NM_LINK_TYPE_UNKNOWN; i++) { if (plink->type == link_types[i]) break; @@ -115,7 +120,21 @@ nm_device_factory_new_link (NMDeviceFactory *factory, return NULL; } - return interface->new_link (factory, plink, out_ignore, error); + device = interface->new_link (factory, plink, &ignore, error); + NM_SET_OUT (out_ignore, ignore); + + if (!device && error && !*error) { + if (ignore) { + g_set_error (error, NM_MANAGER_ERROR, NM_MANAGER_ERROR_FAILED, + "Device factory %s ignores device", + G_OBJECT_TYPE_NAME (factory)); + } else { + g_set_error (error, NM_MANAGER_ERROR, NM_MANAGER_ERROR_FAILED, + "Device factory %s failed to create device", + G_OBJECT_TYPE_NAME (factory)); + } + } + return device; } NMDevice * diff --git a/src/nm-manager.c b/src/nm-manager.c index 082b7ef908..61e3aef78b 100644 --- a/src/nm-manager.c +++ b/src/nm-manager.c @@ -1936,7 +1936,6 @@ platform_link_added (NMManager *self, { NMDeviceFactory *factory; NMDevice *device = NULL; - GError *error = NULL; g_return_if_fail (ifindex > 0); @@ -1947,13 +1946,13 @@ platform_link_added (NMManager *self, factory = nm_device_factory_manager_find_factory_for_link_type (plink->type); if (factory) { gboolean ignore = FALSE; + gs_free_error GError *error = NULL; device = nm_device_factory_new_link (factory, plink, &ignore, &error); if (!device) { if (!ignore) { nm_log_warn (LOGD_HW, "%s: factory failed to create device: %s", plink->name, error->message); - g_clear_error (&error); } return; } From a08b23ec3599bd3cde907fd34dd82dd08eee1865 Mon Sep 17 00:00:00 2001 From: Francesco Giudici Date: Tue, 12 Apr 2016 10:19:21 +0200 Subject: [PATCH 3/3] device: minor logging change in platform_link_added() Show ignored devices in debug level. (cherry picked from commit 7796c489fd5b85fc3f571614b3a982650db017c9) --- src/nm-manager.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/nm-manager.c b/src/nm-manager.c index 61e3aef78b..991cbb85ed 100644 --- a/src/nm-manager.c +++ b/src/nm-manager.c @@ -1953,6 +1953,9 @@ platform_link_added (NMManager *self, if (!ignore) { nm_log_warn (LOGD_HW, "%s: factory failed to create device: %s", plink->name, error->message); + } else { + nm_log_dbg (LOGD_HW, "%s: factory failed to create device: %s", + plink->name, error->message); } return; }