Don't use the thread_exit vfunc

Instead, just have the backends implement an internal function
named g_system_thread_exit.
This commit is contained in:
Matthias Clasen 2011-09-18 23:18:17 -04:00 committed by Ryan Lortie
parent cc7631cd19
commit a10306060c
4 changed files with 14 additions and 13 deletions

View File

@ -651,8 +651,8 @@ g_thread_join_posix_impl (gpointer thread)
posix_check_cmd (pthread_join (*(pthread_t*)thread, &ignore)); posix_check_cmd (pthread_join (*(pthread_t*)thread, &ignore));
} }
static void void
g_thread_exit_posix_impl (void) g_system_thread_exit (void)
{ {
pthread_exit (NULL); pthread_exit (NULL);
} }
@ -708,7 +708,7 @@ GThreadFunctions g_thread_functions_for_glib_use =
g_thread_create_posix_impl, g_thread_create_posix_impl,
g_thread_yield, g_thread_yield,
g_thread_join_posix_impl, g_thread_join_posix_impl,
g_thread_exit_posix_impl, g_system_thread_exit,
g_thread_set_priority_posix_impl, g_thread_set_priority_posix_impl,
g_thread_self_posix_impl, g_thread_self_posix_impl,
g_system_thread_equal, g_system_thread_equal,

View File

@ -371,8 +371,8 @@ g_thread_self_win32_impl (gpointer thread)
*(GThreadData **)thread = self; *(GThreadData **)thread = self;
} }
static void void
g_thread_exit_win32_impl (void) g_system_thread_exit (void)
{ {
GThreadData *self = TlsGetValue (g_thread_self_tls); GThreadData *self = TlsGetValue (g_thread_self_tls);
gboolean dtors_called; gboolean dtors_called;
@ -431,7 +431,7 @@ g_thread_proxy (gpointer data)
self->func (self->data); self->func (self->data);
g_thread_exit_win32_impl (); g_system_thread_exit ();
g_assert_not_reached (); g_assert_not_reached ();
@ -807,10 +807,10 @@ GThreadFunctions g_thread_functions_for_glib_use =
g_thread_create_win32_impl, /* thread */ g_thread_create_win32_impl, /* thread */
g_thread_yield, g_thread_yield,
g_thread_join_win32_impl, g_thread_join_win32_impl,
g_thread_exit_win32_impl, g_system_thread_exit,
g_thread_set_priority_win32_impl, g_thread_set_priority_win32_impl,
g_thread_self_win32_impl, g_thread_self_win32_impl,
NULL /* no equal function necessary */ g_system_thread_equal
}; };
void void

View File

@ -1817,11 +1817,9 @@ g_thread_create_full (GThreadFunc func,
* of g_thread_join(). If the current thread is not joinable, @retval * of g_thread_join(). If the current thread is not joinable, @retval
* is ignored. Calling * is ignored. Calling
* *
* <informalexample> * |[
* <programlisting>
* g_thread_exit (retval); * g_thread_exit (retval);
* </programlisting> * ]|
* </informalexample>
* *
* is equivalent to returning @retval from the function @func, as given * is equivalent to returning @retval from the function @func, as given
* to g_thread_create(). * to g_thread_create().
@ -1835,7 +1833,8 @@ g_thread_exit (gpointer retval)
{ {
GRealThread* real = (GRealThread*) g_thread_self (); GRealThread* real = (GRealThread*) g_thread_self ();
real->retval = retval; real->retval = retval;
G_THREAD_CF (thread_exit, (void)0, ());
g_system_thread_exit ();
} }
/** /**

View File

@ -37,6 +37,8 @@ G_BEGIN_DECLS
G_GNUC_INTERNAL gboolean g_system_thread_equal (gpointer thread1, G_GNUC_INTERNAL gboolean g_system_thread_equal (gpointer thread1,
gpointer thread2); gpointer thread2);
G_GNUC_INTERNAL void g_system_thread_exit (void);
/* Is called from gthread/gthread-impl.c */ /* Is called from gthread/gthread-impl.c */
void g_thread_init_glib (void); void g_thread_init_glib (void);