| OLD | NEW | 
|---|
| (Empty) |  | 
|  | 1 /* ***** BEGIN LICENSE BLOCK ***** | 
|  | 2  * Version: MPL 1.1/GPL 2.0/LGPL 2.1 | 
|  | 3  * | 
|  | 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 | 
|  | 6  * the License. You may obtain a copy of the License at | 
|  | 7  * http://www.mozilla.org/MPL/ | 
|  | 8  * | 
|  | 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 | 
|  | 11  * for the specific language governing rights and limitations under the | 
|  | 12  * License. | 
|  | 13  * | 
|  | 14  * The Original Code is the Netscape security libraries. | 
|  | 15  * | 
|  | 16  * The Initial Developer of the Original Code is | 
|  | 17  * Netscape Communications Corporation. | 
|  | 18  * Portions created by the Initial Developer are Copyright (C) 2001 | 
|  | 19  * the Initial Developer. All Rights Reserved. | 
|  | 20  * | 
|  | 21  * Contributor(s): | 
|  | 22  * | 
|  | 23  * Alternatively, the contents of this file may be used under the terms of | 
|  | 24  * either the GNU General Public License Version 2 or later (the "GPL"), or | 
|  | 25  * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), | 
|  | 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 | 
|  | 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 | 
|  | 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 | 
|  | 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. | 
|  | 34  * | 
|  | 35  * ***** END LICENSE BLOCK ***** */ | 
|  | 36 /* $Id: sslmutex.h,v 1.12 2009/06/05 02:34:15 nelson%bolyard.com Exp $ */ | 
|  | 37 #ifndef __SSLMUTEX_H_ | 
|  | 38 #define __SSLMUTEX_H_ 1 | 
|  | 39 | 
|  | 40 /* What SSL really wants is portable process-shared unnamed mutexes in | 
|  | 41  * shared memory, that have the property that if the process that holds | 
|  | 42  * them dies, they are released automatically, and that (unlike fcntl | 
|  | 43  * record locking) lock to the thread, not to the process. | 
|  | 44  * NSPR doesn't provide that. | 
|  | 45  * Windows has mutexes that meet that description, but they're not portable. | 
|  | 46  * POSIX mutexes are not automatically released when the holder dies, | 
|  | 47  * and other processes/threads cannot release the mutex on behalf of the | 
|  | 48  * dead holder. | 
|  | 49  * POSIX semaphores can be used to accomplish this on systems that implement | 
|  | 50  * process-shared unnamed POSIX semaphores, because a watchdog thread can | 
|  | 51  * discover and release semaphores that were held by a dead process. | 
|  | 52  * On systems that do not support process-shared POSIX unnamed semaphores, | 
|  | 53  * they can be emulated using pipes. | 
|  | 54  * The performance cost of doing that is not yet measured. | 
|  | 55  * | 
|  | 56  * So, this API looks a lot like POSIX pthread mutexes. | 
|  | 57  */ | 
|  | 58 | 
|  | 59 #include "prtypes.h" | 
|  | 60 #include "prlock.h" | 
|  | 61 | 
|  | 62 #if defined(NETBSD) | 
|  | 63 #include <sys/param.h> /* for __NetBSD_Version__ */ | 
|  | 64 #endif | 
|  | 65 | 
|  | 66 #if defined(WIN32) | 
|  | 67 | 
|  | 68 #include <wtypes.h> | 
|  | 69 | 
|  | 70 typedef struct | 
|  | 71 { | 
|  | 72     PRBool isMultiProcess; | 
|  | 73 #ifdef WINNT | 
|  | 74     /* on WINNT we need both the PRLock and the Win32 mutex for fibers */ | 
|  | 75     struct { | 
|  | 76 #else | 
|  | 77     union { | 
|  | 78 #endif | 
|  | 79         PRLock* sslLock; | 
|  | 80         HANDLE sslMutx; | 
|  | 81     } u; | 
|  | 82 } sslMutex; | 
|  | 83 | 
|  | 84 typedef int    sslPID; | 
|  | 85 | 
|  | 86 #elif defined(LINUX) || defined(AIX) || defined(BEOS) || defined(BSDI) || (defin
     ed(NETBSD) && __NetBSD_Version__ < 500000000) || defined(OPENBSD) | 
|  | 87 | 
|  | 88 #include <sys/types.h> | 
|  | 89 #include "prtypes.h" | 
|  | 90 | 
|  | 91 typedef struct { | 
|  | 92     PRBool isMultiProcess; | 
|  | 93     union { | 
|  | 94         PRLock* sslLock; | 
|  | 95         struct { | 
|  | 96             int      mPipes[3]; | 
|  | 97             PRInt32  nWaiters; | 
|  | 98         } pipeStr; | 
|  | 99     } u; | 
|  | 100 } sslMutex; | 
|  | 101 typedef pid_t sslPID; | 
|  | 102 | 
|  | 103 #elif defined(XP_UNIX) /* other types of Unix */ | 
|  | 104 | 
|  | 105 #include <sys/types.h>  /* for pid_t */ | 
|  | 106 #include <semaphore.h>  /* for sem_t, and sem_* functions */ | 
|  | 107 | 
|  | 108 typedef struct | 
|  | 109 { | 
|  | 110     PRBool isMultiProcess; | 
|  | 111     union { | 
|  | 112         PRLock* sslLock; | 
|  | 113         sem_t  sem; | 
|  | 114     } u; | 
|  | 115 } sslMutex; | 
|  | 116 | 
|  | 117 typedef pid_t sslPID; | 
|  | 118 | 
|  | 119 #else | 
|  | 120 | 
|  | 121 /* what platform is this ?? */ | 
|  | 122 | 
|  | 123 typedef struct { | 
|  | 124     PRBool isMultiProcess; | 
|  | 125     union { | 
|  | 126         PRLock* sslLock; | 
|  | 127         /* include cross-process locking mechanism here */ | 
|  | 128     } u; | 
|  | 129 } sslMutex; | 
|  | 130 | 
|  | 131 typedef int sslPID; | 
|  | 132 | 
|  | 133 #endif | 
|  | 134 | 
|  | 135 #include "seccomon.h" | 
|  | 136 | 
|  | 137 SEC_BEGIN_PROTOS | 
|  | 138 | 
|  | 139 extern SECStatus sslMutex_Init(sslMutex *sem, int shared); | 
|  | 140 | 
|  | 141 extern SECStatus sslMutex_Destroy(sslMutex *sem); | 
|  | 142 | 
|  | 143 extern SECStatus sslMutex_Unlock(sslMutex *sem); | 
|  | 144 | 
|  | 145 extern SECStatus sslMutex_Lock(sslMutex *sem); | 
|  | 146 | 
|  | 147 #ifdef WINNT | 
|  | 148 | 
|  | 149 extern SECStatus sslMutex_2LevelInit(sslMutex *sem); | 
|  | 150 | 
|  | 151 #endif | 
|  | 152 | 
|  | 153 SEC_END_PROTOS | 
|  | 154 | 
|  | 155 #endif | 
| OLD | NEW | 
|---|