[tracker] TrackerDecoratorInfo: register as boxed type
- From: Xavier Claessens <xclaesse src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [tracker] TrackerDecoratorInfo: register as boxed type
- Date: Thu, 6 Feb 2014 18:01:41 +0000 (UTC)
commit d8f5e8553f99e13dec2d13182fc10491b7176c11
Author: Xavier Claessens <xavier claessens collabora co uk>
Date: Thu Jan 30 14:20:15 2014 -0500
TrackerDecoratorInfo: register as boxed type
Introspection needs a boxed type to work. Also this fix ref-counting issue,
tracker_decorator_next_finish() returns the ref but caller couldn't unref it
because the unref function wasn't public. The other solution would be to make
_next_finish() transfer none and remove the destroy func in
g_task_return_pointer(), but that's unusual for finish functions.
https://bugzilla.gnome.org/show_bug.cgi?id=719802
.../libtracker-miner/libtracker-miner-sections.txt | 3 +++
src/libtracker-miner/tracker-decorator.c | 15 +++++++++++----
src/libtracker-miner/tracker-decorator.h | 5 +++++
src/tracker-extract/tracker-extract-decorator.c | 2 ++
4 files changed, 21 insertions(+), 4 deletions(-)
---
diff --git a/docs/reference/libtracker-miner/libtracker-miner-sections.txt
b/docs/reference/libtracker-miner/libtracker-miner-sections.txt
index a20c295..2dd3b89 100644
--- a/docs/reference/libtracker-miner/libtracker-miner-sections.txt
+++ b/docs/reference/libtracker-miner/libtracker-miner-sections.txt
@@ -279,6 +279,9 @@ tracker_decorator_get_class_names
tracker_decorator_get_data_source
tracker_decorator_get_n_items
tracker_decorator_get_type
+tracker_decorator_info_get_type
+tracker_decorator_info_ref
+tracker_decorator_info_unref
tracker_decorator_info_get_mimetype
tracker_decorator_info_get_sparql
tracker_decorator_info_get_task
diff --git a/src/libtracker-miner/tracker-decorator.c b/src/libtracker-miner/tracker-decorator.c
index b0c6934..7401e8a 100644
--- a/src/libtracker-miner/tracker-decorator.c
+++ b/src/libtracker-miner/tracker-decorator.c
@@ -119,14 +119,14 @@ tracker_decorator_info_new (TrackerSparqlCursor *cursor)
return info;
}
-static TrackerDecoratorInfo *
+TrackerDecoratorInfo *
tracker_decorator_info_ref (TrackerDecoratorInfo *info)
{
g_atomic_int_inc (&info->ref_count);
return info;
}
-static void
+void
tracker_decorator_info_unref (TrackerDecoratorInfo *info)
{
if (!g_atomic_int_dec_and_test (&info->ref_count))
@@ -140,6 +140,11 @@ tracker_decorator_info_unref (TrackerDecoratorInfo *info)
g_slice_free (TrackerDecoratorInfo, info);
}
+G_DEFINE_BOXED_TYPE (TrackerDecoratorInfo,
+ tracker_decorator_info,
+ tracker_decorator_info_ref,
+ tracker_decorator_info_unref)
+
static void
decorator_update_state (TrackerDecorator *decorator,
const gchar *message,
@@ -1115,7 +1120,8 @@ complete_tasks_or_query (TrackerDecorator *decorator)
if (!node->info->task) {
task = g_queue_pop_head (&priv->next_elem_queue);
element_ensure_task (node, decorator);
- g_task_return_pointer (task, node->info,
+ g_task_return_pointer (task,
+ tracker_decorator_info_ref (node->info),
(GDestroyNotify) tracker_decorator_info_unref);
g_object_unref (task);
@@ -1194,7 +1200,8 @@ tracker_decorator_next (TrackerDecorator *decorator,
* tracker_decorator_next() to return the result of the task be it an
* error or not.
*
- * Returns: (transfer full): (boxed): a #TrackerDecoratorInfo on success or #NULL on error.
+ * Returns: (transfer full) (boxed): a #TrackerDecoratorInfo on success or
+ * #NULL on error. Free with tracker_decorator_info_unref().
*
* Since: 0.18
**/
diff --git a/src/libtracker-miner/tracker-decorator.h b/src/libtracker-miner/tracker-decorator.h
index b32d0bd..5317555 100644
--- a/src/libtracker-miner/tracker-decorator.h
+++ b/src/libtracker-miner/tracker-decorator.h
@@ -88,6 +88,11 @@ TrackerDecoratorInfo *
GAsyncResult *result,
GError **error);
+GType tracker_decorator_info_get_type (void) G_GNUC_CONST;
+
+TrackerDecoratorInfo *
+ tracker_decorator_info_ref (TrackerDecoratorInfo *info);
+void tracker_decorator_info_unref (TrackerDecoratorInfo *info);
const gchar * tracker_decorator_info_get_urn (TrackerDecoratorInfo *info);
const gchar * tracker_decorator_info_get_url (TrackerDecoratorInfo *info);
const gchar * tracker_decorator_info_get_mimetype (TrackerDecoratorInfo *info);
diff --git a/src/tracker-extract/tracker-extract-decorator.c b/src/tracker-extract/tracker-extract-decorator.c
index 195535b..ce3fdb0 100644
--- a/src/tracker-extract/tracker-extract-decorator.c
+++ b/src/tracker-extract/tracker-extract-decorator.c
@@ -180,6 +180,8 @@ get_metadata_cb (TrackerExtract *extract,
}
decorator_get_next_file (data->decorator);
+
+ tracker_decorator_info_unref (data->decorator_info);
g_free (data);
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]