From 8d48c2113f097ba940cc7b3fb36f8a1d75a93bc1 Mon Sep 17 00:00:00 2001 From: Tim Woodall Date: Tue, 26 Oct 2004 21:45:25 +0000 Subject: [PATCH] added renamed ompi_request_test to ompi_request_test_any and added new ompi_request_test w/ the correct semantics for a single test This commit was SVN r3355. --- src/request/req_test.c | 2 +- src/request/request.h | 44 +++++++++++++++++++++++++++++++++++++++--- 2 files changed, 42 insertions(+), 4 deletions(-) diff --git a/src/request/req_test.c b/src/request/req_test.c index 897ac27430..471bb321cb 100644 --- a/src/request/req_test.c +++ b/src/request/req_test.c @@ -8,7 +8,7 @@ #include "request/request.h" -int ompi_request_test( +int ompi_request_test_any( size_t count, ompi_request_t ** requests, int *index, diff --git a/src/request/request.h b/src/request/request.h index 3b0b59638a..1f6a12436b 100644 --- a/src/request/request.h +++ b/src/request/request.h @@ -175,6 +175,45 @@ static inline int ompi_request_free(ompi_request_t** request) return (*request)->req_free(request); } +/** + * Non-blocking test for request completion. + * + * @param request (IN) Array of requests + * @param complete (OUT) Flag indicating if index is valid (a request completed). + * @param status (OUT) Status of completed request. + * @return OMPI_SUCCESS or failure status. + * + * Note that upon completion, the request is freed, and the + * request handle at index set to NULL. + */ + + +static inline int ompi_request_test( + ompi_request_t ** rptr, + int *completed, + ompi_status_public_t * status) +{ + ompi_request_t *request = *rptr; + ompi_atomic_mb(); + if (request == MPI_REQUEST_NULL) { + *completed = true; + if (MPI_STATUS_IGNORE != status) { + *status = ompi_request_null.req_status; + } + return OMPI_SUCCESS; + } + else if (request->req_complete) { + *completed = true; + if (MPI_STATUS_IGNORE != status) { + *status = request->req_status; + } + return request->req_fini(rptr); + } else { + *completed = false; + return OMPI_SUCCESS; + } +} + /** * Non-blocking test for request completion. * @@ -189,14 +228,13 @@ static inline int ompi_request_free(ompi_request_t** request) * request handle at index set to NULL. */ -OMPI_DECLSPEC int ompi_request_test( +int ompi_request_test_any( size_t count, ompi_request_t ** requests, int *index, int *completed, ompi_status_public_t * status); - - + /** * Non-blocking test for request completion. *