fixed a recursive lock
This commit was SVN r2712.
Этот коммит содержится в:
родитель
5f29fe41fa
Коммит
513129e816
@ -192,6 +192,11 @@ int gpr_proxy_delete_object(ompi_registry_mode_t mode,
|
|||||||
int recv_tag, i;
|
int recv_tag, i;
|
||||||
int32_t num_tokens, response;
|
int32_t num_tokens, response;
|
||||||
|
|
||||||
|
if (mca_gpr_proxy_debug) {
|
||||||
|
ompi_output(0, "[%d,%d,%d] gpr_proxy_delete_object",
|
||||||
|
ompi_process_info.name->cellid, ompi_process_info.name->jobid, ompi_process_info.name->vpid);
|
||||||
|
}
|
||||||
|
|
||||||
/* need to protect against errors */
|
/* need to protect against errors */
|
||||||
if (NULL == segment || NULL == tokens || NULL == *tokens) {
|
if (NULL == segment || NULL == tokens || NULL == *tokens) {
|
||||||
return OMPI_ERROR;
|
return OMPI_ERROR;
|
||||||
@ -236,14 +241,30 @@ int gpr_proxy_delete_object(ompi_registry_mode_t mode,
|
|||||||
tokptr++;
|
tokptr++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (mca_gpr_proxy_debug) {
|
||||||
|
ompi_output(0, "[%d,%d,%d] gpr_proxy_delete_object: calling mca_oob_send_packed",
|
||||||
|
ompi_process_info.name->cellid, ompi_process_info.name->jobid, ompi_process_info.name->vpid);
|
||||||
|
}
|
||||||
|
|
||||||
if (0 > mca_oob_send_packed(mca_gpr_my_replica, cmd, MCA_OOB_TAG_GPR, 0)) {
|
if (0 > mca_oob_send_packed(mca_gpr_my_replica, cmd, MCA_OOB_TAG_GPR, 0)) {
|
||||||
goto CLEANUP;
|
goto CLEANUP;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (mca_gpr_proxy_debug) {
|
||||||
|
ompi_output(0, "[%d,%d,%d] gpr_proxy_delete_object: calling mca_oob_recv_packed",
|
||||||
|
ompi_process_info.name->cellid, ompi_process_info.name->jobid, ompi_process_info.name->vpid);
|
||||||
|
}
|
||||||
|
|
||||||
if (0 > mca_oob_recv_packed(mca_gpr_my_replica, &answer, &recv_tag)) {
|
if (0 > mca_oob_recv_packed(mca_gpr_my_replica, &answer, &recv_tag)) {
|
||||||
goto CLEANUP;
|
goto CLEANUP;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (mca_gpr_proxy_debug) {
|
||||||
|
ompi_output(0, "[%d,%d,%d] gpr_proxy_delete_object: mca_oob_recv_packed returned",
|
||||||
|
ompi_process_info.name->cellid, ompi_process_info.name->jobid, ompi_process_info.name->vpid);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
if ((OMPI_SUCCESS != ompi_unpack(answer, &command, 1, MCA_GPR_OOB_PACK_CMD))
|
if ((OMPI_SUCCESS != ompi_unpack(answer, &command, 1, MCA_GPR_OOB_PACK_CMD))
|
||||||
|| (MCA_GPR_DELETE_OBJECT_CMD != command)) {
|
|| (MCA_GPR_DELETE_OBJECT_CMD != command)) {
|
||||||
ompi_buffer_free(answer);
|
ompi_buffer_free(answer);
|
||||||
@ -252,16 +273,27 @@ int gpr_proxy_delete_object(ompi_registry_mode_t mode,
|
|||||||
|
|
||||||
if (OMPI_SUCCESS != ompi_unpack(answer, &response, 1, OMPI_INT32)) {
|
if (OMPI_SUCCESS != ompi_unpack(answer, &response, 1, OMPI_INT32)) {
|
||||||
ompi_buffer_free(answer);
|
ompi_buffer_free(answer);
|
||||||
|
if (mca_gpr_proxy_debug) {
|
||||||
|
ompi_output(0, "[%d,%d,%d] gpr_proxy_delete_object: unable to unpack response",
|
||||||
|
ompi_process_info.name->cellid, ompi_process_info.name->jobid, ompi_process_info.name->vpid);
|
||||||
|
}
|
||||||
return OMPI_ERROR;
|
return OMPI_ERROR;
|
||||||
} else {
|
} else {
|
||||||
|
if (mca_gpr_proxy_debug) {
|
||||||
|
ompi_output(0, "[%d,%d,%d] gpr_proxy_delete_object: returning with status %d",
|
||||||
|
ompi_process_info.name->cellid, ompi_process_info.name->jobid, ompi_process_info.name->vpid, response);
|
||||||
|
}
|
||||||
ompi_buffer_free(answer);
|
ompi_buffer_free(answer);
|
||||||
return (int)response;
|
return (int)response;
|
||||||
}
|
}
|
||||||
|
|
||||||
CLEANUP:
|
CLEANUP:
|
||||||
|
if (mca_gpr_proxy_debug) {
|
||||||
|
ompi_output(0, "[%d,%d,%d] gpr_proxy_delete_object: cleanup\n",
|
||||||
|
ompi_process_info.name->cellid, ompi_process_info.name->jobid, ompi_process_info.name->vpid);
|
||||||
|
}
|
||||||
ompi_buffer_free(cmd);
|
ompi_buffer_free(cmd);
|
||||||
return OMPI_ERROR;
|
return OMPI_ERROR;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -679,6 +711,8 @@ int gpr_proxy_synchro(ompi_registry_synchro_mode_t synchro_mode,
|
|||||||
ptr_free_id = (mca_gpr_idtag_list_t*)ompi_list_remove_first(&mca_gpr_proxy_free_notify_id_tags);
|
ptr_free_id = (mca_gpr_idtag_list_t*)ompi_list_remove_first(&mca_gpr_proxy_free_notify_id_tags);
|
||||||
trackptr->id_tag = ptr_free_id->id_tag;
|
trackptr->id_tag = ptr_free_id->id_tag;
|
||||||
}
|
}
|
||||||
|
ompi_list_append(&mca_gpr_proxy_notify_request_tracker, &trackptr->item);
|
||||||
|
OMPI_THREAD_UNLOCK(&mca_gpr_proxy_mutex);
|
||||||
|
|
||||||
if (OMPI_SUCCESS != ompi_pack(cmd, &trackptr->id_tag, 1, OMPI_INT32)) {
|
if (OMPI_SUCCESS != ompi_pack(cmd, &trackptr->id_tag, 1, OMPI_INT32)) {
|
||||||
goto CLEANUP;
|
goto CLEANUP;
|
||||||
@ -704,15 +738,14 @@ int gpr_proxy_synchro(ompi_registry_synchro_mode_t synchro_mode,
|
|||||||
goto CLEANUP;
|
goto CLEANUP;
|
||||||
}
|
}
|
||||||
|
|
||||||
ompi_list_append(&mca_gpr_proxy_notify_request_tracker, &trackptr->item);
|
|
||||||
ompi_buffer_free(answer);
|
ompi_buffer_free(answer);
|
||||||
ompi_buffer_free(cmd);
|
ompi_buffer_free(cmd);
|
||||||
OMPI_THREAD_UNLOCK(&mca_gpr_proxy_mutex);
|
|
||||||
return OMPI_SUCCESS;
|
return OMPI_SUCCESS;
|
||||||
|
|
||||||
CLEANUP:
|
CLEANUP:
|
||||||
if (NULL != trackptr) {
|
if (NULL != trackptr) {
|
||||||
mca_gpr_proxy_last_notify_id_tag--;
|
mca_gpr_proxy_last_notify_id_tag--;
|
||||||
|
ompi_list_remove_item(&mca_gpr_proxy_notify_request_tracker, &trackptr->item);
|
||||||
OBJ_RELEASE(trackptr);
|
OBJ_RELEASE(trackptr);
|
||||||
}
|
}
|
||||||
ompi_buffer_free(cmd);
|
ompi_buffer_free(cmd);
|
||||||
|
Загрузка…
Ссылка в новой задаче
Block a user