/[pcsx2_0.9.7]/trunk/3rdparty/w32pthreads/pthread_key_create.c
ViewVC logotype

Contents of /trunk/3rdparty/w32pthreads/pthread_key_create.c

Parent Directory Parent Directory | Revision Log Revision Log


Revision 31 - (show annotations) (download)
Tue Sep 7 03:24:11 2010 UTC (9 years, 11 months ago) by william
File MIME type: text/plain
File size: 3895 byte(s)
committing r3113 initial commit again...
1 /*
2 * pthread_key_create.c
3 *
4 * Description:
5 * POSIX thread functions which implement thread-specific data (TSD).
6 *
7 * --------------------------------------------------------------------------
8 *
9 * Pthreads-win32 - POSIX Threads Library for Win32
10 * Copyright(C) 1998 John E. Bossom
11 * Copyright(C) 1999,2005 Pthreads-win32 contributors
12 *
13 * Contact Email: rpj@callisto.canberra.edu.au
14 *
15 * The current list of contributors is contained
16 * in the file CONTRIBUTORS included with the source
17 * code distribution. The list can also be seen at the
18 * following World Wide Web location:
19 * http://sources.redhat.com/pthreads-win32/contributors.html
20 *
21 * This library is free software; you can redistribute it and/or
22 * modify it under the terms of the GNU Lesser General Public
23 * License as published by the Free Software Foundation; either
24 * version 2 of the License, or (at your option) any later version.
25 *
26 * This library is distributed in the hope that it will be useful,
27 * but WITHOUT ANY WARRANTY; without even the implied warranty of
28 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
29 * Lesser General Public License for more details.
30 *
31 * You should have received a copy of the GNU Lesser General Public
32 * License along with this library in the file COPYING.LIB;
33 * if not, write to the Free Software Foundation, Inc.,
34 * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
35 */
36
37 #include "ptw32pch.h"
38
39
40 /* TLS_OUT_OF_INDEXES not defined on WinCE */
41 #ifndef TLS_OUT_OF_INDEXES
42 #define TLS_OUT_OF_INDEXES 0xffffffff
43 #endif
44
45 int
46 pthread_key_create (pthread_key_t * key, void (*destructor) (void *))
47 /*
48 * ------------------------------------------------------
49 * DOCPUBLIC
50 * This function creates a thread-specific data key visible
51 * to all threads. All existing and new threads have a value
52 * NULL for key until set using pthread_setspecific. When any
53 * thread with a non-NULL value for key terminates, 'destructor'
54 * is called with key's current value for that thread.
55 *
56 * PARAMETERS
57 * key
58 * pointer to an instance of pthread_key_t
59 *
60 *
61 * DESCRIPTION
62 * This function creates a thread-specific data key visible
63 * to all threads. All existing and new threads have a value
64 * NULL for key until set using pthread_setspecific. When any
65 * thread with a non-NULL value for key terminates, 'destructor'
66 * is called with key's current value for that thread.
67 *
68 * RESULTS
69 * 0 successfully created semaphore,
70 * EAGAIN insufficient resources or PTHREAD_KEYS_MAX
71 * exceeded,
72 * ENOMEM insufficient memory to create the key,
73 *
74 * ------------------------------------------------------
75 */
76 {
77 int result = 0;
78 pthread_key_t newkey;
79
80 if ((newkey = (pthread_key_t) calloc (1, sizeof (*newkey))) == NULL)
81 {
82 result = ENOMEM;
83 }
84 else if ((newkey->key = TlsAlloc ()) == TLS_OUT_OF_INDEXES)
85 {
86 result = EAGAIN;
87
88 free (newkey);
89 newkey = NULL;
90 }
91 else if (destructor != NULL)
92 {
93 /*
94 * Have to manage associations between thread and key;
95 * Therefore, need a lock that allows multiple threads
96 * to gain exclusive access to the key->threads list.
97 *
98 * The mutex will only be created when it is first locked.
99 */
100 #ifdef PTW32_STATIC_MUTEXS
101 newkey->keyLock = PTHREAD_MUTEX_INITIALIZER;
102 #else
103 pthread_mutex_init (&newkey->keyLock, NULL);
104 #endif
105 newkey->destructor = destructor;
106 }
107
108 *key = newkey;
109
110 return (result);
111 }

  ViewVC Help
Powered by ViewVC 1.1.22