~ubuntu-branches/ubuntu/natty/clamav/natty-security

0.1.11 by Stephen Gran
Import upstream version 0.97+dfsg
1
/*
2
 * ptw32_processTerminate.c
3
 *
4
 * Description:
5
 * This translation unit implements routines which are private to
6
 * the implementation and may be used throughout it.
7
 *
8
 * --------------------------------------------------------------------------
9
 *
10
 *      Pthreads-win32 - POSIX Threads Library for Win32
11
 *      Copyright(C) 1998 John E. Bossom
12
 *      Copyright(C) 1999,2005 Pthreads-win32 contributors
13
 * 
14
 *      Contact Email: rpj@callisto.canberra.edu.au
15
 * 
16
 *      The current list of contributors is contained
17
 *      in the file CONTRIBUTORS included with the source
18
 *      code distribution. The list can also be seen at the
19
 *      following World Wide Web location:
20
 *      http://sources.redhat.com/pthreads-win32/contributors.html
21
 * 
22
 *      This library is free software; you can redistribute it and/or
23
 *      modify it under the terms of the GNU Lesser General Public
24
 *      License as published by the Free Software Foundation; either
25
 *      version 2 of the License, or (at your option) any later version.
26
 * 
27
 *      This library is distributed in the hope that it will be useful,
28
 *      but WITHOUT ANY WARRANTY; without even the implied warranty of
29
 *      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
30
 *      Lesser General Public License for more details.
31
 * 
32
 *      You should have received a copy of the GNU Lesser General Public
33
 *      License along with this library in the file COPYING.LIB;
34
 *      if not, write to the Free Software Foundation, Inc.,
35
 *      59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
36
 */
37
38
#include "pthread.h"
39
#include "implement.h"
40
41
42
void
43
ptw32_processTerminate (void)
44
     /*
45
      * ------------------------------------------------------
46
      * DOCPRIVATE
47
      *      This function performs process wide termination for
48
      *      the pthread library.
49
      *
50
      * PARAMETERS
51
      *      N/A
52
      *
53
      * DESCRIPTION
54
      *      This function performs process wide termination for
55
      *      the pthread library.
56
      *      This routine sets the global variable
57
      *      ptw32_processInitialized to FALSE
58
      *
59
      * RESULTS
60
      *              N/A
61
      *
62
      * ------------------------------------------------------
63
      */
64
{
65
  if (ptw32_processInitialized)
66
    {
67
      ptw32_thread_t * tp, * tpNext;
68
69
      if (ptw32_selfThreadKey != NULL)
70
	{
71
	  /*
72
	   * Release ptw32_selfThreadKey
73
	   */
74
	  pthread_key_delete (ptw32_selfThreadKey);
75
76
	  ptw32_selfThreadKey = NULL;
77
	}
78
79
      if (ptw32_cleanupKey != NULL)
80
	{
81
	  /*
82
	   * Release ptw32_cleanupKey
83
	   */
84
	  pthread_key_delete (ptw32_cleanupKey);
85
86
	  ptw32_cleanupKey = NULL;
87
	}
88
89
      EnterCriticalSection (&ptw32_thread_reuse_lock);
90
91
      tp = ptw32_threadReuseTop;
92
      while (tp != PTW32_THREAD_REUSE_EMPTY)
93
	{
94
	  tpNext = tp->prevReuse;
95
	  free (tp);
96
	  tp = tpNext;
97
	}
98
99
      LeaveCriticalSection (&ptw32_thread_reuse_lock);
100
101
      /* 
102
       * Destroy the global locks and other objects.
103
       */
104
      DeleteCriticalSection (&ptw32_spinlock_test_init_lock);
105
      DeleteCriticalSection (&ptw32_rwlock_test_init_lock);
106
      DeleteCriticalSection (&ptw32_cond_test_init_lock);
107
      DeleteCriticalSection (&ptw32_cond_list_lock);
108
      DeleteCriticalSection (&ptw32_mutex_test_init_lock);
109
      DeleteCriticalSection (&ptw32_thread_reuse_lock);
110
111
      ptw32_processInitialized = PTW32_FALSE;
112
    }
113
114
}				/* processTerminate */