]> git.sesse.net Git - vlc/commitdiff
Remove support for reparenting
authorRémi Denis-Courmont <remi@remlab.net>
Tue, 25 May 2010 20:45:43 +0000 (23:45 +0300)
committerRémi Denis-Courmont <remi@remlab.net>
Tue, 25 May 2010 20:52:19 +0000 (23:52 +0300)
src/libvlc.h
src/misc/objects.c

index 4af6d82ea4ab069cacb8626058eb8310f6be82b0..a9fd3d17eb89c3a9a4720c54470636c6d2d57c0d 100644 (file)
@@ -161,7 +161,6 @@ struct vlc_object_internals
     vlc_object_internals_t *next;  /* next sibling */
     vlc_object_internals_t *prev;  /* previous sibling */
     vlc_object_internals_t *first; /* first child */
-    vlc_object_t   *old_parent;
 };
 
 #define ZOOM_SECTION N_("Zoom")
index d4a808c61d03873a070611b4d89db2f0a2407ef1..9b8cb98cbc09dbf5380346ce6cc5b7ddabb35b96 100644 (file)
@@ -159,9 +159,6 @@ void *vlc_custom_create( vlc_object_t *p_this, size_t i_size,
     p_priv->b_thread = false;
     p_new->p_parent = NULL;
     p_priv->first = NULL;
-#ifndef NDEBUG
-    p_priv->old_parent = NULL;
-#endif
 
     /* Initialize mutexes and condvars */
     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 )
 
     vlc_object_internals_t *pap = vlc_internals (p_parent);
     vlc_object_internals_t *priv = vlc_internals (p_this);
-    vlc_object_t *p_old_parent;
 
     priv->prev = NULL;
     vlc_object_hold (p_parent);
     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 */
+    assert (p_this->p_parent == NULL);
     p_this->p_parent = p_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 )
         priv->next->prev = priv;
     pap->first = priv;
     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)
         priv->next->prev = priv->prev;
 
     /* Remove p_this's parent */
-#ifndef NDEBUG
-    priv->old_parent = p_this->p_parent;
-#endif
     p_this->p_parent = NULL;
 }