[gnome-software] Do not crash on refresh if the fwupd daemon is not available
- From: Richard Hughes <rhughes src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-software] Do not crash on refresh if the fwupd daemon is not available
- Date: Fri, 8 Jan 2016 11:21:04 +0000 (UTC)
commit acd34d50260b60ce5e7cc83506874e6f611e02f2
Author: Richard Hughes <richard hughsie com>
Date: Fri Jan 8 10:42:46 2016 +0000
Do not crash on refresh if the fwupd daemon is not available
Fixes: https://bugzilla.redhat.com/show_bug.cgi?id=1282395
src/plugins/gs-plugin-fwupd.c | 38 ++++++++++++++++----------------------
1 files changed, 16 insertions(+), 22 deletions(-)
---
diff --git a/src/plugins/gs-plugin-fwupd.c b/src/plugins/gs-plugin-fwupd.c
index 0a4844a..d5e5f66 100644
--- a/src/plugins/gs-plugin-fwupd.c
+++ b/src/plugins/gs-plugin-fwupd.c
@@ -34,7 +34,7 @@
#include "gs-utils.h"
struct GsPluginPrivate {
- gsize done_init;
+ GMutex mutex;
GDBusProxy *proxy;
GPtrArray *to_download;
GPtrArray *to_ignore;
@@ -137,6 +137,7 @@ gs_plugin_startup (GsPlugin *plugin, GCancellable *cancellable, GError **error)
g_autoptr(GError) error_local = NULL;
g_autofree gchar *data = NULL;
g_autoptr(GDBusConnection) conn = NULL;
+ g_autoptr(GMutexLocker) locker = g_mutex_locker_new (&plugin->priv->mutex);
/* register D-Bus errors */
fwupd_error_quark ();
@@ -411,23 +412,20 @@ gs_plugin_add_updates_historical (GsPlugin *plugin,
{
GVariant *variant;
const gchar *key;
- gboolean ret;
g_autoptr(GError) error_local = NULL;
g_autoptr(GsApp) app = NULL;
g_autoptr(GVariantIter) iter = NULL;
g_autoptr(GVariant) val = NULL;
- /* watch the file in case it comes or goes */
- if (g_once_init_enter (&plugin->priv->done_init)) {
- ret = gs_plugin_startup (plugin, cancellable, error);
- g_once_init_leave (&plugin->priv->done_init, TRUE);
- if (!ret)
+ /* set up plugin */
+ if (plugin->priv->proxy == NULL) {
+ if (!gs_plugin_startup (plugin, cancellable, error))
return FALSE;
}
-
- /* could not connect */
if (plugin->priv->proxy == NULL)
return TRUE;
+
+ /* get historical updates */
val = g_dbus_proxy_call_sync (plugin->priv->proxy,
"GetResults",
g_variant_new ("(s)", FWUPD_DEVICE_ID_ANY),
@@ -476,23 +474,20 @@ gs_plugin_add_updates (GsPlugin *plugin,
GError **error)
{
const gchar *id;
- gboolean ret;
GVariantIter *iter_device;
g_autoptr(GError) error_local = NULL;
g_autoptr(GVariantIter) iter = NULL;
g_autoptr(GVariant) val = NULL;
- /* watch the file in case it comes or goes */
- if (g_once_init_enter (&plugin->priv->done_init)) {
- ret = gs_plugin_startup (plugin, cancellable, error);
- g_once_init_leave (&plugin->priv->done_init, TRUE);
- if (!ret)
+ /* set up plugin */
+ if (plugin->priv->proxy == NULL) {
+ if (!gs_plugin_startup (plugin, cancellable, error))
return FALSE;
}
-
- /* could not connect */
if (plugin->priv->proxy == NULL)
return TRUE;
+
+ /* get current list of updates */
val = g_dbus_proxy_call_sync (plugin->priv->proxy,
"GetUpdates",
NULL,
@@ -732,16 +727,15 @@ gs_plugin_refresh (GsPlugin *plugin,
GError **error)
{
const gchar *tmp;
- gboolean ret;
guint i;
/* set up plugin */
- if (g_once_init_enter (&plugin->priv->done_init)) {
- ret = gs_plugin_startup (plugin, cancellable, error);
- g_once_init_leave (&plugin->priv->done_init, TRUE);
- if (!ret)
+ if (plugin->priv->proxy == NULL) {
+ if (!gs_plugin_startup (plugin, cancellable, error))
return FALSE;
}
+ if (plugin->priv->proxy == NULL)
+ return TRUE;
/* ensure networking is set up */
if (!gs_plugin_fwupd_setup_networking (plugin, error))
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]