From 1dbb6549e95cf58ac7ba32c918b7d2c19deffd80 Mon Sep 17 00:00:00 2001 From: Jameson Nash Date: Tue, 2 Nov 2021 17:44:04 -0400 Subject: [PATCH] Workaround for missing isopen check in FDWatcher (#161) (possible multithread race with this still needs to be fixed) (cherry picked from commit 7f91b8aaab54d98a2508820f7e278d2b5c4f86ef) --- src/Curl/Multi.jl | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/Curl/Multi.jl b/src/Curl/Multi.jl index 082cda6..f18f548 100644 --- a/src/Curl/Multi.jl +++ b/src/Curl/Multi.jl @@ -150,16 +150,17 @@ function socket_callback( preserve_handle(watcher) watcher_p = pointer_from_objref(watcher) @check curl_multi_assign(multi.handle, sock, watcher_p) - task = @async while true + task = @async while watcher.readable || watcher.writable # isopen(watcher) events = try wait(watcher) catch err - err isa EOFError && break + err isa EOFError && return rethrow() end flags = CURL_CSELECT_IN * isreadable(events) + CURL_CSELECT_OUT * iswritable(events) + CURL_CSELECT_ERR * events.disconnect lock(multi.lock) do + watcher.readable || watcher.writable || return # !isopen @check curl_multi_socket_action(multi.handle, sock, flags) check_multi_info(multi) end