From 47ef16fb2cbef720b87ac23be637869727e262ca Mon Sep 17 00:00:00 2001 From: KristofferC Date: Wed, 23 Aug 2023 13:51:54 +0200 Subject: [PATCH 1/2] fix a case of potentially use of undefined variable when handling error in distributed message processing --- stdlib/Distributed/src/process_messages.jl | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/stdlib/Distributed/src/process_messages.jl b/stdlib/Distributed/src/process_messages.jl index 7bbf7cfde943b..ad6fa6b05af0a 100644 --- a/stdlib/Distributed/src/process_messages.jl +++ b/stdlib/Distributed/src/process_messages.jl @@ -210,6 +210,9 @@ function message_handler_loop(r_stream::IO, w_stream::IO, incoming::Bool) handle_msg(msg, header, r_stream, w_stream, version) end catch e + werr = worker_from_id(iderr) + oldstate = werr.state + # Check again as it may have been set in a message handler but not propagated to the calling block above if wpid < 1 wpid = worker_id_from_socket(r_stream) @@ -219,8 +222,6 @@ function message_handler_loop(r_stream::IO, w_stream::IO, incoming::Bool) println(stderr, e, CapturedException(e, catch_backtrace())) println(stderr, "Process($(myid())) - Unknown remote, closing connection.") elseif !(wpid in map_del_wrkr) - werr = worker_from_id(wpid) - oldstate = werr.state set_worker_state(werr, W_TERMINATED) # If unhandleable error occurred talking to pid 1, exit From f399dca2feacc0338299e92aceb27cf9e7e33ac1 Mon Sep 17 00:00:00 2001 From: Kristoffer Carlsson Date: Wed, 23 Aug 2023 14:59:08 +0200 Subject: [PATCH 2/2] fixup --- stdlib/Distributed/src/process_messages.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/stdlib/Distributed/src/process_messages.jl b/stdlib/Distributed/src/process_messages.jl index ad6fa6b05af0a..e68e05b9db52b 100644 --- a/stdlib/Distributed/src/process_messages.jl +++ b/stdlib/Distributed/src/process_messages.jl @@ -210,7 +210,7 @@ function message_handler_loop(r_stream::IO, w_stream::IO, incoming::Bool) handle_msg(msg, header, r_stream, w_stream, version) end catch e - werr = worker_from_id(iderr) + werr = worker_from_id(wpid) oldstate = werr.state # Check again as it may have been set in a message handler but not propagated to the calling block above