]> git.sesse.net Git - vlc/commitdiff
Warn in case of dangerous thread join patterns
authorRémi Denis-Courmont <rdenis@simphalempin.com>
Mon, 30 Jun 2008 16:09:47 +0000 (19:09 +0300)
committerRémi Denis-Courmont <rdenis@simphalempin.com>
Mon, 30 Jun 2008 16:09:47 +0000 (19:09 +0300)
src/misc/objects.c
src/misc/threads.c

index ba58f71bfd3bde7325eb8efab810a8444e1a4fa7..a5801166af64b8f1c37bfdd40e22ef13b343a842 100644 (file)
@@ -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 )
index bd23b3a0ab038a4f21910ec144c180d2fc287b95..9bb111b3f6fa9fe1e0ef3cc1bb73327392239d03 100644 (file)
@@ -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);