Skip to content

Commit 14acf0d

Browse files
committed
Support returning values from thread-safe module callbacks.
1 parent 362500d commit 14acf0d

File tree

2 files changed

+7
-6
lines changed

2 files changed

+7
-6
lines changed

src/executionengine/ts_module.jl

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,10 @@ function dispose(mod::ThreadSafeModule)
5858
end
5959

6060
mutable struct ThreadSafeModuleCallback
61+
ret::Ref{Any}
6162
callback
63+
64+
ThreadSafeModuleCallback(callback) = new(Ref{Any}(), callback)
6265
end
6366

6467
function tsm_callback(data::Ptr{Cvoid}, ref::API.LLVMModuleRef)
@@ -67,7 +70,7 @@ function tsm_callback(data::Ptr{Cvoid}, ref::API.LLVMModuleRef)
6770
ctx = context(mod)
6871
activate(ctx)
6972
try
70-
cb.callback(Module(ref))
73+
cb.ret = cb.callback(Module(ref))
7174
catch err
7275
msg = sprint(Base.display_error, err, Base.catch_backtrace())
7376
return API.LLVMCreateStringError(msg)
@@ -91,5 +94,5 @@ function (mod::ThreadSafeModule)(f)
9194
@cfunction(tsm_callback, API.LLVMErrorRef, (Ptr{Cvoid}, API.LLVMModuleRef)),
9295
Base.pointer_from_objref(cb))
9396
end
94-
return mod
97+
cb.ret[]
9598
end

test/orc_tests.jl

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,11 +20,9 @@ end
2020
@test_throws LLVMException ts_mod() do mod
2121
error("Error")
2222
end
23-
run = Ref{Bool}(false)
24-
ts_mod() do mod
25-
run[] = true
23+
@test ts_mod() do mod
24+
true
2625
end
27-
@test run[]
2826
end
2927
end
3028

0 commit comments

Comments
 (0)