thread: delegate allocation of GThread to backends
authorRyan Lortie <desrt@desrt.ca>
Thu, 13 Oct 2011 02:03:14 +0000 (22:03 -0400)
committerRyan Lortie <desrt@desrt.ca>
Thu, 13 Oct 2011 02:04:39 +0000 (22:04 -0400)
Add g_system_thread_new() and g_system_thread_free(), implemented with
GSlice.  Use those instead of g_new() and g_free().

Presently, the backends are both doing the same thing.  This will change
soon.

glib/gthread-posix.c
glib/gthread-win32.c
glib/gthread.c
glib/gthreadprivate.h

index 4e103e8..ebeb966 100644 (file)
@@ -1069,6 +1069,18 @@ g_private_replace (GPrivate *key,
 
 #define posix_check_cmd(cmd) posix_check_err (cmd, #cmd)
 
+GRealThread *
+g_system_thread_new (void)
+{
+  return g_slice_new0 (GRealThread);
+}
+
+void
+g_system_thread_free (GRealThread *thread)
+{
+  g_slice_free (GRealThread, thread);
+}
+
 void
 g_system_thread_create (GThreadFunc       thread_func,
                         gpointer          arg,
index fb6ad7c..8d19739 100644 (file)
@@ -463,6 +463,18 @@ struct _GThreadData
   gboolean joinable;
 };
 
+GRealThread *
+g_system_thread_new (void)
+{
+  return g_slice_new0 (GRealThread);
+}
+
+void
+g_system_thread_free (GRealThread *thread)
+{
+  g_slice_free (GRealThread, thread);
+}
+
 void
 g_system_thread_exit (void)
 {
index 18db89f..a9fe4b6 100644 (file)
@@ -677,7 +677,7 @@ g_thread_cleanup (gpointer data)
        * If it is, the structure is freed in g_thread_join()
        */
       if (!thread->thread.joinable)
-        g_free (thread);
+        g_system_thread_free (thread);
     }
 }
 
@@ -804,7 +804,7 @@ g_thread_new_internal (const gchar   *name,
 
   g_return_val_if_fail (func != NULL, NULL);
 
-  result = g_new0 (GRealThread, 1);
+  result = g_system_thread_new ();
 
   result->thread.joinable = joinable;
   result->thread.func = func;
@@ -818,7 +818,7 @@ g_thread_new_internal (const gchar   *name,
   if (local_error)
     {
       g_propagate_error (error, local_error);
-      g_free (result);
+      g_system_thread_free (result);
       return NULL;
     }
 
@@ -894,7 +894,7 @@ g_thread_join (GThread *thread)
    * thread end. We free the memory here. This will leave a loose end,
    * if a joinable thread is not joined.
    */
-  g_free (thread);
+  g_system_thread_free (real);
 
   return retval;
 }
index 5ade4a3..6109060 100644 (file)
@@ -32,12 +32,17 @@ G_BEGIN_DECLS
 typedef struct _GRealThread GRealThread;
 
 G_GNUC_INTERNAL void     g_system_thread_join  (gpointer thread);
+
+G_GNUC_INTERNAL
+GRealThread *   g_system_thread_new             (void);
 G_GNUC_INTERNAL void     g_system_thread_create (GThreadFunc       func,
                                                  gpointer          data,
                                                  gulong            stack_size,
                                                  gboolean          joinable,
                                                  gpointer          thread,
                                                  GError          **error);
+G_GNUC_INTERNAL
+void            g_system_thread_free            (GRealThread  *thread);
 
 G_GNUC_INTERNAL void     g_system_thread_exit  (void);
 G_GNUC_INTERNAL void     g_system_thread_set_name (const gchar *name);