From f1f64930cfcd5311bc5dece78321efbd683013d4 Mon Sep 17 00:00:00 2001 From: Boqin Qin Date: Tue, 10 Dec 2019 01:46:32 -0500 Subject: [PATCH] Fix atomicity violation in network-devp2p (#11277) --- util/network-devp2p/src/connection.rs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/util/network-devp2p/src/connection.rs b/util/network-devp2p/src/connection.rs index f77094e9f..2c4c95217 100644 --- a/util/network-devp2p/src/connection.rs +++ b/util/network-devp2p/src/connection.rs @@ -220,14 +220,13 @@ impl Connection { /// Register this connection with the IO event loop. pub fn register_socket(&self, reg: Token, event_loop: &mut EventLoop) -> io::Result<()> { - if self.registered.load(AtomicOrdering::SeqCst) { + if self.registered.compare_and_swap(false, true, AtomicOrdering::SeqCst) { return Ok(()); } trace!(target: "network", "connection register; token={:?}", reg); if let Err(e) = event_loop.register(&self.socket, reg, self.interest, PollOpt::edge() /* | PollOpt::oneshot() */) { // TODO: oneshot is broken on windows trace!(target: "network", "Failed to register {:?}, {:?}", reg, e); } - self.registered.store(true, AtomicOrdering::SeqCst); Ok(()) }