Skip to content

Commit 60fa820

Browse files
committed
Fix SEGV when JuliaWrapper is freed by Ruby GC
1 parent 3d4e7dc commit 60fa820

File tree

2 files changed

+4
-4
lines changed

2 files changed

+4
-4
lines changed

RbCall.jl/src/init.jl

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,10 @@ function jlwrap_init()
77
copy!(mJuliaBridge, rb_define_module_under(mJulia, "JuliaBridge"))
88
copy!(cJuliaWrapper, rb_define_class_under(mJuliaBridge, "JuliaWrapper", rb_cObject))
99

10+
jlwrap_free_cfunc = @cfunction(jlwrap_free, Cvoid, (Ptr{jlwrap_t},))
11+
jlwrap_size_cfunc = @cfunction(jlwrap_size, Csize_t, (Ptr{jlwrap_t},))
12+
jlwrap_data_type[] = rb_data_type_t(jlwrap_type_name; dfree=jlwrap_free_cfunc, dsize=jlwrap_size_cfunc)
13+
1014
rb_define_method(cJuliaWrapper, "call", jlwrap_call, -1)
1115
rb_define_method(cJuliaWrapper, "inspect", jlwrap_inspect, 0)
1216

RbCall.jl/src/jlwrap.jl

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,6 @@ end
1616

1717
const jlwrap_type_name = Base.unsafe_convert(Cstring, "julia.jlwrap")
1818
const jlwrap_data_type = Ref{rb_data_type_t}()
19-
const jlwrap_free_cfunc = @cfunction(jlwrap_free, Cvoid, (Ptr{jlwrap_t},))
20-
const jlwrap_size_cfunc = @cfunction(jlwrap_size, Csize_t, (Ptr{jlwrap_t},))
21-
22-
jlwrap_data_type[] = rb_data_type_t(jlwrap_type_name; dfree=jlwrap_free_cfunc, dsize=jlwrap_size_cfunc)
2319

2420
function is_jlwrap(ro::Union{RubyObject,RbPtr})
2521
Bool(ccall((@rbsym :rb_typeddata_is_kind_of), Cint, (RbPtr, Ptr{rb_data_type_t}), ro, jlwrap_data_type))

0 commit comments

Comments
 (0)