Hi there,
I have one client machine that is always crashing when we start multiple
threads with each thread using separate easy handles with OpenSSL.  I
tracked this down to each thread calling Curl_ossl_seed() at the same time,
with some fun remote WinDBG sessions.

The call stack basically looks like this.

Heap32Next() // crash.
RAND_poll();
RAND_screen();
ossl_seed();
Curl_ossl_seed();
ossl_connect_step1();
...

I have the proper OpenSSL thread call backs in place for Windows setting
CRYPTO_set_locking_callback() as documented.  I call curl_global_init() at
the start of my app.  There is an option to build OpenSSL to NOT use
RAND_screen().  I did this but still had the crash.

Removing the seed call (which I assume is used for the salt) solves the
crash.  Should the seed be set in curl_global_init()?

I am using a slightly old version of libcurl (7.18.0) and OpenSSL
0.9.8.7(g).  I looked at the changes since then and nothing related to the
seed has changed in the current version.

Does anyone have input into this?  This is a not a common bug.  There are
over many other copies of the app running that do NOT have this problem.  It
only happens when spawning a group of downloads all at once.

Thanks for the feedback.  Hopefully this can help someone else as well.

Matt
tribalmedia

Reply via email to