From 56040f0bb0de6f862deb28bcd62a1373403a6ce8 Mon Sep 17 00:00:00 2001 From: =?utf8?q?R=C3=A9mi=20Denis-Courmont?= Date: Sun, 19 Aug 2007 17:15:11 +0000 Subject: [PATCH] Hide b_attached. Also remove the volatile qualifier. No, volatile does not magically solve threading bugs, sorry I too have tried this "easy" path, it does REALLY NOT WORK. volatile only solves signals concurrency, not threads concurrency. --- include/vlc_common.h | 1 - src/libvlc-common.c | 2 -- src/libvlc.h | 3 +++ src/misc/objects.c | 27 +++++++++++++++++---------- 4 files changed, 20 insertions(+), 13 deletions(-) diff --git a/include/vlc_common.h b/include/vlc_common.h index 502bd08b85..7a27f55766 100644 --- a/include/vlc_common.h +++ b/include/vlc_common.h @@ -555,7 +555,6 @@ typedef struct vlc_object_internals_t vlc_object_internals_t; volatile vlc_bool_t b_error; /**< set by the object */ \ volatile vlc_bool_t b_die; /**< set by the outside */ \ volatile vlc_bool_t b_dead; /**< set by the object */ \ - volatile vlc_bool_t b_attached; /**< set by the object */ \ vlc_bool_t b_force; /**< set by the outside (eg. module_Need()) */ \ \ /* Stuff related to the libvlc structure */ \ diff --git a/src/libvlc-common.c b/src/libvlc-common.c index 601fe5ad5d..8535c3e45e 100644 --- a/src/libvlc-common.c +++ b/src/libvlc-common.c @@ -218,8 +218,6 @@ libvlc_int_t * libvlc_InternalCreate( void ) vlc_mutex_init( p_libvlc, &p_libvlc->quicktime_lock ); vlc_thread_set_priority( p_libvlc, VLC_THREAD_PRIORITY_LOW ); #endif - /* Fake attachment */ - p_libvlc->b_attached = VLC_TRUE; /* Store data for the non-reentrant API */ p_static_vlc = p_libvlc; diff --git a/src/libvlc.h b/src/libvlc.h index 9b2e991488..f6e14e0ccb 100644 --- a/src/libvlc.h +++ b/src/libvlc.h @@ -112,6 +112,9 @@ struct vlc_object_internals_t /* Thread properties, if any */ vlc_thread_t thread_id; vlc_bool_t b_thread; + + /* Objects management */ + vlc_bool_t b_attached; }; diff --git a/src/misc/objects.c b/src/misc/objects.c index df2ef72f52..8a3f6ad9bd 100644 --- a/src/misc/objects.c +++ b/src/misc/objects.c @@ -120,7 +120,7 @@ vlc_object_t *vlc_custom_create( vlc_object_t *p_this, size_t i_size, p_new->b_die = VLC_FALSE; p_new->b_error = VLC_FALSE; p_new->b_dead = VLC_FALSE; - p_new->b_attached = VLC_FALSE; + p_priv->b_attached = VLC_FALSE; p_new->b_force = VLC_FALSE; p_new->psz_header = NULL; @@ -153,13 +153,20 @@ vlc_object_t *vlc_custom_create( vlc_object_t *p_this, size_t i_size, p_libvlc_global->i_objects = 1; p_libvlc_global->pp_objects = malloc( sizeof(vlc_object_t *) ); p_libvlc_global->pp_objects[0] = p_new; - p_new->b_attached = VLC_TRUE; + p_priv->b_attached = VLC_TRUE; } else { libvlc_global_data_t *p_libvlc_global = vlc_global(); - p_new->p_libvlc = ( i_type == VLC_OBJECT_LIBVLC ) ? (libvlc_int_t*)p_new - : p_this->p_libvlc; + if( i_type == VLC_OBJECT_LIBVLC ) + { + p_new->p_libvlc = (libvlc_int_t*)p_new; + p_priv->b_attached = VLC_TRUE; + } + else + { + p_new->p_libvlc = p_this->p_libvlc; + } vlc_mutex_lock( &structure_lock ); @@ -675,7 +682,7 @@ void __vlc_object_attach( vlc_object_t *p_this, vlc_object_t *p_parent ) p_parent->i_children, p_this ); /* Climb up the tree to see whether we are connected with the root */ - if( p_parent->b_attached ) + if( p_parent->p_internals->b_attached ) { SetAttachment( p_this, VLC_TRUE ); } @@ -702,7 +709,7 @@ void __vlc_object_detach( vlc_object_t *p_this ) } /* Climb up the tree to see whether we are connected with the root */ - if( p_this->p_parent->b_attached ) + if( p_this->p_parent->p_internals->b_attached ) { SetAttachment( p_this, VLC_FALSE ); } @@ -737,7 +744,7 @@ vlc_list_t * __vlc_list_find( vlc_object_t *p_this, int i_type, int i_mode ) for( ; pp_current < pp_end ; pp_current++ ) { - if( (*pp_current)->b_attached + if( (*pp_current)->p_internals->b_attached && (*pp_current)->i_object_type == i_type ) { i_count++; @@ -749,7 +756,7 @@ vlc_list_t * __vlc_list_find( vlc_object_t *p_this, int i_type, int i_mode ) for( ; pp_current < pp_end ; pp_current++ ) { - if( (*pp_current)->b_attached + if( (*pp_current)->p_internals->b_attached && (*pp_current)->i_object_type == i_type ) { ListReplace( p_list, *pp_current, i_index ); @@ -809,7 +816,7 @@ static int DumpCommand( vlc_object_t *p_this, char const *psz_cmd, for( ; pp_current < pp_end ; pp_current++ ) { - if( (*pp_current)->b_attached ) + if( (*pp_current)->p_internals->b_attached ) { PrintObject( *pp_current, "" ); } @@ -1179,7 +1186,7 @@ static void SetAttachment( vlc_object_t *p_this, vlc_bool_t b_attached ) SetAttachment( p_this->pp_children[i_index], b_attached ); } - p_this->b_attached = b_attached; + p_this->p_internals->b_attached = b_attached; } static void PrintObject( vlc_object_t *p_this, const char *psz_prefix ) -- 2.39.2