> Hi all, > > it seems that I am missing the usage of the set of obscure functions: > > CRYPTO_set_dynlock_create_callback() > CRYPTO_set_dynlock_lock_callback() > CRYPTO_set_dynlock_destroy_callback() > > but I have no idea how to initialize those functions - is there > any example > on how to do that by using pthreads ? > > Ciao, > Max
Off the top of my head, and untested, but it should give you the idea: struct CRYPTO_dynlock_value { pthread_rwlock_t lock; }; #ifndef CRYPTO_LOCK #define CRYPTO_LOCK 0x01 #define CRYPTO_UNLOCK 0x02 #define CRYPTO_READ 0x04 #define CRYPTO_WRITE 0x08 #endif void locking_callback(int mode, struct CRYPTO_dynlock_value *l, const char *, int) { if(mode==(CRYPTO_LOCK|CRYPTO_READ)) pthread_rwlock_rdlock(&l->lock); else if(mode==(CRYPTO_LOCK|CRYPTO_WRITE)) pthread_rwlock_wrlock(&l->lock); else if(mode==(CRYPTO_UNLOCK|CRYPTO_READ)) pthread_rwlock_unlock(&l->lock); else if(mode==(CRYPTO_UNLOCK|CRYPTO_WRITE)) pthread_rwlock_unlock(&l->lock); } struct CRYPTO_dynlock_value *create_callback(const char *, int) { CRYPTO_dynlock_value *l=(CRYPTO_dynlock_value *) malloc(sizeof(CRYPTO_dynlock_value)); pthread_rwlock_init(&l->lock, NULL); return l; } void destroy_callback(struct CRYPTO_dynlock_value *l, const char *, int) { pthread_rwlock_destroy(&l->lock); free(l); } void InitDynLocks(void) { CRYPTO_set_dynlock_create_callback(create_callback); CRYPTO_set_dynlock_lock_callback(locking_callback); CRYPTO_set_dynlock_destroy_callback(destroy_callback); } DS ______________________________________________________________________ OpenSSL Project http://www.openssl.org User Support Mailing List openssl-users@openssl.org Automated List Manager [EMAIL PROTECTED]