From 97582101f589fae634e05bf33112b09e8c64f54f Mon Sep 17 00:00:00 2001 From: firejox Date: Sun, 29 Sep 2019 16:46:12 +0800 Subject: [PATCH] Keep Channel#close thread-safety --- src/channel.cr | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/src/channel.cr b/src/channel.cr index 74de802ab3a8..62b268551505 100644 --- a/src/channel.cr +++ b/src/channel.cr @@ -92,17 +92,19 @@ class Channel(T) end def close - @closed = true + @lock.sync do + @closed = true - @senders.each &.fiber.enqueue + @senders.each &.fiber.enqueue - @receivers.each do |receiver| - receiver.state_ptr.value = DeliveryState::Closed - receiver.fiber.enqueue - end + @receivers.each do |receiver| + receiver.state_ptr.value = DeliveryState::Closed + receiver.fiber.enqueue + end - @senders.clear - @receivers.clear + @senders.clear + @receivers.clear + end nil end