From 657168a74c6fe4dbf28c60d540dc6c8c1c785fb2 Mon Sep 17 00:00:00 2001 From: Brian Barrett Date: Fri, 1 Dec 2006 20:05:06 +0000 Subject: [PATCH] A couple of Window related error handling cleanups: * Always invoke the error handler on MPI_COMM_WORLD for invalid windows (except in win_create, which should instead be on the given communicator). * Allow get_errhandler in addition to set_errhandler on MPI_WIN_NULL Refs trac:647 This commit was SVN r12718. The following Trac tickets were found above: Ticket 647 --> https://svn.open-mpi.org/trac/ompi/ticket/647 --- ompi/mpi/c/win_c2f.c | 4 ++-- ompi/mpi/c/win_complete.c | 2 +- ompi/mpi/c/win_delete_attr.c | 2 +- ompi/mpi/c/win_fence.c | 2 +- ompi/mpi/c/win_get_errhandler.c | 4 ++-- ompi/mpi/c/win_get_group.c | 2 +- ompi/mpi/c/win_get_name.c | 2 +- ompi/mpi/c/win_lock.c | 2 +- ompi/mpi/c/win_post.c | 2 +- ompi/mpi/c/win_set_attr.c | 2 +- ompi/mpi/c/win_set_name.c | 2 +- ompi/mpi/c/win_start.c | 2 +- ompi/mpi/c/win_test.c | 2 +- ompi/mpi/c/win_unlock.c | 2 +- ompi/mpi/c/win_wait.c | 2 +- 15 files changed, 17 insertions(+), 17 deletions(-) diff --git a/ompi/mpi/c/win_c2f.c b/ompi/mpi/c/win_c2f.c index 6aff36722f..895e755dc3 100644 --- a/ompi/mpi/c/win_c2f.c +++ b/ompi/mpi/c/win_c2f.c @@ -40,9 +40,9 @@ MPI_Fint MPI_Win_c2f(MPI_Win win) if ( MPI_PARAM_CHECK) { OMPI_ERR_INIT_FINALIZE(FUNC_NAME); - /* Note that ompi_comm_invalid() explicitly checks for + /* Note that ompi_win_invalid() explicitly checks for MPI_WIN_NULL, but MPI_WIN_C2F is supposed to treat - MPI_WIN_NULL as a valid communicator (and therefore return + MPI_WIN_NULL as a valid window (and therefore return a valid Fortran handle for it). Hence, this function should not return an error if MPI_WIN_NULL is passed in. diff --git a/ompi/mpi/c/win_complete.c b/ompi/mpi/c/win_complete.c index 45387081ef..fa0414ec92 100644 --- a/ompi/mpi/c/win_complete.c +++ b/ompi/mpi/c/win_complete.c @@ -41,7 +41,7 @@ int MPI_Win_complete(MPI_Win win) OMPI_ERR_INIT_FINALIZE(FUNC_NAME); if (ompi_win_invalid(win)) { - return OMPI_ERRHANDLER_INVOKE(win, MPI_ERR_WIN, FUNC_NAME); + return OMPI_ERRHANDLER_INVOKE(MPI_COMM_WORLD, MPI_ERR_WIN, FUNC_NAME); } else if (0 == (ompi_win_get_mode(win) & OMPI_WIN_STARTED)) { return OMPI_ERRHANDLER_INVOKE(win, MPI_ERR_RMA_SYNC, FUNC_NAME); } diff --git a/ompi/mpi/c/win_delete_attr.c b/ompi/mpi/c/win_delete_attr.c index 454e3d0df8..4aa63499cf 100644 --- a/ompi/mpi/c/win_delete_attr.c +++ b/ompi/mpi/c/win_delete_attr.c @@ -41,7 +41,7 @@ int MPI_Win_delete_attr(MPI_Win win, int win_keyval) OMPI_ERR_INIT_FINALIZE(FUNC_NAME); if (ompi_win_invalid(win)) { - return OMPI_ERRHANDLER_INVOKE(win, MPI_ERR_WIN, FUNC_NAME); + return OMPI_ERRHANDLER_INVOKE(MPI_COMM_WORLD, MPI_ERR_WIN, FUNC_NAME); } } diff --git a/ompi/mpi/c/win_fence.c b/ompi/mpi/c/win_fence.c index 03444906ee..d777d1c6a7 100644 --- a/ompi/mpi/c/win_fence.c +++ b/ompi/mpi/c/win_fence.c @@ -41,7 +41,7 @@ int MPI_Win_fence(int assert, MPI_Win win) OMPI_ERR_INIT_FINALIZE(FUNC_NAME); if (ompi_win_invalid(win)) { - return OMPI_ERRHANDLER_INVOKE(win, MPI_ERR_WIN, FUNC_NAME); + return OMPI_ERRHANDLER_INVOKE(MPI_COMM_WORLD, MPI_ERR_WIN, FUNC_NAME); } else if (0 != (assert & ~(MPI_MODE_NOSTORE | MPI_MODE_NOPUT | MPI_MODE_NOPRECEDE | MPI_MODE_NOSUCCEED))) { return OMPI_ERRHANDLER_INVOKE(win, MPI_ERR_ASSERT, FUNC_NAME); diff --git a/ompi/mpi/c/win_get_errhandler.c b/ompi/mpi/c/win_get_errhandler.c index aa39b01f15..9fd9c75690 100644 --- a/ompi/mpi/c/win_get_errhandler.c +++ b/ompi/mpi/c/win_get_errhandler.c @@ -36,11 +36,11 @@ int MPI_Win_get_errhandler(MPI_Win win, MPI_Errhandler *errhandler) { if (MPI_PARAM_CHECK) { OMPI_ERR_INIT_FINALIZE(FUNC_NAME); - if (ompi_win_invalid(win)) { + if (ompi_win_invalid(win) && win != MPI_WIN_NULL) { return OMPI_ERRHANDLER_INVOKE(MPI_COMM_WORLD, MPI_ERR_ARG, FUNC_NAME); } else if (NULL == errhandler) { - return OMPI_ERRHANDLER_INVOKE(MPI_COMM_WORLD, MPI_ERR_ARG, + return OMPI_ERRHANDLER_INVOKE(win, MPI_ERR_ARG, FUNC_NAME); } } diff --git a/ompi/mpi/c/win_get_group.c b/ompi/mpi/c/win_get_group.c index 7080ad4fcd..500b92873d 100644 --- a/ompi/mpi/c/win_get_group.c +++ b/ompi/mpi/c/win_get_group.c @@ -40,7 +40,7 @@ int MPI_Win_get_group(MPI_Win win, MPI_Group *group) OMPI_ERR_INIT_FINALIZE(FUNC_NAME); if (ompi_win_invalid(win)) { - return OMPI_ERRHANDLER_INVOKE(win, MPI_ERR_WIN, FUNC_NAME); + return OMPI_ERRHANDLER_INVOKE(MPI_COMM_WORLD, MPI_ERR_WIN, FUNC_NAME); } else if (NULL == group) { return OMPI_ERRHANDLER_INVOKE(win, MPI_ERR_ARG, FUNC_NAME); } diff --git a/ompi/mpi/c/win_get_name.c b/ompi/mpi/c/win_get_name.c index d86c7c0677..8323565661 100644 --- a/ompi/mpi/c/win_get_name.c +++ b/ompi/mpi/c/win_get_name.c @@ -40,7 +40,7 @@ int MPI_Win_get_name(MPI_Win win, char *win_name, int *resultlen) OMPI_ERR_INIT_FINALIZE(FUNC_NAME); if (ompi_win_invalid(win)) { - return OMPI_ERRHANDLER_INVOKE(win, MPI_ERR_WIN, FUNC_NAME); + return OMPI_ERRHANDLER_INVOKE(MPI_COMM_WORLD, MPI_ERR_WIN, FUNC_NAME); } else if (NULL == win_name || NULL == resultlen) { return OMPI_ERRHANDLER_INVOKE(win, MPI_ERR_ARG, FUNC_NAME); } diff --git a/ompi/mpi/c/win_lock.c b/ompi/mpi/c/win_lock.c index 21b5447e43..5ae047aa0d 100644 --- a/ompi/mpi/c/win_lock.c +++ b/ompi/mpi/c/win_lock.c @@ -41,7 +41,7 @@ int MPI_Win_lock(int lock_type, int rank, int assert, MPI_Win win) OMPI_ERR_INIT_FINALIZE(FUNC_NAME); if (ompi_win_invalid(win)) { - return OMPI_ERRHANDLER_INVOKE(win, MPI_ERR_WIN, FUNC_NAME); + return OMPI_ERRHANDLER_INVOKE(MPI_COMM_WORLD, MPI_ERR_WIN, FUNC_NAME); } else if (lock_type != MPI_LOCK_EXCLUSIVE && lock_type != MPI_LOCK_SHARED) { return OMPI_ERRHANDLER_INVOKE(win, MPI_ERR_LOCKTYPE, FUNC_NAME); diff --git a/ompi/mpi/c/win_post.c b/ompi/mpi/c/win_post.c index de6d0a3760..d8335b9c90 100644 --- a/ompi/mpi/c/win_post.c +++ b/ompi/mpi/c/win_post.c @@ -41,7 +41,7 @@ int MPI_Win_post(MPI_Group group, int assert, MPI_Win win) OMPI_ERR_INIT_FINALIZE(FUNC_NAME); if (ompi_win_invalid(win)) { - return OMPI_ERRHANDLER_INVOKE(win, MPI_ERR_WIN, FUNC_NAME); + return OMPI_ERRHANDLER_INVOKE(MPI_COMM_WORLD, MPI_ERR_WIN, FUNC_NAME); } else if (0 != (assert & ~(MPI_MODE_NOCHECK | MPI_MODE_NOSTORE | MPI_MODE_NOPUT))) { return OMPI_ERRHANDLER_INVOKE(win, MPI_ERR_ASSERT, FUNC_NAME); diff --git a/ompi/mpi/c/win_set_attr.c b/ompi/mpi/c/win_set_attr.c index 7716f8c7c5..809938f607 100644 --- a/ompi/mpi/c/win_set_attr.c +++ b/ompi/mpi/c/win_set_attr.c @@ -41,7 +41,7 @@ int MPI_Win_set_attr(MPI_Win win, int win_keyval, void *attribute_val) OMPI_ERR_INIT_FINALIZE(FUNC_NAME); if (ompi_win_invalid(win)) { - return OMPI_ERRHANDLER_INVOKE(win, MPI_ERR_WIN, FUNC_NAME); + return OMPI_ERRHANDLER_INVOKE(MPI_COMM_WORLD, MPI_ERR_WIN, FUNC_NAME); } } diff --git a/ompi/mpi/c/win_set_name.c b/ompi/mpi/c/win_set_name.c index ada6cdc9d0..c318a070e0 100644 --- a/ompi/mpi/c/win_set_name.c +++ b/ompi/mpi/c/win_set_name.c @@ -41,7 +41,7 @@ int MPI_Win_set_name(MPI_Win win, char *win_name) OMPI_ERR_INIT_FINALIZE(FUNC_NAME); if (ompi_win_invalid(win)) { - return OMPI_ERRHANDLER_INVOKE(win, MPI_ERR_WIN, FUNC_NAME); + return OMPI_ERRHANDLER_INVOKE(MPI_COMM_WORLD, MPI_ERR_WIN, FUNC_NAME); } else if (NULL == win_name) { return OMPI_ERRHANDLER_INVOKE(win, MPI_ERR_ARG, FUNC_NAME); } diff --git a/ompi/mpi/c/win_start.c b/ompi/mpi/c/win_start.c index 2f5d2150d7..7a789f8546 100644 --- a/ompi/mpi/c/win_start.c +++ b/ompi/mpi/c/win_start.c @@ -41,7 +41,7 @@ int MPI_Win_start(MPI_Group group, int assert, MPI_Win win) OMPI_ERR_INIT_FINALIZE(FUNC_NAME); if (ompi_win_invalid(win)) { - return OMPI_ERRHANDLER_INVOKE(win, MPI_ERR_WIN, FUNC_NAME); + return OMPI_ERRHANDLER_INVOKE(MPI_COMM_WORLD, MPI_ERR_WIN, FUNC_NAME); } else if (0 != (assert & ~(MPI_MODE_NOCHECK))) { return OMPI_ERRHANDLER_INVOKE(win, MPI_ERR_ASSERT, FUNC_NAME); } else if (0 != (ompi_win_get_mode(win) & OMPI_WIN_ACCESS_EPOCH)) { diff --git a/ompi/mpi/c/win_test.c b/ompi/mpi/c/win_test.c index b38ed1be38..007cb4ad4b 100644 --- a/ompi/mpi/c/win_test.c +++ b/ompi/mpi/c/win_test.c @@ -41,7 +41,7 @@ int MPI_Win_test(MPI_Win win, int *flag) OMPI_ERR_INIT_FINALIZE(FUNC_NAME); if (ompi_win_invalid(win)) { - return OMPI_ERRHANDLER_INVOKE(MPI_WIN_NULL, MPI_ERR_WIN, FUNC_NAME); + return OMPI_ERRHANDLER_INVOKE(MPI_COMM_WORLD, MPI_ERR_WIN, FUNC_NAME); } else if (0 == (ompi_win_get_mode(win) & OMPI_WIN_POSTED)) { return OMPI_ERRHANDLER_INVOKE(win, MPI_ERR_RMA_SYNC, FUNC_NAME); } diff --git a/ompi/mpi/c/win_unlock.c b/ompi/mpi/c/win_unlock.c index 800f5491f1..08b0f6f8d8 100644 --- a/ompi/mpi/c/win_unlock.c +++ b/ompi/mpi/c/win_unlock.c @@ -41,7 +41,7 @@ int MPI_Win_unlock(int rank, MPI_Win win) OMPI_ERR_INIT_FINALIZE(FUNC_NAME); if (ompi_win_invalid(win)) { - return OMPI_ERRHANDLER_INVOKE(win, MPI_ERR_WIN, FUNC_NAME); + return OMPI_ERRHANDLER_INVOKE(MPI_COMM_WORLD, MPI_ERR_WIN, FUNC_NAME); } else if (ompi_win_peer_invalid(win, rank)) { return OMPI_ERRHANDLER_INVOKE(win, MPI_ERR_RANK, FUNC_NAME); } else if (0 == (ompi_win_get_mode(win) & OMPI_WIN_LOCK_ACCESS)) { diff --git a/ompi/mpi/c/win_wait.c b/ompi/mpi/c/win_wait.c index 75dfc5ec75..616d35d411 100644 --- a/ompi/mpi/c/win_wait.c +++ b/ompi/mpi/c/win_wait.c @@ -41,7 +41,7 @@ int MPI_Win_wait(MPI_Win win) OMPI_ERR_INIT_FINALIZE(FUNC_NAME); if (ompi_win_invalid(win)) { - return OMPI_ERRHANDLER_INVOKE(win, MPI_ERR_WIN, FUNC_NAME); + return OMPI_ERRHANDLER_INVOKE(MPI_COMM_WORLD, MPI_ERR_WIN, FUNC_NAME); } else if (0 == (ompi_win_get_mode(win) & OMPI_WIN_POSTED)) { return OMPI_ERRHANDLER_INVOKE(win, MPI_ERR_RMA_SYNC, FUNC_NAME); }