#include <vlc_common.h>
#include <vlc_plugin.h>
+#include <vlc_memory.h>
#include "libvlc.h"
#include <stdlib.h> /* free(), strtol() */
#include "vlc_charset.h"
#include "vlc_arrays.h"
+#include <vlc_cpu.h>
#include "modules/modules.h"
p_bank->pp_loaded_cache[p_bank->i_loaded_cache]->p_module );
free( p_bank->pp_loaded_cache[p_bank->i_loaded_cache]->psz_file );
free( p_bank->pp_loaded_cache[p_bank->i_loaded_cache] );
- p_bank->pp_loaded_cache[p_bank->i_loaded_cache] = NULL;
}
}
- if( p_bank->pp_loaded_cache )
- {
- free( p_bank->pp_loaded_cache );
- p_bank->pp_loaded_cache = NULL;
- }
+ free( p_bank->pp_loaded_cache );
while( p_bank->i_cache-- )
{
free( p_bank->pp_cache[p_bank->i_cache]->psz_file );
free( p_bank->pp_cache[p_bank->i_cache] );
- p_bank->pp_cache[p_bank->i_cache] = NULL;
- }
- if( p_bank->pp_cache )
- {
- free( p_bank->pp_cache );
- p_bank->pp_cache = NULL;
}
+ free( p_bank->pp_cache );
#endif
while( p_bank->head != NULL )
*
* Return the best module function, given a capability list.
*
- * If the p_this object doesn't have it's psz_object_name set, then
- * psz_object_name will be set to the module's name, unless the user
- * provided an alias using the "module name@alias" syntax in which case
- * psz_object_name will be set to the alias.
- *
* \param p_this the vlc object
* \param psz_capability list of capabilities needed
* \param psz_name name of the module asked
- * \param b_strict TRUE yto use the strict mode
+ * \param b_strict if true, do not fallback to plugin with a different name
+ * but the same capability
* \return the module or NULL in case of a failure
*/
module_t * __module_need( vlc_object_t *p_this, const char *psz_capability,
{
module_t *p_new_module =
AllocatePlugin( p_this, p_real->psz_filename );
- if( p_new_module )
- {
- CacheMerge( p_this, p_real, p_new_module );
- DeleteModule( p_module_bank, p_new_module );
+ if( p_new_module == NULL )
+ { /* Corrupted module */
+ msg_Err( p_this, "possibly corrupt module cache" );
+ module_release( p_cand );
+ continue;
}
+ CacheMerge( p_this, p_real, p_new_module );
+ DeleteModule( p_module_bank, p_new_module );
}
#endif
{
msg_Dbg( p_this, "using %s module \"%s\"",
psz_capability, p_module->psz_object_name );
- if( !p_this->psz_object_name )
- {
- /* This assumes that p_this is the object which will be using the
- * module. That's not always the case ... but it is in most cases.
- */
- if( psz_alias )
- p_this->psz_object_name = strdup( psz_alias );
- else
- p_this->psz_object_name = strdup( p_module->psz_object_name );
- }
+ vlc_object_set_name( p_this, psz_alias ? psz_alias
+ : p_module->psz_object_name );
}
else if( count == 0 )
{
/* Add entry to cache */
module_cache_t **pp_cache = p_bank->pp_cache;
- pp_cache = realloc( pp_cache, (p_bank->i_cache + 1) * sizeof(void *) );
+ pp_cache = realloc_or_free( pp_cache, (p_bank->i_cache + 1) * sizeof(void *) );
if( pp_cache == NULL )
return -1;
pp_cache[p_bank->i_cache] = malloc( sizeof(module_cache_t) );