if((*request)->refcount_==0){
if ((*request)->flags_ & MPI_REQ_GENERALIZED){
((*request)->generalized_funcs)->free_fn(((*request)->generalized_funcs)->extra_state);
+ delete (*request)->generalized_funcs;
}else{
Comm::unref((*request)->comm_);
Datatype::unref((*request)->old_type_);
if(smpi_test_sleep > 0)
simcall_process_sleep(nsleeps*smpi_test_sleep);
- MPI_Status* mystatus;
Status::empty(status);
*flag = 1;
if (((*request)->flags_ & MPI_REQ_PREPARED) == 0) {
if (*flag) {
finish_wait(request,status);
if (*request != MPI_REQUEST_NULL && ((*request)->flags_ & MPI_REQ_GENERALIZED)){
+ MPI_Status* mystatus;
if(status==MPI_STATUS_IGNORE){
mystatus=new MPI_Status();
Status::empty(mystatus);
int i;
*flag = 0;
int ret = MPI_SUCCESS;
- MPI_Status* mystatus;
*index = MPI_UNDEFINED;
std::vector<int> map; /** Maps all matching comms back to their location in requests **/
} else {
finish_wait(&requests[*index],status);
if (requests[*index] != MPI_REQUEST_NULL && (requests[*index]->flags_ & MPI_REQ_GENERALIZED)){
+ MPI_Status* mystatus;
if(status==MPI_STATUS_IGNORE){
mystatus=new MPI_Status();
Status::empty(mystatus);
{
MPI_Status stat;
MPI_Status *pstat = status == MPI_STATUSES_IGNORE ? MPI_STATUS_IGNORE : &stat;
- int flag, error=0;
+ int flag;
+ int error = 0;
int ret=MPI_SUCCESS;
*outflag = 1;
for(int i=0; i<count; i++){
nsleeps++;
}
unref(&request);
+ xbt_assert(request == MPI_REQUEST_NULL);
}
void Request::finish_wait(MPI_Request* request, MPI_Status * status)
(*request)->flags_ |= MPI_REQ_GENERALIZED;
(*request)->flags_ |= MPI_REQ_PERSISTENT;
(*request)->refcount_ = 1;
- ((*request)->generalized_funcs)=xbt_new0(s_smpi_mpi_generalized_request_funcs_t ,1);
+ ((*request)->generalized_funcs) = new s_smpi_mpi_generalized_request_funcs_t;
((*request)->generalized_funcs)->query_fn=query_fn;
((*request)->generalized_funcs)->free_fn=free_fn;
((*request)->generalized_funcs)->cancel_fn=cancel_fn;
}
void Request::set_nbc_requests(MPI_Request* reqs, int size){
- nbc_requests_=reqs;
- nbc_requests_size_=size;
+ nbc_requests_size_ = size;
+ if (size > 0) {
+ nbc_requests_ = reqs;
+ } else {
+ delete[] reqs;
+ nbc_requests_ = nullptr;
+ }
}
int Request::get_nbc_requests_size(){