We have a goto label for cleanup so make sure we always use it. This way we insure
that the lock are correctly released in all cases. This commit was SVN r14925.
Этот коммит содержится в:
родитель
28c9d0758b
Коммит
24eae5c1ec
@ -60,25 +60,20 @@ int orte_gpr_replica_put(orte_std_cntr_t cnt, orte_gpr_value_t **values)
|
|||||||
/* first check for error - all keyvals must have a non-NULL string key */
|
/* first check for error - all keyvals must have a non-NULL string key */
|
||||||
for (j=0; j < val->cnt; j++) {
|
for (j=0; j < val->cnt; j++) {
|
||||||
if (NULL == (val->keyvals[j])->key) {
|
if (NULL == (val->keyvals[j])->key) {
|
||||||
ORTE_ERROR_LOG(ORTE_ERR_BAD_PARAM);
|
rc = ORTE_ERR_BAD_PARAM;
|
||||||
OPAL_THREAD_UNLOCK(&orte_gpr_replica_globals.mutex);
|
goto CLEANUP;
|
||||||
return ORTE_ERR_BAD_PARAM;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* find the segment */
|
/* find the segment */
|
||||||
if (ORTE_SUCCESS != (rc = orte_gpr_replica_find_seg(&seg, true, val->segment))) {
|
if (ORTE_SUCCESS != (rc = orte_gpr_replica_find_seg(&seg, true, val->segment))) {
|
||||||
ORTE_ERROR_LOG(rc);
|
goto CLEANUP;
|
||||||
OPAL_THREAD_UNLOCK(&orte_gpr_replica_globals.mutex);
|
|
||||||
return rc;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* convert tokens to array of itags */
|
/* convert tokens to array of itags */
|
||||||
if (ORTE_SUCCESS != (rc = orte_gpr_replica_get_itag_list(&itags, seg,
|
if (ORTE_SUCCESS != (rc = orte_gpr_replica_get_itag_list(&itags, seg,
|
||||||
val->tokens, &(val->num_tokens)))) {
|
val->tokens, &(val->num_tokens)))) {
|
||||||
ORTE_ERROR_LOG(rc);
|
goto CLEANUP;
|
||||||
OPAL_THREAD_UNLOCK(&orte_gpr_replica_globals.mutex);
|
|
||||||
return rc;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ORTE_SUCCESS != (rc = orte_gpr_replica_put_fn(val->addr_mode, seg, itags, val->num_tokens,
|
if (ORTE_SUCCESS != (rc = orte_gpr_replica_put_fn(val->addr_mode, seg, itags, val->num_tokens,
|
||||||
@ -87,17 +82,16 @@ int orte_gpr_replica_put(orte_std_cntr_t cnt, orte_gpr_value_t **values)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (ORTE_SUCCESS != (rc = orte_gpr_replica_check_events())) {
|
if (ORTE_SUCCESS != (rc = orte_gpr_replica_check_events())) {
|
||||||
ORTE_ERROR_LOG(rc);
|
|
||||||
goto CLEANUP;
|
goto CLEANUP;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (NULL != itags) {
|
if (NULL != itags) {
|
||||||
free(itags);
|
free(itags);
|
||||||
|
itags = NULL;
|
||||||
}
|
}
|
||||||
itags = NULL;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
CLEANUP:
|
CLEANUP: /* or not ... */
|
||||||
/* release list of itags */
|
/* release list of itags */
|
||||||
if (NULL != itags) {
|
if (NULL != itags) {
|
||||||
free(itags);
|
free(itags);
|
||||||
@ -105,12 +99,13 @@ CLEANUP:
|
|||||||
|
|
||||||
if (ORTE_SUCCESS == rc) {
|
if (ORTE_SUCCESS == rc) {
|
||||||
rc = orte_gpr_replica_process_callbacks();
|
rc = orte_gpr_replica_process_callbacks();
|
||||||
|
} else {
|
||||||
|
ORTE_ERROR_LOG(rc);
|
||||||
}
|
}
|
||||||
|
|
||||||
OPAL_THREAD_UNLOCK(&orte_gpr_replica_globals.mutex);
|
OPAL_THREAD_UNLOCK(&orte_gpr_replica_globals.mutex);
|
||||||
|
|
||||||
return rc;
|
return rc;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Загрузка…
x
Ссылка в новой задаче
Block a user