1
1

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.
Этот коммит содержится в:
Tim Woodall 2006-04-27 14:27:02 +00:00
родитель 9cab1bb54a
Коммит 0a56067509
2 изменённых файлов: 3 добавлений и 13 удалений

Просмотреть файл

@ -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;