Commit e083d4a7 authored by Rémi Denis-Courmont's avatar Rémi Denis-Courmont

Module really does not need to be an object

parent 8fce3d90
......@@ -491,8 +491,10 @@ int libvlc_InternalInit( libvlc_int_t *p_libvlc, int i_argc,
b_exit = true;
}
msg_Dbg( p_libvlc, "module bank initialized, found %i modules",
vlc_internals( p_module_bank )->i_children );
size_t module_count;
module_t **list = module_list_get( &module_count );
module_list_free( list );
msg_Dbg( p_libvlc, "module bank initialized (%u modules)", module_count );
/* Check for help on modules */
if( (p_tmp = config_GetPsz( p_libvlc, "module" )) )
......
......@@ -124,8 +124,7 @@ void __module_InitBank( vlc_object_t *p_this )
if( p_module_bank == NULL )
{
p_bank = vlc_custom_create( p_this, sizeof(module_bank_t),
VLC_OBJECT_GENERIC, "module bank");
p_bank = calloc (1, sizeof(*p_bank));
p_bank->i_usage = 1;
p_bank->i_cache = p_bank->i_loaded_cache = 0;
p_bank->pp_cache = p_bank->pp_loaded_cache = NULL;
......@@ -160,26 +159,24 @@ void __module_InitBank( vlc_object_t *p_this )
*/
void __module_EndBank( vlc_object_t *p_this )
{
module_t * p_next = NULL;
module_bank_t *p_bank;
vlc_mutex_t *lock = var_AcquireMutex( "libvlc" );
if( !p_module_bank )
{
vlc_mutex_unlock( lock );
return;
}
if( --p_module_bank->i_usage )
p_bank = p_module_bank;
assert (p_bank != NULL);
if( --p_bank->i_usage > 0 )
{
vlc_mutex_unlock( lock );
return;
}
/*FIXME: For thread safety, we need to:
p_module_bank = NULL; - immediately, but that will crash the cache */
vlc_mutex_unlock( lock );
/* Save the configuration */
config_AutoSaveConfigFile( p_this );
#ifdef HAVE_DYNAMIC_PLUGINS
# define p_bank p_module_bank
if( p_bank->b_cache ) CacheSave( p_this );
while( p_bank->i_loaded_cache-- )
{
......@@ -209,17 +206,13 @@ void __module_EndBank( vlc_object_t *p_this )
free( p_bank->pp_cache );
p_bank->pp_cache = NULL;
}
# undef p_bank
#endif
while( vlc_internals( p_module_bank )->i_children )
{
p_next = (module_t *)vlc_internals( p_module_bank )->pp_children[0];
DeleteModule( p_next, true );
}
while( p_bank->head != NULL )
DeleteModule( p_bank->head, true );
vlc_object_release( p_module_bank );
p_module_bank = NULL;
p_module_bank = NULL; /* FIXME: do this inside the lock */
free( p_bank );
}
/**
......@@ -1413,6 +1406,13 @@ static void DeleteModule( module_t * p_module, bool b_detach )
{
assert( p_module );
/* Unlist the module (if it is in the list) */
module_t **pp_self = &p_module_bank->head;
while (*pp_self != NULL && *pp_self != p_module)
pp_self = &((*pp_self)->next);
if (*pp_self)
*pp_self = p_module->next;
/* We free the structures that we strdup()ed in Allocate*Module(). */
#ifdef HAVE_DYNAMIC_PLUGINS
if( !p_module->b_builtin )
......
......@@ -39,9 +39,7 @@
*****************************************************************************/
struct module_bank_t
{
VLC_COMMON_MEMBERS
int i_usage;
unsigned i_usage;
bool b_builtins;
bool b_plugins;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment