[mpich2-commits] r5624 - mpich2/trunk/src/mpi/errhan
goodell at mcs.anl.gov
goodell at mcs.anl.gov
Thu Oct 29 16:56:59 CDT 2009
Author: goodell
Date: 2009-10-29 16:56:59 -0500 (Thu, 29 Oct 2009)
New Revision: 5624
Modified:
mpich2/trunk/src/mpi/errhan/file_set_errhandler.c
Log:
Fix MPI_File errhandler leak.
Prior to this commit we only released references to the previously set file
errhandler in MPI_File_set_errhandler if the newly set errhandler was *not*
builtin. This resulted in an errhandler object leak if a user-defined
errhandler was set and then a predefined errhandler was set afterwards.
Reviewed by robl at .
Modified: mpich2/trunk/src/mpi/errhan/file_set_errhandler.c
===================================================================
--- mpich2/trunk/src/mpi/errhan/file_set_errhandler.c 2009-10-29 21:56:57 UTC (rev 5623)
+++ mpich2/trunk/src/mpi/errhan/file_set_errhandler.c 2009-10-29 21:56:59 UTC (rev 5624)
@@ -103,21 +103,22 @@
# endif /* HAVE_ERROR_CHECKING */
/* ... body of routine ... */
- if (HANDLE_GET_KIND(errhandler) != HANDLE_KIND_BUILTIN) {
- MPIR_ROMIO_Get_file_errhand( file, &old_errhandler );
- if (!old_errhandler) {
- MPID_Errhandler_get_ptr( MPI_ERRORS_RETURN, old_errhandler_ptr );
- }
- else {
- MPID_Errhandler_get_ptr( old_errhandler, old_errhandler_ptr );
- }
+ MPIR_ROMIO_Get_file_errhand( file, &old_errhandler );
+ if (!old_errhandler) {
+ /* MPI_File objects default to the errhandler set on MPI_FILE_NULL
+ * at file open time, or MPI_ERRORS_RETURN if no errhandler is set
+ * on MPI_FILE_NULL. (MPI-2.2, sec 13.7) */
+ MPID_Errhandler_get_ptr( MPI_ERRORS_RETURN, old_errhandler_ptr );
+ }
+ else {
+ MPID_Errhandler_get_ptr( old_errhandler, old_errhandler_ptr );
+ }
- if (old_errhandler_ptr) {
- MPIR_Errhandler_release_ref(old_errhandler_ptr,&in_use);
- if (!in_use) {
- MPID_Errhandler_free( old_errhandler_ptr );
- }
- }
+ if (old_errhandler_ptr) {
+ MPIR_Errhandler_release_ref(old_errhandler_ptr,&in_use);
+ if (!in_use) {
+ MPID_Errhandler_free( old_errhandler_ptr );
+ }
}
MPIR_Errhandler_add_ref(errhan_ptr);
@@ -129,7 +130,7 @@
if (0) goto fn_fail; /* quiet compiler warning about unused label */
#endif
#endif
-
+
/* ... end of body of routine ... */
#ifdef HAVE_ERROR_CHECKING
More information about the mpich2-commits
mailing list