📄 sslthreadsafe.c
字号:
/* * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Author : Gundu RAO - 16 Jul 2004 * From Hewlett Packard Company. */#define SSL_MAIN#include "sslcommon.h"/*** Call back function for locking function*//* extern mutex_buf; */MUTEX_TYPE *mutex_buf = NULL ;voidlocking_function ( int mode, int n, const char *file, int line){ if (mode & CRYPTO_LOCK) MUTEX_LOCK(mutex_buf[n]); else MUTEX_UNLOCK(mutex_buf[n]);}/*** Call back id_function*/unsigned long id_function(void){ return ((unsigned long)THREAD_ID);}intThread_setup(void){ int i; mutex_buf = (MUTEX_TYPE *)malloc(sizeof(MUTEX_TYPE) * CRYPTO_num_locks()); if(!mutex_buf) return 0; for ( i = 0 ; i < CRYPTO_num_locks() ; i++) MUTEX_SETUP(mutex_buf[i]); CRYPTO_set_id_callback(id_function); CRYPTO_set_locking_callback(locking_function);/*** Dynamic locking routine registration**/#ifdef _DYNAMIC_LOCKING_MECHANISM_ CRYPTO_set_dynlock_create_callback(dyn_create_function); CRYPTO_set_dynlock_lock_callback(dyn_lock_function); CRYPTO_set_dynlock_destroy_callback(dyn_destroy_function);#endif return 1;}/*** Thread clean up function - After closing open ssl - we need to call this once*/intThread_cleanup(void){ int i; if (!mutex_buf) return 0; CRYPTO_set_id_callback(NULL); CRYPTO_set_locking_callback(NULL);#ifdef _DYNAMIC_LOCKING_MECHANISM_ CRYPTO_set_dynlock_create_callback(NULL); CRYPTO_set_dynlock_lock_callback(NULL); CRYPTO_set_dynlock_destroy_callback(NULL);#endif for (i=0 ; i < CRYPTO_num_locks(); i++) MUTEX_CLEANUP(mutex_buf[i]); mutex_buf = NULL ; return 1;}#ifdef _DYNAMIC_LOCKING_MECHANISM_struct CRYPTO_dynlock_value *CRYPTO_dynlock_value(const char *file,int line){ struct CRYPTO_dynlock_value *value; value = (CRYPTO_dynlock_value *)malloc(sizeof(struct CRYPTO_dynlock_value)); if(!value) return NULL; MUTEX_SETUP(value -> mutex); return value;}voiddyn_lock_function( int mode , struct CRYPTO_dynlock_value *val,\ const char *file , int line ){ if (mode &CRYPTO_LOCK) MUTEX_LOCK(val -> mutex); else MUTEX_UNLOCK(val -> mutex);}voiddyn_destroy_function( struct CRYPTO_dynlock_value *val,\ const char *file , int line ){ MUTEX_CLEANUP(val -> mutex);}#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -