[vlc-devel] [PATCH] libvlc: help debug object references remaining in debug builds

Steve Lhomme robux4 at gmail.com
Fri Oct 23 17:21:05 CEST 2015


On Fri, Oct 23, 2015 at 4:53 PM, Rémi Denis-Courmont <remi at remlab.net> wrote:
> Le 2015-10-23 17:09, Steve Lhomme a écrit :
>>
>> ---
>>  src/libvlc.c | 12 ++++++++++++
>>  1 file changed, 12 insertions(+)
>>
>> diff --git a/src/libvlc.c b/src/libvlc.c
>> index 34824da..7e7b097 100644
>> --- a/src/libvlc.c
>> +++ b/src/libvlc.c
>> @@ -553,7 +553,19 @@ void libvlc_InternalDestroy( libvlc_int_t *p_libvlc )
>>
>>      vlc_ExitDestroy( &priv->exit );
>>
>> +#ifndef NDEBUG
>> +    vlc_object_internals_t *internals = vlc_internals(p_libvlc);
>> +    int refcount = atomic_load(&internals->refs);
>> +    if (refcount > 1) {
>> +        while (internals) {
>> +            vlc_Log(NULL, VLC_MSG_DBG, "libvlc", NULL, 0,
>> "libvlc_InternalDestroy", "remaining ref %s count:%d",
>> internals->psz_name ? internals->psz_name : "???", internals->refs);
>> +            internals = internals->first;
>> +        }
>> +    }
>> +    assert( refcount == 1 );
>> +#else
>>      assert( atomic_load(&(vlc_internals(p_libvlc)->refs)) == 1 );
>> +#endif
>
>
> You know you can put a breakpoint and debug the memory content manually. In
> general, we can't even assume that vlc logs will be flushed before the
> assertion failure.

That's advanced trickery to be able to get the debugger to access
structures like this:
# define vlc_internals( obj ) (((vlc_object_internals_t*)(VLC_OBJECT(obj)))-1)

>>      vlc_object_release( p_libvlc );
>>  }
>
>
> --
> Rémi Denis-Courmont
> http://www.remlab.net/
> _______________________________________________
> vlc-devel mailing list
> To unsubscribe or modify your subscription options:
> https://mailman.videolan.org/listinfo/vlc-devel


More information about the vlc-devel mailing list