[mpich2-commits] r7816 - in mpich2/trunk/src/mpid/ch3: channels/nemesis/src src
buntinas at mcs.anl.gov
buntinas at mcs.anl.gov
Mon Jan 24 12:39:24 CST 2011
Author: buntinas
Date: 2011-01-24 12:39:24 -0600 (Mon, 24 Jan 2011)
New Revision: 7816
Modified:
mpich2/trunk/src/mpid/ch3/channels/nemesis/src/ch3_progress.c
mpich2/trunk/src/mpid/ch3/src/mpid_finalize.c
Log:
restore previous signal handler in finalize
Modified: mpich2/trunk/src/mpid/ch3/channels/nemesis/src/ch3_progress.c
===================================================================
--- mpich2/trunk/src/mpid/ch3/channels/nemesis/src/ch3_progress.c 2011-01-24 18:37:43 UTC (rev 7815)
+++ mpich2/trunk/src/mpid/ch3/channels/nemesis/src/ch3_progress.c 2011-01-24 18:39:24 UTC (rev 7816)
@@ -45,6 +45,9 @@
#endif /* MPICH_IS_THREADED */
/* NEMESIS MULTITHREADING - End block*/
+#ifdef HAVE_SIGNAL
+static void (*prev_sighandler) (int);
+#endif
static volatile int sigusr1_count = 0;
static int my_sigusr1_count = 0;
@@ -805,15 +808,11 @@
pktArray[MPIDI_NEM_PKT_NETMOD] = pkt_NETMOD_handler;
#ifdef HAVE_SIGNAL
- {
- /* install signal handler for process failure notifications from hydra */
- void *ret;
-
- ret = signal(SIGUSR1, &sigusr1_handler);
- MPIU_ERR_CHKANDJUMP1(ret == SIG_ERR, mpi_errno, MPI_ERR_OTHER, "**signal", "**signal %s", MPIU_Strerror(errno));
- /* Error if the app set its own SIGUSR1 handler. */
- MPIU_ERR_CHKANDJUMP(ret != SIG_DFL, mpi_errno, MPI_ERR_OTHER, "**sigusr1");
- }
+ /* install signal handler for process failure notifications from hydra */
+ prev_sighandler = signal(SIGUSR1, sigusr1_handler);
+ MPIU_ERR_CHKANDJUMP1(prev_sighandler == SIG_ERR, mpi_errno, MPI_ERR_OTHER, "**signal", "**signal %s", MPIU_Strerror(errno));
+ /* Error if the app set its own SIGUSR1 handler. */
+ MPIU_ERR_CHKANDJUMP(prev_sighandler != SIG_DFL, mpi_errno, MPI_ERR_OTHER, "**sigusr1");
#endif
fn_exit:
@@ -829,19 +828,33 @@
#define FCNAME MPIDI_QUOTE(FUNCNAME)
int MPIDI_CH3I_Progress_finalize(void)
{
+ int mpi_errno = MPI_SUCCESS;
qn_ent_t *ent;
MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3I_PROGRESS_FINALIZE);
MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_CH3I_PROGRESS_FINALIZE);
+#ifdef HAVE_SIGNAL
+ {
+ /* replace signal handler */
+ void *ret;
+
+ ret = signal(SIGUSR1, prev_sighandler);
+ MPIU_ERR_CHKANDJUMP1(ret == SIG_ERR, mpi_errno, MPI_ERR_OTHER, "**signal", "**signal %s", MPIU_Strerror(errno));
+ }
+#endif
+
while(qn_head) {
ent = qn_head->next;
MPIU_Free(qn_head);
qn_head = ent;
}
+ fn_exit:
MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_CH3I_PROGRESS_FINALIZE);
- return MPI_SUCCESS;
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
}
Modified: mpich2/trunk/src/mpid/ch3/src/mpid_finalize.c
===================================================================
--- mpich2/trunk/src/mpid/ch3/src/mpid_finalize.c 2011-01-24 18:37:43 UTC (rev 7815)
+++ mpich2/trunk/src/mpid/ch3/src/mpid_finalize.c 2011-01-24 18:39:24 UTC (rev 7816)
@@ -93,9 +93,6 @@
* cancel it, in which case an error shouldn't be generated.
*/
- MPIR_Comm_free_keyval_impl(MPICH_ATTR_FAILED_PROCESSES);
- MPICH_ATTR_FAILED_PROCESSES = MPI_KEYVAL_INVALID;
-
#ifdef MPID_NEEDS_ICOMM_WORLD
mpi_errno = MPIR_Comm_release_always(MPIR_Process.icomm_world, 0);
if (mpi_errno) MPIU_ERR_POP(mpi_errno);
@@ -125,6 +122,9 @@
mpi_errno = MPIDI_CH3_Finalize();
if (mpi_errno) { MPIU_ERR_POP(mpi_errno); }
+ MPIR_Comm_free_keyval_impl(MPICH_ATTR_FAILED_PROCESSES);
+ MPICH_ATTR_FAILED_PROCESSES = MPI_KEYVAL_INVALID;
+
/* Tell the process group code that we're done with the process groups.
This will notify PMI (with PMI_Finalize) if necessary. It
also frees all PG structures, including the PG for COMM_WORLD, whose
More information about the mpich2-commits
mailing list