Fix a few minor bugs in the coll selection logic -- at least one of
which Torsten ran across last week and I was just now able to duplicate: - priority == 0 is still a valid priority - ensure to not compare against an empty list; if the list is empty, just put the selectable item on it without any comparisons - had wrong argument for ompi_list_get_next() (yay macros with no type checking :-( ) that caused badness in some cases This commit was SVN r4372.
Этот коммит содержится в:
родитель
3532271877
Коммит
dd30902bde
@ -354,7 +354,7 @@ static ompi_list_t *check_components(ompi_list_t *components,
|
|||||||
|
|
||||||
if (want_to_check) {
|
if (want_to_check) {
|
||||||
priority = check_one_component(comm, component, &module, &data);
|
priority = check_one_component(comm, component, &module, &data);
|
||||||
if (priority > 0) {
|
if (priority >= 0) {
|
||||||
|
|
||||||
/* We have a component that indicated that it wants to run by
|
/* We have a component that indicated that it wants to run by
|
||||||
giving us a module */
|
giving us a module */
|
||||||
@ -368,26 +368,32 @@ static ompi_list_t *check_components(ompi_list_t *components,
|
|||||||
/* Put this item on the list in priority order (highest
|
/* Put this item on the list in priority order (highest
|
||||||
priority first). Should it go first? */
|
priority first). Should it go first? */
|
||||||
|
|
||||||
item2 = ompi_list_get_first(selectable);
|
if (ompi_list_is_empty(selectable)) {
|
||||||
avail2 = (avail_coll_t *) item2;
|
ompi_list_prepend(selectable, (ompi_list_item_t *) avail);
|
||||||
if (avail->ac_priority > avail2->ac_priority) {
|
|
||||||
ompi_list_prepend(selectable, (ompi_list_item_t *) avail);
|
|
||||||
} else {
|
} else {
|
||||||
for (i = 1; item2 != ompi_list_get_end(selectable);
|
item2 = ompi_list_get_first(selectable);
|
||||||
item2 = ompi_list_get_next(selectable), ++i) {
|
|
||||||
avail2 = (avail_coll_t *) item2;
|
avail2 = (avail_coll_t *) item2;
|
||||||
if (avail->ac_priority > avail2->ac_priority) {
|
if (avail->ac_priority > avail2->ac_priority) {
|
||||||
ompi_list_insert(selectable, (ompi_list_item_t *) avail, i);
|
ompi_list_prepend(selectable, (ompi_list_item_t *) avail);
|
||||||
break;
|
} else {
|
||||||
}
|
for (i = 1; item2 != ompi_list_get_end(selectable);
|
||||||
}
|
item2 = ompi_list_get_next(item2), ++i) {
|
||||||
|
avail2 = (avail_coll_t *) item2;
|
||||||
|
if (avail->ac_priority > avail2->ac_priority) {
|
||||||
|
ompi_list_insert(selectable,
|
||||||
|
(ompi_list_item_t *) avail, i);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* If we didn't find a place to put it in the list, then
|
/* If we didn't find a place to put it in the list, then
|
||||||
append it (because it has the lowest priority found so
|
append it (because it has the lowest priority found so
|
||||||
far) */
|
far) */
|
||||||
if (ompi_list_get_end(selectable) == item2) {
|
|
||||||
ompi_list_append(selectable, (ompi_list_item_t *) avail);
|
if (ompi_list_get_end(selectable) == item2) {
|
||||||
}
|
ompi_list_append(selectable, (ompi_list_item_t *) avail);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Загрузка…
x
Ссылка в новой задаче
Block a user