[glib] GStaticPrivate: implement via GPrivate
- From: Ryan Lortie <ryanl src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [glib] GStaticPrivate: implement via GPrivate
- Date: Wed, 12 Oct 2011 04:18:00 +0000 (UTC)
commit 9bb5a55bda83c58ddbd0381693d98c7a2f701d01
Author: Ryan Lortie <desrt desrt ca>
Date: Tue Oct 11 23:13:22 2011 -0400
GStaticPrivate: implement via GPrivate
Thanks to the modifications in 3d4846d92309d001697c2827660fa41b5c63dbc4,
GStaticPrivate is not so directly tied in with GThread anymore. It is
now a simple matter to cut it out completely by using a GPrivate to
store the GArray instead of storing it in the GThread.
glib/deprecated/gthread-deprecated.c | 49 +++++++++++++++------------------
glib/gthread.c | 4 ---
glib/gthreadprivate.h | 2 -
3 files changed, 22 insertions(+), 33 deletions(-)
---
diff --git a/glib/deprecated/gthread-deprecated.c b/glib/deprecated/gthread-deprecated.c
index 95e6d8e..209d776 100644
--- a/glib/deprecated/gthread-deprecated.c
+++ b/glib/deprecated/gthread-deprecated.c
@@ -1221,6 +1221,24 @@ struct _GStaticPrivateNode
GStaticPrivate *owner;
};
+void
+g_static_private_cleanup (gpointer data)
+{
+ GArray *array = data;
+ guint i;
+
+ for (i = 0; i < array->len; i++ )
+ {
+ GStaticPrivateNode *node = &g_array_index (array, GStaticPrivateNode, i);
+ if (node->destroy)
+ node->destroy (node->data);
+ }
+
+ g_array_free (array, TRUE);
+}
+
+GPrivate static_private_private = G_PRIVATE_INIT (g_static_private_cleanup);
+
/**
* GStaticPrivate:
*
@@ -1292,10 +1310,10 @@ g_static_private_init (GStaticPrivate *private_key)
gpointer
g_static_private_get (GStaticPrivate *private_key)
{
- GRealThread *self = (GRealThread*) g_thread_self ();
GArray *array;
gpointer ret = NULL;
- array = self->private_data;
+
+ array = g_private_get (&static_private_private);
if (array && private_key->index != 0 && private_key->index <= array->len)
{
@@ -1347,7 +1365,6 @@ g_static_private_set (GStaticPrivate *private_key,
gpointer data,
GDestroyNotify notify)
{
- GRealThread *self = (GRealThread*) g_thread_self ();
GArray *array;
static guint next_index = 0;
GStaticPrivateNode *node;
@@ -1371,11 +1388,11 @@ g_static_private_set (GStaticPrivate *private_key,
G_UNLOCK (g_thread);
}
- array = self->private_data;
+ array = g_private_get (&static_private_private);
if (!array)
{
array = g_array_new (FALSE, TRUE, sizeof (GStaticPrivateNode));
- self->private_data = array;
+ g_private_set (&static_private_private, array);
}
if (private_key->index > array->len)
g_array_set_size (array, private_key->index);
@@ -1421,28 +1438,6 @@ g_static_private_free (GStaticPrivate *private_key)
G_UNLOCK (g_thread);
}
-void
-g_static_private_cleanup (GRealThread *thread)
-{
- GArray *array;
-
- array = thread->private_data;
- thread->private_data = NULL;
-
- if (array)
- {
- guint i;
-
- for (i = 0; i < array->len; i++ )
- {
- GStaticPrivateNode *node = &g_array_index (array, GStaticPrivateNode, i);
- if (node->destroy)
- node->destroy (node->data);
- }
- g_array_free (array, TRUE);
- }
-}
-
/* GMutex {{{1 ------------------------------------------------------ */
/**
diff --git a/glib/gthread.c b/glib/gthread.c
index dcb0add..57c1f02 100644
--- a/glib/gthread.c
+++ b/glib/gthread.c
@@ -673,8 +673,6 @@ g_thread_cleanup (gpointer data)
{
GRealThread* thread = data;
- g_static_private_cleanup (thread);
-
/* We only free the thread structure if it isn't joinable.
* If it is, the structure is freed in g_thread_join()
*/
@@ -818,7 +816,6 @@ g_thread_new_internal (const gchar *name,
result->thread.joinable = joinable;
result->thread.func = func;
result->thread.data = data;
- result->private_data = NULL;
result->enumerable = enumerable;
result->name = name;
G_LOCK (g_thread_new);
@@ -941,7 +938,6 @@ g_thread_self (void)
thread->thread.joinable = FALSE; /* This is a safe guess */
thread->thread.func = NULL;
thread->thread.data = NULL;
- thread->private_data = NULL;
thread->enumerable = FALSE;
g_system_thread_self (&thread->system_thread);
diff --git a/glib/gthreadprivate.h b/glib/gthreadprivate.h
index 49eea35..1dafdac 100644
--- a/glib/gthreadprivate.h
+++ b/glib/gthreadprivate.h
@@ -64,7 +64,6 @@ typedef struct _GRealThread GRealThread;
struct _GRealThread
{
GThread thread;
- GArray *private_data;
GRealThread *next;
const gchar *name;
gboolean enumerable;
@@ -75,7 +74,6 @@ struct _GRealThread
G_GNUC_INTERNAL extern GSystemThread zero_thread;
G_GNUC_INTERNAL extern GMutex g_once_mutex;
-G_GNUC_INTERNAL void g_static_private_cleanup (GRealThread *thread);
G_GNUC_INTERNAL void g_enumerable_thread_add (GRealThread *thread);
G_GNUC_INTERNAL void g_enumerable_thread_remove (GRealThread *thread);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]