> 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]

Reply via email to