Learn how easy it is to sync an existing GitHub or Google Code repo to a SourceForge project! See Demo

Close

[fb8dc5]: pthread_exit.c Maximize Restore History

Download this file

pthread_exit.c    107 lines (95 with data), 3.2 kB

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
/*
* pthread_exit.c
*
* Description:
* This translation unit implements routines associated with exiting from
* a thread.
*
* --------------------------------------------------------------------------
*
* 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"
#ifndef _UWIN
/*# include <process.h> */
#endif
void
pthread_exit (void *value_ptr)
/*
* ------------------------------------------------------
* DOCPUBLIC
* This function terminates the calling thread, returning
* the value 'value_ptr' to any joining thread.
*
* PARAMETERS
* value_ptr
* a generic data value (i.e. not the address of a value)
*
*
* DESCRIPTION
* This function terminates the calling thread, returning
* the value 'value_ptr' to any joining thread.
* NOTE: thread should be joinable.
*
* RESULTS
* N/A
*
* ------------------------------------------------------
*/
{
ptw32_thread_t * sp;
/*
* Don't use pthread_self() to avoid creating an implicit POSIX thread handle
* unnecessarily.
*/
sp = (ptw32_thread_t *) pthread_getspecific (ptw32_selfThreadKey);
#ifdef _UWIN
if (--pthread_count <= 0)
exit ((int) value_ptr);
#endif
if (NULL == sp)
{
/*
* A POSIX thread handle was never created. I.e. this is a
* Win32 thread that has never called a pthreads-win32 routine that
* required a POSIX handle.
*
* Implicit POSIX handles are cleaned up in ptw32_throw() now.
*/
#if ! (defined (__MINGW64__) || defined(__MINGW32__)) || defined (__MSVCRT__) || defined (__DMC__)
_endthreadex ((unsigned) (size_t) value_ptr);
#else
_endthread ();
#endif
/* Never reached */
}
sp->exitStatus = value_ptr;
ptw32_throw (PTW32_EPS_EXIT);
/* Never reached. */
}