[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