Hi Denis, I have a fair bit of experience with CH3, but not much in the netmods. This sounds like something that could be handled by the corresponding eager/rendezvous code via MPIDI_CH3U_Receive_data_found. Are you providing new eager/rendezvous implementations in your netmod? I don't have enough personal context to evaluate the overall structure, but your else case below looks reasonable to me. Best, ~Jim. On 4/9/13 6:54 AM, Kirjanov, Denis wrote:
Hello, I'm writing a netmod and I have a trouble with receiving a messages directly to the user buffer:
The relevant code looks like the following:
Assuming we have a request with the one iov entry /*************** if (!VC_CH(vc)->recv_active) { /* handle a new message using MPID_nem_handle_pkt() */ } else { MPIU_Memcpy(iov->MPID_IOV_BUF, &recv_buff->buff[0], bytes_recvd); iov->MPID_IOV_BUF = (void *)((char *)iov->MPID_IOV_BUF + bytes_recvd); iov->MPID_IOV_LEN -= bytes_recvd; }
if (iov->MPID_IOV_LEN) { /* receive directly to the iov->MPID_IOV_BUF next time*/ goto fn_exit; }
/* handle a recv request */ } ********************/ The problem that I'm running an IMB program compiled with CHECK option and it claims about corrupted buffer. Is this is a right way to handle packet chunks which will be saved in the user buffer pointer provided in the rreq?
Thanks!