1
1

Fix the timing between turning notifies on when trigger fires so that only one notification is sent. Reverse the order of processing callbacks so that the xcast comes out after all messages sent.

This commit was SVN r6057.
Этот коммит содержится в:
Ralph Castain 2005-06-14 12:37:38 +00:00
родитель 98bf06baa6
Коммит 092f14f2c5
2 изменённых файлов: 13 добавлений и 8 удалений

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

@ -58,7 +58,7 @@ int orte_gpr_replica_process_callbacks(void)
/* set flag indicating callbacks being processed */ /* set flag indicating callbacks being processed */
orte_gpr_replica.processing_callbacks = true; orte_gpr_replica.processing_callbacks = true;
while (NULL != (cb = (orte_gpr_replica_callbacks_t*)ompi_list_remove_first(&orte_gpr_replica.callbacks))) { while (NULL != (cb = (orte_gpr_replica_callbacks_t*)ompi_list_remove_last(&orte_gpr_replica.callbacks))) {
if (NULL == cb->requestor) { /* local callback */ if (NULL == cb->requestor) { /* local callback */
if (orte_gpr_replica_globals.debug) { if (orte_gpr_replica_globals.debug) {

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

@ -202,13 +202,6 @@ int orte_gpr_replica_check_subscriptions(orte_gpr_replica_segment_t *seg)
i < (orte_gpr_replica.triggers)->size; i++) { i < (orte_gpr_replica.triggers)->size; i++) {
if (NULL != trig[i]) { if (NULL != trig[i]) {
cntri++; cntri++;
/* check if trigger is on this subscription - if so, check it */
if (ORTE_GPR_TRIG_ANY & trig[i]->action) {
if (ORTE_SUCCESS != (rc = orte_gpr_replica_check_trig(trig[i]))) {
ORTE_ERROR_LOG(rc);
return rc;
}
}
/* check if notifier is on this subscription - if so, check to see /* check if notifier is on this subscription - if so, check to see
* if it has fired, but ONLY if NOTIFY_START is NOT set * if it has fired, but ONLY if NOTIFY_START is NOT set
*/ */
@ -236,6 +229,18 @@ int orte_gpr_replica_check_subscriptions(orte_gpr_replica_segment_t *seg)
} }
} }
} /* if notify */ } /* if notify */
/* check if trigger is on this subscription - if so, check it.
* NOTE: MUST DO THIS *AFTER* THE NOTIFY CHECK. If the trigger was
* set to start notifies after firing, then checking notifies
* AFTER the triggers were processed causes the notification to
* be sent twice.
*/
if (ORTE_GPR_TRIG_ANY & trig[i]->action) {
if (ORTE_SUCCESS != (rc = orte_gpr_replica_check_trig(trig[i]))) {
ORTE_ERROR_LOG(rc);
return rc;
}
}
} /* if trig not NULL */ } /* if trig not NULL */
} }
return ORTE_SUCCESS; return ORTE_SUCCESS;