[mpich-discuss] [PATCH] Issue 5486: Nobody checks the return code from "MTest_Start_thread()".

Dave Goodell goodell at mcs.anl.gov
Fri May 22 08:44:59 CDT 2009


Hi Joe,

Thanks for the patch.  The idea is a good one, although I think I'll  
tweak it a little bit when I commit this to the trunk.  Just minor  
stuff like abort() --> MPI_Abort(...) and slightly different bracing.   
Also, we obviously can't disable the new multisend tests in general,  
so you'll probably just have to keep that hunk in your branches.

I'll work something up later today and let you know when I've  
committed it.

Thanks again,
-Dave

On May 21, 2009, at 4:39 PM, Joe Ratterman wrote:

> From: Joe Ratterman <jratt at us.ibm.com>
>
> BGP has a maximum of 3 threads that can be created (SMP mode), but
> sometimes only 1 (DUAL mode).  Because some tests try to create more
> than 3 threads, pthread_create() will fail.  However, nobody checks
> that, so the tests time-out.
>
> This adds an abort: if something absolutely *must* happen, you cannot
> let it silently fail.
> ---
> mpich2/test/mpi/threads/pt2pt/testlist     |    6 +++---
> mpich2/test/mpi/threads/util/mtestthread.c |    9 +++++++--
> 2 files changed, 10 insertions(+), 5 deletions(-)
>
> diff --git a/mpich2/test/mpi/threads/pt2pt/testlist b/mpich2/test/ 
> mpi/threads/pt2pt/testlist
> index d62e8c7..c53b354 100644
> --- a/mpich2/test/mpi/threads/pt2pt/testlist
> +++ b/mpich2/test/mpi/threads/pt2pt/testlist
> @@ -2,8 +2,8 @@ threaded_sr 2
> alltoall 4
> sendselfth 1
> multisend 2
> -multisend2 5
> -multisend3 5
> -multisend4 5
> +# multisend2 5 # This test uses too many threads
> +# multisend3 5 # This test uses too many threads
> +# multisend4 5 # This test uses too many threads
> greq_wait 1
> greq_test 1
> diff --git a/mpich2/test/mpi/threads/util/mtestthread.c b/mpich2/ 
> test/mpi/threads/util/mtestthread.c
> index b171785..af01643 100644
> --- a/mpich2/test/mpi/threads/util/mtestthread.c
> +++ b/mpich2/test/mpi/threads/util/mtestthread.c
> @@ -60,7 +60,6 @@ int MTest_Join_threads( void ){
> int MTest_Start_thread(MTEST_THREAD_RETURN_TYPE (*fn)(void *p),void  
> *arg)
> {
>     int err;
> -    pthread_t thread;
>     pthread_attr_t attr;
>     pthread_attr_init(&attr);
>     pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE);
> @@ -71,7 +70,13 @@ int MTest_Start_thread(MTEST_THREAD_RETURN_TYPE  
> (*fn)(void *p),void *arg)
> 	return 1;
>     }
>     err = pthread_create(threads+nthreads, &attr, fn, arg);
> -    if (!err) nthreads++;
> +    if (!err)
> +        nthreads++;
> +    else
> +    {
> +        fprintf(stderr, "Failed to create thread calling func %p  
> with arg %p\n", fn, arg);
> +        abort();
> +    }
>     pthread_attr_destroy(&attr);
>     return err;
> }
> -- 
> 1.6.3.2.gbfc07d5
>



More information about the mpich-discuss mailing list