Commit 07dd8683 authored by Rémi Denis-Courmont's avatar Rémi Denis-Courmont

Remove support for reparenting

parent 5e1e150c
...@@ -161,7 +161,6 @@ struct vlc_object_internals ...@@ -161,7 +161,6 @@ struct vlc_object_internals
vlc_object_internals_t *next; /* next sibling */ vlc_object_internals_t *next; /* next sibling */
vlc_object_internals_t *prev; /* previous sibling */ vlc_object_internals_t *prev; /* previous sibling */
vlc_object_internals_t *first; /* first child */ vlc_object_internals_t *first; /* first child */
vlc_object_t *old_parent;
}; };
#define ZOOM_SECTION N_("Zoom") #define ZOOM_SECTION N_("Zoom")
......
...@@ -159,9 +159,6 @@ void *vlc_custom_create( vlc_object_t *p_this, size_t i_size, ...@@ -159,9 +159,6 @@ void *vlc_custom_create( vlc_object_t *p_this, size_t i_size,
p_priv->b_thread = false; p_priv->b_thread = false;
p_new->p_parent = NULL; p_new->p_parent = NULL;
p_priv->first = NULL; p_priv->first = NULL;
#ifndef NDEBUG
p_priv->old_parent = NULL;
#endif
/* Initialize mutexes and condvars */ /* Initialize mutexes and condvars */
vlc_mutex_init( &p_priv->var_lock ); vlc_mutex_init( &p_priv->var_lock );
...@@ -623,31 +620,13 @@ void vlc_object_attach( vlc_object_t *p_this, vlc_object_t *p_parent ) ...@@ -623,31 +620,13 @@ void vlc_object_attach( vlc_object_t *p_this, vlc_object_t *p_parent )
vlc_object_internals_t *pap = vlc_internals (p_parent); vlc_object_internals_t *pap = vlc_internals (p_parent);
vlc_object_internals_t *priv = vlc_internals (p_this); vlc_object_internals_t *priv = vlc_internals (p_this);
vlc_object_t *p_old_parent;
priv->prev = NULL; priv->prev = NULL;
vlc_object_hold (p_parent); vlc_object_hold (p_parent);
libvlc_lock (p_this->p_libvlc); libvlc_lock (p_this->p_libvlc);
#ifndef NDEBUG
/* Reparenting an object carries a risk of invalid access to the parent,
* from another thread. This can happen when inheriting a variable, or
* through any direct access to vlc_object_t.p_parent. Also, reparenting
* brings a functional bug, whereby the reparented object uses incorrect
* old values for inherited variables (as the new parent may have different
* variable values, especially if it is an input).
* Note that the old parent may be already destroyed.
* So its pointer must not be dereferenced.
*/
if (priv->old_parent)
msg_Info (p_this, "Reparenting an object is dangerous (%p -> %p)!",
priv->old_parent, p_parent);
#endif
p_old_parent = p_this->p_parent;
if (p_old_parent)
vlc_object_detach_unlocked (p_this);
/* Attach the parent to its child */ /* Attach the parent to its child */
assert (p_this->p_parent == NULL);
p_this->p_parent = p_parent; p_this->p_parent = p_parent;
/* Attach the child to its parent */ /* Attach the child to its parent */
...@@ -656,9 +635,6 @@ void vlc_object_attach( vlc_object_t *p_this, vlc_object_t *p_parent ) ...@@ -656,9 +635,6 @@ void vlc_object_attach( vlc_object_t *p_this, vlc_object_t *p_parent )
priv->next->prev = priv; priv->next->prev = priv;
pap->first = priv; pap->first = priv;
libvlc_unlock (p_this->p_libvlc); libvlc_unlock (p_this->p_libvlc);
if (p_old_parent)
vlc_object_release (p_old_parent);
} }
...@@ -678,9 +654,6 @@ static void vlc_object_detach_unlocked (vlc_object_t *p_this) ...@@ -678,9 +654,6 @@ static void vlc_object_detach_unlocked (vlc_object_t *p_this)
priv->next->prev = priv->prev; priv->next->prev = priv->prev;
/* Remove p_this's parent */ /* Remove p_this's parent */
#ifndef NDEBUG
priv->old_parent = p_this->p_parent;
#endif
p_this->p_parent = NULL; p_this->p_parent = NULL;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment