[vlc-devel] commit: Fix infinite loop ( Rémi Denis-Courmont )

git version control git at videolan.org
Thu May 29 21:49:38 CEST 2008


vlc | branch: master | Rémi Denis-Courmont <rem at videolan.org> | Thu May 29 22:08:42 2008 +0300| [debed14afc143e80839ba97b92ea5be332c4ed51]

Fix infinite loop

> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=debed14afc143e80839ba97b92ea5be332c4ed51
---

 src/misc/objects.c |   31 ++++++++++++++++---------------
 1 files changed, 16 insertions(+), 15 deletions(-)

diff --git a/src/misc/objects.c b/src/misc/objects.c
index 629036e..36f9159 100644
--- a/src/misc/objects.c
+++ b/src/misc/objects.c
@@ -339,23 +339,24 @@ static void vlc_object_destroy( vlc_object_t *p_this )
 #ifndef NDEBUG
         assert( p_global == vlc_global() );
         /* Test for leaks */
-        for( vlc_object_t *leaked = p_priv->next;
-             leaked != p_this;
-             leaked = vlc_internals (leaked)->next )
+        if (p_priv->next != p_this)
         {
-            /* 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);
-        }
+            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);
 
-        if( p_priv->next != p_this )
-        {
-            /* Dump libvlc object to ease debugging */
+            /* Dump global object to ease debugging */
             vlc_object_dump( p_this );
             /* Strongly abort, cause we want these to be fixed */
             abort();




More information about the vlc-devel mailing list