/* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */ #ifndef __SSLMUTEX_H_ #define __SSLMUTEX_H_ 1
/* What SSL really wants is portable process-shared unnamed mutexes in * shared memory, that have the property that if the process that holds * them dies, they are released automatically, and that (unlike fcntl * record locking) lock to the thread, not to the process. * NSPR doesn't provide that. * Windows has mutexes that meet that description, but they're not portable. * POSIX mutexes are not automatically released when the holder dies, * and other processes/threads cannot release the mutex on behalf of the * dead holder. * POSIX semaphores can be used to accomplish this on systems that implement * process-shared unnamed POSIX semaphores, because a watchdog thread can * discover and release semaphores that were held by a dead process. * On systems that do not support process-shared POSIX unnamed semaphores, * they can be emulated using pipes. * The performance cost of doing that is not yet measured. * * So, this API looks a lot like POSIX pthread mutexes.
*/
#include"prtypes.h" #include"prlock.h"
#ifdefined(NETBSD) #include <sys/param.h> /* for __NetBSD_Version__ */ #endif
#ifdefined(WIN32)
#include <wtypes.h>
typedefstruct {
PRBool isMultiProcess; #ifdef WINNT /* on WINNT we need both the PRLock and the Win32 mutex for fibers */ struct { #else union { #endif
PRLock *sslLock;
HANDLE sslMutx;
} u;
} sslMutex;
typedefstruct {
PRBool isMultiProcess; union {
PRLock *sslLock; /* include cross-process locking mechanism here */
} u;
} sslMutex;
#ifdef DARWIN typedef pid_t sslPID; #else typedefint sslPID; #endif
#endif
#include"seccomon.h"
SEC_BEGIN_PROTOS
extern SECStatus sslMutex_Init(sslMutex *sem, int shared);
/* If processLocal is set to true, then just free resources which are *only* associated * with the current process. Leave any shared resources (including the state of
* shared memory) intact. */ extern SECStatus sslMutex_Destroy(sslMutex *sem, PRBool processLocal);