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 505C619E005C for ; Sat, 19 Dec 2015 03:09:32 +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 9CA50B5D894 for ; Sat, 19 Dec 2015 03:41:41 +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 87B7B18CC7CC for ; Sat, 19 Dec 2015 03:41:41 +0900 (JST) Received: from [221.186.184.76] (localhost [IPv6:::1]) by neon.ruby-lang.org (Postfix) with ESMTP id B08F4120508; Sat, 19 Dec 2015 03:41:38 +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 72D4A1204A7 for ; Sat, 19 Dec 2015 03:41:35 +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=dzufIbz8nvEYqNUmrWKbSNFpBqI=; b=z1HAmOSk59IANkmBu7 O0VAnLyu/FIhEaZHhUpHZV5tq/A1n3EzKSb/cfNfF5IYXqehPKGxPGkKtwWnz2h9 Ivi/OzS0+q+53MCU7h94cPRdDMBxNw2/EJTjOc5plMBArhRvDofNFGanuFjGpPlI R0aA16caTzZPcPJ1t3w2VyWko= Received: by filter0815p1mdw1.sendgrid.net with SMTP id filter0815p1mdw1.30090.5674535911 2015-12-18 18:41:29.174778811 +0000 UTC Received: from herokuapp.com (ec2-54-242-87-41.compute-1.amazonaws.com [54.242.87.41]) by ismtpd0006p1iad1.sendgrid.net (SG) with ESMTP id yTeDijNNS2CjiY08gOPYvg Fri, 18 Dec 2015 18:41:28.864 +0000 (UTC) Date: Fri, 18 Dec 2015 18:41:28 +0000 From: email@pitr.ch 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: 46963 X-Redmine-Project: ruby-trunk X-Redmine-Issue-Id: 11822 X-Redmine-Issue-Author: headius X-Redmine-Issue-Assignee: ko1 X-Redmine-Sender: pitr.ch 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/Ymy4QrNMhiuLXJG8OTL2vJD1yS5ff1iIt3wBdevs/G4eG+jI2miNUndv1E+Ceh ueZ7l+igp7bt8rRcbVbldeclfHaq8/WlH9yL7KWu2dd4yCNDKPO35hzGXju/5rjHcIyOAtb+DETuOC cqTDD3lnB+b50o2vVjRaMf1Fk0daXC0jhkuO X-ML-Name: ruby-core X-Mail-Count: 72369 Subject: [ruby-core:72369] [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 Petr Chalupa. Could you clarify for me following cases: What does pop do when called on empty closed queue? What does close do about already blocked threads when it's empty? The documentation does not specifies this. ---------------------------------------- Bug #11822: Semantics of Queue#pop after close are wrong https://bugs.ruby-lang.org/issues/11822#change-55660 * 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/