Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

OpenSSL and multithreaded programs

287 views
Skip to first unread message

Chris Dodd

unread,
May 5, 2011, 1:01:26 PM5/5/11
to

Is the OpenSSL library supposed to be at all reentrant? I've had odd
problems (intermittent errors) when trying to use OpenSSL in a multithreaded
program (multiple threads each dealing with independent SSL connections),
and have apparently solved them by creating a single global mutex and
wrapping a mutex acquire around every call into the library. Is
this kind of locking expected to be needed?

Chris Dodd
cd...@csl.sri.com

______________________________________________________________________
OpenSSL Project http://www.openssl.org
User Support Mailing List openss...@openssl.org
Automated List Manager majo...@openssl.org

Jeremy Farrell

unread,
May 5, 2011, 1:27:05 PM5/5/11
to
> From: Chris Dodd

>
> Is the OpenSSL library supposed to be at all reentrant? I've had odd
> problems (intermittent errors) when trying to use OpenSSL in
> a multithreaded
> program (multiple threads each dealing with independent SSL
> connections),
> and have apparently solved them by creating a single global mutex and
> wrapping a mutex acquire around every call into the library. Is
> this kind of locking expected to be needed?

http://lmgtfy.com/?q=openssl+locking______________________________________________________________________

David Schwartz

unread,
May 5, 2011, 1:42:18 PM5/5/11
to
On 5/5/2011 10:01 AM, Chris Dodd wrote:


> Is the OpenSSL library supposed to be at all reentrant? I've had odd
> problems (intermittent errors) when trying to use OpenSSL in a
> multithreaded
> program (multiple threads each dealing with independent SSL connections),
> and have apparently solved them by creating a single global mutex and
> wrapping a mutex acquire around every call into the library. Is
> this kind of locking expected to be needed?

This should not be needed so long as you follow two rules:

1) You must properly set the multi-threaded locking callback.

2) You must not attempt to access the same object directly from two
threads at the same time. For example, you cannot call SSL_read and
SSL_write concurrently on the same SSL object.

DS

dave.m...@emc.com

unread,
May 5, 2011, 2:00:10 PM5/5/11
to
We use OpenSSL in a highly multi-threaded application and don't have problems. There are some locking callbacks that you should be using. Look up these:

CRYPTO_set_id_callback();
CRYPTO_set_locking_callback();
CRYPTO_set_dynlock_create_callback();
CRYPTO_set_dynlock_lock_callback();
CRYPTO_set_dynlock_destroy_callback();

Dave.

-----Original Message-----
From: owner-ope...@openssl.org [mailto:owner-ope...@openssl.org] On Behalf Of Chris Dodd
Sent: Thursday, May 05, 2011 1:01 PM
To: openss...@openssl.org
Subject: OpenSSL and multithreaded programs


Is the OpenSSL library supposed to be at all reentrant? I've had odd
problems (intermittent errors) when trying to use OpenSSL in a multithreaded
program (multiple threads each dealing with independent SSL connections),
and have apparently solved them by creating a single global mutex and
wrapping a mutex acquire around every call into the library. Is
this kind of locking expected to be needed?

Chris Dodd
cd...@csl.sri.com

0 new messages