mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-30 05:31:15 +00:00
Fix bug when joining threads.
Original commit message from CVS: Fix bug when joining threads.
This commit is contained in:
parent
c3ebe159bd
commit
0f2a63a169
1 changed files with 9 additions and 4 deletions
|
@ -111,7 +111,7 @@ do_cothread_context_destroy (cothread_context *context)
|
||||||
g_assert (g_thread_self() != context->main->thread);
|
g_assert (g_thread_self() != context->main->thread);
|
||||||
|
|
||||||
while (context->cothreads) {
|
while (context->cothreads) {
|
||||||
do_cothread_destroy (context->cothreads->data);
|
do_cothread_destroy ((cothread *) context->cothreads->data);
|
||||||
}
|
}
|
||||||
|
|
||||||
g_free (context);
|
g_free (context);
|
||||||
|
@ -122,6 +122,7 @@ die (cothread *to_die) {
|
||||||
g_slist_remove (to_die->context->cothreads, to_die);
|
g_slist_remove (to_die->context->cothreads, to_die);
|
||||||
g_free (to_die);
|
g_free (to_die);
|
||||||
g_thread_exit (to_die);
|
g_thread_exit (to_die);
|
||||||
|
/* don't unlock the mutex here, the thread waiting for us to die is gonna take it */
|
||||||
}
|
}
|
||||||
static gpointer
|
static gpointer
|
||||||
run_new_thread (gpointer data)
|
run_new_thread (gpointer data)
|
||||||
|
@ -195,14 +196,18 @@ do_cothread_setfunc (cothread *thread, cothread_context *context,
|
||||||
static void
|
static void
|
||||||
do_cothread_destroy (cothread *thread)
|
do_cothread_destroy (cothread *thread)
|
||||||
{
|
{
|
||||||
|
GThread *join;
|
||||||
|
cothread_context *context;
|
||||||
g_return_if_fail (thread != thread->context->main);
|
g_return_if_fail (thread != thread->context->main);
|
||||||
|
g_return_if_fail (thread != thread->context->current);
|
||||||
|
|
||||||
thread->die = TRUE;
|
thread->die = TRUE;
|
||||||
|
join = thread->thread;
|
||||||
|
context = thread->context;
|
||||||
g_cond_signal (thread->cond);
|
g_cond_signal (thread->cond);
|
||||||
g_mutex_unlock (thread->context->mutex);
|
g_mutex_unlock (thread->context->mutex);
|
||||||
if (thread != g_thread_join (thread->thread)) {
|
g_thread_join (join);
|
||||||
g_warning ("error destroying thread %p", thread);
|
/* the mutex was locked by the thread that we joined, no need to lock again */
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#define do_cothread_lock(cothread) /* FIXME */
|
#define do_cothread_lock(cothread) /* FIXME */
|
||||||
|
|
Loading…
Reference in a new issue