mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2025-03-14 19:55:12 +01:00
thread: drop thread setup function hackery
Use a custom proxy function for the deprecated case instead. Now GRealThread has strictly zero members dedicated to deprecated functionality.
This commit is contained in:
parent
2da83bbd36
commit
8cff9c57b1
@ -291,6 +291,17 @@ g_enumerable_thread_add (GRealThread *thread)
|
|||||||
|
|
||||||
g_private_set (&enumerable_thread_private, thread);
|
g_private_set (&enumerable_thread_private, thread);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static gpointer
|
||||||
|
g_deprecated_thread_proxy (gpointer data)
|
||||||
|
{
|
||||||
|
GRealThread *real = data;
|
||||||
|
|
||||||
|
g_enumerable_thread_add (real);
|
||||||
|
|
||||||
|
return g_thread_proxy (data);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* g_thread_create:
|
* g_thread_create:
|
||||||
* @func: a function to execute in the new thread
|
* @func: a function to execute in the new thread
|
||||||
@ -320,7 +331,7 @@ g_thread_create (GThreadFunc func,
|
|||||||
gboolean joinable,
|
gboolean joinable,
|
||||||
GError **error)
|
GError **error)
|
||||||
{
|
{
|
||||||
return g_thread_new_internal (NULL, func, data, joinable, 0, g_enumerable_thread_add, error);
|
return g_thread_new_internal (NULL, g_deprecated_thread_proxy, func, data, joinable, 0, error);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -348,7 +359,7 @@ g_thread_create_full (GThreadFunc func,
|
|||||||
GThreadPriority priority,
|
GThreadPriority priority,
|
||||||
GError **error)
|
GError **error)
|
||||||
{
|
{
|
||||||
return g_thread_new_internal (NULL, func, data, joinable, stack_size, g_enumerable_thread_add, error);
|
return g_thread_new_internal (NULL, g_deprecated_thread_proxy, func, data, joinable, stack_size, error);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -681,8 +681,8 @@ g_thread_cleanup (gpointer data)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static gpointer
|
gpointer
|
||||||
g_thread_create_proxy (gpointer data)
|
g_thread_proxy (gpointer data)
|
||||||
{
|
{
|
||||||
GRealThread* thread = data;
|
GRealThread* thread = data;
|
||||||
|
|
||||||
@ -694,9 +694,6 @@ g_thread_create_proxy (gpointer data)
|
|||||||
/* This has to happen before G_LOCK, as that might call g_thread_self */
|
/* This has to happen before G_LOCK, as that might call g_thread_self */
|
||||||
g_private_set (&g_thread_specific_private, data);
|
g_private_set (&g_thread_specific_private, data);
|
||||||
|
|
||||||
if (thread->setup_func)
|
|
||||||
thread->setup_func (thread);
|
|
||||||
|
|
||||||
/* The lock makes sure that thread->system_thread is written,
|
/* The lock makes sure that thread->system_thread is written,
|
||||||
* before thread->thread.func is called. See g_thread_new_internal().
|
* before thread->thread.func is called. See g_thread_new_internal().
|
||||||
*/
|
*/
|
||||||
@ -743,7 +740,7 @@ g_thread_new (const gchar *name,
|
|||||||
gboolean joinable,
|
gboolean joinable,
|
||||||
GError **error)
|
GError **error)
|
||||||
{
|
{
|
||||||
return g_thread_new_internal (name, func, data, joinable, 0, FALSE, error);
|
return g_thread_new_internal (name, g_thread_proxy, func, data, joinable, 0, error);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -790,16 +787,16 @@ g_thread_new_full (const gchar *name,
|
|||||||
gsize stack_size,
|
gsize stack_size,
|
||||||
GError **error)
|
GError **error)
|
||||||
{
|
{
|
||||||
return g_thread_new_internal (name, func, data, joinable, stack_size, FALSE, error);
|
return g_thread_new_internal (name, g_thread_proxy, func, data, joinable, stack_size, error);
|
||||||
}
|
}
|
||||||
|
|
||||||
GThread *
|
GThread *
|
||||||
g_thread_new_internal (const gchar *name,
|
g_thread_new_internal (const gchar *name,
|
||||||
|
GThreadFunc proxy,
|
||||||
GThreadFunc func,
|
GThreadFunc func,
|
||||||
gpointer data,
|
gpointer data,
|
||||||
gboolean joinable,
|
gboolean joinable,
|
||||||
gsize stack_size,
|
gsize stack_size,
|
||||||
GThreadSetup setup_func,
|
|
||||||
GError **error)
|
GError **error)
|
||||||
{
|
{
|
||||||
GRealThread *result;
|
GRealThread *result;
|
||||||
@ -812,11 +809,9 @@ g_thread_new_internal (const gchar *name,
|
|||||||
result->thread.joinable = joinable;
|
result->thread.joinable = joinable;
|
||||||
result->thread.func = func;
|
result->thread.func = func;
|
||||||
result->thread.data = data;
|
result->thread.data = data;
|
||||||
result->setup_func = setup_func;
|
|
||||||
result->name = name;
|
result->name = name;
|
||||||
G_LOCK (g_thread_new);
|
G_LOCK (g_thread_new);
|
||||||
g_system_thread_create (g_thread_create_proxy, result,
|
g_system_thread_create (proxy, result, stack_size, joinable,
|
||||||
stack_size, joinable,
|
|
||||||
&result->system_thread, &local_error);
|
&result->system_thread, &local_error);
|
||||||
G_UNLOCK (g_thread_new);
|
G_UNLOCK (g_thread_new);
|
||||||
|
|
||||||
|
@ -30,7 +30,6 @@
|
|||||||
G_BEGIN_DECLS
|
G_BEGIN_DECLS
|
||||||
|
|
||||||
typedef struct _GRealThread GRealThread;
|
typedef struct _GRealThread GRealThread;
|
||||||
typedef void (*GThreadSetup) (GRealThread *thread);
|
|
||||||
|
|
||||||
G_GNUC_INTERNAL void g_system_thread_join (gpointer thread);
|
G_GNUC_INTERNAL void g_system_thread_join (gpointer thread);
|
||||||
G_GNUC_INTERNAL void g_system_thread_create (GThreadFunc func,
|
G_GNUC_INTERNAL void g_system_thread_create (GThreadFunc func,
|
||||||
@ -44,18 +43,20 @@ G_GNUC_INTERNAL void g_system_thread_exit (void);
|
|||||||
G_GNUC_INTERNAL void g_system_thread_set_name (const gchar *name);
|
G_GNUC_INTERNAL void g_system_thread_set_name (const gchar *name);
|
||||||
|
|
||||||
G_GNUC_INTERNAL GThread *g_thread_new_internal (const gchar *name,
|
G_GNUC_INTERNAL GThread *g_thread_new_internal (const gchar *name,
|
||||||
|
GThreadFunc proxy,
|
||||||
GThreadFunc func,
|
GThreadFunc func,
|
||||||
gpointer data,
|
gpointer data,
|
||||||
gboolean joinable,
|
gboolean joinable,
|
||||||
gsize stack_size,
|
gsize stack_size,
|
||||||
GThreadSetup setup_func,
|
|
||||||
GError **error);
|
GError **error);
|
||||||
|
|
||||||
|
G_GNUC_INTERNAL
|
||||||
|
gpointer g_thread_proxy (gpointer thread);
|
||||||
|
|
||||||
struct _GRealThread
|
struct _GRealThread
|
||||||
{
|
{
|
||||||
GThread thread;
|
GThread thread;
|
||||||
const gchar *name;
|
const gchar *name;
|
||||||
GThreadSetup setup_func;
|
|
||||||
gpointer retval;
|
gpointer retval;
|
||||||
GSystemThread system_thread;
|
GSystemThread system_thread;
|
||||||
};
|
};
|
||||||
|
Loading…
x
Reference in New Issue
Block a user