From: Arnaud Giersch Date: Wed, 25 Nov 2020 14:07:38 +0000 (+0100) Subject: Save another bunch of new/delete. X-Git-Tag: v3.26~115 X-Git-Url: http://bilbo.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/commitdiff_plain/2ddad2d7ca786fc1a92126a633832017857fbe1f Save another bunch of new/delete. --- diff --git a/src/smpi/include/smpi_request.hpp b/src/smpi/include/smpi_request.hpp index 9e6bb4572a..5b95106e71 100644 --- a/src/smpi/include/smpi_request.hpp +++ b/src/smpi/include/smpi_request.hpp @@ -9,6 +9,8 @@ #include "smpi/smpi.h" #include "smpi_f2c.hpp" +#include + namespace simgrid{ namespace smpi{ @@ -47,7 +49,7 @@ class Request : public F2C { int refcount_; MPI_Op op_; int cancelled_; // tri-state - smpi_mpi_generalized_request_funcs_t* generalized_funcs; + std::unique_ptr generalized_funcs; MPI_Request* nbc_requests_; int nbc_requests_size_; static bool match_common(MPI_Request req, MPI_Request sender, MPI_Request receiver); diff --git a/src/smpi/mpi/smpi_request.cpp b/src/smpi/mpi/smpi_request.cpp index e0c6ec5d1e..df1f75b97d 100644 --- a/src/smpi/mpi/smpi_request.cpp +++ b/src/smpi/mpi/smpi_request.cpp @@ -62,7 +62,6 @@ Request::Request(const void* buf, int count, MPI_Datatype datatype, int src, int else refcount_ = 0; cancelled_ = 0; - generalized_funcs=nullptr; nbc_requests_=nullptr; nbc_requests_size_=0; init_buffer(count); @@ -83,7 +82,6 @@ void Request::unref(MPI_Request* request) 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_); @@ -594,16 +592,15 @@ int Request::test(MPI_Request * request, MPI_Status * status, int* flag) { if (*flag) { finish_wait(request,status); if (*request != MPI_REQUEST_NULL && ((*request)->flags_ & MPI_REQ_GENERALIZED)){ + MPI_Status tmp_status; MPI_Status* mystatus; - if(status==MPI_STATUS_IGNORE){ - mystatus=new MPI_Status(); + if (status == MPI_STATUS_IGNORE) { + mystatus = &tmp_status; Status::empty(mystatus); - }else{ - mystatus=status; + } else { + mystatus = status; } ret = ((*request)->generalized_funcs)->query_fn(((*request)->generalized_funcs)->extra_state, mystatus); - if(status==MPI_STATUS_IGNORE) - delete mystatus; } nsleeps=1;//reset the number of sleeps we will do next time if (*request != MPI_REQUEST_NULL && ((*request)->flags_ & MPI_REQ_PERSISTENT) == 0) @@ -686,16 +683,15 @@ int Request::testany(int count, MPI_Request requests[], int *index, int* flag, M } else { finish_wait(&requests[*index],status); if (requests[*index] != MPI_REQUEST_NULL && (requests[*index]->flags_ & MPI_REQ_GENERALIZED)){ + MPI_Status tmp_status; MPI_Status* mystatus; - if(status==MPI_STATUS_IGNORE){ - mystatus=new MPI_Status(); + if (status == MPI_STATUS_IGNORE) { + mystatus = &tmp_status; Status::empty(mystatus); - }else{ - mystatus=status; + } else { + mystatus = status; } ret=(requests[*index]->generalized_funcs)->query_fn((requests[*index]->generalized_funcs)->extra_state, mystatus); - if(status==MPI_STATUS_IGNORE) - delete mystatus; } if (requests[*index] != MPI_REQUEST_NULL && (requests[*index]->flags_ & MPI_REQ_NON_PERSISTENT)) @@ -945,21 +941,20 @@ int Request::wait(MPI_Request * request, MPI_Status * status) } if (*request != MPI_REQUEST_NULL && ((*request)->flags_ & MPI_REQ_GENERALIZED)){ - MPI_Status* mystatus; if(!((*request)->flags_ & MPI_REQ_COMPLETE)){ ((*request)->generalized_funcs)->mutex->lock(); ((*request)->generalized_funcs)->cond->wait(((*request)->generalized_funcs)->mutex); ((*request)->generalized_funcs)->mutex->unlock(); - } - if(status==MPI_STATUS_IGNORE){ - mystatus=new MPI_Status(); + } + MPI_Status tmp_status; + MPI_Status* mystatus; + if (status == MPI_STATUS_IGNORE) { + mystatus = &tmp_status; Status::empty(mystatus); - }else{ - mystatus=status; + } else { + mystatus = status; } ret = ((*request)->generalized_funcs)->query_fn(((*request)->generalized_funcs)->extra_state, mystatus); - if(status==MPI_STATUS_IGNORE) - delete mystatus; } finish_wait(request,status); @@ -1165,7 +1160,7 @@ int Request::grequest_start(MPI_Grequest_query_function* query_fn, MPI_Grequest_ (*request)->flags_ |= MPI_REQ_GENERALIZED; (*request)->flags_ |= MPI_REQ_PERSISTENT; (*request)->refcount_ = 1; - ((*request)->generalized_funcs) = new smpi_mpi_generalized_request_funcs_t; + ((*request)->generalized_funcs) = std::make_unique(); ((*request)->generalized_funcs)->query_fn=query_fn; ((*request)->generalized_funcs)->free_fn=free_fn; ((*request)->generalized_funcs)->cancel_fn=cancel_fn;