From 025fb428a3d271176e25c4e75ca540f74f0bc936 Mon Sep 17 00:00:00 2001 From: Thomas Radke Date: Wed, 8 Nov 2000 17:47:35 -0500 Subject: [svn-r2834] Purpose: Bugfix Description: The stream_test program reported an error under Linux SMP for testing the Stream VFD although everything seemed to be fine. Solution: The sender and receiver process which are forked by main() called return(retcode) at exit which implies closing open file descriptors. Since these are shared this caused a SEGFAULT in either the sender or the receiver when exiting. Replacing return() by _exit() is the right way to terminate the forked processes in this case. Platforms tested: Linux SMP (eirene) --- test/stream_test.c | 38 ++++++++++++++++++++++++++------------ 1 file changed, 26 insertions(+), 12 deletions(-) diff --git a/test/stream_test.c b/test/stream_test.c index 239c2c6..167bda1 100644 --- a/test/stream_test.c +++ b/test/stream_test.c @@ -11,6 +11,8 @@ * Modifications: * Thomas Radke, Thursday, October 26, 2000 * Made it compiling under Windows. + * Thomas Radke, Wednesday, November 8, 2000 + * Use _exit(2) instead of return() in the sender and receiver. * */ @@ -84,7 +86,7 @@ static int sender (void) if (fapl < 0) { fprintf (stderr, "sender: couldn't create file access property list\n"); - return (-1); + _exit (-1); } status = H5Pset_fapl_stream (fapl, NULL); @@ -93,7 +95,7 @@ static int sender (void) fprintf (stderr, "sender: couldn't set file access property list " "for Stream VFD\n"); H5Pclose (fapl); - return (-2); + _exit (-2); } /* @@ -108,7 +110,7 @@ static int sender (void) { fprintf (stderr, "sender: couldn't create dataspace\n"); H5Pclose (fapl); - return (-3); + _exit (-3); } /* @@ -122,7 +124,7 @@ static int sender (void) "%d integers\n", i); H5Sclose (dataspace); H5Pclose (fapl); - return (-4); + _exit (-4); } while (--i >= 0) { @@ -142,7 +144,7 @@ static int sender (void) free (data); H5Sclose (dataspace); H5Pclose (fapl); - return (-5); + _exit (-5); } /* @@ -158,7 +160,7 @@ static int sender (void) H5Fclose (file); H5Sclose (dataspace); H5Pclose (fapl); - return (-6); + _exit (-6); } /* @@ -176,7 +178,7 @@ static int sender (void) H5Sclose (dataspace); H5Pclose (fapl); fprintf (stderr, "sender: couldn't write dataset\n"); - return (-7); + _exit (-7); } /* @@ -192,6 +194,12 @@ static int sender (void) H5Pclose (fapl); free (data); + _exit (0); + + /* + * This is just to get rid of the compiler warning + * 'function does not return a value. + */ return (0); } @@ -219,7 +227,7 @@ static int receiver (void) if (fapl < 0) { fprintf (stderr, "receiver: couldn't create file access property list\n"); - return (-1); + _exit (-1); } status = H5Pset_fapl_stream (fapl, NULL); @@ -227,7 +235,7 @@ static int receiver (void) { fprintf (stderr, "receiver: couldn't set file access property list " "for Stream VFD\n"); - return (-2); + _exit (-2); } /* @@ -241,7 +249,7 @@ static int receiver (void) if (file < 0) { fprintf (stderr, "receiver: couldn't open file from '%s'\n", FILENAME); - return (-3); + _exit (-3); } /* @@ -252,7 +260,7 @@ static int receiver (void) if (dataset < 0) { fprintf (stderr, "receiver: couldn't open dataset '%s'\n", DATASETNAME); - return (-4); + _exit (-4); } /* @@ -319,7 +327,13 @@ static int receiver (void) free (data); - return (-nerrors); + _exit (-nerrors); + + /* + * This is just to get rid of the compiler warning + * 'function does not return a value. + */ + return (0); } -- cgit v0.12