[vlc-devel] commit: vlc_thread_join: cannot join current thread ( Rémi Denis-Courmont )
git version control
git at videolan.org
Thu Aug 28 23:03:17 CEST 2008
vlc | branch: master | Rémi Denis-Courmont <rdenis at simphalempin.com> | Thu Aug 28 23:58:00 2008 +0300| [da9b4d4df337858b97f3841a50f7a8515d7d8f51] | committer: Rémi Denis-Courmont
vlc_thread_join: cannot join current thread
vlc_join will cause the assertion failure with pthread.
On -unchanged- Windows, it (supposedly) deadlocks as it used to.
> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=da9b4d4df337858b97f3841a50f7a8515d7d8f51
---
include/vlc_threads.h | 4 ++--
src/misc/threads.c | 29 ++++-------------------------
2 files changed, 6 insertions(+), 27 deletions(-)
diff --git a/include/vlc_threads.h b/include/vlc_threads.h
index 8f60d75..fa0fc7c 100644
--- a/include/vlc_threads.h
+++ b/include/vlc_threads.h
@@ -175,7 +175,7 @@ VLC_EXPORT( int, vlc_threadvar_create, (vlc_threadvar_t * , void (*) (void *) )
VLC_EXPORT( void, vlc_threadvar_delete, (vlc_threadvar_t *) );
VLC_EXPORT( int, __vlc_thread_create, ( vlc_object_t *, const char *, int, const char *, void * ( * ) ( vlc_object_t * ), int, bool ) );
VLC_EXPORT( int, __vlc_thread_set_priority, ( vlc_object_t *, const char *, int, int ) );
-VLC_EXPORT( void, __vlc_thread_join, ( vlc_object_t *, const char *, int ) );
+VLC_EXPORT( void, __vlc_thread_join, ( vlc_object_t * ) );
VLC_EXPORT( int, vlc_clone, (vlc_thread_t *, void * (*) (void *), void *, int) );
VLC_EXPORT( void, vlc_cancel, (vlc_thread_t) );
@@ -727,6 +727,6 @@ static inline void barrier (void)
* vlc_thread_join: wait until a thread exits
*****************************************************************************/
#define vlc_thread_join( P_THIS ) \
- __vlc_thread_join( VLC_OBJECT(P_THIS), __FILE__, __LINE__ )
+ __vlc_thread_join( VLC_OBJECT(P_THIS) )
#endif /* !_VLC_THREADS_H */
diff --git a/src/misc/threads.c b/src/misc/threads.c
index 78efab1..4480e41 100644
--- a/src/misc/threads.c
+++ b/src/misc/threads.c
@@ -794,21 +794,12 @@ int __vlc_thread_set_priority( vlc_object_t *p_this, const char * psz_file,
/*****************************************************************************
* vlc_thread_join: wait until a thread exits, inner version
*****************************************************************************/
-void __vlc_thread_join( vlc_object_t *p_this, const char * psz_file, int i_line )
+void __vlc_thread_join( vlc_object_t *p_this )
{
vlc_object_internals_t *p_priv = vlc_internals( p_this );
- int i_ret = 0;
#if defined( LIBVLC_USE_PTHREAD )
- /* 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 = vlc_join (p_priv->thread_id, NULL);
+ vlc_join (p_priv->thread_id, NULL);
#elif defined( UNDER_CE ) || defined( WIN32 )
HANDLE hThread;
@@ -824,8 +815,7 @@ void __vlc_thread_join( vlc_object_t *p_this, const char * psz_file, int i_line
DUPLICATE_SAME_ACCESS) )
{
p_priv->b_thread = false;
- i_ret = GetLastError();
- goto error;
+ return; /* We have a problem! */
}
vlc_join( p_priv->thread_id, NULL );
@@ -855,23 +845,12 @@ void __vlc_thread_join( vlc_object_t *p_this, const char * psz_file, int i_line
(double)((user_time%(60*1000000))/1000000.0) );
}
CloseHandle( hThread );
-error:
#else
- i_ret = vlc_join( p_priv->thread_id, NULL );
+ vlc_join( p_priv->thread_id, NULL );
#endif
- if( i_ret )
- {
- errno = i_ret;
- msg_Err( p_this, "thread_join(%lu) failed at %s:%d (%m)",
- (unsigned long)p_priv->thread_id, psz_file, i_line );
- }
- else
- msg_Dbg( p_this, "thread %lu joined (%s:%d)",
- (unsigned long)p_priv->thread_id, psz_file, i_line );
-
p_priv->b_thread = false;
}
More information about the vlc-devel
mailing list