From a417ec82d9a793a2681be75be9be719e4972cfce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi=20Denis-Courmont?= <rdenis@simphalempin.com> Date: Mon, 30 Jun 2008 19:09:47 +0300 Subject: [PATCH] Warn in case of dangerous thread join patterns --- src/misc/objects.c | 5 +++++ src/misc/threads.c | 3 +++ 2 files changed, 8 insertions(+) diff --git a/src/misc/objects.c b/src/misc/objects.c index ba58f71bfd..a5801166af 100644 --- a/src/misc/objects.c +++ b/src/misc/objects.c @@ -301,7 +301,12 @@ static void vlc_object_destroy( vlc_object_t *p_this ) /* If we are running on a thread, wait until it ends */ if( p_priv->b_thread ) + { + msg_Warn (p_this->p_libvlc, /* do NOT use a dead object for logging! */ + "object %d destroyed while thread alive (VLC might crash)", + p_this->i_object_id); vlc_thread_join( p_this ); + } /* Call the custom "subclass" destructor */ if( p_priv->pf_destructor ) diff --git a/src/misc/threads.c b/src/misc/threads.c index bd23b3a0ab..9bb111b3f6 100644 --- a/src/misc/threads.c +++ b/src/misc/threads.c @@ -695,7 +695,10 @@ void __vlc_thread_join( vlc_object_t *p_this, const char * psz_file, int i_line /* Make sure we do return if we are calling vlc_thread_join() * from the joined thread */ if (pthread_equal (pthread_self (), p_priv->thread_id)) + { + msg_Warn (p_this, "joining the active thread (VLC might crash)"); i_ret = pthread_detach (p_priv->thread_id); + } else i_ret = pthread_join (p_priv->thread_id, NULL); -- 2.25.4