[Help-gnutls] thread safety of gnutls

Ang Way Chuang wcang at yahoo.com
Fri Mar 3 09:14:54 CET 2006

Hi all,
    I am very sorry for asking too many questions. I ran a multithread test on gnutls_record_{recv,send}. When there are multiple threads using one of these functions 
 simultaneously, the application will segfault. However, if i protect these functions with mutex, it won't segfault. But i thought gnutls is thread safe by design. 
 I've called these in my app:
 gcry_control (GCRYCTL_SET_THREAD_CBS, &gcry_threads_pthread);
 Here is thread function:
void * tls_session(void * data) {  int ret;  char buf[501];  int times;  unsigned int len;  gnutls_session_t session = (gnutls_session_t) data;  
 times = 30;  len = times;  memset(buf, 'a' + (rand() % ('z' - 'a')),  len);  buf[len] = 0;    while (!term && !reload && times--) {   //pthread_mutex_lock(&mutex);   ret = gnutls_record_send(session, buf, len + 1);   //pthread_mutex_unlock(&mutex);    if (ret < 1) {    fprintf(stderr, "Failed tls send %s\n", gnutls_strerror(ret));    break;   }      if (ret == 0)    break;      //pthread_mutex_lock(&mutex);   ret = gnutls_record_recv(session, buf, sizeof(buf));   //pthread_mutex_unlock(&mutex);      if (ret < 1) {    fprintf(stderr, "Failed tls recv %s\n", gnutls_strerror(ret));    break;   }      if (ret == 0)    break;     }     return NULL; } 
If the pthread_mutex_{un,}lock is commented out. Are gnutls functions supposed to be protected using synchronization primitives? Thanks in advance.
 Ang Way Chuang

May you be well and happy
To help you stay safe and secure online, we've developed the all new Yahoo! Security Centre.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: </pipermail/attachments/20060303/92a51164/attachment.htm>

More information about the Gnutls-help mailing list