diff options
| -rw-r--r-- | Nmakefile.tests | 2 | ||||
| -rw-r--r-- | tests/ChangeLog | 4 | ||||
| -rw-r--r-- | tests/GNUmakefile | 3 | ||||
| -rw-r--r-- | tests/Makefile | 3 | ||||
| -rw-r--r-- | tests/join3.c | 79 | 
5 files changed, 89 insertions, 2 deletions
| diff --git a/Nmakefile.tests b/Nmakefile.tests index a0f7dc7..54fe0d1 100644 --- a/Nmakefile.tests +++ b/Nmakefile.tests @@ -62,6 +62,7 @@ exit5::		exit5.c  join0::		join0.c
  join1::		join1.c
  join2::		join2.c
 +join3::		join3.c
  kill1::		kill1.c
  count1::	count1.c
  once1::		once1.c
 @@ -171,6 +172,7 @@ exit5		:test:	exit4  join0		:test:	create1
  join1		:test:	create1
  join2		:test:	create1
 +join3		:test:	join2
  count1		:test:	join1
  once1		:test:	create1
  tsd1		:test:	join1
 diff --git a/tests/ChangeLog b/tests/ChangeLog index 7213eb4..f10e570 100644 --- a/tests/ChangeLog +++ b/tests/ChangeLog @@ -1,3 +1,7 @@ +2004-05-21  Ross Johnson  <ross@special.ise.canberra.edu.au> + +	* join3.c: New test. +  2004-05-16  Ross Johnson  <rpj@callisto.canberra.edu.au>
  	* condvar2.c (WIN32_WINNT): Define to avoid redefinition warning diff --git a/tests/GNUmakefile b/tests/GNUmakefile index a7c8079..b9a5e5c 100644 --- a/tests/GNUmakefile +++ b/tests/GNUmakefile @@ -75,7 +75,7 @@ TESTS	= sizes loadfree \  	  create1 create2 reuse1 reuse2 equal1 \  	  kill1 valid1 valid2 \  	  exit2 exit3 exit4 exit5 \ -	  join0 join1 join2 \ +	  join0 join1 join2 join3 \  	  mutex2 mutex3 mutex4 mutex6 mutex6n mutex6e mutex6r \  	  mutex7 mutex7n mutex7e mutex7r mutex8 mutex8n mutex8e mutex8r \  	  count1 once1 tsd1 self2 cancel1 cancel2 \ @@ -195,6 +195,7 @@ inherit1.pass: join1.pass priority1.pass  join0.pass: create1.pass  join1.pass: create1.pass  join2.pass: create1.pass +join3.pass: join2.pass  kill1.pass:  loadfree.pass: pthread.dll  mutex1.pass: self1.pass diff --git a/tests/Makefile b/tests/Makefile index 1a7d81c..4a70b84 100644 --- a/tests/Makefile +++ b/tests/Makefile @@ -86,7 +86,7 @@ PASSES= sizes.pass  loadfree.pass \  	  exit1.pass  create1.pass  create2.pass  reuse1.pass  reuse2.pass  equal1.pass  \
  	  kill1.pass  valid1.pass  valid2.pass  \
  	  exit2.pass  exit3.pass  exit4  exit5  \
 -	  join0.pass  join1.pass  join2.pass  \
 +	  join0.pass  join1.pass  join2.pass join3.pass  \
  	  mutex4.pass  mutex6.pass  mutex6n.pass  mutex6e.pass  mutex6r.pass  \
  	  mutex7.pass  mutex7n.pass  mutex7e.pass  mutex7r.pass  \
  	  mutex8.pass  mutex8n.pass  mutex8e.pass  mutex8r.pass  \
 @@ -279,6 +279,7 @@ inherit1.pass: join1.pass priority1.pass  join0.pass: create1.pass
  join1.pass: create1.pass
  join2.pass: create1.pass
 +join3.pass: join2.pass
  kill1.pass: 
  loadfree.pass: pthread.dll
  mutex1.pass: self1.pass
 diff --git a/tests/join3.c b/tests/join3.c new file mode 100644 index 0000000..320ba89 --- /dev/null +++ b/tests/join3.c @@ -0,0 +1,79 @@ +/* + * Test for pthread_join() returning return value from threads. + * + * + * -------------------------------------------------------------------------- + * + *      Pthreads-win32 - POSIX Threads Library for Win32 + *      Copyright(C) 1998 John E. Bossom + *      Copyright(C) 1999,2003 Pthreads-win32 contributors + *  + *      Contact Email: rpj@callisto.canberra.edu.au + *  + *      The current list of contributors is contained + *      in the file CONTRIBUTORS included with the source + *      code distribution. The list can also be seen at the + *      following World Wide Web location: + *      http://sources.redhat.com/pthreads-win32/contributors.html + *  + *      This library is free software; you can redistribute it and/or + *      modify it under the terms of the GNU Lesser General Public + *      License as published by the Free Software Foundation; either + *      version 2 of the License, or (at your option) any later version. + *  + *      This library is distributed in the hope that it will be useful, + *      but WITHOUT ANY WARRANTY; without even the implied warranty of + *      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU + *      Lesser General Public License for more details. + *  + *      You should have received a copy of the GNU Lesser General Public + *      License along with this library in the file COPYING.LIB; + *      if not, write to the Free Software Foundation, Inc., + *      59 Temple Place - Suite 330, Boston, MA 02111-1307, USA + * + * -------------------------------------------------------------------------- + * + * Depends on API functions: pthread_create(). + */ + +#include "test.h" + +void * +func(void * arg) +{ +	sched_yield(); +	return arg; +} + +int +main(int argc, char * argv[]) +{ +	pthread_t id[4]; +	int i; +	int result; + +	/* Create a few threads and then exit. */ +	for (i = 0; i < 4; i++) +	  { +	    assert(pthread_create(&id[i], NULL, func, (void *) i) == 0); +	  } + +	/* +	 * Let threads exit before we join them. +	 * We should still retrieve the exit code for the threads. +	 */ +	Sleep(1000); + +	for (i = 0; i < 4; i++) +	  { +	    assert(pthread_join(id[i], (void **) &result) == 0); +#if ! defined (__MINGW32__) || defined (__MSVCRT__) +	    /* CRTDLL _beginthread doesn't support return value, so +	       the assertion is guaranteed to fail. */ +	    assert(result == i); +#endif +	  } + +	/* Success. */ +	return 0; +} | 
