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

Side by Side Diff: net/third_party/nss/ssl/sslmutex.c

Issue 9558017: Update net/third_party/nss to NSS 3.13.3. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Upload before checkin Created 8 years, 9 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 | « net/third_party/nss/ssl/sslmutex.h ('k') | net/third_party/nss/ssl/sslnonce.c » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* ***** BEGIN LICENSE BLOCK ***** 1 /* ***** BEGIN LICENSE BLOCK *****
2 * Version: MPL 1.1/GPL 2.0/LGPL 2.1 2 * Version: MPL 1.1/GPL 2.0/LGPL 2.1
3 * 3 *
4 * The contents of this file are subject to the Mozilla Public License Version 4 * The contents of this file are subject to the Mozilla Public License Version
5 * 1.1 (the "License"); you may not use this file except in compliance with 5 * 1.1 (the "License"); you may not use this file except in compliance with
6 * the License. You may obtain a copy of the License at 6 * the License. You may obtain a copy of the License at
7 * http://www.mozilla.org/MPL/ 7 * http://www.mozilla.org/MPL/
8 * 8 *
9 * Software distributed under the License is distributed on an "AS IS" basis, 9 * Software distributed under the License is distributed on an "AS IS" basis,
10 * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License 10 * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
(...skipping 15 matching lines...) Expand all
26 * in which case the provisions of the GPL or the LGPL are applicable instead 26 * in which case the provisions of the GPL or the LGPL are applicable instead
27 * of those above. If you wish to allow use of your version of this file only 27 * of those above. If you wish to allow use of your version of this file only
28 * under the terms of either the GPL or the LGPL, and not to allow others to 28 * under the terms of either the GPL or the LGPL, and not to allow others to
29 * use your version of this file under the terms of the MPL, indicate your 29 * use your version of this file under the terms of the MPL, indicate your
30 * decision by deleting the provisions above and replace them with the notice 30 * decision by deleting the provisions above and replace them with the notice
31 * and other provisions required by the GPL or the LGPL. If you do not delete 31 * and other provisions required by the GPL or the LGPL. If you do not delete
32 * the provisions above, a recipient may use your version of this file under 32 * the provisions above, a recipient may use your version of this file under
33 * the terms of any one of the MPL, the GPL or the LGPL. 33 * the terms of any one of the MPL, the GPL or the LGPL.
34 * 34 *
35 * ***** END LICENSE BLOCK ***** */ 35 * ***** END LICENSE BLOCK ***** */
36 /* $Id: sslmutex.c,v 1.25 2010/04/03 18:27:33 nelson%bolyard.com Exp $ */ 36 /* $Id: sslmutex.c,v 1.27 2011/10/01 00:11:02 wtc%google.com Exp $ */
37 37
38 #include "seccomon.h" 38 #include "seccomon.h"
39 /* This ifdef should match the one in sslsnce.c */ 39 /* This ifdef should match the one in sslsnce.c */
40 #if defined(XP_UNIX) || defined(XP_WIN32) || defined (XP_OS2) || defined(XP_BEOS ) 40 #if defined(XP_UNIX) || defined(XP_WIN32) || defined (XP_OS2) || defined(XP_BEOS )
41 41
42 #include "sslmutex.h" 42 #include "sslmutex.h"
43 #include "prerr.h" 43 #include "prerr.h"
44 44
45 static SECStatus single_process_sslMutex_Init(sslMutex* pMutex) 45 static SECStatus single_process_sslMutex_Init(sslMutex* pMutex)
46 { 46 {
(...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after
161 #endif 161 #endif
162 162
163 loser: 163 loser:
164 nss_MD_unix_map_default_error(errno); 164 nss_MD_unix_map_default_error(errno);
165 close(pMutex->u.pipeStr.mPipes[0]); 165 close(pMutex->u.pipeStr.mPipes[0]);
166 close(pMutex->u.pipeStr.mPipes[1]); 166 close(pMutex->u.pipeStr.mPipes[1]);
167 return SECFailure; 167 return SECFailure;
168 } 168 }
169 169
170 SECStatus 170 SECStatus
171 sslMutex_Destroy(sslMutex *pMutex) 171 sslMutex_Destroy(sslMutex *pMutex, PRBool processLocal)
172 { 172 {
173 if (PR_FALSE == pMutex->isMultiProcess) { 173 if (PR_FALSE == pMutex->isMultiProcess) {
174 return single_process_sslMutex_Destroy(pMutex); 174 return single_process_sslMutex_Destroy(pMutex);
175 } 175 }
176 if (pMutex->u.pipeStr.mPipes[2] != SSL_MUTEX_MAGIC) { 176 if (pMutex->u.pipeStr.mPipes[2] != SSL_MUTEX_MAGIC) {
177 PORT_SetError(PR_INVALID_ARGUMENT_ERROR); 177 PORT_SetError(PR_INVALID_ARGUMENT_ERROR);
178 return SECFailure; 178 return SECFailure;
179 } 179 }
180 close(pMutex->u.pipeStr.mPipes[0]); 180 close(pMutex->u.pipeStr.mPipes[0]);
181 close(pMutex->u.pipeStr.mPipes[1]); 181 close(pMutex->u.pipeStr.mPipes[1]);
182 182
183 if (processLocal) {
184 return SECSuccess;
185 }
186
183 pMutex->u.pipeStr.mPipes[0] = -1; 187 pMutex->u.pipeStr.mPipes[0] = -1;
184 pMutex->u.pipeStr.mPipes[1] = -1; 188 pMutex->u.pipeStr.mPipes[1] = -1;
185 pMutex->u.pipeStr.mPipes[2] = -1; 189 pMutex->u.pipeStr.mPipes[2] = -1;
186 pMutex->u.pipeStr.nWaiters = 0; 190 pMutex->u.pipeStr.nWaiters = 0;
187 191
188 return SECSuccess; 192 return SECSuccess;
189 } 193 }
190 194
191 #if defined(LINUX) && defined(i386) 195 #if defined(LINUX) && defined(i386)
192 /* No memory barrier needed for this platform */ 196 /* No memory barrier needed for this platform */
(...skipping 209 matching lines...) Expand 10 before | Expand all | Expand 10 after
402 if (hMutex == NULL) { 406 if (hMutex == NULL) {
403 hMutex = INVALID_HANDLE_VALUE; 407 hMutex = INVALID_HANDLE_VALUE;
404 nss_MD_win32_map_default_error(GetLastError()); 408 nss_MD_win32_map_default_error(GetLastError());
405 return SECFailure; 409 return SECFailure;
406 } 410 }
407 pMutex->u.sslMutx = hMutex; 411 pMutex->u.sslMutx = hMutex;
408 return SECSuccess; 412 return SECSuccess;
409 } 413 }
410 414
411 SECStatus 415 SECStatus
412 sslMutex_Destroy(sslMutex *pMutex) 416 sslMutex_Destroy(sslMutex *pMutex, PRBool processLocal)
413 { 417 {
414 HANDLE hMutex; 418 HANDLE hMutex;
415 int rv; 419 int rv;
416 int retvalue = SECSuccess; 420 int retvalue = SECSuccess;
417 421
418 PR_ASSERT(pMutex != 0); 422 PR_ASSERT(pMutex != 0);
419 if (PR_FALSE == pMutex->isMultiProcess) { 423 if (PR_FALSE == pMutex->isMultiProcess) {
420 return single_process_sslMutex_Destroy(pMutex); 424 return single_process_sslMutex_Destroy(pMutex);
421 } 425 }
422 426
423 /* multi-process mode */ 427 /* multi-process mode */
424 #ifdef WINNT 428 #ifdef WINNT
425 /* on NT, get rid of the PRLock used for fibers within a process */ 429 /* on NT, get rid of the PRLock used for fibers within a process */
426 retvalue = sslMutex_2LevelDestroy(pMutex); 430 retvalue = sslMutex_2LevelDestroy(pMutex);
427 #endif 431 #endif
428 432
429 PR_ASSERT( pMutex->u.sslMutx != 0 && 433 PR_ASSERT( pMutex->u.sslMutx != 0 &&
430 pMutex->u.sslMutx != INVALID_HANDLE_VALUE); 434 pMutex->u.sslMutx != INVALID_HANDLE_VALUE);
431 if (!pMutex || (hMutex = pMutex->u.sslMutx) == 0 435 if (!pMutex || (hMutex = pMutex->u.sslMutx) == 0
432 || hMutex == INVALID_HANDLE_VALUE) { 436 || hMutex == INVALID_HANDLE_VALUE) {
433 PORT_SetError(PR_INVALID_ARGUMENT_ERROR); 437 PORT_SetError(PR_INVALID_ARGUMENT_ERROR);
434 return SECFailure; 438 return SECFailure;
435 } 439 }
436 440
437 rv = CloseHandle(hMutex); /* ignore error */ 441 rv = CloseHandle(hMutex); /* ignore error */
438 if (rv) { 442 if (!processLocal && rv) {
439 pMutex->u.sslMutx = hMutex = INVALID_HANDLE_VALUE; 443 pMutex->u.sslMutx = hMutex = INVALID_HANDLE_VALUE;
440 } else { 444 }
445 if (!rv) {
441 nss_MD_win32_map_default_error(GetLastError()); 446 nss_MD_win32_map_default_error(GetLastError());
442 retvalue = SECFailure; 447 retvalue = SECFailure;
443 } 448 }
444 return retvalue; 449 return retvalue;
445 } 450 }
446 451
447 int 452 int
448 sslMutex_Unlock(sslMutex *pMutex) 453 sslMutex_Unlock(sslMutex *pMutex)
449 { 454 {
450 BOOL success = FALSE; 455 BOOL success = FALSE;
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after
550 rv = sem_init(&pMutex->u.sem, shared, 1); 555 rv = sem_init(&pMutex->u.sem, shared, 1);
551 } while (rv < 0 && errno == EINTR); 556 } while (rv < 0 && errno == EINTR);
552 if (rv < 0) { 557 if (rv < 0) {
553 nss_MD_unix_map_default_error(errno); 558 nss_MD_unix_map_default_error(errno);
554 return SECFailure; 559 return SECFailure;
555 } 560 }
556 return SECSuccess; 561 return SECSuccess;
557 } 562 }
558 563
559 SECStatus 564 SECStatus
560 sslMutex_Destroy(sslMutex *pMutex) 565 sslMutex_Destroy(sslMutex *pMutex, PRBool processLocal)
561 { 566 {
562 int rv; 567 int rv;
563 if (PR_FALSE == pMutex->isMultiProcess) { 568 if (PR_FALSE == pMutex->isMultiProcess) {
564 return single_process_sslMutex_Destroy(pMutex); 569 return single_process_sslMutex_Destroy(pMutex);
565 } 570 }
571
572 /* semaphores are global resources. See SEM_DESTROY(3) man page */
573 if (processLocal) {
574 return SECSuccess;
575 }
566 do { 576 do {
567 rv = sem_destroy(&pMutex->u.sem); 577 rv = sem_destroy(&pMutex->u.sem);
568 } while (rv < 0 && errno == EINTR); 578 } while (rv < 0 && errno == EINTR);
569 if (rv < 0) { 579 if (rv < 0) {
570 nss_MD_unix_map_default_error(errno); 580 nss_MD_unix_map_default_error(errno);
571 return SECFailure; 581 return SECFailure;
572 } 582 }
573 return SECSuccess; 583 return SECSuccess;
574 } 584 }
575 585
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
616 pMutex->isMultiProcess = (PRBool)(shared != 0); 626 pMutex->isMultiProcess = (PRBool)(shared != 0);
617 if (!shared) { 627 if (!shared) {
618 return single_process_sslMutex_Init(pMutex); 628 return single_process_sslMutex_Init(pMutex);
619 } 629 }
620 PORT_Assert(!("sslMutex_Init not implemented for multi-process applications !")); 630 PORT_Assert(!("sslMutex_Init not implemented for multi-process applications !"));
621 PORT_SetError(PR_NOT_IMPLEMENTED_ERROR); 631 PORT_SetError(PR_NOT_IMPLEMENTED_ERROR);
622 return SECFailure; 632 return SECFailure;
623 } 633 }
624 634
625 SECStatus 635 SECStatus
626 sslMutex_Destroy(sslMutex *pMutex) 636 sslMutex_Destroy(sslMutex *pMutex, PRBool processLocal)
627 { 637 {
628 PR_ASSERT(pMutex); 638 PR_ASSERT(pMutex);
629 if (PR_FALSE == pMutex->isMultiProcess) { 639 if (PR_FALSE == pMutex->isMultiProcess) {
630 return single_process_sslMutex_Destroy(pMutex); 640 return single_process_sslMutex_Destroy(pMutex);
631 } 641 }
632 PORT_Assert(!("sslMutex_Destroy not implemented for multi-process applicatio ns !")); 642 PORT_Assert(!("sslMutex_Destroy not implemented for multi-process applicatio ns !"));
633 PORT_SetError(PR_NOT_IMPLEMENTED_ERROR); 643 PORT_SetError(PR_NOT_IMPLEMENTED_ERROR);
634 return SECFailure; 644 return SECFailure;
635 } 645 }
636 646
(...skipping 17 matching lines...) Expand all
654 return single_process_sslMutex_Lock(pMutex); 664 return single_process_sslMutex_Lock(pMutex);
655 } 665 }
656 PORT_Assert(!("sslMutex_Lock not implemented for multi-process applications !")); 666 PORT_Assert(!("sslMutex_Lock not implemented for multi-process applications !"));
657 PORT_SetError(PR_NOT_IMPLEMENTED_ERROR); 667 PORT_SetError(PR_NOT_IMPLEMENTED_ERROR);
658 return SECFailure; 668 return SECFailure;
659 } 669 }
660 670
661 #endif 671 #endif
662 672
663 #endif 673 #endif
OLDNEW
« no previous file with comments | « net/third_party/nss/ssl/sslmutex.h ('k') | net/third_party/nss/ssl/sslnonce.c » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698