1
1

- don't track the sequence number when the endpoint is a data sink,

its not needed and there could be multiple sources each w/ their 
  own sequence.
- if a write doesn't complete, need to check for non-blocking case.. 

This commit was SVN r7795.
Этот коммит содержится в:
Tim Woodall 2005-10-18 14:26:12 +00:00
родитель f9974f72e0
Коммит d0cd752e33
2 изменённых файлов: 5 добавлений и 6 удалений

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

@ -162,6 +162,8 @@ static void orte_iof_base_endpoint_write_handler(int sd, short flags, void *user
if(rc < 0) {
if(errno == EAGAIN)
break;
if(errno == EINTR)
continue;
orte_iof_base_endpoint_closed(endpoint);
OPAL_THREAD_UNLOCK(&orte_iof_base.iof_lock);
return;
@ -173,7 +175,6 @@ static void orte_iof_base_endpoint_write_handler(int sd, short flags, void *user
}
opal_list_remove_item(&endpoint->ep_frags, &frag->super);
OPAL_THREAD_UNLOCK(&orte_iof_base.iof_lock);
orte_iof_base_endpoint_ack(endpoint, frag->frag_hdr.hdr_msg.msg_seq + frag->frag_hdr.hdr_msg.msg_len);
orte_iof_base_frag_ack(frag);
OPAL_THREAD_LOCK(&orte_iof_base.iof_lock);
}
@ -392,7 +393,6 @@ int orte_iof_base_endpoint_forward(
}
OPAL_THREAD_LOCK(&orte_iof_base.iof_lock);
endpoint->ep_seq = hdr->msg_seq + hdr->msg_len;
frag->frag_owner = endpoint;
frag->frag_src = *src;
frag->frag_hdr.hdr_msg = *hdr;
@ -400,7 +400,7 @@ int orte_iof_base_endpoint_forward(
/* try to write w/out copying data */
if(opal_list_get_size(&endpoint->ep_frags) == 0) {
rc = write(endpoint->ep_fd,data,len);
if(rc < 0) {
if(rc < 0 && (errno != EAGAIN && errno != EINTR)) {
orte_iof_base_endpoint_closed(endpoint);
OPAL_THREAD_UNLOCK(&orte_iof_base.iof_lock);
return ORTE_SUCCESS;
@ -419,9 +419,7 @@ int orte_iof_base_endpoint_forward(
OPAL_THREAD_UNLOCK(&orte_iof_base.iof_lock);
} else {
OPAL_THREAD_UNLOCK(&orte_iof_base.iof_lock);
/* acknowledge fragment */
orte_iof_base_endpoint_ack(endpoint, frag->frag_hdr.hdr_msg.msg_seq + frag->frag_hdr.hdr_msg.msg_len);
orte_iof_base_frag_ack(frag);
}
return ORTE_SUCCESS;
@ -434,6 +432,7 @@ int orte_iof_base_endpoint_forward(
* is now open, re-enable forwarding.
*/
int orte_iof_base_endpoint_ack(
orte_iof_base_endpoint_t* endpoint,
uint32_t seq)

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

@ -38,7 +38,7 @@ OBJ_CLASS_DECLARATION(orte_iof_base_endpoint_t);
*/
#define ORTE_IOF_BASE_SEQDIFF(s1,s2) \
((s1 > s2) ? (s1 - s2) : (s1 + (ULONG_MAX - s2)))
((s1 >= s2) ? (s1 - s2) : (s1 + (ULONG_MAX - s2)))
/**