SECStatus sslMutex_Destroy(sslMutex *pMutex) { HANDLE hMutex; int rv; int retvalue = SECSuccess; PR_ASSERT(pMutex != 0); if (PR_FALSE == pMutex->isMultiProcess) { return single_process_sslMutex_Destroy(pMutex); } /* multi-process mode */ #ifdef WINNT /* on NT, get rid of the PRLock used for fibers within a process */ retvalue = sslMutex_2LevelDestroy(pMutex); #endif PR_ASSERT( pMutex->u.sslMutx != 0 && pMutex->u.sslMutx != INVALID_HANDLE_VALUE); if (!pMutex || (hMutex = pMutex->u.sslMutx) == 0 || hMutex == INVALID_HANDLE_VALUE) { PORT_SetError(PR_INVALID_ARGUMENT_ERROR); return SECFailure; } rv = CloseHandle(hMutex); /* ignore error */ if (rv) { pMutex->u.sslMutx = hMutex = INVALID_HANDLE_VALUE; } else { nss_MD_win32_map_default_error(GetLastError()); retvalue = SECFailure; } return retvalue; }
SECStatus sslMutex_Destroy(sslMutex *pMutex) { PR_ASSERT(pMutex); if (PR_FALSE == pMutex->isMultiProcess) { return single_process_sslMutex_Destroy(pMutex); } PORT_Assert(!("sslMutex_Destroy not implemented for multi-process applications !")); PORT_SetError(PR_NOT_IMPLEMENTED_ERROR); return SECFailure; }
SECStatus sslMutex_Destroy(sslMutex *pMutex) { int rv; if (PR_FALSE == pMutex->isMultiProcess) { return single_process_sslMutex_Destroy(pMutex); } do { rv = sem_destroy(&pMutex->u.sem); } while (rv < 0 && errno == EINTR); if (rv < 0) { nss_MD_unix_map_default_error(errno); return SECFailure; } return SECSuccess; }
SECStatus sslMutex_Destroy(sslMutex *pMutex) { if (PR_FALSE == pMutex->isMultiProcess) { return single_process_sslMutex_Destroy(pMutex); } if (pMutex->u.pipeStr.mPipes[2] != SSL_MUTEX_MAGIC) { PORT_SetError(PR_INVALID_ARGUMENT_ERROR); return SECFailure; } close(pMutex->u.pipeStr.mPipes[0]); close(pMutex->u.pipeStr.mPipes[1]); pMutex->u.pipeStr.mPipes[0] = -1; pMutex->u.pipeStr.mPipes[1] = -1; pMutex->u.pipeStr.mPipes[2] = -1; pMutex->u.pipeStr.nWaiters = 0; return SECSuccess; }
SECStatus sslMutex_Destroy(sslMutex *pMutex, PRBool processLocal) { int rv; if (PR_FALSE == pMutex->isMultiProcess) { return single_process_sslMutex_Destroy(pMutex); } /* semaphores are global resources. See SEM_DESTROY(3) man page */ if (processLocal) { return SECSuccess; } do { rv = sem_destroy(&pMutex->u.sem); } while (rv < 0 && errno == EINTR); if (rv < 0) { nss_MD_unix_map_default_error(errno); return SECFailure; } return SECSuccess; }
SECStatus sslMutex_Destroy(sslMutex *pMutex, PRBool processLocal) { HANDLE hMutex; int rv; int retvalue = SECSuccess; PR_ASSERT(pMutex != 0); if (PR_FALSE == pMutex->isMultiProcess) { return single_process_sslMutex_Destroy(pMutex); } #ifdef WINNT retvalue = sslMutex_2LevelDestroy(pMutex); #endif PR_ASSERT( pMutex->u.sslMutx != 0 && pMutex->u.sslMutx != INVALID_HANDLE_VALUE); if (!pMutex || (hMutex = pMutex->u.sslMutx) == 0 || hMutex == INVALID_HANDLE_VALUE) { PORT_SetError(PR_INVALID_ARGUMENT_ERROR); return SECFailure; } rv = CloseHandle(hMutex); if (!processLocal && rv) { pMutex->u.sslMutx = hMutex = INVALID_HANDLE_VALUE; } if (!rv) { nss_MD_win32_map_default_error(GetLastError()); retvalue = SECFailure; } return retvalue; }
static SECStatus sslMutex_2LevelDestroy(sslMutex *sem) { return single_process_sslMutex_Destroy(sem); }