> On Mar 4, 2019, at 11:29 PM, Norm Green <norm.green@xxxxxxxxxxxxxxxxxx> wrote: > > Yes I'm sure the build process is correct. > Turns out this problem was cause by one thread calling exit() while another thread was doing SSL_write(). The SSL exit handler triggered by exit() was causing the lock in question to be freed AFAIKT. > So it would seem that threads either need to exit with pthread_exit() or return to a known state such that no SSL calls are in progress in any thread before the process can safely exit(). Yes, main() must not exit while threads are running code from libraries with exit handlers. This is issue is not unique to OpenSSL. I've observed the same problem with threading running code in MIT's GSSAPI library. Some users want libraries to be unloadable without memory leaks, others want safe exit() while threads are running... Serving both is hard. A multi-threaded program that wants to exit before all the threads are done, should probably call _exit(), and skip the exit handlers (when none of those are doing anything critical, like flushing stdio buffers). Alternatively arrange for a way to ask threads to terminate promptly, and wait for them to do that. -- -- Viktor.