mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2025-01-13 07:56:17 +01:00
thread: delegate allocation of GThread to backends
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.
This commit is contained in:
parent
75ea14e885
commit
e064c9bfec
@ -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,
|
||||
|
@ -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)
|
||||
{
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user