diff options
| author | rpj <rpj> | 2011-03-01 22:49:04 +0000 | 
|---|---|---|
| committer | rpj <rpj> | 2011-03-01 22:49:04 +0000 | 
| commit | 1170175259781ece4a8d99d517230f4b9ecb7b50 (patch) | |
| tree | f4e2ddb6ff4a69620796fb0e6baac92d43e3ff4c | |
| parent | 2795df49d1161f3e48ac28351099f6dd742d7bb5 (diff) | |
fix EOL chars in file
| -rw-r--r-- | pthread_attr_setstackaddr.c | 194 | ||||
| -rw-r--r-- | pthread_equal.c | 152 | ||||
| -rw-r--r-- | pthread_self.c | 282 | ||||
| -rw-r--r-- | tests/cancel3.c | 402 | 
4 files changed, 515 insertions, 515 deletions
| diff --git a/pthread_attr_setstackaddr.c b/pthread_attr_setstackaddr.c index 32e338d..1316c06 100644 --- a/pthread_attr_setstackaddr.c +++ b/pthread_attr_setstackaddr.c @@ -1,97 +1,97 @@ -/*
 - * pthread_attr_setstackaddr.c
 - *
 - * Description:
 - * This translation unit implements operations on thread attribute objects.
 - *
 - * --------------------------------------------------------------------------
 - *
 - *      Pthreads-win32 - POSIX Threads Library for Win32
 - *      Copyright(C) 1998 John E. Bossom
 - *      Copyright(C) 1999,2005 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
 - */
 -
 -#include "pthread.h"
 -#include "implement.h"
 -
 -
 -int
 -pthread_attr_setstackaddr (pthread_attr_t * attr, void *stackaddr)
 -     /*
 -      * ------------------------------------------------------
 -      * DOCPUBLIC
 -      *      Threads created with 'attr' will run on the stack
 -      *      starting at 'stackaddr'.
 -      *      Stack must be at least PTHREAD_STACK_MIN bytes.
 -      *
 -      * PARAMETERS
 -      *      attr
 -      *              pointer to an instance of pthread_attr_t
 -      *
 -      *      stackaddr
 -      *              the address of the stack to use
 -      *
 -      *
 -      * DESCRIPTION
 -      *      Threads created with 'attr' will run on the stack
 -      *      starting at 'stackaddr'.
 -      *      Stack must be at least PTHREAD_STACK_MIN bytes.
 -      *
 -      *      NOTES:
 -      *              1)      Function supported only if this macro is
 -      *                      defined:
 -      *
 -      *                              _POSIX_THREAD_ATTR_STACKADDR
 -      *
 -      *              2)      Create only one thread for each stack
 -      *                      address..
 -      *
 -      *              3)      Ensure that stackaddr is aligned.
 -      *
 -      * RESULTS
 -      *              0               successfully set stack address,
 -      *              EINVAL          'attr' is invalid
 -      *              ENOSYS          function not supported
 -      *
 -      * ------------------------------------------------------
 -      */
 -{
 -#if defined( _POSIX_THREAD_ATTR_STACKADDR )
 -
 -  if (ptw32_is_attr (attr) != 0)
 -    {
 -      return EINVAL;
 -    }
 -
 -  (*attr)->stackaddr = stackaddr;
 -  return 0;
 -
 -#else
 -
 -  return ENOSYS;
 -
 -#endif /* _POSIX_THREAD_ATTR_STACKADDR */
 -}
 +/* + * pthread_attr_setstackaddr.c + * + * Description: + * This translation unit implements operations on thread attribute objects. + * + * -------------------------------------------------------------------------- + * + *      Pthreads-win32 - POSIX Threads Library for Win32 + *      Copyright(C) 1998 John E. Bossom + *      Copyright(C) 1999,2005 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 + */ + +#include "pthread.h" +#include "implement.h" + + +int +pthread_attr_setstackaddr (pthread_attr_t * attr, void *stackaddr) +     /* +      * ------------------------------------------------------ +      * DOCPUBLIC +      *      Threads created with 'attr' will run on the stack +      *      starting at 'stackaddr'. +      *      Stack must be at least PTHREAD_STACK_MIN bytes. +      * +      * PARAMETERS +      *      attr +      *              pointer to an instance of pthread_attr_t +      * +      *      stackaddr +      *              the address of the stack to use +      * +      * +      * DESCRIPTION +      *      Threads created with 'attr' will run on the stack +      *      starting at 'stackaddr'. +      *      Stack must be at least PTHREAD_STACK_MIN bytes. +      * +      *      NOTES: +      *              1)      Function supported only if this macro is +      *                      defined: +      * +      *                              _POSIX_THREAD_ATTR_STACKADDR +      * +      *              2)      Create only one thread for each stack +      *                      address.. +      * +      *              3)      Ensure that stackaddr is aligned. +      * +      * RESULTS +      *              0               successfully set stack address, +      *              EINVAL          'attr' is invalid +      *              ENOSYS          function not supported +      * +      * ------------------------------------------------------ +      */ +{ +#if defined( _POSIX_THREAD_ATTR_STACKADDR ) + +  if (ptw32_is_attr (attr) != 0) +    { +      return EINVAL; +    } + +  (*attr)->stackaddr = stackaddr; +  return 0; + +#else + +  return ENOSYS; + +#endif /* _POSIX_THREAD_ATTR_STACKADDR */ +} diff --git a/pthread_equal.c b/pthread_equal.c index ac710de..5ddd82a 100644 --- a/pthread_equal.c +++ b/pthread_equal.c @@ -1,76 +1,76 @@ -/*
 - * pthread_equal.c
 - *
 - * Description:
 - * This translation unit implements miscellaneous thread functions.
 - *
 - * --------------------------------------------------------------------------
 - *
 - *      Pthreads-win32 - POSIX Threads Library for Win32
 - *      Copyright(C) 1998 John E. Bossom
 - *      Copyright(C) 1999,2005 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
 - */
 -
 -#include "pthread.h"
 -#include "implement.h"
 -
 -
 -int
 -pthread_equal (pthread_t t1, pthread_t t2)
 -     /*
 -      * ------------------------------------------------------
 -      * DOCPUBLIC
 -      *      This function returns nonzero if t1 and t2 are equal, else
 -      *      returns zero
 -      *
 -      * PARAMETERS
 -      *      t1,
 -      *      t2
 -      *              thread IDs
 -      *
 -      *
 -      * DESCRIPTION
 -      *      This function returns nonzero if t1 and t2 are equal, else
 -      *      returns zero.
 -      *
 -      * RESULTS
 -      *              non-zero        if t1 and t2 refer to the same thread,
 -      *              0               t1 and t2 do not refer to the same thread
 -      *
 -      * ------------------------------------------------------
 -      */
 -{
 -  int result;
 -
 -  /*
 -   * We also accept NULL == NULL - treating NULL as a thread
 -   * for this special case, because there is no error that we can return.
 -   */
 -  result = ( t1.p == t2.p && t1.x == t2.x );
 -
 -  return (result);
 -
 -}				/* pthread_equal */
 +/* + * pthread_equal.c + * + * Description: + * This translation unit implements miscellaneous thread functions. + * + * -------------------------------------------------------------------------- + * + *      Pthreads-win32 - POSIX Threads Library for Win32 + *      Copyright(C) 1998 John E. Bossom + *      Copyright(C) 1999,2005 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 + */ + +#include "pthread.h" +#include "implement.h" + + +int +pthread_equal (pthread_t t1, pthread_t t2) +     /* +      * ------------------------------------------------------ +      * DOCPUBLIC +      *      This function returns nonzero if t1 and t2 are equal, else +      *      returns zero +      * +      * PARAMETERS +      *      t1, +      *      t2 +      *              thread IDs +      * +      * +      * DESCRIPTION +      *      This function returns nonzero if t1 and t2 are equal, else +      *      returns zero. +      * +      * RESULTS +      *              non-zero        if t1 and t2 refer to the same thread, +      *              0               t1 and t2 do not refer to the same thread +      * +      * ------------------------------------------------------ +      */ +{ +  int result; + +  /* +   * We also accept NULL == NULL - treating NULL as a thread +   * for this special case, because there is no error that we can return. +   */ +  result = ( t1.p == t2.p && t1.x == t2.x ); + +  return (result); + +}				/* pthread_equal */ diff --git a/pthread_self.c b/pthread_self.c index 0cd943a..8b85c61 100644 --- a/pthread_self.c +++ b/pthread_self.c @@ -1,141 +1,141 @@ -/*
 - * pthread_self.c
 - *
 - * Description:
 - * This translation unit implements miscellaneous thread functions.
 - *
 - * --------------------------------------------------------------------------
 - *
 - *      Pthreads-win32 - POSIX Threads Library for Win32
 - *      Copyright(C) 1998 John E. Bossom
 - *      Copyright(C) 1999,2005 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
 - */
 -
 -#include "pthread.h"
 -#include "implement.h"
 -
 -pthread_t
 -pthread_self (void)
 -     /*
 -      * ------------------------------------------------------
 -      * DOCPUBLIC
 -      *      This function returns a reference to the current running
 -      *      thread.
 -      *
 -      * PARAMETERS
 -      *      N/A
 -      *
 -      *
 -      * DESCRIPTION
 -      *      This function returns a reference to the current running
 -      *      thread.
 -      *
 -      * RESULTS
 -      *              pthread_t       reference to the current thread
 -      *
 -      * ------------------------------------------------------
 -      */
 -{
 -  pthread_t self;
 -  pthread_t nil = {NULL, 0};
 -  ptw32_thread_t * sp;
 -
 -#ifdef _UWIN
 -  if (!ptw32_selfThreadKey)
 -    return nil;
 -#endif
 -
 -  sp = (ptw32_thread_t *) pthread_getspecific (ptw32_selfThreadKey);
 -
 -  if (sp != NULL)
 -    {
 -      self = sp->ptHandle;
 -    }
 -  else
 -    {
 -      /*
 -       * Need to create an implicit 'self' for the currently
 -       * executing thread.
 -       */
 -      self = ptw32_new ();
 -      sp = (ptw32_thread_t *) self.p;
 -
 -      if (sp != NULL)
 -	{
 -	  /*
 -	   * This is a non-POSIX thread which has chosen to call
 -	   * a POSIX threads function for some reason. We assume that
 -	   * it isn't joinable, but we do assume that it's
 -	   * (deferred) cancelable.
 -	   */
 -	  sp->implicit = 1;
 -	  sp->detachState = PTHREAD_CREATE_DETACHED;
 -	  sp->thread = GetCurrentThreadId ();
 -
 -#ifdef NEED_DUPLICATEHANDLE
 -	  /*
 -	   * DuplicateHandle does not exist on WinCE.
 -	   *
 -	   * NOTE:
 -	   * GetCurrentThread only returns a pseudo-handle
 -	   * which is only valid in the current thread context.
 -	   * Therefore, you should not pass the handle to
 -	   * other threads for whatever purpose.
 -	   */
 -	  sp->threadH = GetCurrentThread ();
 -#else
 -	  if (!DuplicateHandle (GetCurrentProcess (),
 -				GetCurrentThread (),
 -				GetCurrentProcess (),
 -				&sp->threadH,
 -				0, FALSE, DUPLICATE_SAME_ACCESS))
 -	    {
 -	      /*
 -	       * Should not do this, but we have no alternative if
 -	       * we can't get a Win32 thread handle.
 -	       * Thread structs are never freed.
 -	       */
 -	      ptw32_threadReusePush (self);
 -	      /*
 -	       * As this is a win32 thread calling us and we have failed,
 -	       * return a value that makes sense to win32.
 -	       */
 -	      return nil;
 -	    }
 -#endif
 -
 -	  /*
 -	   * No need to explicitly serialise access to sched_priority
 -	   * because the new handle is not yet public.
 -	   */
 -	  sp->sched_priority = GetThreadPriority (sp->threadH);
 -	  pthread_setspecific (ptw32_selfThreadKey, (void *) sp);
 -	}
 -    }
 -
 -  return (self);
 -
 -}				/* pthread_self */
 +/* + * pthread_self.c + * + * Description: + * This translation unit implements miscellaneous thread functions. + * + * -------------------------------------------------------------------------- + * + *      Pthreads-win32 - POSIX Threads Library for Win32 + *      Copyright(C) 1998 John E. Bossom + *      Copyright(C) 1999,2005 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 + */ + +#include "pthread.h" +#include "implement.h" + +pthread_t +pthread_self (void) +     /* +      * ------------------------------------------------------ +      * DOCPUBLIC +      *      This function returns a reference to the current running +      *      thread. +      * +      * PARAMETERS +      *      N/A +      * +      * +      * DESCRIPTION +      *      This function returns a reference to the current running +      *      thread. +      * +      * RESULTS +      *              pthread_t       reference to the current thread +      * +      * ------------------------------------------------------ +      */ +{ +  pthread_t self; +  pthread_t nil = {NULL, 0}; +  ptw32_thread_t * sp; + +#ifdef _UWIN +  if (!ptw32_selfThreadKey) +    return nil; +#endif + +  sp = (ptw32_thread_t *) pthread_getspecific (ptw32_selfThreadKey); + +  if (sp != NULL) +    { +      self = sp->ptHandle; +    } +  else +    { +      /* +       * Need to create an implicit 'self' for the currently +       * executing thread. +       */ +      self = ptw32_new (); +      sp = (ptw32_thread_t *) self.p; + +      if (sp != NULL) +	{ +	  /* +	   * This is a non-POSIX thread which has chosen to call +	   * a POSIX threads function for some reason. We assume that +	   * it isn't joinable, but we do assume that it's +	   * (deferred) cancelable. +	   */ +	  sp->implicit = 1; +	  sp->detachState = PTHREAD_CREATE_DETACHED; +	  sp->thread = GetCurrentThreadId (); + +#ifdef NEED_DUPLICATEHANDLE +	  /* +	   * DuplicateHandle does not exist on WinCE. +	   * +	   * NOTE: +	   * GetCurrentThread only returns a pseudo-handle +	   * which is only valid in the current thread context. +	   * Therefore, you should not pass the handle to +	   * other threads for whatever purpose. +	   */ +	  sp->threadH = GetCurrentThread (); +#else +	  if (!DuplicateHandle (GetCurrentProcess (), +				GetCurrentThread (), +				GetCurrentProcess (), +				&sp->threadH, +				0, FALSE, DUPLICATE_SAME_ACCESS)) +	    { +	      /* +	       * Should not do this, but we have no alternative if +	       * we can't get a Win32 thread handle. +	       * Thread structs are never freed. +	       */ +	      ptw32_threadReusePush (self); +	      /* +	       * As this is a win32 thread calling us and we have failed, +	       * return a value that makes sense to win32. +	       */ +	      return nil; +	    } +#endif + +	  /* +	   * No need to explicitly serialise access to sched_priority +	   * because the new handle is not yet public. +	   */ +	  sp->sched_priority = GetThreadPriority (sp->threadH); +	  pthread_setspecific (ptw32_selfThreadKey, (void *) sp); +	} +    } + +  return (self); + +}				/* pthread_self */ diff --git a/tests/cancel3.c b/tests/cancel3.c index ccaec21..1560ccf 100644 --- a/tests/cancel3.c +++ b/tests/cancel3.c @@ -1,201 +1,201 @@ -/*
 - * File: cancel3.c
 - *
 - *
 - * --------------------------------------------------------------------------
 - *
 - *      Pthreads-win32 - POSIX Threads Library for Win32
 - *      Copyright(C) 1998 John E. Bossom
 - *      Copyright(C) 1999,2005 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
 - *
 - * --------------------------------------------------------------------------
 - *
 - * Test Synopsis: Test asynchronous cancelation (alertable or non-alertable).
 - *
 - * Test Method (Validation or Falsification):
 - * - 
 - *
 - * Requirements Tested:
 - * - Async cancel if thread is not blocked (i.e. voluntarily resumes if blocked).
 - *
 - * Features Tested:
 - * - 
 - *
 - * Cases Tested:
 - * - 
 - *
 - * Description:
 - * - 
 - *
 - * Environment:
 - * - 
 - *
 - * Input:
 - * - None.
 - *
 - * Output:
 - * - File name, Line number, and failed expression on failure.
 - * - No output on success.
 - *
 - * Assumptions:
 - * - have working pthread_create, pthread_self, pthread_mutex_lock/unlock
 - *   pthread_testcancel, pthread_cancel, pthread_join.
 - * - quserex.dll and alertdrv.sys are not available.
 - *
 - * Pass Criteria:
 - * - Process returns zero exit status.
 - *
 - * Fail Criteria:
 - * - Process returns non-zero exit status.
 - */
 -
 -#include "test.h"
 -
 -/*
 - * Create NUMTHREADS threads in addition to the Main thread.
 - */
 -enum
 -{
 -  NUMTHREADS = 4
 -};
 -
 -typedef struct bag_t_ bag_t;
 -struct bag_t_
 -{
 -  int threadnum;
 -  int started;
 -  /* Add more per-thread state variables here */
 -  int count;
 -};
 -
 -static bag_t threadbag[NUMTHREADS + 1];
 -
 -void *
 -mythread (void *arg)
 -{
 -  int result = ((int) PTHREAD_CANCELED + 1);
 -  bag_t *bag = (bag_t *) arg;
 -
 -  assert (bag == &threadbag[bag->threadnum]);
 -  assert (bag->started == 0);
 -  bag->started = 1;
 -
 -  /* Set to known state and type */
 -
 -  assert (pthread_setcancelstate (PTHREAD_CANCEL_ENABLE, NULL) == 0);
 -
 -  assert (pthread_setcanceltype (PTHREAD_CANCEL_ASYNCHRONOUS, NULL) == 0);
 -
 -  /*
 -   * We wait up to 10 seconds, waking every 0.1 seconds,
 -   * for a cancelation to be applied to us.
 -   */
 -  for (bag->count = 0; bag->count < 100; bag->count++)
 -    Sleep (100);
 -
 -  return (void *) result;
 -}
 -
 -int
 -main ()
 -{
 -  int failed = 0;
 -  int i;
 -  pthread_t t[NUMTHREADS + 1];
 -
 -  assert ((t[0] = pthread_self ()).p != NULL);
 -
 -  for (i = 1; i <= NUMTHREADS; i++)
 -    {
 -      threadbag[i].started = 0;
 -      threadbag[i].threadnum = i;
 -      assert (pthread_create (&t[i], NULL, mythread, (void *) &threadbag[i])
 -	      == 0);
 -    }
 -
 -  /*
 -   * Code to control or munipulate child threads should probably go here.
 -   */
 -  Sleep (500);
 -
 -  for (i = 1; i <= NUMTHREADS; i++)
 -    {
 -      assert (pthread_cancel (t[i]) == 0);
 -    }
 -
 -  /*
 -   * Give threads time to run.
 -   */
 -  Sleep (NUMTHREADS * 100);
 -
 -  /*
 -   * Standard check that all threads started.
 -   */
 -  for (i = 1; i <= NUMTHREADS; i++)
 -    {
 -      if (!threadbag[i].started)
 -	{
 -	  failed |= !threadbag[i].started;
 -	  fprintf (stderr, "Thread %d: started %d\n", i,
 -		   threadbag[i].started);
 -	}
 -    }
 -
 -  assert (!failed);
 -
 -  /*
 -   * Check any results here. Set "failed" and only print output on failure.
 -   */
 -  failed = 0;
 -  for (i = 1; i <= NUMTHREADS; i++)
 -    {
 -      int fail = 0;
 -      int result = 0;
 -
 -      /*
 -       * The thread does not contain any cancelation points, so
 -       * a return value of PTHREAD_CANCELED confirms that async
 -       * cancelation succeeded.
 -       */
 -      assert (pthread_join (t[i], (void **) &result) == 0);
 -
 -      fail = (result != (int) PTHREAD_CANCELED);
 -
 -      if (fail)
 -	{
 -	  fprintf (stderr, "Thread %d: started %d: count %d\n",
 -		   i, threadbag[i].started, threadbag[i].count);
 -	}
 -      failed = (failed || fail);
 -    }
 -
 -  assert (!failed);
 -
 -  /*
 -   * Success.
 -   */
 -  return 0;
 -}
 +/* + * File: cancel3.c + * + * + * -------------------------------------------------------------------------- + * + *      Pthreads-win32 - POSIX Threads Library for Win32 + *      Copyright(C) 1998 John E. Bossom + *      Copyright(C) 1999,2005 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 + * + * -------------------------------------------------------------------------- + * + * Test Synopsis: Test asynchronous cancelation (alertable or non-alertable). + * + * Test Method (Validation or Falsification): + * -  + * + * Requirements Tested: + * - Async cancel if thread is not blocked (i.e. voluntarily resumes if blocked). + * + * Features Tested: + * -  + * + * Cases Tested: + * -  + * + * Description: + * -  + * + * Environment: + * -  + * + * Input: + * - None. + * + * Output: + * - File name, Line number, and failed expression on failure. + * - No output on success. + * + * Assumptions: + * - have working pthread_create, pthread_self, pthread_mutex_lock/unlock + *   pthread_testcancel, pthread_cancel, pthread_join. + * - quserex.dll and alertdrv.sys are not available. + * + * Pass Criteria: + * - Process returns zero exit status. + * + * Fail Criteria: + * - Process returns non-zero exit status. + */ + +#include "test.h" + +/* + * Create NUMTHREADS threads in addition to the Main thread. + */ +enum +{ +  NUMTHREADS = 4 +}; + +typedef struct bag_t_ bag_t; +struct bag_t_ +{ +  int threadnum; +  int started; +  /* Add more per-thread state variables here */ +  int count; +}; + +static bag_t threadbag[NUMTHREADS + 1]; + +void * +mythread (void *arg) +{ +  int result = ((int) PTHREAD_CANCELED + 1); +  bag_t *bag = (bag_t *) arg; + +  assert (bag == &threadbag[bag->threadnum]); +  assert (bag->started == 0); +  bag->started = 1; + +  /* Set to known state and type */ + +  assert (pthread_setcancelstate (PTHREAD_CANCEL_ENABLE, NULL) == 0); + +  assert (pthread_setcanceltype (PTHREAD_CANCEL_ASYNCHRONOUS, NULL) == 0); + +  /* +   * We wait up to 10 seconds, waking every 0.1 seconds, +   * for a cancelation to be applied to us. +   */ +  for (bag->count = 0; bag->count < 100; bag->count++) +    Sleep (100); + +  return (void *) result; +} + +int +main () +{ +  int failed = 0; +  int i; +  pthread_t t[NUMTHREADS + 1]; + +  assert ((t[0] = pthread_self ()).p != NULL); + +  for (i = 1; i <= NUMTHREADS; i++) +    { +      threadbag[i].started = 0; +      threadbag[i].threadnum = i; +      assert (pthread_create (&t[i], NULL, mythread, (void *) &threadbag[i]) +	      == 0); +    } + +  /* +   * Code to control or munipulate child threads should probably go here. +   */ +  Sleep (500); + +  for (i = 1; i <= NUMTHREADS; i++) +    { +      assert (pthread_cancel (t[i]) == 0); +    } + +  /* +   * Give threads time to run. +   */ +  Sleep (NUMTHREADS * 100); + +  /* +   * Standard check that all threads started. +   */ +  for (i = 1; i <= NUMTHREADS; i++) +    { +      if (!threadbag[i].started) +	{ +	  failed |= !threadbag[i].started; +	  fprintf (stderr, "Thread %d: started %d\n", i, +		   threadbag[i].started); +	} +    } + +  assert (!failed); + +  /* +   * Check any results here. Set "failed" and only print output on failure. +   */ +  failed = 0; +  for (i = 1; i <= NUMTHREADS; i++) +    { +      int fail = 0; +      int result = 0; + +      /* +       * The thread does not contain any cancelation points, so +       * a return value of PTHREAD_CANCELED confirms that async +       * cancelation succeeded. +       */ +      assert (pthread_join (t[i], (void **) &result) == 0); + +      fail = (result != (int) PTHREAD_CANCELED); + +      if (fail) +	{ +	  fprintf (stderr, "Thread %d: started %d: count %d\n", +		   i, threadbag[i].started, threadbag[i].count); +	} +      failed = (failed || fail); +    } + +  assert (!failed); + +  /* +   * Success. +   */ +  return 0; +} | 
