<div dir="ltr"><pre>Hi all,<br><br></pre><pre>I've run into an issue with streaming to RTMP server (via libav) in multithreaded application - it would sometimes crash at start.<br></pre><pre>Debugging revealed following (reduced) callstack:<br></pre><pre>openssl!lh_insert
openssl!int_err_set_item
...
openssl!SSL_load_error_strings
librtmp!RTMP_TLS_Init
librtmp!RTMP_Init
libavformat!rtmp_open
...
libavformat!avio_open2
my application<br><br></pre><pre>After reading openssl/librtmp/libav code it seems to me that there is not one but two different race conditions. Firstly, there is an obvious race in RTMP_Init before and during the call to RTMP_TLS_Init.<br></pre><pre>Secondly, although openssl is supposed to be threadsafe, it is only true if its threading support is initialized via CRYPTO_thread_setup or alternative code which does something similar.<br></pre><pre>I don't know if that is a bug in librtmp or incorrect usage by libav or something else.</pre><pre>So, my question is whether librtmp is supposed to be thread-safe to a some degree; and if it is then which API calls are supposed to be thread-safe and which are not. I saw a message in this list which said calling librtmp functions with same session handle from different threads is not safe (which makes sense) but I cannot find any information about what usage should be safe.<br></pre><pre>From what I can see (with regard to not initialized openssl threading) it looks like librtmp is not thread-safe as a whole and all calls to it must be serialized.<br><br></pre><pre>Regards,<br></pre><pre>  Andrey Turkin<br></pre></div>