|
|
895d076 |
From 21bdee77727417b6b16feed7b466953873319b58 Mon Sep 17 00:00:00 2001
|
|
|
895d076 |
From: Ernestas Kulik <ekulik@redhat.com>
|
|
|
895d076 |
Date: Tue, 8 Jan 2019 14:26:15 +0100
|
|
|
895d076 |
Subject: [PATCH] dbus: task: Use modern GLib type macros
|
|
|
895d076 |
|
|
|
895d076 |
Signed-off-by: Ernestas Kulik <ekulik@redhat.com>
|
|
|
895d076 |
---
|
|
|
895d076 |
src/dbus/abrt_problems2_task.c | 111 ++++++++++++++++++++++++---------
|
|
|
895d076 |
src/dbus/abrt_problems2_task.h | 26 +-------
|
|
|
895d076 |
2 files changed, 82 insertions(+), 55 deletions(-)
|
|
|
895d076 |
|
|
|
895d076 |
diff --git a/src/dbus/abrt_problems2_task.c b/src/dbus/abrt_problems2_task.c
|
|
|
895d076 |
index f40381f6..cba6b469 100644
|
|
|
895d076 |
--- a/src/dbus/abrt_problems2_task.c
|
|
|
895d076 |
+++ b/src/dbus/abrt_problems2_task.c
|
|
|
895d076 |
@@ -25,6 +25,15 @@ enum {
|
|
|
895d076 |
|
|
|
895d076 |
static guint s_signals[SN_LAST_SIGNAL] = { 0 };
|
|
|
895d076 |
|
|
|
895d076 |
+struct _AbrtP2TaskPrivate
|
|
|
895d076 |
+{
|
|
|
895d076 |
+ gint32 p2t_status;
|
|
|
895d076 |
+ GVariant *p2t_details;
|
|
|
895d076 |
+ GVariant *p2t_results;
|
|
|
895d076 |
+ gint32 p2t_code;
|
|
|
895d076 |
+ GCancellable *p2t_cancellable;
|
|
|
895d076 |
+};
|
|
|
895d076 |
+
|
|
|
895d076 |
G_DEFINE_TYPE_WITH_PRIVATE(AbrtP2Task, abrt_p2_task, G_TYPE_OBJECT)
|
|
|
895d076 |
|
|
|
895d076 |
static void abrt_p2_task_finalize(GObject *gobject)
|
|
|
895d076 |
@@ -74,17 +83,24 @@ static void abrt_p2_task_class_init(AbrtP2TaskClass *klass)
|
|
|
895d076 |
|
|
|
895d076 |
static void abrt_p2_task_init(AbrtP2Task *self)
|
|
|
895d076 |
{
|
|
|
895d076 |
- self->pv = abrt_p2_task_get_instance_private(self);
|
|
|
895d076 |
- self->pv->p2t_details = g_variant_new("a{sv}", NULL);
|
|
|
895d076 |
+ AbrtP2TaskPrivate *pv;
|
|
|
895d076 |
+
|
|
|
895d076 |
+ pv = abrt_p2_task_get_instance_private(self);
|
|
|
895d076 |
+
|
|
|
895d076 |
+ pv->p2t_details = g_variant_new("a{sv}", NULL);
|
|
|
895d076 |
}
|
|
|
895d076 |
|
|
|
895d076 |
static void abrt_p2_task_change_status(AbrtP2Task *task,
|
|
|
895d076 |
AbrtP2TaskStatus status)
|
|
|
895d076 |
{
|
|
|
895d076 |
- if (task->pv->p2t_status == status)
|
|
|
895d076 |
+ AbrtP2TaskPrivate *pv;
|
|
|
895d076 |
+
|
|
|
895d076 |
+ pv = abrt_p2_task_get_instance_private(task);
|
|
|
895d076 |
+
|
|
|
895d076 |
+ if (pv->p2t_status == status)
|
|
|
895d076 |
return;
|
|
|
895d076 |
|
|
|
895d076 |
- task->pv->p2t_status = status;
|
|
|
895d076 |
+ pv->p2t_status = status;
|
|
|
895d076 |
|
|
|
895d076 |
g_signal_emit(task,
|
|
|
895d076 |
s_signals[SN_STATUS_CHANGED],
|
|
|
895d076 |
@@ -94,53 +110,77 @@ static void abrt_p2_task_change_status(AbrtP2Task *task,
|
|
|
895d076 |
|
|
|
895d076 |
AbrtP2TaskStatus abrt_p2_task_status(AbrtP2Task *task)
|
|
|
895d076 |
{
|
|
|
895d076 |
- return task->pv->p2t_status;
|
|
|
895d076 |
+ AbrtP2TaskPrivate *pv;
|
|
|
895d076 |
+
|
|
|
895d076 |
+ pv = abrt_p2_task_get_instance_private(task);
|
|
|
895d076 |
+
|
|
|
895d076 |
+ return pv->p2t_status;
|
|
|
895d076 |
}
|
|
|
895d076 |
|
|
|
895d076 |
GVariant *abrt_p2_task_details(AbrtP2Task *task)
|
|
|
895d076 |
{
|
|
|
895d076 |
- return g_variant_ref(task->pv->p2t_details);
|
|
|
895d076 |
+ AbrtP2TaskPrivate *pv;
|
|
|
895d076 |
+
|
|
|
895d076 |
+ pv = abrt_p2_task_get_instance_private(task);
|
|
|
895d076 |
+
|
|
|
895d076 |
+ return g_variant_ref(pv->p2t_details);
|
|
|
895d076 |
}
|
|
|
895d076 |
|
|
|
895d076 |
void abrt_p2_task_add_detail(AbrtP2Task *task,
|
|
|
895d076 |
const char *key,
|
|
|
895d076 |
GVariant *value)
|
|
|
895d076 |
{
|
|
|
895d076 |
+ AbrtP2TaskPrivate *pv;
|
|
|
895d076 |
GVariantDict dict;
|
|
|
895d076 |
- g_variant_dict_init(&dict, task->pv->p2t_details);
|
|
|
895d076 |
+
|
|
|
895d076 |
+ pv = abrt_p2_task_get_instance_private(task);
|
|
|
895d076 |
+
|
|
|
895d076 |
+ g_variant_dict_init(&dict, pv->p2t_details);
|
|
|
895d076 |
g_variant_dict_insert(&dict, key, "v", value);
|
|
|
895d076 |
|
|
|
895d076 |
- if (task->pv->p2t_details)
|
|
|
895d076 |
- g_variant_unref(task->pv->p2t_details);
|
|
|
895d076 |
+ if (pv->p2t_details)
|
|
|
895d076 |
+ g_variant_unref(pv->p2t_details);
|
|
|
895d076 |
|
|
|
895d076 |
- task->pv->p2t_details = g_variant_dict_end(&dict);
|
|
|
895d076 |
+ pv->p2t_details = g_variant_dict_end(&dict);
|
|
|
895d076 |
}
|
|
|
895d076 |
|
|
|
895d076 |
void abrt_p2_task_set_response(AbrtP2Task *task,
|
|
|
895d076 |
GVariant *response)
|
|
|
895d076 |
{
|
|
|
895d076 |
- if (task->pv->p2t_results != NULL)
|
|
|
895d076 |
+ AbrtP2TaskPrivate *pv;
|
|
|
895d076 |
+
|
|
|
895d076 |
+ pv = abrt_p2_task_get_instance_private(task);
|
|
|
895d076 |
+
|
|
|
895d076 |
+ if (pv->p2t_results != NULL)
|
|
|
895d076 |
log_warning("Task already has response assigned");
|
|
|
895d076 |
|
|
|
895d076 |
- task->pv->p2t_results = response;
|
|
|
895d076 |
+ pv->p2t_results = response;
|
|
|
895d076 |
}
|
|
|
895d076 |
|
|
|
895d076 |
bool abrt_p2_task_is_cancelled(AbrtP2Task *task)
|
|
|
895d076 |
{
|
|
|
895d076 |
- return (task->pv->p2t_cancellable
|
|
|
895d076 |
- && g_cancellable_is_cancelled(task->pv->p2t_cancellable))
|
|
|
895d076 |
- || task->pv->p2t_status == ABRT_P2_TASK_STATUS_CANCELED;
|
|
|
895d076 |
+ AbrtP2TaskPrivate *pv;
|
|
|
895d076 |
+
|
|
|
895d076 |
+ pv = abrt_p2_task_get_instance_private(task);
|
|
|
895d076 |
+
|
|
|
895d076 |
+ return (pv->p2t_cancellable
|
|
|
895d076 |
+ && g_cancellable_is_cancelled(pv->p2t_cancellable))
|
|
|
895d076 |
+ || pv->p2t_status == ABRT_P2_TASK_STATUS_CANCELED;
|
|
|
895d076 |
}
|
|
|
895d076 |
|
|
|
895d076 |
void abrt_p2_task_cancel(AbrtP2Task *task,
|
|
|
895d076 |
GError **error)
|
|
|
895d076 |
{
|
|
|
895d076 |
+ AbrtP2TaskPrivate *pv;
|
|
|
895d076 |
+
|
|
|
895d076 |
if (abrt_p2_task_is_cancelled(task))
|
|
|
895d076 |
return;
|
|
|
895d076 |
|
|
|
895d076 |
- if (task->pv->p2t_status == ABRT_P2_TASK_STATUS_RUNNING)
|
|
|
895d076 |
- g_cancellable_cancel(task->pv->p2t_cancellable);
|
|
|
895d076 |
- else if (task->pv->p2t_status == ABRT_P2_TASK_STATUS_STOPPED)
|
|
|
895d076 |
+ pv = abrt_p2_task_get_instance_private(task);
|
|
|
895d076 |
+
|
|
|
895d076 |
+ if (pv->p2t_status == ABRT_P2_TASK_STATUS_RUNNING)
|
|
|
895d076 |
+ g_cancellable_cancel(pv->p2t_cancellable);
|
|
|
895d076 |
+ else if (pv->p2t_status == ABRT_P2_TASK_STATUS_STOPPED)
|
|
|
895d076 |
{
|
|
|
895d076 |
ABRT_P2_TASK_VIRTUAL_CANCEL(task, error);
|
|
|
895d076 |
|
|
|
895d076 |
@@ -157,8 +197,12 @@ void abrt_p2_task_finish(AbrtP2Task *task,
|
|
|
895d076 |
gint32 *code,
|
|
|
895d076 |
GError **error)
|
|
|
895d076 |
{
|
|
|
895d076 |
- if ( task->pv->p2t_status != ABRT_P2_TASK_STATUS_DONE
|
|
|
895d076 |
- && task->pv->p2t_status != ABRT_P2_TASK_STATUS_FAILED)
|
|
|
895d076 |
+ AbrtP2TaskPrivate *pv;
|
|
|
895d076 |
+
|
|
|
895d076 |
+ pv = abrt_p2_task_get_instance_private(task);
|
|
|
895d076 |
+
|
|
|
895d076 |
+ if ( pv->p2t_status != ABRT_P2_TASK_STATUS_DONE
|
|
|
895d076 |
+ && pv->p2t_status != ABRT_P2_TASK_STATUS_FAILED)
|
|
|
895d076 |
{
|
|
|
895d076 |
g_set_error(error, G_DBUS_ERROR, G_DBUS_ERROR_FAILED,
|
|
|
895d076 |
"Cannot finalize undone task");
|
|
|
895d076 |
@@ -170,12 +214,12 @@ void abrt_p2_task_finish(AbrtP2Task *task,
|
|
|
895d076 |
if (*error != NULL)
|
|
|
895d076 |
return;
|
|
|
895d076 |
|
|
|
895d076 |
- if (task->pv->p2t_results)
|
|
|
895d076 |
- *result = g_variant_ref(task->pv->p2t_results);
|
|
|
895d076 |
+ if (pv->p2t_results)
|
|
|
895d076 |
+ *result = g_variant_ref(pv->p2t_results);
|
|
|
895d076 |
else
|
|
|
895d076 |
*result = g_variant_new("a{sv}", NULL);
|
|
|
895d076 |
|
|
|
895d076 |
- *code = task->pv->p2t_code;
|
|
|
895d076 |
+ *code = pv->p2t_code;
|
|
|
895d076 |
}
|
|
|
895d076 |
|
|
|
895d076 |
static void abrt_p2_task_finish_gtask(GObject *source_object,
|
|
|
895d076 |
@@ -183,6 +227,7 @@ static void abrt_p2_task_finish_gtask(GObject *source_object,
|
|
|
895d076 |
gpointer user_data)
|
|
|
895d076 |
{
|
|
|
895d076 |
AbrtP2Task *task = ABRT_P2_TASK(source_object);
|
|
|
895d076 |
+ AbrtP2TaskPrivate *pv;
|
|
|
895d076 |
|
|
|
895d076 |
if (!g_task_is_valid(result, task))
|
|
|
895d076 |
{
|
|
|
895d076 |
@@ -190,6 +235,8 @@ static void abrt_p2_task_finish_gtask(GObject *source_object,
|
|
|
895d076 |
return;
|
|
|
895d076 |
}
|
|
|
895d076 |
|
|
|
895d076 |
+ pv = abrt_p2_task_get_instance_private(task);
|
|
|
895d076 |
+
|
|
|
895d076 |
GError *error = NULL;
|
|
|
895d076 |
const gint32 code = g_task_propagate_int(G_TASK(result), &error);
|
|
|
895d076 |
|
|
|
895d076 |
@@ -203,7 +250,7 @@ static void abrt_p2_task_finish_gtask(GObject *source_object,
|
|
|
895d076 |
{
|
|
|
895d076 |
log_debug("Task done");
|
|
|
895d076 |
|
|
|
895d076 |
- task->pv->p2t_code = code - ABRT_P2_TASK_CODE_DONE;
|
|
|
895d076 |
+ pv->p2t_code = code - ABRT_P2_TASK_CODE_DONE;
|
|
|
895d076 |
abrt_p2_task_change_status(task, ABRT_P2_TASK_STATUS_DONE);
|
|
|
895d076 |
}
|
|
|
895d076 |
else if (abrt_p2_task_is_cancelled(task))
|
|
|
895d076 |
@@ -263,8 +310,8 @@ static void abrt_p2_task_finish_gtask(GObject *source_object,
|
|
|
895d076 |
abrt_p2_task_change_status(task, ABRT_P2_TASK_STATUS_FAILED);
|
|
|
895d076 |
}
|
|
|
895d076 |
|
|
|
895d076 |
- g_object_unref(task->pv->p2t_cancellable);
|
|
|
895d076 |
- task->pv->p2t_cancellable = NULL;
|
|
|
895d076 |
+ g_object_unref(pv->p2t_cancellable);
|
|
|
895d076 |
+ pv->p2t_cancellable = NULL;
|
|
|
895d076 |
}
|
|
|
895d076 |
|
|
|
895d076 |
static void abrt_p2_task_thread(GTask *task,
|
|
|
895d076 |
@@ -289,8 +336,12 @@ void abrt_p2_task_start(AbrtP2Task *task,
|
|
|
895d076 |
GVariant *options,
|
|
|
895d076 |
GError **error)
|
|
|
895d076 |
{
|
|
|
895d076 |
- if ( task->pv->p2t_status != ABRT_P2_TASK_STATUS_NEW
|
|
|
895d076 |
- && task->pv->p2t_status != ABRT_P2_TASK_STATUS_STOPPED)
|
|
|
895d076 |
+ AbrtP2TaskPrivate *pv;
|
|
|
895d076 |
+
|
|
|
895d076 |
+ pv = abrt_p2_task_get_instance_private(task);
|
|
|
895d076 |
+
|
|
|
895d076 |
+ if ( pv->p2t_status != ABRT_P2_TASK_STATUS_NEW
|
|
|
895d076 |
+ && pv->p2t_status != ABRT_P2_TASK_STATUS_STOPPED)
|
|
|
895d076 |
{
|
|
|
895d076 |
g_set_error(error, G_DBUS_ERROR, G_DBUS_ERROR_FAILED,
|
|
|
895d076 |
"Cannot start task that is not new or stopped");
|
|
|
895d076 |
@@ -302,9 +353,9 @@ void abrt_p2_task_start(AbrtP2Task *task,
|
|
|
895d076 |
if (*error != NULL)
|
|
|
895d076 |
return;
|
|
|
895d076 |
|
|
|
895d076 |
- task->pv->p2t_cancellable = g_cancellable_new();
|
|
|
895d076 |
+ pv->p2t_cancellable = g_cancellable_new();
|
|
|
895d076 |
GTask *gtask = g_task_new(task,
|
|
|
895d076 |
- task->pv->p2t_cancellable,
|
|
|
895d076 |
+ pv->p2t_cancellable,
|
|
|
895d076 |
abrt_p2_task_finish_gtask,
|
|
|
895d076 |
NULL);
|
|
|
895d076 |
|
|
|
895d076 |
diff --git a/src/dbus/abrt_problems2_task.h b/src/dbus/abrt_problems2_task.h
|
|
|
895d076 |
index 71f765d9..717af47b 100644
|
|
|
895d076 |
--- a/src/dbus/abrt_problems2_task.h
|
|
|
895d076 |
+++ b/src/dbus/abrt_problems2_task.h
|
|
|
895d076 |
@@ -45,21 +45,12 @@ G_BEGIN_DECLS
|
|
|
895d076 |
GType abrt_p2_task_get_type (void);
|
|
|
895d076 |
|
|
|
895d076 |
#define ABRT_TYPE_P2_TASK (abrt_p2_task_get_type ())
|
|
|
895d076 |
-#define ABRT_P2_TASK(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), ABRT_TYPE_P2_TASK, AbrtP2Task))
|
|
|
895d076 |
-#define ABRT_P2_TASK_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), ABRT_TYPE_P2_TASK, AbrtP2TaskClass))
|
|
|
895d076 |
-#define ABRT_IS_P2_TASK(obj)(G_TYPE_CHECK_INSTANCE_TYPE ((obj), ABRT_TYPE_P2_TASK))
|
|
|
895d076 |
-#define ABRT_IS_P2_TASK_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), ABRT_TYPE_P2_TASK))
|
|
|
895d076 |
-#define ABRT_P2_TASK_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), ABRT_TYPE_P2_TASK, AbrtP2TaskClass))
|
|
|
895d076 |
+G_DECLARE_DERIVABLE_TYPE(AbrtP2Task, abrt_p2_task, ABRT, P2_TASK, GObject)
|
|
|
895d076 |
|
|
|
895d076 |
typedef struct _AbrtP2Task AbrtP2Task;
|
|
|
895d076 |
typedef struct _AbrtP2TaskClass AbrtP2TaskClass;
|
|
|
895d076 |
typedef struct _AbrtP2TaskPrivate AbrtP2TaskPrivate;
|
|
|
895d076 |
|
|
|
895d076 |
-static inline void glib_autoptr_cleanup_AbrtP2Task(AbrtP2Task **task)
|
|
|
895d076 |
-{
|
|
|
895d076 |
- glib_autoptr_cleanup_GObject((GObject **)task);
|
|
|
895d076 |
-}
|
|
|
895d076 |
-
|
|
|
895d076 |
typedef enum {
|
|
|
895d076 |
ABRT_P2_TASK_STATUS_NEW,
|
|
|
895d076 |
ABRT_P2_TASK_STATUS_RUNNING,
|
|
|
895d076 |
@@ -96,21 +87,6 @@ struct _AbrtP2TaskClass
|
|
|
895d076 |
gpointer padding[12];
|
|
|
895d076 |
};
|
|
|
895d076 |
|
|
|
895d076 |
-struct _AbrtP2TaskPrivate
|
|
|
895d076 |
-{
|
|
|
895d076 |
- gint32 p2t_status;
|
|
|
895d076 |
- GVariant *p2t_details;
|
|
|
895d076 |
- GVariant *p2t_results;
|
|
|
895d076 |
- gint32 p2t_code;
|
|
|
895d076 |
- GCancellable *p2t_cancellable;
|
|
|
895d076 |
-};
|
|
|
895d076 |
-
|
|
|
895d076 |
-struct _AbrtP2Task
|
|
|
895d076 |
-{
|
|
|
895d076 |
- GObject parent_instance;
|
|
|
895d076 |
- AbrtP2TaskPrivate *pv;
|
|
|
895d076 |
-};
|
|
|
895d076 |
-
|
|
|
895d076 |
AbrtP2TaskStatus abrt_p2_task_status(AbrtP2Task *task);
|
|
|
895d076 |
|
|
|
895d076 |
/* Returns task details in form of key-value entries.
|
|
|
895d076 |
--
|
|
|
895d076 |
2.20.1
|
|
|
895d076 |
|