Correction to resolve a problem related to partial reads. We were making a
copy of the receive buffer based on the iovec struct that may have been updated during partial reads to reflect the current offset. Need to make the copy using the base address of the buffer. Thanks to Sven Stork for finding this. This should be backported to 1.0.X and 1.1.X branches. This commit was SVN r9749.
Этот коммит содержится в:
родитель
9cab1bb54a
Коммит
0a56067509
@ -517,11 +517,9 @@ static void mca_oob_tcp_msg_data(mca_oob_tcp_msg_t* msg, mca_oob_tcp_peer_t* pee
|
||||
int mca_oob_tcp_msg_copy(mca_oob_tcp_msg_t* msg, struct iovec* iov, int count)
|
||||
{
|
||||
int i;
|
||||
struct iovec *src = msg->msg_rwiov+1;
|
||||
unsigned char* src_ptr = (unsigned char*)msg->msg_rwbuf;
|
||||
size_t src_len = msg->msg_hdr.msg_size;
|
||||
struct iovec *dst = iov;
|
||||
unsigned char* src_ptr = (unsigned char*)src->iov_base;
|
||||
size_t src_len = src->iov_len;
|
||||
int src_cnt = 0;
|
||||
int rc = 0;
|
||||
|
||||
for(i=0; i<count; i++) {
|
||||
@ -536,11 +534,7 @@ int mca_oob_tcp_msg_copy(mca_oob_tcp_msg_t* msg, struct iovec* iov, int count)
|
||||
src_ptr += len;
|
||||
src_len -= len;
|
||||
if(src_len == 0) {
|
||||
if(++src_cnt == msg->msg_rwcnt)
|
||||
return rc;
|
||||
src++;
|
||||
src_ptr = (unsigned char*)src->iov_base;
|
||||
src_len = src->iov_len;
|
||||
return rc;
|
||||
}
|
||||
}
|
||||
dst++;
|
||||
|
@ -188,8 +188,6 @@ mca_oob_tcp_peer_t * mca_oob_tcp_peer_lookup(const orte_process_name_t* name)
|
||||
{
|
||||
int rc;
|
||||
mca_oob_tcp_peer_t * peer, *old;
|
||||
opal_list_item_t* item;
|
||||
|
||||
if (NULL == name) { /* can't look this one up */
|
||||
return NULL;
|
||||
}
|
||||
@ -702,8 +700,6 @@ static void mca_oob_tcp_peer_recv_handler(int sd, short flags, void* user)
|
||||
msg->msg_peer = peer->peer_name;
|
||||
msg->msg_rwiov = mca_oob_tcp_msg_iov_alloc(msg,2);
|
||||
msg->msg_rwbuf = NULL;
|
||||
msg->msg_rwiov->iov_base = (ompi_iov_base_ptr_t)msg->msg_rwbuf;
|
||||
msg->msg_rwiov->iov_len = 1;
|
||||
msg->msg_rwcnt = msg->msg_rwnum = 1;
|
||||
msg->msg_rwptr = msg->msg_rwiov;
|
||||
msg->msg_rwiov[0].iov_base = (ompi_iov_base_ptr_t)&msg->msg_hdr;
|
||||
|
Загрузка…
x
Ссылка в новой задаче
Block a user