[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