<html>
    <head>
      <base href="https://bugs.freedesktop.org/" />
    </head>
    <body>
      <p>
        <div>
            <b><a class="bz_bug_link 
          bz_status_NEW "
   title="NEW --- - [r600-llvm] mono games with opengl are blocking on start"
   href="https://bugs.freedesktop.org/show_bug.cgi?id=60929#c17">Comment # 17</a>
              on <a class="bz_bug_link 
          bz_status_NEW "
   title="NEW --- - [r600-llvm] mono games with opengl are blocking on start"
   href="https://bugs.freedesktop.org/show_bug.cgi?id=60929">bug 60929</a>
              from <span class="vcard"><a class="email" href="mailto:tstellar@gmail.com" title="Tom Stellard <tstellar@gmail.com>"> <span class="fn">Tom Stellard</span></a>
</span></b>
        <pre>(In reply to <a href="show_bug.cgi?id=60929#c15">comment #15</a>)
<span class="quote">> r600g initializes LLVM without first setting the
> llvm::DisablePrettyStackTrace variable to true. If this variable is false
> (the default), LLVM will register a bunch of signal handlers, including for
> SIGXCPU and SIGPWR, both of which are used by Mono's garbage collector.

> gallivm correctly sets llvm::DisablePrettyStackTrace to true, but it runs
> after r600g has already started calling into LLVM and the signal handlers
> have been registered.

> If you set a breakpoint on r600_create_context, manually set
> llvm::DisablePrettyStackTrace to true and then continue, the application
> will function correctly. I tested this using Fractal (a Unity game which
> deadlocks in sem_wait on startup), Bastion (a MonoGame, also deadlocks in
> sem_wait), and RepetierHost (an OpenTK app which dies in the SIGXCPU handler
> at startup).</span >

Thanks for tracking this down.  I think we'll need to extend the LLVM C API in
order to get access to this variable.  However, looking through the LLVM code
it looks like the PrettyStackTrace handler is registered by a static
initializer, so I wonder if setting this variable is enough and if we can
guarantee that r600g will set this variable before the handler is initialized.

Also, this seems to me like it is a bug in LLVM.  Is it common practice for
libraries to override signal handlers of applications?</pre>
        </div>
      </p>
      <hr>
      <span>You are receiving this mail because:</span>
      
      <ul>
          <li>You are the assignee for the bug.</li>
      </ul>
    </body>
</html>