Rename the module registry to be the module repository
This commit was SVN r927.
Этот коммит содержится в:
родитель
b195c85f60
Коммит
304400d32b
@ -25,7 +25,7 @@ libmca_base_la_SOURCES = \
|
|||||||
mca_base_module_exchange.c \
|
mca_base_module_exchange.c \
|
||||||
mca_base_module_find.c \
|
mca_base_module_find.c \
|
||||||
mca_base_init_select_modules.c \
|
mca_base_init_select_modules.c \
|
||||||
mca_base_module_registry.c \
|
mca_base_module_repository.c \
|
||||||
mca_base_modules_open.c \
|
mca_base_modules_open.c \
|
||||||
mca_base_modules_close.c \
|
mca_base_modules_close.c \
|
||||||
mca_base_open.c \
|
mca_base_open.c \
|
||||||
|
@ -89,15 +89,16 @@ extern "C" {
|
|||||||
|
|
||||||
/* mca_base_module_register.c */
|
/* mca_base_module_register.c */
|
||||||
|
|
||||||
int mca_base_module_registry_construct(void);
|
int mca_base_module_repository_construct(void);
|
||||||
int mca_base_module_registry_retain(char *type, lt_dlhandle module_handle,
|
int mca_base_module_repository_retain(char *type,
|
||||||
const mca_base_module_t *module_struct);
|
lt_dlhandle module_handle,
|
||||||
int mca_base_module_registry_link(const char *src_type,
|
const mca_base_module_t *module_struct);
|
||||||
const char *src_name,
|
int mca_base_module_repository_link(const char *src_type,
|
||||||
const char *depend_type,
|
const char *src_name,
|
||||||
const char *depend_name);
|
const char *depend_type,
|
||||||
void mca_base_module_registry_release(const mca_base_module_t *module);
|
const char *depend_name);
|
||||||
void mca_base_module_registry_finalize(void);
|
void mca_base_module_repository_release(const mca_base_module_t *module);
|
||||||
|
void mca_base_module_repository_finalize(void);
|
||||||
|
|
||||||
/* mca_base_modules_open.c */
|
/* mca_base_modules_open.c */
|
||||||
|
|
||||||
|
@ -20,9 +20,9 @@ int mca_base_close(void)
|
|||||||
|
|
||||||
mca_base_param_finalize();
|
mca_base_param_finalize();
|
||||||
|
|
||||||
/* Close down the module registry */
|
/* Close down the module repository */
|
||||||
|
|
||||||
mca_base_module_registry_finalize();
|
mca_base_module_repository_finalize();
|
||||||
}
|
}
|
||||||
mca_base_opened = false;
|
mca_base_opened = false;
|
||||||
|
|
||||||
|
@ -392,20 +392,20 @@ static int open_module(module_file_item_t *target_file,
|
|||||||
|
|
||||||
mitem->mli_module = module_struct;
|
mitem->mli_module = module_struct;
|
||||||
lam_list_append(found_modules, (lam_list_item_t *) mitem);
|
lam_list_append(found_modules, (lam_list_item_t *) mitem);
|
||||||
mca_base_module_registry_retain(target_file->type, module_handle,
|
mca_base_module_repository_retain(target_file->type, module_handle,
|
||||||
module_struct);
|
module_struct);
|
||||||
|
|
||||||
/* Now that that's all done, link all the dependencies in to this
|
/* Now that that's all done, link all the dependencies in to this
|
||||||
module's registry entry */
|
module's repository entry */
|
||||||
|
|
||||||
for (cur = lam_list_remove_first(&dependencies);
|
for (cur = lam_list_remove_first(&dependencies);
|
||||||
NULL != cur;
|
NULL != cur;
|
||||||
cur = lam_list_remove_first(&dependencies)) {
|
cur = lam_list_remove_first(&dependencies)) {
|
||||||
ditem = (dependency_item_t *) cur;
|
ditem = (dependency_item_t *) cur;
|
||||||
mca_base_module_registry_link(target_file->type,
|
mca_base_module_repository_link(target_file->type,
|
||||||
target_file->name,
|
target_file->name,
|
||||||
ditem->di_module_file_item->type,
|
ditem->di_module_file_item->type,
|
||||||
ditem->di_module_file_item->name);
|
ditem->di_module_file_item->name);
|
||||||
free(ditem);
|
free(ditem);
|
||||||
}
|
}
|
||||||
OBJ_DESTRUCT(&dependencies);
|
OBJ_DESTRUCT(&dependencies);
|
||||||
|
@ -21,7 +21,7 @@
|
|||||||
/*
|
/*
|
||||||
* Private types
|
* Private types
|
||||||
*/
|
*/
|
||||||
struct registry_item_t {
|
struct repository_item_t {
|
||||||
lam_list_item_t super;
|
lam_list_item_t super;
|
||||||
|
|
||||||
char ri_type[MCA_BASE_MAX_TYPE_NAME_LEN];
|
char ri_type[MCA_BASE_MAX_TYPE_NAME_LEN];
|
||||||
@ -30,12 +30,12 @@ struct registry_item_t {
|
|||||||
int ri_refcount;
|
int ri_refcount;
|
||||||
lam_list_t ri_dependencies;
|
lam_list_t ri_dependencies;
|
||||||
};
|
};
|
||||||
typedef struct registry_item_t registry_item_t;
|
typedef struct repository_item_t repository_item_t;
|
||||||
|
|
||||||
struct dependency_item_t {
|
struct dependency_item_t {
|
||||||
lam_list_item_t super;
|
lam_list_item_t super;
|
||||||
|
|
||||||
registry_item_t *di_registry_entry;
|
repository_item_t *di_repository_entry;
|
||||||
};
|
};
|
||||||
typedef struct dependency_item_t dependency_item_t;
|
typedef struct dependency_item_t dependency_item_t;
|
||||||
|
|
||||||
@ -44,21 +44,21 @@ typedef struct dependency_item_t dependency_item_t;
|
|||||||
* Private variables
|
* Private variables
|
||||||
*/
|
*/
|
||||||
static bool initialized = false;
|
static bool initialized = false;
|
||||||
static lam_list_t registry;
|
static lam_list_t repository;
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Private functions
|
* Private functions
|
||||||
*/
|
*/
|
||||||
static registry_item_t *find_module(const char *type, const char *name);
|
static repository_item_t *find_module(const char *type, const char *name);
|
||||||
static int link_items(registry_item_t *src, registry_item_t *depend);
|
static int link_items(repository_item_t *src, repository_item_t *depend);
|
||||||
static void release_registry_item(registry_item_t *ri);
|
static void release_repository_item(repository_item_t *ri);
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Initialize the registry
|
* Initialize the repository
|
||||||
*/
|
*/
|
||||||
int mca_base_module_registry_construct(void)
|
int mca_base_module_repository_construct(void)
|
||||||
{
|
{
|
||||||
/* Setup internal structures */
|
/* Setup internal structures */
|
||||||
|
|
||||||
@ -69,7 +69,7 @@ int mca_base_module_registry_construct(void)
|
|||||||
if (lt_dlinit() != 0)
|
if (lt_dlinit() != 0)
|
||||||
return LAM_ERR_OUT_OF_RESOURCE;
|
return LAM_ERR_OUT_OF_RESOURCE;
|
||||||
|
|
||||||
OBJ_CONSTRUCT(®istry, lam_list_t);
|
OBJ_CONSTRUCT(&repository, lam_list_t);
|
||||||
initialized = true;
|
initialized = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -80,21 +80,21 @@ int mca_base_module_registry_construct(void)
|
|||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Add a newly-opened dyanmic module to the registry of open modules.
|
* Add a newly-opened dyanmic module to the repository of open modules.
|
||||||
* The module's type, handle, and public struct are saved.
|
* The module's type, handle, and public struct are saved.
|
||||||
*/
|
*/
|
||||||
int mca_base_module_registry_retain(char *type, lt_dlhandle module_handle,
|
int mca_base_module_repository_retain(char *type, lt_dlhandle module_handle,
|
||||||
const mca_base_module_t *module_struct)
|
const mca_base_module_t *module_struct)
|
||||||
{
|
{
|
||||||
registry_item_t *ri;
|
repository_item_t *ri;
|
||||||
|
|
||||||
/* Allocate a new registry item */
|
/* Allocate a new repository item */
|
||||||
|
|
||||||
ri = malloc(sizeof(registry_item_t));
|
ri = malloc(sizeof(repository_item_t));
|
||||||
if (NULL == ri)
|
if (NULL == ri)
|
||||||
return LAM_ERR_OUT_OF_RESOURCE;
|
return LAM_ERR_OUT_OF_RESOURCE;
|
||||||
|
|
||||||
/* Initialize the registry item */
|
/* Initialize the repository item */
|
||||||
|
|
||||||
OBJ_CONSTRUCT(ri, lam_list_item_t);
|
OBJ_CONSTRUCT(ri, lam_list_item_t);
|
||||||
strcpy(ri->ri_type, type);
|
strcpy(ri->ri_type, type);
|
||||||
@ -103,9 +103,9 @@ int mca_base_module_registry_retain(char *type, lt_dlhandle module_handle,
|
|||||||
ri->ri_refcount = 1;
|
ri->ri_refcount = 1;
|
||||||
OBJ_CONSTRUCT(&ri->ri_dependencies, lam_list_t);
|
OBJ_CONSTRUCT(&ri->ri_dependencies, lam_list_t);
|
||||||
|
|
||||||
/* Append the new item to the registry */
|
/* Append the new item to the repository */
|
||||||
|
|
||||||
lam_list_append(®istry, (lam_list_item_t *) ri);
|
lam_list_append(&repository, (lam_list_item_t *) ri);
|
||||||
|
|
||||||
/* All done */
|
/* All done */
|
||||||
|
|
||||||
@ -116,12 +116,12 @@ int mca_base_module_registry_retain(char *type, lt_dlhandle module_handle,
|
|||||||
/*
|
/*
|
||||||
* Create a dependency from one module entry to another
|
* Create a dependency from one module entry to another
|
||||||
*/
|
*/
|
||||||
int mca_base_module_registry_link(const char *src_type,
|
int mca_base_module_repository_link(const char *src_type,
|
||||||
const char *src_name,
|
const char *src_name,
|
||||||
const char *depend_type,
|
const char *depend_type,
|
||||||
const char *depend_name)
|
const char *depend_name)
|
||||||
{
|
{
|
||||||
registry_item_t *src, *depend;
|
repository_item_t *src, *depend;
|
||||||
|
|
||||||
/* Look up the two modules */
|
/* Look up the two modules */
|
||||||
|
|
||||||
@ -140,24 +140,24 @@ int mca_base_module_registry_link(const char *src_type,
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
* If it's in the registr, close a specified module and remove it from
|
* If it's in the registr, close a specified module and remove it from
|
||||||
* the registry.
|
* the repository.
|
||||||
*/
|
*/
|
||||||
void mca_base_module_registry_release(const mca_base_module_t *module)
|
void mca_base_module_repository_release(const mca_base_module_t *module)
|
||||||
{
|
{
|
||||||
registry_item_t *ri = find_module(module->mca_type_name,
|
repository_item_t *ri = find_module(module->mca_type_name,
|
||||||
module->mca_module_name);
|
module->mca_module_name);
|
||||||
if (NULL != ri)
|
if (NULL != ri)
|
||||||
release_registry_item(ri);
|
release_repository_item(ri);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Finalize the registry -- close everything that's still open.
|
* Finalize the repository -- close everything that's still open.
|
||||||
*/
|
*/
|
||||||
void mca_base_module_registry_finalize(void)
|
void mca_base_module_repository_finalize(void)
|
||||||
{
|
{
|
||||||
lam_list_item_t *item;
|
lam_list_item_t *item;
|
||||||
registry_item_t *ri;
|
repository_item_t *ri;
|
||||||
bool changed;
|
bool changed;
|
||||||
|
|
||||||
if (initialized) {
|
if (initialized) {
|
||||||
@ -177,17 +177,17 @@ void mca_base_module_registry_finalize(void)
|
|||||||
|
|
||||||
do {
|
do {
|
||||||
changed = false;
|
changed = false;
|
||||||
for (item = lam_list_get_first(®istry);
|
for (item = lam_list_get_first(&repository);
|
||||||
lam_list_get_end(®istry) != item && changed;
|
lam_list_get_end(&repository) != item && changed;
|
||||||
item = lam_list_get_next(item)) {
|
item = lam_list_get_next(item)) {
|
||||||
ri = (registry_item_t *) ri;
|
ri = (repository_item_t *) ri;
|
||||||
|
|
||||||
if (ri->ri_refcount == 1) {
|
if (ri->ri_refcount == 1) {
|
||||||
release_registry_item(ri);
|
release_repository_item(ri);
|
||||||
changed = true;
|
changed = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} while (lam_list_get_size(®istry) > 0 && changed);
|
} while (lam_list_get_size(&repository) > 0 && changed);
|
||||||
|
|
||||||
/* Close down libltdl */
|
/* Close down libltdl */
|
||||||
|
|
||||||
@ -197,15 +197,15 @@ void mca_base_module_registry_finalize(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static registry_item_t *find_module(const char *type, const char *name)
|
static repository_item_t *find_module(const char *type, const char *name)
|
||||||
{
|
{
|
||||||
lam_list_item_t *item;
|
lam_list_item_t *item;
|
||||||
registry_item_t *ri;
|
repository_item_t *ri;
|
||||||
|
|
||||||
for (item = lam_list_get_first(®istry);
|
for (item = lam_list_get_first(&repository);
|
||||||
lam_list_get_end(®istry) != item;
|
lam_list_get_end(&repository) != item;
|
||||||
item = lam_list_get_next(item)) {
|
item = lam_list_get_next(item)) {
|
||||||
ri = (registry_item_t *) ri;
|
ri = (repository_item_t *) ri;
|
||||||
if (0 == strcmp(ri->ri_type, type) &&
|
if (0 == strcmp(ri->ri_type, type) &&
|
||||||
0 == strcmp(ri->ri_module_struct->mca_module_name, name))
|
0 == strcmp(ri->ri_module_struct->mca_module_name, name))
|
||||||
return ri;
|
return ri;
|
||||||
@ -217,7 +217,7 @@ static registry_item_t *find_module(const char *type, const char *name)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static int link_items(registry_item_t *src, registry_item_t *depend)
|
static int link_items(repository_item_t *src, repository_item_t *depend)
|
||||||
{
|
{
|
||||||
dependency_item_t *di;
|
dependency_item_t *di;
|
||||||
|
|
||||||
@ -235,9 +235,9 @@ static int link_items(registry_item_t *src, registry_item_t *depend)
|
|||||||
/* Initialize the new dependency item */
|
/* Initialize the new dependency item */
|
||||||
|
|
||||||
OBJ_CONSTRUCT((lam_list_item_t *) di, lam_list_item_t);
|
OBJ_CONSTRUCT((lam_list_item_t *) di, lam_list_item_t);
|
||||||
di->di_registry_entry = depend;
|
di->di_repository_entry = depend;
|
||||||
|
|
||||||
/* Add it to the dependency list on the source registry entry */
|
/* Add it to the dependency list on the source repository entry */
|
||||||
|
|
||||||
lam_list_append(&src->ri_dependencies, (lam_list_item_t *) di);
|
lam_list_append(&src->ri_dependencies, (lam_list_item_t *) di);
|
||||||
|
|
||||||
@ -251,7 +251,7 @@ static int link_items(registry_item_t *src, registry_item_t *depend)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static void release_registry_item(registry_item_t *ri)
|
static void release_repository_item(repository_item_t *ri)
|
||||||
{
|
{
|
||||||
dependency_item_t *di;
|
dependency_item_t *di;
|
||||||
lam_list_item_t *item;
|
lam_list_item_t *item;
|
||||||
@ -274,7 +274,7 @@ static void release_registry_item(registry_item_t *ri)
|
|||||||
NULL != item;
|
NULL != item;
|
||||||
item = lam_list_remove_first(&ri->ri_dependencies)) {
|
item = lam_list_remove_first(&ri->ri_dependencies)) {
|
||||||
di = (dependency_item_t *) item;
|
di = (dependency_item_t *) item;
|
||||||
--di->di_registry_entry->ri_refcount;
|
--di->di_repository_entry->ri_refcount;
|
||||||
free(di);
|
free(di);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -283,8 +283,8 @@ static void release_registry_item(registry_item_t *ri)
|
|||||||
pointer is no longer valid because it has [potentially] been
|
pointer is no longer valid because it has [potentially] been
|
||||||
unloaded from memory. So don't try to use it. :-) */
|
unloaded from memory. So don't try to use it. :-) */
|
||||||
|
|
||||||
OBJ_DESTRUCT(&di->di_registry_entry->ri_dependencies);
|
OBJ_DESTRUCT(&di->di_repository_entry->ri_dependencies);
|
||||||
lam_list_remove_item(®istry, (lam_list_item_t *) ri);
|
lam_list_remove_item(&repository, (lam_list_item_t *) ri);
|
||||||
free(ri);
|
free(ri);
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -41,7 +41,7 @@ int mca_base_modules_close(int output_id, lam_list_t *modules_available,
|
|||||||
|
|
||||||
/* Unload */
|
/* Unload */
|
||||||
|
|
||||||
mca_base_module_registry_release((mca_base_module_t *) module);
|
mca_base_module_repository_release((mca_base_module_t *) module);
|
||||||
lam_output_verbose(10, output_id, "close: module %s unloaded",
|
lam_output_verbose(10, output_id, "close: module %s unloaded",
|
||||||
module->mca_module_name);
|
module->mca_module_name);
|
||||||
}
|
}
|
||||||
|
@ -231,7 +231,7 @@ static int open_modules(const char *type_name, int output_id,
|
|||||||
module->mca_module_name);
|
module->mca_module_name);
|
||||||
called_open = false;
|
called_open = false;
|
||||||
}
|
}
|
||||||
mca_base_module_registry_release(module);
|
mca_base_module_repository_release(module);
|
||||||
lam_output_verbose(10, output_id,
|
lam_output_verbose(10, output_id,
|
||||||
"open: module %s unloaded",
|
"open: module %s unloaded",
|
||||||
module->mca_module_name);
|
module->mca_module_name);
|
||||||
|
@ -61,9 +61,9 @@ int mca_base_open(void)
|
|||||||
lam_output_reopen(0, &lds);
|
lam_output_reopen(0, &lds);
|
||||||
lam_output_verbose(0, 5, " Opening");
|
lam_output_verbose(0, 5, " Opening");
|
||||||
|
|
||||||
/* Open up the module registry */
|
/* Open up the module repository */
|
||||||
|
|
||||||
return mca_base_module_registry_construct();
|
return mca_base_module_repository_construct();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -233,7 +233,7 @@ int mca_base_param_find(const char *type_name, const char *module_name,
|
|||||||
*
|
*
|
||||||
* @returns LAM_SUCCESS This function never fails.
|
* @returns LAM_SUCCESS This function never fails.
|
||||||
*
|
*
|
||||||
* This function shuts down the MCA parameter registry and frees all
|
* This function shuts down the MCA parameter repository and frees all
|
||||||
* associated memory. No other mca_base_param*() functions can be
|
* associated memory. No other mca_base_param*() functions can be
|
||||||
* invoked after this function.
|
* invoked after this function.
|
||||||
*
|
*
|
||||||
|
Загрузка…
x
Ссылка в новой задаче
Block a user