#endif
#include "libvlc.h"
+#include "config/configuration.h"
#include <assert.h>
#include <math.h>
#include <limits.h>
+#ifdef __GLIBC__
+# include <dlfcn.h>
+#endif
/*****************************************************************************
* Private types
static void FreeDummy( vlc_value_t *p_val ) { (void)p_val; /* unused */ }
static void FreeString( vlc_value_t *p_val ) { free( p_val->psz_string ); }
-static void FreeMutex( vlc_value_t *p_val ) { vlc_mutex_destroy( (vlc_mutex_t*)p_val->p_address ); free( p_val->p_address ); }
static void FreeList( vlc_value_t *p_val )
{
case VLC_VAR_STRING:
FreeString( &p_val->p_list->p_values[i] );
break;
- case VLC_VAR_MUTEX:
- FreeMutex( &p_val->p_list->p_values[i] );
- break;
default:
break;
}
bool_ops = { CmpBool, DupDummy, FreeDummy, },
float_ops = { CmpFloat, DupDummy, FreeDummy, },
int_ops = { CmpInt, DupDummy, FreeDummy, },
-mutex_ops = { CmpAddress, DupDummy, FreeMutex, },
string_ops = { CmpString, DupString, FreeString, },
time_ops = { CmpTime, DupDummy, FreeDummy, },
coords_ops = { NULL, DupDummy, FreeDummy, };
free( p_var->choices.p_values );
free( p_var->choices_text.p_values );
}
+#if 0 // ndef NDEBUG
+ for (int i = 0; i < p_var->i_entries; i++)
+ {
+ const char *file = "?", *symbol = "?";
+ const void *addr = p_var->p_entries[i].pf_callback;
+# ifdef __GLIBC__
+ Dl_info info;
+
+ if (dladdr (addr, &info))
+ {
+ if (info.dli_fname) file = info.dli_fname;
+ if (info.dli_sname) symbol = info.dli_sname;
+ }
+# endif
+ fprintf (stderr, "Error: callback on \"%s\" dangling %s(%s)[%p]\n",
+ p_var->psz_name, file, symbol, addr);
+ }
+#endif
+
free( p_var->psz_name );
free( p_var->psz_text );
free( p_var->p_entries );
p_var->ops = &addr_ops;
p_var->val.p_address = NULL;
break;
- case VLC_VAR_MUTEX:
- p_var->ops = &mutex_ops;
- p_var->val.p_address = malloc( sizeof(vlc_mutex_t) );
- vlc_mutex_init( (vlc_mutex_t*)p_var->val.p_address );
- break;
default:
p_var->ops = &void_ops;
#ifndef NDEBUG