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;
|
||||
|
||||
#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 {
|
||||
opal_object_t super;
|
||||
|
@ -38,6 +38,7 @@ orte_rml_recv_msg_callback(int status,
|
||||
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,
|
||||
hdr->tag, msg->msg_cbdata);
|
||||
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,
|
||||
iov[1].iov_base,
|
||||
iov[1].iov_len);
|
||||
|
||||
ORTE_RML_OOB_MSG_HEADER_NTOH(*hdr);
|
||||
msg->msg_cbfunc.buffer(status, &hdr->origin, &msg->msg_recv_buffer,
|
||||
hdr->tag, msg->msg_cbdata);
|
||||
|
||||
|
@ -43,6 +43,7 @@ orte_rml_send_msg_callback(int status,
|
||||
if (status > 0) {
|
||||
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,
|
||||
hdr->tag, msg->msg_cbdata);
|
||||
OBJ_RELEASE(msg);
|
||||
@ -51,6 +52,7 @@ orte_rml_send_msg_callback(int status,
|
||||
if (status > 0) {
|
||||
status -= sizeof(orte_rml_oob_msg_header_t);
|
||||
}
|
||||
ORTE_RML_OOB_MSG_HEADER_NTOH(*hdr);
|
||||
msg->msg_cbfunc.buffer(status, peer, msg->user_buffer,
|
||||
hdr->tag, msg->msg_cbdata);
|
||||
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.destination = *peer;
|
||||
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)) {
|
||||
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.destination = *peer;
|
||||
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)) {
|
||||
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.destination = *peer;
|
||||
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)) {
|
||||
real_tag = tag;
|
||||
|
Загрузка…
Ссылка в новой задаче
Block a user