Fix heterogeneous issue with non-blocking RML receive, where the sender
field could be in the wrong endianness This commit was SVN r15989.
Этот коммит содержится в:
родитель
fa69c5cc10
Коммит
dcf678dbab
@ -55,6 +55,21 @@ struct orte_rml_oob_msg_header_t {
|
|||||||
};
|
};
|
||||||
typedef struct orte_rml_oob_msg_header_t orte_rml_oob_msg_header_t;
|
typedef struct orte_rml_oob_msg_header_t orte_rml_oob_msg_header_t;
|
||||||
|
|
||||||
|
#define ORTE_RML_OOB_MSG_HEADER_HTON(hdr) \
|
||||||
|
do { \
|
||||||
|
ORTE_PROCESS_NAME_HTON((hdr).origin); \
|
||||||
|
ORTE_PROCESS_NAME_HTON((hdr).destination); \
|
||||||
|
(hdr).tag = htonl((hdr).tag); \
|
||||||
|
} while (0)
|
||||||
|
|
||||||
|
|
||||||
|
#define ORTE_RML_OOB_MSG_HEADER_NTOH(hdr) \
|
||||||
|
do { \
|
||||||
|
ORTE_PROCESS_NAME_NTOH((hdr).origin); \
|
||||||
|
ORTE_PROCESS_NAME_NTOH((hdr).destination); \
|
||||||
|
(hdr).tag = ntohl((hdr).tag); \
|
||||||
|
} while (0)
|
||||||
|
|
||||||
|
|
||||||
struct orte_rml_oob_msg_t {
|
struct orte_rml_oob_msg_t {
|
||||||
opal_object_t super;
|
opal_object_t super;
|
||||||
|
@ -38,6 +38,7 @@ orte_rml_recv_msg_callback(int status,
|
|||||||
status -= sizeof(orte_rml_oob_msg_header_t);
|
status -= sizeof(orte_rml_oob_msg_header_t);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ORTE_RML_OOB_MSG_HEADER_NTOH(*hdr);
|
||||||
msg->msg_cbfunc.iov(status, &hdr->origin, iov + 1, count - 1,
|
msg->msg_cbfunc.iov(status, &hdr->origin, iov + 1, count - 1,
|
||||||
hdr->tag, msg->msg_cbdata);
|
hdr->tag, msg->msg_cbdata);
|
||||||
if (!msg->msg_persistent) OBJ_RELEASE(msg);
|
if (!msg->msg_persistent) OBJ_RELEASE(msg);
|
||||||
@ -47,6 +48,8 @@ orte_rml_recv_msg_callback(int status,
|
|||||||
status = orte_dss.load(&msg->msg_recv_buffer,
|
status = orte_dss.load(&msg->msg_recv_buffer,
|
||||||
iov[1].iov_base,
|
iov[1].iov_base,
|
||||||
iov[1].iov_len);
|
iov[1].iov_len);
|
||||||
|
|
||||||
|
ORTE_RML_OOB_MSG_HEADER_NTOH(*hdr);
|
||||||
msg->msg_cbfunc.buffer(status, &hdr->origin, &msg->msg_recv_buffer,
|
msg->msg_cbfunc.buffer(status, &hdr->origin, &msg->msg_recv_buffer,
|
||||||
hdr->tag, msg->msg_cbdata);
|
hdr->tag, msg->msg_cbdata);
|
||||||
|
|
||||||
|
@ -43,6 +43,7 @@ orte_rml_send_msg_callback(int status,
|
|||||||
if (status > 0) {
|
if (status > 0) {
|
||||||
status -= sizeof(orte_rml_oob_msg_header_t);
|
status -= sizeof(orte_rml_oob_msg_header_t);
|
||||||
}
|
}
|
||||||
|
ORTE_RML_OOB_MSG_HEADER_NTOH(*hdr);
|
||||||
msg->msg_cbfunc.iov(status, peer, iov + 1, count - 1,
|
msg->msg_cbfunc.iov(status, peer, iov + 1, count - 1,
|
||||||
hdr->tag, msg->msg_cbdata);
|
hdr->tag, msg->msg_cbdata);
|
||||||
OBJ_RELEASE(msg);
|
OBJ_RELEASE(msg);
|
||||||
@ -51,6 +52,7 @@ orte_rml_send_msg_callback(int status,
|
|||||||
if (status > 0) {
|
if (status > 0) {
|
||||||
status -= sizeof(orte_rml_oob_msg_header_t);
|
status -= sizeof(orte_rml_oob_msg_header_t);
|
||||||
}
|
}
|
||||||
|
ORTE_RML_OOB_MSG_HEADER_NTOH(*hdr);
|
||||||
msg->msg_cbfunc.buffer(status, peer, msg->user_buffer,
|
msg->msg_cbfunc.buffer(status, peer, msg->user_buffer,
|
||||||
hdr->tag, msg->msg_cbdata);
|
hdr->tag, msg->msg_cbdata);
|
||||||
OBJ_RELEASE(msg->user_buffer);
|
OBJ_RELEASE(msg->user_buffer);
|
||||||
@ -96,6 +98,7 @@ orte_rml_oob_send(orte_process_name_t* peer,
|
|||||||
msg->msg_header.origin = *ORTE_PROC_MY_NAME;
|
msg->msg_header.origin = *ORTE_PROC_MY_NAME;
|
||||||
msg->msg_header.destination = *peer;
|
msg->msg_header.destination = *peer;
|
||||||
msg->msg_header.tag = tag;
|
msg->msg_header.tag = tag;
|
||||||
|
ORTE_RML_OOB_MSG_HEADER_HTON(msg->msg_header);
|
||||||
|
|
||||||
if (0 == orte_ns.compare_fields(ORTE_NS_CMP_ALL, &next, peer)) {
|
if (0 == orte_ns.compare_fields(ORTE_NS_CMP_ALL, &next, peer)) {
|
||||||
real_tag = tag;
|
real_tag = tag;
|
||||||
@ -166,6 +169,7 @@ orte_rml_oob_send_nb(orte_process_name_t* peer,
|
|||||||
msg->msg_header.origin = *ORTE_PROC_MY_NAME;
|
msg->msg_header.origin = *ORTE_PROC_MY_NAME;
|
||||||
msg->msg_header.destination = *peer;
|
msg->msg_header.destination = *peer;
|
||||||
msg->msg_header.tag = tag;
|
msg->msg_header.tag = tag;
|
||||||
|
ORTE_RML_OOB_MSG_HEADER_HTON(msg->msg_header);
|
||||||
|
|
||||||
if (0 == orte_ns.compare_fields(ORTE_NS_CMP_ALL, &next, peer)) {
|
if (0 == orte_ns.compare_fields(ORTE_NS_CMP_ALL, &next, peer)) {
|
||||||
real_tag = tag;
|
real_tag = tag;
|
||||||
@ -258,6 +262,7 @@ orte_rml_oob_send_buffer_nb(orte_process_name_t* peer,
|
|||||||
msg->msg_header.origin = *ORTE_PROC_MY_NAME;
|
msg->msg_header.origin = *ORTE_PROC_MY_NAME;
|
||||||
msg->msg_header.destination = *peer;
|
msg->msg_header.destination = *peer;
|
||||||
msg->msg_header.tag = tag;
|
msg->msg_header.tag = tag;
|
||||||
|
ORTE_RML_OOB_MSG_HEADER_HTON(msg->msg_header);
|
||||||
|
|
||||||
if (0 == orte_ns.compare_fields(ORTE_NS_CMP_ALL, &next, peer)) {
|
if (0 == orte_ns.compare_fields(ORTE_NS_CMP_ALL, &next, peer)) {
|
||||||
real_tag = tag;
|
real_tag = tag;
|
||||||
|
Загрузка…
Ссылка в новой задаче
Block a user