Skip to content

Commit 303e2fe

Browse files
committed
Ensure correct type parameter of serialized RemoteChannel
When serializing RemoteChannels, a new zeroed RemoteChannel is constructed. However, the input type parameter might be part of an outer type parameter which can then lead to a TypeError during deserialization. The fix is just to reuse the type parameter of the input when constructing the zeroed RemoteChannel.
1 parent 871e3d7 commit 303e2fe

2 files changed

Lines changed: 4 additions & 4 deletions

File tree

src/remotecall.jl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -413,8 +413,8 @@ function serialize(s::AbstractSerializer, ::Future)
413413
invoke(serialize, Tuple{AbstractSerializer, Any}, s, zero_fut)
414414
end
415415

416-
function serialize(s::AbstractSerializer, ::RemoteChannel)
417-
zero_rc = RemoteChannel{Channel{Any}}((0,0,0))
416+
function serialize(s::AbstractSerializer, ::RemoteChannel{T}) where T
417+
zero_rc = RemoteChannel{T}((0,0,0))
418418
invoke(serialize, Tuple{AbstractSerializer, Any}, s, zero_rc)
419419
end
420420

test/distributed_exec.jl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -347,9 +347,9 @@ test_indexing(RemoteChannel(id_other))
347347
# Test ser/deser to non-ClusterSerializer objects.
348348
function test_regular_io_ser(ref::Distributed.AbstractRemoteRef)
349349
io = IOBuffer()
350-
serialize(io, ref)
350+
serialize(io, Dict("ref" => ref))
351351
seekstart(io)
352-
ref2 = deserialize(io)
352+
ref2 = deserialize(io)["ref"]
353353
for fld in fieldnames(typeof(ref))
354354
v = getfield(ref2, fld)
355355
if isa(v, Number)

0 commit comments

Comments
 (0)