void CRYPTO_destroy_dynlockid(int i) { CRYPTO_dynlock *pointer = NULL; if (i) i = -i - 1; if (dynlock_destroy_callback == NULL) return; CRYPTO_w_lock(CRYPTO_LOCK_DYNLOCK); if (dyn_locks == NULL || i >= sk_CRYPTO_dynlock_num(dyn_locks)) { CRYPTO_w_unlock(CRYPTO_LOCK_DYNLOCK); return; } pointer = sk_CRYPTO_dynlock_value(dyn_locks, i); if (pointer != NULL) { --pointer->references; #ifdef REF_DEBUG if (pointer->references < 0) { OPENSSL_showfatal("CRYPTO_destroy_dynlockid, bad reference count\n"); abort(); } else #endif if (pointer->references <= 0) { (void)sk_CRYPTO_dynlock_set(dyn_locks, i, NULL); } else pointer = NULL; } CRYPTO_w_unlock(CRYPTO_LOCK_DYNLOCK); if (pointer) { dynlock_destroy_callback(pointer->data, OPENSSL_FILE, OPENSSL_LINE); OPENSSL_free(pointer); } }
void OpenSSLDie(const char *file,int line,const char *assertion) { OPENSSL_showfatal( "%s(%d): OpenSSL internal error, assertion failed: %s\n", file,line,assertion); abort(); }
void OpenSSLDie(const char *file,int line,const char *assertion) { OPENSSL_showfatal( "%s(%d): OpenSSL internal error, assertion failed: %s\n", file,line,assertion); #if !defined(_WIN32) || defined(__CYGWIN__) TINYCLR_SSL_ABORT(); #else /* Win32 abort() customarily shows a dialog, but we just did that... */ raise(SIGABRT); TINYCLR_SSL_EXIT(3); #endif }
static void unimplemented(void) { OPENSSL_showfatal(sizeof(TCHAR) == sizeof(char) ? "%s\n" : "%S\n", msg); ExitProcess(1); }