oob/tcp: fix short writev handling in send_msg()
Fixes open-mpi/ompi#3414 Signed-off-by: Gilles Gouaillardet <gilles@rist.or.jp>
Этот коммит содержится в:
родитель
f56847542e
Коммит
c38ef3d46f
@ -14,6 +14,8 @@
|
|||||||
* Copyright (c) 2009 Cisco Systems, Inc. All rights reserved.
|
* Copyright (c) 2009 Cisco Systems, Inc. All rights reserved.
|
||||||
* Copyright (c) 2011 Oak Ridge National Labs. All rights reserved.
|
* Copyright (c) 2011 Oak Ridge National Labs. All rights reserved.
|
||||||
* Copyright (c) 2013-2017 Intel, Inc. All rights reserved.
|
* Copyright (c) 2013-2017 Intel, Inc. All rights reserved.
|
||||||
|
* Copyright (c) 2017 Research Organization for Information Science
|
||||||
|
* and Technology (RIST). All rights reserved.
|
||||||
* $COPYRIGHT$
|
* $COPYRIGHT$
|
||||||
*
|
*
|
||||||
* Additional copyrights may follow
|
* Additional copyrights may follow
|
||||||
@ -179,15 +181,8 @@ static int send_msg(mca_oob_tcp_peer_t* peer, mca_oob_tcp_send_t* msg)
|
|||||||
/* header was fully written, but only a part of the msg data was written */
|
/* header was fully written, but only a part of the msg data was written */
|
||||||
msg->hdr_sent = true;
|
msg->hdr_sent = true;
|
||||||
rc -= msg->sdbytes;
|
rc -= msg->sdbytes;
|
||||||
if (NULL != msg->data) {
|
assert(2 == iov_count);
|
||||||
/* technically, this should never happen as iov_count
|
msg->sdptr = (char *)iov[1].iov_base + rc;
|
||||||
* would be 1 for a zero-byte message, and so we cannot
|
|
||||||
* have a case where we write the header and part of the
|
|
||||||
* msg. However, code checkers don't know that and are
|
|
||||||
* fooled by our earlier check for NULL, and so
|
|
||||||
* we silence their warnings by using this check */
|
|
||||||
msg->sdptr = (char *)msg->data + rc;
|
|
||||||
}
|
|
||||||
msg->sdbytes = ntohl(msg->hdr.nbytes) - rc;
|
msg->sdbytes = ntohl(msg->hdr.nbytes) - rc;
|
||||||
}
|
}
|
||||||
return ORTE_ERR_RESOURCE_BUSY;
|
return ORTE_ERR_RESOURCE_BUSY;
|
||||||
|
Загрузка…
x
Ссылка в новой задаче
Block a user