锁定多线程openssl不起作用

时间:2016-02-10 13:28:05

标签: c++ multithreading openssl

我有一台服务器。当我尝试使用多线程运行服务器时,它会崩溃。之后我发现,我必须在openssl中手动提供锁定以避免崩溃。在提供静态锁之后,服务器也会崩溃。我会在这里附上我的代码。任何人都可以说它有什么不对吗?

代码:

BIO *bio_err = NULL;
static pthread_mutex_t *lock_cs;
static long *lock_count;
void pthreads_locking_callback(int mode, int type, const char *file,int line)
{
    if (mode & CRYPTO_LOCK) {
        pthread_mutex_lock(&(lock_cs[type]));
        lock_count[type]++;
    } else {
         pthread_mutex_unlock(&(lock_cs[type]));
    }
}
void pthreads_thread_id(CRYPTO_THREADID *tid)
{
    unsigned long data = (unsigned long)pthread_self();
    CRYPTO_THREADID_set_numeric(tid, (unsigned long)data);
}
void thread_setup(void)
{
    int i;
    lock_cs = (pthread_mutex_t*)OPENSSL_malloc(CRYPTO_num_locks()*        sizeof(pthread_mutex_t));
    lock_count = (long int *)OPENSSL_malloc(CRYPTO_num_locks() * sizeof(long));
    for (i = 0; i < CRYPTO_num_locks(); i++) {
        lock_count[i] = 0;
        pthread_mutex_init(&(lock_cs[i]), NULL);
    }
    CRYPTO_THREADID_set_callback(pthreads_thread_id);
    CRYPTO_set_locking_callback(pthreads_locking_callback);
}
void thread_cleanup(void)
{
    int i;
    CRYPTO_set_locking_callback(NULL);
    BIO_printf(bio_err, "cleanup\n");
    for (i = 0; i < CRYPTO_num_locks(); i++) {
        pthread_mutex_destroy(&(lock_cs[i]));
        BIO_printf(bio_err, "%8ld:%s\n", lock_count[i],   CRYPTO_get_lock_name(i));
    }
    OPENSSL_free(lock_cs);
    OPENSSL_free(lock_count);

    BIO_printf(bio_err, "done cleanup\n");
}

0 个答案:

没有答案