Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(484)

Side by Side Diff: nspr/pr/src/threads/prtpd.c

Issue 407383002: Update to NSPR 4.10.7 Beta 3. (Closed) Base URL: http://src.chromium.org/svn/trunk/deps/third_party/nss
Patch Set: Created 6 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « nspr/pr/src/pthreads/ptsynch.c ('k') | patches/prcpucfg.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ 1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2 /* This Source Code Form is subject to the terms of the Mozilla Public 2 /* This Source Code Form is subject to the terms of the Mozilla Public
3 * License, v. 2.0. If a copy of the MPL was not distributed with this 3 * License, v. 2.0. If a copy of the MPL was not distributed with this
4 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 4 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
5 5
6 /* 6 /*
7 ** Thread Private Data 7 ** Thread Private Data
8 ** 8 **
9 ** There is an aribitrary limit on the number of keys that will be allocated 9 ** There is an aribitrary limit on the number of keys that will be allocated
10 ** by the runtime. It's largish, so it is intended to be a sanity check, not 10 ** by the runtime. It's largish, so it is intended to be a sanity check, not
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after
123 123
124 /* 124 /*
125 ** Define some per-thread-private data. 125 ** Define some per-thread-private data.
126 ** "index" is an index into the per-thread private data table 126 ** "index" is an index into the per-thread private data table
127 ** "priv" is the per-thread-private data 127 ** "priv" is the per-thread-private data
128 ** 128 **
129 ** If the per-thread private data table has a previously registered 129 ** If the per-thread private data table has a previously registered
130 ** destructor function and a non-NULL per-thread-private data value, 130 ** destructor function and a non-NULL per-thread-private data value,
131 ** the destructor function is invoked. 131 ** the destructor function is invoked.
132 ** 132 **
133 ** This can return PR_FAILURE if index is invalid (ie., beyond the current 133 ** This can return PR_FAILURE if index is invalid (ie., beyond the limit
134 ** high water mark) or memory is insufficient to allocate an exanded vector. 134 ** on the TPD slots) or memory is insufficient to allocate an expanded
135 ** vector.
135 */ 136 */
136 137
137 PR_IMPLEMENT(PRStatus) PR_SetThreadPrivate(PRUintn index, void *priv) 138 PR_IMPLEMENT(PRStatus) PR_SetThreadPrivate(PRUintn index, void *priv)
138 { 139 {
139 PRThread *self = PR_GetCurrentThread(); 140 PRThread *self = PR_GetCurrentThread();
140 141
141 /* 142 /*
142 ** The index being set might not have a sufficient vector in this 143 ** To improve performance, we don't check if the index has been
143 ** thread. But if the index has been allocated, it's okay to go 144 ** allocated.
144 ** ahead and extend this one now.
145 */ 145 */
146 if ((index >= _PR_TPD_LIMIT) || (index >= _pr_tpd_highwater)) 146 if (index >= _PR_TPD_LIMIT)
147 { 147 {
148 PR_SetError(PR_TPD_RANGE_ERROR, 0); 148 PR_SetError(PR_TPD_RANGE_ERROR, 0);
149 return PR_FAILURE; 149 return PR_FAILURE;
150 } 150 }
151 151
152 PR_ASSERT(((NULL == self->privateData) && (0 == self->tpdLength)) 152 PR_ASSERT(((NULL == self->privateData) && (0 == self->tpdLength))
153 || ((NULL != self->privateData) && (0 != self->tpdLength))); 153 || ((NULL != self->privateData) && (0 != self->tpdLength)));
154 154
155 /*
156 ** If this thread does not have a sufficient vector for the index
157 ** being set, go ahead and extend this vector now.
158 */
155 if ((NULL == self->privateData) || (self->tpdLength <= index)) 159 if ((NULL == self->privateData) || (self->tpdLength <= index))
156 { 160 {
157 void *extension = PR_CALLOC(_pr_tpd_length * sizeof(void*)); 161 void *extension = PR_CALLOC(_pr_tpd_length * sizeof(void*));
158 if (NULL == extension) 162 if (NULL == extension)
159 { 163 {
160 PR_SetError(PR_OUT_OF_MEMORY_ERROR, 0); 164 PR_SetError(PR_OUT_OF_MEMORY_ERROR, 0);
161 return PR_FAILURE; 165 return PR_FAILURE;
162 } 166 }
163 if (self->privateData) { 167 if (self->privateData) {
164 (void)memcpy( 168 (void)memcpy(
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after
239 /* 243 /*
240 ** We give up after a fixed number of passes. Any non-NULL 244 ** We give up after a fixed number of passes. Any non-NULL
241 ** thread-private data value with a registered destructor 245 ** thread-private data value with a registered destructor
242 ** function is not destroyed. 246 ** function is not destroyed.
243 */ 247 */
244 memset(self->privateData, 0, self->tpdLength * sizeof(void*)); 248 memset(self->privateData, 0, self->tpdLength * sizeof(void*));
245 } 249 }
246 } /* _PR_DestroyThreadPrivate */ 250 } /* _PR_DestroyThreadPrivate */
247 251
248 #endif /* !XP_BEOS */ 252 #endif /* !XP_BEOS */
OLDNEW
« no previous file with comments | « nspr/pr/src/pthreads/ptsynch.c ('k') | patches/prcpucfg.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698