From debbugs-submit-bounces@debbugs.gnu.org Mon Jan 30 17:32:36 2012 Received: (at submit) by debbugs.gnu.org; 30 Jan 2012 22:32:36 +0000 Received: from localhost ([127.0.0.1]:45760 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.72) (envelope-from ) id 1Rrzm8-0007EH-6Q for submit@debbugs.gnu.org; Mon, 30 Jan 2012 17:32:36 -0500 Received: from eggs.gnu.org ([140.186.70.92]:57981) by debbugs.gnu.org with esmtp (Exim 4.72) (envelope-from ) id 1Rrzm5-0007E5-Dr for submit@debbugs.gnu.org; Mon, 30 Jan 2012 17:32:34 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Rrzlk-0001dL-Gj for submit@debbugs.gnu.org; Mon, 30 Jan 2012 17:32:16 -0500 X-Spam-Checker-Version: SpamAssassin 3.3.2 (2011-06-06) on eggs.gnu.org X-Spam-Level: X-Spam-Status: No, score=-6.9 required=5.0 tests=BAYES_00,RCVD_IN_DNSWL_HI autolearn=unavailable version=3.3.2 Received: from lists.gnu.org ([140.186.70.17]:49801) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Rrzlk-0001dH-FJ for submit@debbugs.gnu.org; Mon, 30 Jan 2012 17:32:12 -0500 Received: from eggs.gnu.org ([140.186.70.92]:53700) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Rrzlg-0000IG-3u for bug-guile@gnu.org; Mon, 30 Jan 2012 17:32:12 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Rrzlb-0001ct-Gu for bug-guile@gnu.org; Mon, 30 Jan 2012 17:32:08 -0500 Received: from mail4-relais-sop.national.inria.fr ([192.134.164.105]:15139) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Rrzlb-0001cY-9i for bug-guile@gnu.org; Mon, 30 Jan 2012 17:32:03 -0500 X-IronPort-AV: E=Sophos;i="4.71,592,1320620400"; d="scan'208";a="129462926" Received: from reverse-83.fdn.fr (HELO pluto) ([80.67.176.83]) by mail4-relais-sop.national.inria.fr with ESMTP/TLS/DHE-RSA-AES128-SHA; 30 Jan 2012 23:32:00 +0100 From: ludo@gnu.org (Ludovic =?iso-8859-1?Q?Court=E8s?=) To: bug-guile@gnu.org Subject: FFI: =?utf-8?Q?=E2=80=98set-pointer-finalizer!=E2=80=99?= overrides the previous finalizer X-URL: http://www.fdn.fr/~lcourtes/ X-Revolutionary-Date: 11 =?iso-8859-1?Q?Pluvi=F4se?= an 220 de la =?iso-8859-1?Q?R=E9volution?= X-PGP-Key-ID: 0xEA52ECF4 X-PGP-Key: http://www.fdn.fr/~lcourtes/ludovic.asc X-PGP-Fingerprint: 83C4 F8E5 10A3 3B4C 5BEA D15D 77DD 95E2 EA52 ECF4 X-OS: x86_64-unknown-linux-gnu Date: Mon, 30 Jan 2012 23:31:59 +0100 Message-ID: <87d3a0255s.fsf@gnu.org> User-Agent: Gnus/5.110018 (No Gnus v0.18) Emacs/24.0.90 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6 (newer, 3) X-Received-From: 140.186.70.17 X-Spam-Score: -4.2 (----) X-Debbugs-Envelope-To: submit X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.13 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: debbugs-submit-bounces@debbugs.gnu.org Errors-To: debbugs-submit-bounces@debbugs.gnu.org X-Spam-Score: -4.2 (----) Hi, The =E2=80=98set-pointer-finalizer!=E2=80=99 procedure is harmful because i= t erases any previously set finalizer. Said finalizer could come from a guardian: (define ptr (make-pointer 123)) (define g (make-guardian)) (g ptr) (set-pointer-finalizer! ptr (dynamic-func "scm_is_pair" (dynamic-link))) (set! ptr #f) (gc) (g) ;; Should return PTR. =3D> #f or from a weak hash table: (define ptr (make-pointer 123)) (define t (make-weak-value-hash-table)) (hashq-set! t ptr #t) (set-pointer-finalizer! ptr (dynamic-func "scm_is_pair" (dynamic-link))) (set! ptr #f) (gc) (gc) (hash-fold alist-cons '() t) =3D> ((# . #t)) ;; Should be the empty list. There are several ways to fix this: 1. Deprecate =E2=80=98set-pointer-finalizer!=E2=80=99 in favor of guardia= ns, with the problem that it would be up to the user to actually call the guardians. 2. Implement =E2=80=98set-pointer-finalizer!=E2=80=99 in terms of guardia= ns, with a gc-hook to automatically call the guardians and invoke any finalizers. 3. Fix =E2=80=98set-pointer-finalizer!=E2=80=99 to honor the previously-s= et finalizer, if any. This means (a) finding a way to keep previous-finalizer info around, and (b) duplicating part of the (hairy) code from guardians.c to honor the previous finalizer. None of these solutions is really pleasant. Thoughts? Thanks, Ludo=E2=80=99. From debbugs-submit-bounces@debbugs.gnu.org Fri Jul 06 14:31:25 2012 Received: (at 10668-done) by debbugs.gnu.org; 6 Jul 2012 18:31:25 +0000 Received: from localhost ([127.0.0.1]:53167 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.72) (envelope-from ) id 1SnDJN-0004RY-Kg for submit@debbugs.gnu.org; Fri, 06 Jul 2012 14:31:25 -0400 Received: from a-pb-sasl-sd.pobox.com ([74.115.168.62]:41071 helo=sasl.smtp.pobox.com) by debbugs.gnu.org with esmtp (Exim 4.72) (envelope-from ) id 1SnDJM-0004RS-7P for 10668-done@debbugs.gnu.org; Fri, 06 Jul 2012 14:31:24 -0400 Received: from sasl.smtp.pobox.com (unknown [127.0.0.1]) by b-pb-sasl-sd.pobox.com (Postfix) with ESMTP id A9CBBCB13; Fri, 6 Jul 2012 14:26:24 -0400 (EDT) DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=pobox.com; h=from:to:cc :subject:references:date:in-reply-to:message-id:mime-version :content-type:content-transfer-encoding; s=sasl; bh=MQyiaVeubCgK sRS+YcWd/GycEqg=; b=Dac1iPRibyNuAHvKft4JaBGr0fIuKMR/2xhU8C3RNlyZ HAx3fklHC5WGU3idtkITL69zTM5ekq8IYK+ljwf2rmPk4A9UYww0T7MhV0tDYjed bsXt5OYlA9SaCTRX9Zloas5j7mjfr/2i/J203A0jFUsD9TvIuB8oH4o8J3+XaaY= DomainKey-Signature: a=rsa-sha1; c=nofws; d=pobox.com; h=from:to:cc :subject:references:date:in-reply-to:message-id:mime-version :content-type:content-transfer-encoding; q=dns; s=sasl; b=jYw5o/ XWKw8xO+YOQcL/qGY89RtW4KRMjv9fs92xYGfJv9WZeBi4vP4IEp+vL6xiMuQtAi W+EpFJkOUddA2/AoMtJX7bW+uFU8OL8movTyEixiJGCw5F/K9vbHOW2prYQKXpNH 9xJlPxAGIPrWI7zwN9B84reh9wLLvDHAKMA7o= Received: from b-pb-sasl-sd. (unknown [127.0.0.1]) by b-pb-sasl-sd.pobox.com (Postfix) with ESMTP id 9C821CB12; Fri, 6 Jul 2012 14:26:24 -0400 (EDT) Received: from badger (unknown [89.131.176.233]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by b-pb-sasl-sd.pobox.com (Postfix) with ESMTPSA id 06E1ECB11; Fri, 6 Jul 2012 14:26:23 -0400 (EDT) From: Andy Wingo To: ludo@gnu.org (Ludovic =?utf-8?Q?Court=C3=A8s?=) Subject: Re: bug#10668: FFI: =?utf-8?Q?=E2=80=98set-pointer-finalizer!?= =?utf-8?Q?=E2=80=99?= overrides the previous finalizer References: <87d3a0255s.fsf@gnu.org> Date: Fri, 06 Jul 2012 20:26:20 +0200 In-Reply-To: <87d3a0255s.fsf@gnu.org> ("Ludovic \=\?utf-8\?Q\?Court\=C3\=A8s\=22'\?\= \=\?utf-8\?Q\?s\?\= message of "Mon, 30 Jan 2012 23:31:59 +0100") Message-ID: <87k3ygwxtf.fsf@pobox.com> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/24.1 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Pobox-Relay-ID: 178BD382-C798-11E1-AD55-FA6787E41631-02397024!b-pb-sasl-sd.pobox.com X-Spam-Score: -1.9 (-) X-Debbugs-Envelope-To: 10668-done Cc: 10668-done@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.13 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: debbugs-submit-bounces@debbugs.gnu.org Errors-To: debbugs-submit-bounces@debbugs.gnu.org X-Spam-Score: -1.9 (-) On Mon 30 Jan 2012 23:31, ludo@gnu.org (Ludovic Court=C3=A8s) writes: > The =E2=80=98set-pointer-finalizer!=E2=80=99 procedure is harmful because= it erases any > previously set finalizer. > > Said finalizer could come from a guardian: > > (define ptr (make-pointer 123)) > (define g (make-guardian)) > (g ptr) > (set-pointer-finalizer! ptr (dynamic-func "scm_is_pair" (dynamic-link)= )) > (set! ptr #f) > (gc) > > (g) ;; Should return PTR. > =3D> #f This has worked since 75ba64d6797f5857cc9885eb753126119a8c8b68. Andy --=20 http://wingolog.org/ From unknown Wed Jun 25 00:26:04 2025 Received: (at fakecontrol) by fakecontrolmessage; To: internal_control@debbugs.gnu.org From: Debbugs Internal Request Subject: Internal Control Message-Id: bug archived. Date: Sat, 04 Aug 2012 11:24:08 +0000 User-Agent: Fakemail v42.6.9 # This is a fake control message. # # The action: # bug archived. thanks # This fakemail brought to you by your local debbugs # administrator