[evolution-data-server] Add e_weak_ref_new() and e_weak_ref_free().
- From: Matthew Barnes <mbarnes src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [evolution-data-server] Add e_weak_ref_new() and e_weak_ref_free().
- Date: Sun, 17 Mar 2013 13:42:44 +0000 (UTC)
commit 28dfb63bdb855c37e68b71356aec291770b83dd0
Author: Matthew Barnes <mbarnes redhat com>
Date: Sat Mar 16 10:41:13 2013 -0400
Add e_weak_ref_new() and e_weak_ref_free().
This has come up enough times now that it's worth adding public API.
addressbook/libebook/e-book-client.c | 15 +------
calendar/libecal/e-cal-client.c | 15 +------
.../libedataserver/libedataserver-sections.txt | 2 +
libebackend/e-data-factory.c | 19 +--------
libedataserver/e-data-server-util.c | 40 ++++++++++++++++++++
libedataserver/e-data-server-util.h | 2 +
6 files changed, 50 insertions(+), 43 deletions(-)
---
diff --git a/addressbook/libebook/e-book-client.c b/addressbook/libebook/e-book-client.c
index b0baea5..fc93f85 100644
--- a/addressbook/libebook/e-book-client.c
+++ b/addressbook/libebook/e-book-client.c
@@ -162,13 +162,6 @@ run_in_thread_closure_free (RunInThreadClosure *run_in_thread_closure)
g_slice_free (RunInThreadClosure, run_in_thread_closure);
}
-static void
-weak_ref_free (GWeakRef *weak_ref)
-{
- g_weak_ref_set (weak_ref, NULL);
- g_slice_free (GWeakRef, weak_ref);
-}
-
/*
* Well-known book backend properties:
* @BOOK_BACKEND_PROPERTY_REQUIRED_FIELDS: Retrieves comma-separated list
@@ -717,7 +710,6 @@ book_client_init_in_dbus_thread (GSimpleAsyncResult *simple,
EDBusAddressBookFactory *factory_proxy;
GDBusConnection *connection;
GDBusProxy *proxy;
- GWeakRef *weak_ref;
EClient *client;
ESource *source;
const gchar *uid;
@@ -802,17 +794,14 @@ book_client_init_in_dbus_thread (GSimpleAsyncResult *simple,
g_dbus_proxy_set_default_timeout (proxy, DBUS_PROXY_TIMEOUT_MS);
- /* XXX Wishing for g_weak_ref_new() / g_weak_ref_free() here. */
- weak_ref = g_slice_new0 (GWeakRef);
- g_weak_ref_set (weak_ref, client);
-
priv->name_watcher_id = g_bus_watch_name_on_connection (
connection,
g_dbus_proxy_get_name (proxy),
G_BUS_NAME_WATCHER_FLAGS_NONE,
(GBusNameAppearedCallback) NULL,
(GBusNameVanishedCallback) book_client_name_vanished_cb,
- weak_ref, (GDestroyNotify) weak_ref_free);
+ e_weak_ref_new (client),
+ (GDestroyNotify) e_weak_ref_free);
handler_id = g_signal_connect_object (
proxy, "error",
diff --git a/calendar/libecal/e-cal-client.c b/calendar/libecal/e-cal-client.c
index 1ef0ad5..5f25db0 100644
--- a/calendar/libecal/e-cal-client.c
+++ b/calendar/libecal/e-cal-client.c
@@ -217,13 +217,6 @@ run_in_thread_closure_free (RunInThreadClosure *run_in_thread_closure)
}
static void
-weak_ref_free (GWeakRef *weak_ref)
-{
- g_weak_ref_set (weak_ref, NULL);
- g_slice_free (GWeakRef, weak_ref);
-}
-
-static void
free_zone_cb (gpointer zone)
{
icaltimezone_free (zone, 1);
@@ -994,7 +987,6 @@ cal_client_init_in_dbus_thread (GSimpleAsyncResult *simple,
EDBusCalendarFactory *factory_proxy;
GDBusConnection *connection;
GDBusProxy *proxy;
- GWeakRef *weak_ref;
EClient *client;
ESource *source;
const gchar *uid;
@@ -1096,17 +1088,14 @@ cal_client_init_in_dbus_thread (GSimpleAsyncResult *simple,
g_dbus_proxy_set_default_timeout (proxy, DBUS_PROXY_TIMEOUT_MS);
- /* XXX Wishing for g_weak_ref_new() / g_weak_ref_free() here. */
- weak_ref = g_slice_new0 (GWeakRef);
- g_weak_ref_set (weak_ref, client);
-
priv->name_watcher_id = g_bus_watch_name_on_connection (
connection,
g_dbus_proxy_get_name (proxy),
G_BUS_NAME_WATCHER_FLAGS_NONE,
(GBusNameAppearedCallback) NULL,
(GBusNameVanishedCallback) cal_client_name_vanished_cb,
- weak_ref, (GDestroyNotify) weak_ref_free);
+ e_weak_ref_new (client),
+ (GDestroyNotify) e_weak_ref_free);
handler_id = g_signal_connect_object (
proxy, "error",
diff --git a/docs/reference/libedataserver/libedataserver-sections.txt
b/docs/reference/libedataserver/libedataserver-sections.txt
index f29ae98..71e04c5 100644
--- a/docs/reference/libedataserver/libedataserver-sections.txt
+++ b/docs/reference/libedataserver/libedataserver-sections.txt
@@ -1221,6 +1221,8 @@ e_util_slist_to_strv
e_util_strv_to_slist
e_util_free_nullable_object_slist
e_queue_transfer
+e_weak_ref_new
+e_weak_ref_free
e_file_recursive_delete_sync
e_file_recursive_delete
e_file_recursive_delete_finish
diff --git a/libebackend/e-data-factory.c b/libebackend/e-data-factory.c
index 4f1c92e..00f8e16 100644
--- a/libebackend/e-data-factory.c
+++ b/libebackend/e-data-factory.c
@@ -59,21 +59,6 @@ G_DEFINE_ABSTRACT_TYPE (
EDataFactory, e_data_factory, E_TYPE_DBUS_SERVER)
static GWeakRef *
-data_factory_weak_ref_new (void)
-{
- /* A GWeakRef allocated in zero-filled memory is sufficiently
- * initialized without calling g_weak_ref_init(weak_ref, NULL). */
- return g_slice_new0 (GWeakRef);
-}
-
-static void
-data_factory_weak_ref_free (GWeakRef *weak_ref)
-{
- g_weak_ref_clear (weak_ref);
- g_slice_free (GWeakRef, weak_ref);
-}
-
-static GWeakRef *
data_factory_backends_lookup (EDataFactory *data_factory,
const gchar *uid)
{
@@ -84,7 +69,7 @@ data_factory_backends_lookup (EDataFactory *data_factory,
weak_ref = g_hash_table_lookup (backends, uid);
if (weak_ref == NULL) {
- weak_ref = data_factory_weak_ref_new ();
+ weak_ref = e_weak_ref_new (NULL);
g_hash_table_insert (backends, g_strdup (uid), weak_ref);
}
@@ -207,7 +192,7 @@ e_data_factory_init (EDataFactory *data_factory)
(GHashFunc) g_str_hash,
(GEqualFunc) g_str_equal,
(GDestroyNotify) g_free,
- (GDestroyNotify) data_factory_weak_ref_free);
+ (GDestroyNotify) e_weak_ref_free);
data_factory->priv->backend_factories = g_hash_table_new_full (
(GHashFunc) g_str_hash,
diff --git a/libedataserver/e-data-server-util.c b/libedataserver/e-data-server-util.c
index 03f07d9..48640c3 100644
--- a/libedataserver/e-data-server-util.c
+++ b/libedataserver/e-data-server-util.c
@@ -1068,6 +1068,46 @@ e_queue_transfer (GQueue *src_queue,
src_queue->length = 0;
}
+/**
+ * e_weak_ref_new:
+ * @object: (allow-none): a #GObject or %NULL
+ *
+ * Allocates a new #GWeakRef and calls g_weak_ref_set() with @object.
+ *
+ * Free the returned #GWeakRef with e_weak_ref_free().
+ *
+ * Returns: a new #GWeakRef
+ *
+ * Since: 3.10
+ **/
+GWeakRef *
+e_weak_ref_new (gpointer object)
+{
+ GWeakRef *weak_ref;
+
+ weak_ref = g_slice_new0 (GWeakRef);
+ g_weak_ref_set (weak_ref, object);
+
+ return weak_ref;
+}
+
+/**
+ * e_weak_ref_free:
+ * @weak_ref: a #GWeakRef
+ *
+ * Frees a #GWeakRef created by e_weak_ref_new().
+ *
+ * Since: 3.10
+ **/
+void
+e_weak_ref_free (GWeakRef *weak_ref)
+{
+ g_return_if_fail (weak_ref != NULL);
+
+ g_weak_ref_set (weak_ref, NULL);
+ g_slice_free (GWeakRef, weak_ref);
+}
+
/* Helper for e_file_recursive_delete() */
static void
file_recursive_delete_thread (GSimpleAsyncResult *simple,
diff --git a/libedataserver/e-data-server-util.h b/libedataserver/e-data-server-util.h
index cf8ce2d..dee9bc7 100644
--- a/libedataserver/e-data-server-util.h
+++ b/libedataserver/e-data-server-util.h
@@ -77,6 +77,8 @@ void e_util_free_nullable_object_slist
(GSList *objects);
void e_queue_transfer (GQueue *src_queue,
GQueue *dst_queue);
+GWeakRef * e_weak_ref_new (gpointer object);
+void e_weak_ref_free (GWeakRef *weak_ref);
gboolean e_file_recursive_delete_sync (GFile *file,
GCancellable *cancellable,
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]