@@ -701,11 +701,23 @@ closed.
701701https://tls.mbed.org/api/ssl_8h.html#aa2c29eeb1deaf5ad9f01a7515006ede5 
702702""" 
703703function  ssl_read (ctx:: SSLContext , ptr, n):: Int 
704+     ret =  0 
704705    @lockdata  ctx begin 
705-         return  ccall ((:mbedtls_ssl_read , libmbedtls), Cint,
706-                      (Ptr{Cvoid}, Ptr{Cvoid}, Csize_t),
707-                      ctx. data, ptr, n)
706+         ccd =  Base. cconvert (Ptr{Cvoid}, ctx. data)
707+         cptr =  Base. cconvert (Ptr{Cvoid}, ptr)
708+         GC. @preserve  ccd cptr begin 
709+             #  Allow Julia to GC while reading/decrypting
710+             gc_state =  @ccall (jl_gc_safe_enter ():: Int8 )
711+             ret =  ccall ((:mbedtls_ssl_read , libmbedtls), Cint,
712+                         (Ptr{Cvoid}, Ptr{Cvoid}, Csize_t),
713+                         Base. unsafe_convert (Ptr{Cvoid}, ccd):: Ptr{Cvoid} ,
714+                         Base. unsafe_convert (Ptr{Cvoid}, cptr):: Ptr{Cvoid} ,
715+                         n)
716+             #  Leave GC-safe region, waiting for GC to complete if it's running
717+             @ccall (jl_gc_safe_leave (gc_state:: Int8 ):: Cvoid )
718+         end 
708719    end 
720+     return  ret
709721end 
710722
711723""" 
@@ -726,11 +738,23 @@ connection; the current connection must be closed.
726738https://tls.mbed.org/api/ssl_8h.html#a5bbda87d484de82df730758b475f32e5 
727739""" 
728740function  ssl_write (ctx:: SSLContext , ptr, n):: Int 
741+     ret =  0 
729742    @lockdata  ctx begin 
730-         return  ccall ((:mbedtls_ssl_write , libmbedtls), Cint,
731-                      (Ptr{Cvoid}, Ptr{Cvoid}, Csize_t),
732-                      ctx. data, ptr, n)
743+         ccd =  Base. cconvert (Ptr{Cvoid}, ctx. data)
744+         cptr =  Base. cconvert (Ptr{Cvoid}, ptr)
745+         GC. @preserve  ccd cptr begin 
746+             #  Allow Julia to GC while writing/encrypting
747+             gc_state =  @ccall (jl_gc_safe_enter ():: Int8 )
748+             ret =  ccall ((:mbedtls_ssl_write , libmbedtls), Cint,
749+                         (Ptr{Cvoid}, Ptr{Cvoid}, Csize_t),
750+                         Base. unsafe_convert (Ptr{Cvoid}, ccd):: Ptr{Cvoid} ,
751+                         Base. unsafe_convert (Ptr{Cvoid}, cptr):: Ptr{Cvoid} ,
752+                         n)
753+             #  Leave GC-safe region, waiting for GC to complete if it's running
754+             @ccall (jl_gc_safe_leave (gc_state:: Int8 ):: Cvoid )
755+         end 
733756    end 
757+     return  ret
734758end 
735759
736760""" 
0 commit comments