]> git.sesse.net Git - vlc/commitdiff
objects: Make sure that we don't loose a vlc_object_kill() when attaching to a dead...
authorPierre d'Herbemont <pdherbemont@videolan.org>
Fri, 30 May 2008 12:18:02 +0000 (14:18 +0200)
committerPierre d'Herbemont <pdherbemont@videolan.org>
Fri, 30 May 2008 12:19:50 +0000 (14:19 +0200)
Note: We do need to lock the parent for that.

src/misc/objects.c

index 36f9159d1c7e879499f89823d97e6328772f4332..d4a5a6b69a613bd157aa7cc5d7e2bc60b5bb5f62 100644 (file)
@@ -837,11 +837,19 @@ void __vlc_object_attach( vlc_object_t *p_this, vlc_object_t *p_parent )
     assert (!p_this->p_parent);
     p_this->p_parent = p_parent;
 
+    vlc_object_lock( p_this->p_parent );
+
     /* Attach the child to its parent */
     vlc_object_internals_t *priv = vlc_internals( p_parent );
     INSERT_ELEM( priv->pp_children, priv->i_children, priv->i_children,
                  p_this );
 
+    /* Kill the object if parent is already dead */
+    if( !vlc_object_alive( p_this->p_parent) )
+        vlc_object_kill( p_this );
+
+    vlc_object_unlock( p_this->p_parent );
+
     vlc_mutex_unlock( &structure_lock );
 }