diff --git a/ompi/mca/pml/base/pml_base_request.h b/ompi/mca/pml/base/pml_base_request.h index cad4e86750..653e0335a1 100644 --- a/ompi/mca/pml/base/pml_base_request.h +++ b/ompi/mca/pml/base/pml_base_request.h @@ -79,14 +79,7 @@ OMPI_DECLSPEC OBJ_CLASS_DECLARATION(mca_pml_base_request_t); /* * Mark the MPI request as completed and trigger the condition if required. */ -#define MCA_PML_BASE_REQUEST_MPI_COMPLETE( request ) \ -do { \ - (request)->req_complete = true; \ - ompi_request_completed++; \ - if(ompi_request_waiting) { \ - opal_condition_broadcast(&ompi_request_cond); \ - } \ -} while(0) +#define MCA_PML_BASE_REQUEST_MPI_COMPLETE(req) ompi_request_complete(req) #if defined(c_plusplus) || defined(__cplusplus) } diff --git a/ompi/request/grequest.c b/ompi/request/grequest.c index 3fb59ff026..7cf208083d 100644 --- a/ompi/request/grequest.c +++ b/ompi/request/grequest.c @@ -179,7 +179,9 @@ int ompi_grequest_complete(ompi_request_t *req) { int rc; + OPAL_THREAD_LOCK(&ompi_request_lock); rc = ompi_request_complete(req); + OPAL_THREAD_LOCK(&ompi_request_lock); OBJ_RELEASE(req); return rc; } diff --git a/ompi/request/request.c b/ompi/request/request.c index aba98137b4..2895230033 100644 --- a/ompi/request/request.c +++ b/ompi/request/request.c @@ -157,16 +157,3 @@ int ompi_request_finalize(void) OBJ_DESTRUCT( &ompi_request_f_to_c_table ); return OMPI_SUCCESS; } - - -int ompi_request_complete(ompi_request_t* request) -{ - OPAL_THREAD_LOCK(&ompi_request_lock); - ompi_request_completed++; - request->req_complete = true; - if(ompi_request_waiting) - opal_condition_signal(&ompi_request_cond); - OPAL_THREAD_UNLOCK(&ompi_request_lock); - return OMPI_SUCCESS; -} - diff --git a/ompi/request/request.h b/ompi/request/request.h index 8f2944ad2e..9400c4a348 100644 --- a/ompi/request/request.h +++ b/ompi/request/request.h @@ -211,13 +211,6 @@ static inline int ompi_request_cancel(ompi_request_t* request) } -/** - * Signal a request as complete. Note this will - * wake any thread pending on the request. - */ - -OMPI_DECLSPEC int ompi_request_complete(ompi_request_t* request); - /** * Free a request. * @@ -392,6 +385,21 @@ static inline void ompi_request_wait_completion(ompi_request_t *req) } } +/** + * Signal a request as complete. Note this will + * wake any thread pending on the request. + * ompi_request_lock should be held while calling this function + */ + +static inline int ompi_request_complete(ompi_request_t* request) +{ + ompi_request_completed++; + request->req_complete = true; + if(ompi_request_waiting) + opal_condition_signal(&ompi_request_cond); + return OMPI_SUCCESS; +} + END_C_DECLS #endif