Open vchuravy opened 5 months ago
The thing I'm a bit puzzled about is that we sometimes use getContext
and sometimes we use AcquireContext and acquireContext seems more correct?
getContext will automatically return the context to the pool of contexts when its object is destroyed, while acquireContext should be paired with a releaseContext.
Also, I think it's wrong to trigger additional compilation from within orc itself; I'm pretty sure there's some assumptions that are made about not touching the runtime within the addModule/lookup calls for thread safety purposes.
I recently observed a deadlock, that seems to occur when we attempt to JIT compile a function during the emission of Julia code.
LLVM.jl installs a error handler that roughly looks like this:
Using the profiler to get a backtrace:
My hypothesis is that the two locks involved are:
and https://github.com/JuliaLang/julia/blob/08e1fc0abb959ce5bd4c75b05518a41b85e4aba1/src/aotcompile.cpp#L1785-L1786
and that we end up re-using the context and therefore the lock.
@pchintalapudi any thoughts?