From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on dcvr.yhbt.net X-Spam-Level: X-Spam-ASN: AS4713 221.184.0.0/13 X-Spam-Status: No, score=-3.0 required=3.0 tests=BAYES_00,DKIM_SIGNED, RCVD_IN_DNSWL_MED,SPF_PASS,T_DKIM_INVALID,T_RP_MATCHES_RCVD shortcircuit=no autolearn=ham autolearn_force=no version=3.4.0 Received: from neon.ruby-lang.org (neon.ruby-lang.org [221.186.184.75]) by dcvr.yhbt.net (Postfix) with ESMTP id BCCB520401 for ; Fri, 16 Jun 2017 02:36:11 +0000 (UTC) Received: from neon.ruby-lang.org (localhost [IPv6:::1]) by neon.ruby-lang.org (Postfix) with ESMTP id BAA5A1207D3; Fri, 16 Jun 2017 11:36:09 +0900 (JST) Received: from o1678916x28.outbound-mail.sendgrid.net (o1678916x28.outbound-mail.sendgrid.net [167.89.16.28]) by neon.ruby-lang.org (Postfix) with ESMTPS id AC527120788 for ; Fri, 16 Jun 2017 11:36:07 +0900 (JST) DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d=sendgrid.me; h=from:to:references:subject:mime-version:content-type:content-transfer-encoding:list-id; s=smtpapi; bh=OXtcUIKtgAbvkYEAQ2ed2Mm9YgU=; b=jmhpkdEjMr7f8wSKlX /KE3tT+rlgG8ccSwGsuYu5vOeZJexOGKlhzfcHVjUdSiHh0ACzTbTXH0b+a5uavc 5gs5BB80tH4fy7E20cvfI/WxFxTdwva/DHFtFDeLK1kGPsSBKliBlzicV2AR61oY BYMuJlCBZYEz5g2TAnqx9i1lc= Received: by filter0996p1mdw1.sendgrid.net with SMTP id filter0996p1mdw1-25773-59434413-1D 2017-06-16 02:36:03.492237109 +0000 UTC Received: from herokuapp.com (ec2-54-145-124-9.compute-1.amazonaws.com [54.145.124.9]) by ismtpd0003p1iad1.sendgrid.net (SG) with ESMTP id f7OA95F5Tf6Oc22OO_mRWA Fri, 16 Jun 2017 02:36:03.487 +0000 (UTC) Date: Fri, 16 Jun 2017 02:36:03 +0000 From: nobu@ruby-lang.org To: ruby-core@ruby-lang.org Message-ID: References: Mime-Version: 1.0 X-Redmine-MailingListIntegration-Message-Ids: 56724 X-Redmine-Project: ruby-trunk X-Redmine-Issue-Id: 13498 X-Redmine-Issue-Author: herwin X-Redmine-Issue-Assignee: nobu X-Redmine-Sender: nobu 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/Ymy4QrNMhiuLXJG8OTL2vJD1yS7f9SoRuo2lB12WShc2CyeNXoU767lXGtSOaF T9cUjMNKOCO3epuC0WmUzNUv8feZdyStbRIcvxfJ+baYH1lTLt0TN6L0ulIjQJ2kb+DioE0EzK4FI9 tjsZiKexTLO0DzDCX20q7XFaaoyVeSNTYZNY45hUQgslr4cvAlxSEnnN2g== X-ML-Name: ruby-core X-Mail-Count: 81697 Subject: [ruby-core:81697] [Ruby trunk Bug#13498][Assigned] Weakref, Weakmap and define_finalizer don't work on frozen objects 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: , Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: ruby-core-bounces@ruby-lang.org Sender: "ruby-core" Issue #13498 has been updated by nobu (Nobuyoshi Nakada). Status changed from Open to Assigned Assignee set to nobu (Nobuyoshi Nakada) Weakref is implemented by finalizer to notify that an object is collected, and you can't define finalizers on frozen objects. Probably we need to move finalizer flags to a separate region (like bitmap marking). ---------------------------------------- Bug #13498: Weakref, Weakmap and define_finalizer don't work on frozen objects https://bugs.ruby-lang.org/issues/13498#change-65385 * Author: herwin (Herwin W) * Status: Assigned * Priority: Normal * Assignee: nobu (Nobuyoshi Nakada) * Target version: * ruby -v: ruby 2.4.1p111 (2017-03-22 revision 58053) [x86_64-linux] (but seen the same issue with 2.3 and 2.1) * Backport: 2.2: UNKNOWN, 2.3: UNKNOWN, 2.4: UNKNOWN ---------------------------------------- I'm just creating a single ticket for these issues, I guess they're actually all the same (I've seen weakref uses weakmap, not sure about define_finalizer). ```ruby require 'weakref' map = ObjectSpace::WeakMap.new o = Object.new o.freeze begin WeakRef.new(o) rescue => e STDERR.puts e end begin map[o] = 'foo' rescue => e STDERR.puts e end begin map['bar'] = o rescue => e STDERR.puts e end begin ObjectSpace.define_finalizer(o, ->(id) { p id }) rescue => e STDERR.puts e end ``` Every statement here raises the runtime error "can't modify frozen Object". The documentation doesn't mention that frozen objects are not allowed, the closest reference we get is a short paragraph in WeakRef: "With this you will have to limit your self to String keys, otherwise you will get an ArgumentError because WeakRef cannot create a finalizer for a Symbol. Symbols are immutable and cannot be garbage collected" -- https://bugs.ruby-lang.org/