1
1

changed list iteration code to allow for an item to be removed

from the list while iterating through it

This commit was SVN r2719.
Этот коммит содержится в:
Tim Woodall 2004-09-16 14:34:03 +00:00
родитель c32cb44a37
Коммит 838066ab12

Просмотреть файл

@ -171,8 +171,9 @@ int gpr_replica_put_nl(ompi_registry_mode_t addr_mode, char *segment,
/* update trigger list and check for trigger conditions */
for (trig = (mca_gpr_replica_trigger_list_t*)ompi_list_get_first(&seg->triggers);
trig != (mca_gpr_replica_trigger_list_t*)ompi_list_get_end(&seg->triggers);
trig = (mca_gpr_replica_trigger_list_t*)ompi_list_get_next(trig)) {
trig != (mca_gpr_replica_trigger_list_t*)ompi_list_get_end(&seg->triggers);
) {
mca_gpr_replica_trigger_list_t* next = (mca_gpr_replica_trigger_list_t*)ompi_list_get_next(trig);
if (gpr_replica_check_key_list(trig->addr_mode, trig->num_keys, trig->keys,
num_tokens, keys)) {
trig->count++;
@ -199,9 +200,9 @@ int gpr_replica_put_nl(ompi_registry_mode_t addr_mode, char *segment,
} else if (trig->count == trig->trigger) {
trig->above_below = MCA_GPR_REPLICA_TRIGGER_AT_LEVEL;
}
trig = next;
}
CLEANUP:
/* release list of keys */
if (NULL != keylist) {
@ -299,8 +300,9 @@ int gpr_replica_delete_object_nl(ompi_registry_mode_t addr_mode,
/* update synchro list and check for trigger conditions */
for (trig = (mca_gpr_replica_trigger_list_t*)ompi_list_get_first(&seg->triggers);
trig != (mca_gpr_replica_trigger_list_t*)ompi_list_get_end(&seg->triggers);
trig = (mca_gpr_replica_trigger_list_t*)ompi_list_get_next(trig)) {
trig != (mca_gpr_replica_trigger_list_t*)ompi_list_get_end(&seg->triggers);
) {
mca_gpr_replica_trigger_list_t* next = (mca_gpr_replica_trigger_list_t*)ompi_list_get_next(trig);
if (gpr_replica_check_key_list(trig->addr_mode, trig->num_keys, trig->keys,
num_tokens, keys)) {
trig->count--;
@ -325,6 +327,7 @@ int gpr_replica_delete_object_nl(ompi_registry_mode_t addr_mode,
} else if (trig->count == trig->trigger) {
trig->above_below = MCA_GPR_REPLICA_TRIGGER_AT_LEVEL;
}
trig = next;
}