From 7a1d547128066c63f2eb6b19f7869fce0e6f1a98 Mon Sep 17 00:00:00 2001 From: Richard Hughes Date: Mon, 2 Aug 2021 16:34:27 +0100 Subject: [PATCH] trivial: Do not set up the backends if there is no coldplug This speeds up fu-self-test, but more importantly fixes a intermittent 'ninja check' failure when a host USB device disconnects at exactly the wrong time. The FuUsbBackend code is unusual in that the setup() code sets up a context (with a thread) which takes up to 2 seconds to timeout. --- src/fu-engine.c | 34 ++++++++++++++++++---------------- 1 file changed, 18 insertions(+), 16 deletions(-) diff --git a/src/fu-engine.c b/src/fu-engine.c index 4a1b5dc5e..1d52a184c 100644 --- a/src/fu-engine.c +++ b/src/fu-engine.c @@ -6670,23 +6670,25 @@ fu_engine_load (FuEngine *self, FuEngineLoadFlags flags, GError **error) fu_context_add_firmware_gtype (self->ctx, "ifd-firmware", FU_TYPE_IFD_FIRMWARE); /* set up backends */ - for (guint i = 0; i < self->backends->len; i++) { - FuBackend *backend = g_ptr_array_index (self->backends, i); - g_autoptr(GError) error_backend = NULL; - if (!fu_backend_setup (backend, &error_backend)) { - g_debug ("failed to setup backend %s: %s", - fu_backend_get_name (backend), - error_backend->message); - continue; + if (flags & FU_ENGINE_LOAD_FLAG_COLDPLUG) { + for (guint i = 0; i < self->backends->len; i++) { + FuBackend *backend = g_ptr_array_index(self->backends, i); + g_autoptr(GError) error_backend = NULL; + if (!fu_backend_setup(backend, &error_backend)) { + g_debug("failed to setup backend %s: %s", + fu_backend_get_name(backend), + error_backend->message); + continue; + } + backend_cnt++; + } + if (backend_cnt == 0) { + g_set_error_literal(error, + FWUPD_ERROR, + FWUPD_ERROR_NOT_SUPPORTED, + "all backends failed setup"); + return FALSE; } - backend_cnt++; - } - if (backend_cnt == 0) { - g_set_error_literal (error, - FWUPD_ERROR, - FWUPD_ERROR_NOT_SUPPORTED, - "all backends failed setup"); - return FALSE; } /* delete old data files */