Skip to content

v1.1.0-rc2

Pre-release
Pre-release

Choose a tag to compare

@csvance csvance released this 01 Aug 17:46
d43a1f0

v1.1.0-rc2

Streaming RPC now works on every supported Julia. It was previously compiled out below
Julia 1.12, where streaming calls hung.

Fixes

  • Streaming is enabled on Julia 1.10 and 1.11. src/Streaming.jl is compiled on every
    supported version and its testsets no longer carry a version guard (#68)
  • Fixed an end-of-stream race in the request pump. The pump un-paused libcurl and only
    then closed the request stream, so a read callback landing in between paused the transfer
    again with nothing left to resume it, and the call hung until its deadline. The handoff is
    now a single critical section under the lock the callback already runs under
  • Worked around a libcurl bug in 8.4.0 and 8.5.0, where pausing a transfer's send
    direction also stops its receive direction, which stalled streaming calls mid-stream on
    Julia 1.10. Fixed upstream in libcurl 8.6.0
  • Worked around a libcurl bug in 8.6.0, where a socket event overwrites rather than adds
    to a transfer's pending read interest, which stalled streaming calls at end of stream on
    Julia 1.11. Fixed upstream in libcurl 8.7.0 (curl.se/bug/?i=12971)

Both libcurl workarounds are gated on the version actually loaded at run time, so a Julia
with a fixed libcurl pays nothing for them.

Notes

  • No performance change: per-message allocations are unchanged on every benchmark workload,
    and throughput is within measurement noise

Contributors

  • Carroll Vance
  • Sébastien Celles (@s-celles), who reported the hangs and
    did the first diagnosis in #127