<div dir="ltr">That sounds like a missed multi-threading issue with LLVM.  I can't imagine why the user should be forced to serialize creation of MCContext objects. I would suggest filing a bug for this.  A simple lock probably wouldn't be too detrimental to performance here, since MCContext objects shouldn't be created too often.</div>
<div class="gmail_extra"><br><br><div class="gmail_quote">On Thu, May 23, 2013 at 9:49 AM, Dirkjan Bussink <span dir="ltr"><<a href="mailto:d.bussink@gmail.com" target="_blank">d.bussink@gmail.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hello,<br>
<br>
In Rubinius we're seeing an occasional crash inside LLVM that always happens inside getenv(), which is used for example when creating a MCContext (inside lib/MC/MCContext.cpp, it checks getenv("AS_SECURE_LOG_FILE")).<br>

<br>
The problem is that getenv() and friends aren't thread safe and Rubinius provides a multithreaded system. We can relatively easily get locking setup around the getenv() calls we do in Rubinius, but that's really complex to be able to do for LLVM. I also don't know what the guarantees are here that LLVM wants to provide regarding thread safety of code that happens to have a getenv() call inside it.<br>

<br>
What would be the best approach to solving this? Would it be necessary to put locking around this inside our usage of LLVM? Should LLVM provide a locking mechanism for this or should there be a way to make the getenv() calls optional in the places there are used (like here in MCContext).<br>

<br>
Regarding the thread safety, this is what the open group says about getenv():<br>
<br>
"The getenv() function need not be reentrant. A function that is not required to be reentrant is not required to be thread-safe."<br>
<br>
<a href="http://pubs.opengroup.org/onlinepubs/009696799/functions/getenv.html" target="_blank">http://pubs.opengroup.org/onlinepubs/009696799/functions/getenv.html</a><br>
<span class="HOEnZb"><font color="#888888"><br>
--<br>
Regards,<br>
<br>
Dirkjan Bussink<br>
_______________________________________________<br>
LLVM Developers mailing list<br>
<a href="mailto:LLVMdev@cs.uiuc.edu">LLVMdev@cs.uiuc.edu</a>         <a href="http://llvm.cs.uiuc.edu" target="_blank">http://llvm.cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev</a><br>
</font></span></blockquote></div><br><br clear="all"><div><br></div>-- <br><br><div>Thanks,</div><div><br></div><div>Justin Holewinski</div>
</div>