From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Original-To: poffice@blade.nagaokaut.ac.jp Delivered-To: poffice@blade.nagaokaut.ac.jp Received: from kankan.nagaokaut.ac.jp (kankan.nagaokaut.ac.jp [133.44.2.24]) by blade.nagaokaut.ac.jp (Postfix) with ESMTP id 994C719E002D for ; Sat, 19 Dec 2015 23:57:25 +0900 (JST) Received: from voscc.nagaokaut.ac.jp (voscc.nagaokaut.ac.jp [133.44.1.100]) by kankan.nagaokaut.ac.jp (Postfix) with ESMTP id 9A304B5D8E3 for ; Sun, 20 Dec 2015 00:29:35 +0900 (JST) Received: from neon.ruby-lang.org (neon.ruby-lang.org [221.186.184.75]) by voscc.nagaokaut.ac.jp (Postfix) with ESMTP id 191AF18CC7B9 for ; Sun, 20 Dec 2015 00:29:35 +0900 (JST) Received: from [221.186.184.76] (localhost [IPv6:::1]) by neon.ruby-lang.org (Postfix) with ESMTP id 0BC971204EE; Sun, 20 Dec 2015 00:29:36 +0900 (JST) X-Original-To: ruby-core@ruby-lang.org Delivered-To: ruby-core@ruby-lang.org Received: from o10.shared.sendgrid.net (o10.shared.sendgrid.net [173.193.132.135]) by neon.ruby-lang.org (Postfix) with ESMTPS id 01F8012044E for ; Sun, 20 Dec 2015 00:29:31 +0900 (JST) DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=sendgrid.me; h=from:to:references:subject:mime-version:content-type:content-transfer-encoding:list-id; s=smtpapi; bh=bcWlq+mDYQ8xRyVmDKquR0rusvI=; b=krHPdbXFcmY1IY6BlL js3Cy/7kP8sotqBt4peBuudIFWW6mOWkuVTVKZrngghPRPQHdZEX9jSiMzIh6NpJ u/gHmyK2xTQyueqywqCY/g6VtHH3E67MikXUblSiNzEZ9K84F35+LqxPAOEpZeTE hbzvaTS+fA0b2rxSln/74sM1M= Received: by filter0663p1mdw1.sendgrid.net with SMTP id filter0663p1mdw1.13045.567577D72 2015-12-19 15:29:27.011745177 +0000 UTC Received: from herokuapp.com (ec2-54-82-78-95.compute-1.amazonaws.com [54.82.78.95]) by ismtpd0002p1iad1.sendgrid.net (SG) with ESMTP id MoVnjOvmSuCITfg_gqIIXA Sat, 19 Dec 2015 15:29:27.558 +0000 (UTC) Date: Sat, 19 Dec 2015 15:29:27 +0000 From: headius@headius.com To: ruby-core@ruby-lang.org Message-ID: References: Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit X-Redmine-MailingListIntegration-Message-Ids: 46982 X-Redmine-Project: ruby-trunk X-Redmine-Issue-Id: 11822 X-Redmine-Issue-Author: headius X-Redmine-Issue-Assignee: ko1 X-Redmine-Sender: headius X-Mailer: Redmine X-Redmine-Host: bugs.ruby-lang.org X-Redmine-Site: Ruby Issue Tracking System X-Auto-Response-Suppress: All Auto-Submitted: auto-generated X-SG-EID: ync6xU2WACa70kv/Ymy4QrNMhiuLXJG8OTL2vJD1yS4S+wn0q77/2qwNE88f5f7nGDyZPIJDLNRzgF sNHP7CDv9JkbbabO0wArBmiPiib72yeFvur+JYQpHt8pS6rlb0N9Sv0XdXtW6GjRne6DsdTBZDjwOd tBC45qUewRthSMnKk3HyN4ZrPVW6zccPRlRkEZKZyvGuxUc7rCzwFI4InQ== X-ML-Name: ruby-core X-Mail-Count: 72387 Subject: [ruby-core:72387] [Ruby trunk - Bug #11822] Semantics of Queue#pop after close are wrong X-BeenThere: ruby-core@ruby-lang.org X-Mailman-Version: 2.1.15 Precedence: list Reply-To: Ruby developers List-Id: Ruby developers List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: ruby-core-bounces@ruby-lang.org Sender: "ruby-core" Issue #11822 has been updated by Charles Nutter. Clarifying my statements above: "So we should bump this to to Ruby 2.4 to address the inability to check for closed? and pop at the same time, as in Go." I mean we should discuss further API improvements like Queue#pop! or pop? for Ruby 2.4. "This can go forward in 2.3." I mean current #close, #closed?, #push, and #pop changes can go forward as they are implemented on trunk today. ---------------------------------------- Bug #11822: Semantics of Queue#pop after close are wrong https://bugs.ruby-lang.org/issues/11822#change-55676 * Author: Charles Nutter * Status: Open * Priority: Normal * Assignee: Koichi Sasada * ruby -v: * Backport: 2.0.0: UNKNOWN, 2.1: UNKNOWN, 2.2: UNKNOWN ---------------------------------------- Current test/ruby/thread/test_queue.rb test_close has the following assertion that seems wrong to me: ```ruby def test_close [->{Queue.new}, ->{SizedQueue.new 3}].each do |qcreate| q = qcreate.call assert_equal false, q.closed? q << :something assert_equal q, q.close assert q.closed? assert_raise_with_message(ClosedQueueError, /closed/){q << :nothing} assert_equal q.pop, :something # <<< THIS ONE assert_nil q.pop assert_nil q.pop # non-blocking assert_raise_with_message(ThreadError, /queue empty/){q.pop(non_block=true)} end end ``` Once a queue is closed, I don't think it should ever return a result anymore. The queue should be cleared and pop should always return nil. In r52691, ko1 states that "deq'ing on closed queue returns nil, always." This test does not match that behavior. -- https://bugs.ruby-lang.org/