From mboxrd@z Thu Jan 1 00:00:00 1970 Received: (from majordomo@localhost) by pauillac.inria.fr (8.7.6/8.7.3) id SAA17734; Mon, 5 Jan 2004 18:37:35 +0100 (MET) X-Authentication-Warning: pauillac.inria.fr: majordomo set sender to owner-caml-list@pauillac.inria.fr using -f Received: from nez-perce.inria.fr (nez-perce.inria.fr [192.93.2.78]) by pauillac.inria.fr (8.7.6/8.7.3) with ESMTP id SAA17681 for ; Mon, 5 Jan 2004 18:37:34 +0100 (MET) Received: from smtp2.pp.htv.fi (smtp2.pp.htv.fi [213.243.153.14]) by nez-perce.inria.fr (8.11.1/8.11.1) with ESMTP id i05HbXb26172; Mon, 5 Jan 2004 18:37:33 +0100 (MET) Received: from posti.pp.htv.fi (posti.pp.htv.fi [212.90.64.50]) by smtp2.pp.htv.fi (Postfix) with ESMTP id D93A0296D2E; Mon, 5 Jan 2004 19:37:32 +0200 (EET) Received: from oro (aka.pp.htv.fi [213.243.183.115]) by posti.pp.htv.fi (8.11.1 (Revision 1.5+JAGae91741+JAGae92668) /8.11.1) with ESMTP id i05HbWT20648; Mon, 5 Jan 2004 19:37:32 +0200 (EET) Received: from naked by oro with local (Exim 3.36 #1 (Debian)) id 1AdYfU-0003aU-00; Mon, 05 Jan 2004 19:37:32 +0200 To: Damien Doligez Cc: caml-list@inria.fr Subject: Re: [Caml-list] Modifying heap from custom finalizers? References: <69286889-3DF3-11D8-BEFF-00039310CAE8@inria.fr> From: Nuutti Kotivuori Date: Mon, 05 Jan 2004 19:37:31 +0200 In-Reply-To: <69286889-3DF3-11D8-BEFF-00039310CAE8@inria.fr> (Damien Doligez's message of "Sat, 3 Jan 2004 14:47:45 +0100") Message-ID: <87znd2mh44.fsf@naked.iki.fi> User-Agent: Gnus/5.1002 (Gnus v5.10.2) XEmacs/21.4 (Portable Code, linux) MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-Loop: caml-list@inria.fr X-Spam: no; 0.00; caml-list:01 finalizers:01 damien:01 debugger:01 hacks:01 setglobal:01 symtable:01 closures:01 reclaimed:01 closures:01 finalizers:01 bug:01 flu:99 caml:01 garbage:01 Sender: owner-caml-list@pauillac.inria.fr Precedence: bulk Damien Doligez wrote: [...] >> And if zeroing the value at sweep phase makes the values pointed by >> it garbage collected only at the next collection, is there any I >> can speed up the process? > > What makes you think there is no other pointer to these values ? > And to the things pointed by these values ? These values are values in the global data array - which is allocated separately. The only things (well, debugger and toplevel do some hacks) accessing these are SETGLOBAL and GETGLOBAL instructions in the actual code blocks. The only thing that can create new GETGLOBAL instructions for the slots in future code is the ident table in Symtable. So if no existing code block, nor the ident table, references the global, it can be zeroed out - since nothing can read it's value. The globals for modules contain a pointer to an array which holds the closures for the functions defined by the module. This array can then be reclaimed by the garbage collector - and if all the closures for a certain module stop existing, the code block in turn is garbage collected. This should all be briefly described in the mail I sent earlier about the second phase of the approach. >> I could find no documentation what you can and what you can't do in >> the finalizers for custom blocks. > > You should enter this in the bug tracking system as a feature wish. Indeed. I shall do that. I managed to catch a rather nasty flu just before christmas, and some personal issues came up recently - so I shall make no promises on the time schedule with which I'm implementing all this. -- Naked ------------------- To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/ Beginner's list: http://groups.yahoo.com/group/ocaml_beginners