Skip to content

Commit

Permalink
Add GC-safe regions around ssl_read and ssl_write
Browse files Browse the repository at this point in the history
  • Loading branch information
kpamnany committed Oct 26, 2023
1 parent e84f973 commit 4c90bee
Showing 1 changed file with 28 additions and 6 deletions.
34 changes: 28 additions & 6 deletions src/ssl.jl
Original file line number Diff line number Diff line change
Expand Up @@ -702,10 +702,21 @@ https://tls.mbed.org/api/ssl_8h.html#aa2c29eeb1deaf5ad9f01a7515006ede5
"""
function ssl_read(ctx::SSLContext, ptr, n)::Int
@lockdata ctx begin
return ccall((:mbedtls_ssl_read, libmbedtls), Cint,
(Ptr{Cvoid}, Ptr{Cvoid}, Csize_t),
ctx.data, ptr, n)
ccd = Base.cconvert(Ptr{Cvoid}, ctx.data)
cptr = Base.cconvert(Ptr{Cvoid}, ptr)
GC.@preserve ccd cptr begin
# Allow Julia to GC while reading/decrypting
gc_state = @ccall(jl_gc_safe_enter()::Int8)
ret = ccall((:mbedtls_ssl_read, libmbedtls), Cint,
(Ptr{Cvoid}, Ptr{Cvoid}, Csize_t),
Base.unsafe_convert(Ptr{Cvoid}, ccd)::Ptr{Cvoid},
Base.unsafe_convert(Ptr{Cvoid}, cptr)::Ptr{Cvoid},
n)
# Leave GC-safe region, waiting for GC to complete if it's running
@ccall(jl_gc_safe_leave(gc_state::Int8)::Cvoid)
end
end
return ret
end

"""
Expand All @@ -727,10 +738,21 @@ https://tls.mbed.org/api/ssl_8h.html#a5bbda87d484de82df730758b475f32e5
"""
function ssl_write(ctx::SSLContext, ptr, n)::Int
@lockdata ctx begin
return ccall((:mbedtls_ssl_write, libmbedtls), Cint,
(Ptr{Cvoid}, Ptr{Cvoid}, Csize_t),
ctx.data, ptr, n)
ccd = Base.cconvert(Ptr{Cvoid}, ctx.data)
cptr = Base.cconvert(Ptr{Cvoid}, ptr)
GC.@preserve ccd cptr begin
# Allow Julia to GC while writing/encrypting
gc_state = @ccall(jl_gc_safe_enter()::Int8)
ret = ccall((:mbedtls_ssl_write, libmbedtls), Cint,
(Ptr{Cvoid}, Ptr{Cvoid}, Csize_t),
Base.unsafe_convert(Ptr{Cvoid}, ccd)::Ptr{Cvoid},
Base.unsafe_convert(Ptr{Cvoid}, cptr)::Ptr{Cvoid},
n)
# Leave GC-safe region, waiting for GC to complete if it's running
@ccall(jl_gc_safe_leave(gc_state::Int8)::Cvoid)
end
end
return ret
end

"""
Expand Down

0 comments on commit 4c90bee

Please sign in to comment.