]> git.sesse.net Git - vlc/commitdiff
Fix infinite loop
authorRémi Denis-Courmont <rem@videolan.org>
Thu, 29 May 2008 19:08:42 +0000 (22:08 +0300)
committerRémi Denis-Courmont <rem@videolan.org>
Thu, 29 May 2008 19:30:36 +0000 (22:30 +0300)
src/misc/objects.c

index 629036e6a02298bd8a8080b1ac4622dd21278612..36f9159d1c7e879499f89823d97e6328772f4332 100644 (file)
@@ -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();