}
if( p_this == NULL )
- {
- /* Only the global root object is created out of the blue */
- p_new->p_libvlc = NULL;
-
- object_counter = 0; /* reset */
- p_this = p_priv->next = p_priv->prev = p_new;
- vlc_mutex_init( &structure_lock );
- }
- else
{
if( i_type == VLC_OBJECT_LIBVLC )
p_new->p_libvlc = (libvlc_int_t*)p_new;
else
- p_new->p_libvlc = p_this->p_libvlc;
+ {
+ p_new->p_libvlc = NULL;
+ vlc_mutex_init( &structure_lock );
+ }
+
+ p_this = p_priv->next = p_priv->prev = p_new;
}
+ else
+ p_new->p_libvlc = p_this->p_libvlc;
vlc_spin_init( &p_priv->ref_spin );
p_priv->i_refcount = 1;
free( p_this->psz_header );
- if( p_this->p_libvlc == NULL )
- {
#ifndef NDEBUG
- libvlc_global_data_t *p_global = (libvlc_global_data_t *)p_this;
-
- assert( p_global == vlc_global() );
+ if( VLC_OBJECT(p_this->p_libvlc) == p_this )
+ {
/* Test for leaks */
- if (p_priv->next != p_this)
+ vlc_object_t *leaked = p_priv->next;
+ while( leaked != p_this )
{
- vlc_object_t *leaked = p_priv->next, *first = leaked;
- do
- {
- /* We are leaking this object */
- fprintf( stderr,
- "ERROR: leaking object (id:%i, type:%s, name:%s)\n",
- leaked->i_object_id, leaked->psz_object_type,
- leaked->psz_object_name );
- /* Dump libvlc object to ease debugging */
- vlc_object_dump( leaked );
- fflush(stderr);
- leaked = vlc_internals (leaked)->next;
- }
- while (leaked != first);
+ /* We are leaking this object */
+ fprintf( stderr,
+ "ERROR: leaking object (id:%i, type:%s, name:%s)\n",
+ leaked->i_object_id, leaked->psz_object_type,
+ leaked->psz_object_name );
+ /* Dump object to ease debugging */
+ vlc_object_dump( leaked );
+ fflush(stderr);
+ leaked = vlc_internals (leaked)->next;
+ }
- /* Dump global object to ease debugging */
+ if( p_priv->next != p_this )
+ /* Dump libvlc object to ease debugging */
vlc_object_dump( p_this );
- /* Strongly abort, cause we want these to be fixed */
- abort();
- }
+ }
#endif
+ if( p_this->p_libvlc == NULL )
/* We are the global object ... no need to lock. */
vlc_mutex_destroy( &structure_lock );
- }
FREENULL( p_this->psz_object_name );
* not be shared across LibVLC instances. In the mean time, this ugly
* hack is brought to you by Courmisch. */
if (i_type == VLC_OBJECT_MODULE)
- return vlc_list_find ((vlc_object_t *)vlc_global ()->p_module_bank,
+ return vlc_list_find ((vlc_object_t *)p_module_bank,
i_type, FIND_CHILD);
return vlc_list_find (p_this->p_libvlc, i_type, FIND_CHILD);