From 8ec440e959d5ad75eb655c55129228c000dffe6b Mon Sep 17 00:00:00 2001 From: Albert Cheng Date: Sat, 10 Dec 2005 23:28:31 -0500 Subject: [svn-r11783] Purpose: bug fix. Description: Fixed the segmentation fault errors in modi4, copper and tg-login. It was due to the misuse of trying to realloc a pointer returned by getenv_all. (not supposed to.) Also rearranged the code so that option is checked first, then check with environment variable, then use default setup. This saves the need to do realloc at all. Platforms tested: Heping, modi4, shanti, copper (copper showed a different error now.) --- testpar/t_posix_compliant.c | 48 ++++++++++++++++++++++++++++++--------------- 1 file changed, 32 insertions(+), 16 deletions(-) diff --git a/testpar/t_posix_compliant.c b/testpar/t_posix_compliant.c index b863788..cf82388 100644 --- a/testpar/t_posix_compliant.c +++ b/testpar/t_posix_compliant.c @@ -38,6 +38,7 @@ #include #include #include "h5test.h" +#define TESTFNAME "posix_test" /* test file name */ static char* testfile = NULL; static int err_flag = 0; @@ -669,6 +670,7 @@ int main(int argc, char* argv[]) int lb, ub, inc; int write_size = 0; char optstring[] = "h x m p: s: v:"; + char *prefix; err_flag = 0; @@ -676,18 +678,6 @@ int main(int argc, char* argv[]) MPI_Comm_size(MPI_COMM_WORLD, &numprocs); MPI_Comm_rank(MPI_COMM_WORLD, &rank); - testfile = getenv_all(MPI_COMM_WORLD, 0, "HDF5_PARAPREFIX"); - if(!testfile) - { - testfile = strdup("posix_test"); - } - else - { - testfile = (char*) realloc(testfile, strlen(testfile) + 1 + strlen("posix_test")); - strcat(testfile, "/posix_test"); - } - - while((opt = getopt(argc, argv, optstring)) != -1) { switch(opt) @@ -711,12 +701,11 @@ int main(int argc, char* argv[]) posix_tests = 1; break; case 'p': - testfile = (char*) realloc(testfile, strlen(optarg) + 1 + strlen("posix_test")); - memset(testfile, 0, strlen(optarg)+1+strlen("posix_test")); + /* need 2 extra--1 for the / and 1 for the terminating NULL. */ + testfile = (char*) HDmalloc(strlen(optarg) + 2 + strlen(TESTFNAME)); strcpy(testfile, optarg); /* Append a / just in case they didn't end their path with one */ - strcat(testfile, "/posix_test"); - fprintf(stderr, "Task %d setting testfile to: %s\n", rank, testfile); + strcat(testfile, "/" TESTFNAME); break; case 's': write_size = atoi(optarg); @@ -730,6 +719,24 @@ int main(int argc, char* argv[]) if( (optind < argc) && (rank == 0)) fprintf(stderr, "Unkown command-line argument passed. Continuing anyway...\n"); + if (!testfile){ + /* Try environment variable if not given as option. */ + prefix = getenv_all(MPI_COMM_WORLD, 0, "HDF5_PARAPREFIX"); + if (prefix) + { + /* need 2 extra--1 for the / and 1 for the terminating NULL. */ + testfile = (char*) HDmalloc(strlen(prefix) + 2 + strlen(TESTFNAME)); + strcpy(testfile, prefix); + /* Append a / just in case they didn't end their path with one */ + strcat(testfile, "/" TESTFNAME); + } + else + { + testfile = strdup(TESTFNAME); + } + } + printf("Proc %d: testfile=%s\n", rank, testfile); + if(write_size == 0) { lb = 1024; @@ -743,6 +750,9 @@ int main(int argc, char* argv[]) inc = 2; } + /* set alarm. */ + ALARM_ON; + for(write_size = lb; write_size <= ub; write_size*=inc) { if(rank == 0) @@ -809,7 +819,13 @@ int main(int argc, char* argv[]) */ } } + + /* turn off alarm */ + ALARM_OFF; + done: + if (testfile) + HDfree(testfile); MPI_Barrier(MPI_COMM_WORLD); MPI_Finalize(); -- cgit v0.12