- vlc_object_internals_t *priv = vlc_internals( p_parent );
- INSERT_ELEM( priv->pp_children, priv->i_children, priv->i_children,
- p_this );
- libvlc_unlock (p_this->p_libvlc);
-}
-
-
-static void vlc_object_detach_unlocked (vlc_object_t *p_this)
-{
- if (p_this->p_parent == NULL)
- return;
-
- vlc_object_internals_t *priv = vlc_internals( p_this->p_parent );
-
- int i_index, i;
-
- /* Remove p_this's parent */
- p_this->p_parent = NULL;
-
- /* Remove all of p_parent's children which are p_this */
- for( i_index = priv->i_children ; i_index-- ; )
- {
- if( priv->pp_children[i_index] == p_this )
- {
- priv->i_children--;
- for( i = i_index ; i < priv->i_children ; i++ )
- priv->pp_children[i] = priv->pp_children[i+1];
- }
- }
-
- if( priv->i_children )
- {
- vlc_object_t **pp_children = (vlc_object_t **)
- realloc( priv->pp_children,
- priv->i_children * sizeof(vlc_object_t *) );
- if( pp_children )
- priv->pp_children = pp_children;
- }
- else
- {
- /* Special case - don't realloc() to zero to avoid leaking */
- free( priv->pp_children );
- priv->pp_children = NULL;
- }
-}
-
-
-/**
- ****************************************************************************
- * detach object from its parent
- *****************************************************************************
- * This function removes all links between an object and its parent.
- *****************************************************************************/
-void __vlc_object_detach( vlc_object_t *p_this )
-{
- vlc_object_t *p_parent;
- if( !p_this ) return;
-
- libvlc_lock (p_this->p_libvlc);
- p_parent = p_this->p_parent;
- if (p_parent)
- vlc_object_detach_unlocked( p_this );