counter_t **pp_counters;
};
+VLC_EXPORT( void, stats_HandlerDestroy, (stats_handler_t*) );
+
#define stats_Update( a,b,c) __stats_Update( VLC_OBJECT( a ), b, c )
VLC_EXPORT( int, __stats_Update, (vlc_object_t*, char *, vlc_value_t) );
#define stats_Create( a,b,c,d ) __stats_Create( VLC_OBJECT(a), b, c, d )
mtime_t date_Increment (date_t *, uint32_t);
int playlist_Add (playlist_t *, const char *, const char *, int, int);
char * sout_CfgCreate (char **, sout_cfg_t **, char *);
+void stats_HandlerDestroy (stats_handler_t*);
osd_menu_t * __osd_MenuCreate (vlc_object_t *, const char *);
void * vlc_opendir (const char *);
int playlist_NodeRemoveParent (playlist_t *,playlist_item_t*,playlist_item_t *);
void (*stats_ReinitInputStats_inner) (input_stats_t *);
counter_t* (*__stats_CounterGet_inner) (vlc_object_t*, int, char *);
input_thread_t * (*__input_CreateThread2_inner) (vlc_object_t *, input_item_t *, char *);
+ void (*stats_HandlerDestroy_inner) (stats_handler_t*);
};
# if defined (__PLUGIN__)
# define aout_FiltersCreatePipeline (p_symbols)->aout_FiltersCreatePipeline_inner
# define stats_ReinitInputStats (p_symbols)->stats_ReinitInputStats_inner
# define __stats_CounterGet (p_symbols)->__stats_CounterGet_inner
# define __input_CreateThread2 (p_symbols)->__input_CreateThread2_inner
+# define stats_HandlerDestroy (p_symbols)->stats_HandlerDestroy_inner
# elif defined (HAVE_DYNAMIC_PLUGINS) && !defined (__BUILTIN__)
/******************************************************************
* STORE_SYMBOLS: store VLC APIs into p_symbols for plugin access.
((p_symbols)->stats_ReinitInputStats_inner) = stats_ReinitInputStats; \
((p_symbols)->__stats_CounterGet_inner) = __stats_CounterGet; \
((p_symbols)->__input_CreateThread2_inner) = __input_CreateThread2; \
+ ((p_symbols)->stats_HandlerDestroy_inner) = stats_HandlerDestroy; \
(p_symbols)->net_ConvertIPv4_deprecated = NULL; \
# endif /* __PLUGIN__ */
while( ( p_stats = vlc_object_find( p_vlc, VLC_OBJECT_STATS, FIND_CHILD) ))
{
+ stats_HandlerDestroy( p_stats );
vlc_object_detach( (vlc_object_t*) p_stats );
vlc_object_release( (vlc_object_t *)p_stats );
// TODO: Delete it
* Exported functions
*****************************************************************************/
+/**
+ * Cleanup statistics handler stuff
+ * \param p_stats the handler to clean
+ * \return nothing
+ */
+void stats_HandlerDestroy( stats_handler_t *p_stats )
+{
+ int i;
+ for ( i = p_stats->i_counters - 1 ; i >= 0 ; i-- )
+ {
+ int j;
+ counter * p_counter = p_stats->pp_counters[i];
+
+ for( j = p_counter->i_samples -1; j >= 0 ; j-- )
+ {
+ counter_sample_t *p_sample = p_counter->pp_samples[j];
+ if( p_sample->val.psz_string )
+ free( p_sample->val.psz_string );
+ REMOVE_ELEM( p_counter->pp_samples, p_counter->i_samples, j );
+ free( p_sample );
+ }
+ free( p_counter->psz_name );
+ REMOVE_ELEM( p_stats->pp_counters, p_stats->i_counter, i );
+ free( p_counter );
+ }
+}
+
/**
* Create a statistics counter
* \param p_this the object for which to create the counter
vlc_object_destroy( p_input );
}
free( psz_output );
+ free( psz_header );
if( media->psz_mux )
{
vlc_input_item_Clean( &p_instance->item );
if( p_instance->psz_name ) free( p_instance->psz_name );
}
+ free( psz_header );
return VLC_SUCCESS;
}